From 05df0e395b28dfe7ccf08912d25359f5eb28e53f Mon Sep 17 00:00:00 2001 From: YannGarcia Date: Thu, 29 Sep 2022 10:27:18 +0200 Subject: [PATCH 01/99] Add submodule for common TITAN framework; Re-organize ATSs --- .gitmodules | 4 + .jenkins.sh | 2 +- ccsrc/EncDec/LibHttp/LibItsHttp_Encdec.cc | 28 - ccsrc/EncDec/LibHttp/module.mk | 1 - ccsrc/Framework/include/base_time.hh | 62 -- ccsrc/Framework/include/codec.hh | 63 -- ccsrc/Framework/include/codec_factory.hh | 46 - .../Framework/include/codec_stack_builder.hh | 74 -- ccsrc/Framework/include/converter.hh | 406 --------- ccsrc/Framework/include/layer.hh | 144 ---- ccsrc/Framework/include/layer_factory.hh | 114 --- .../Framework/include/layer_stack_builder.hh | 67 -- ccsrc/Framework/include/params.hh | 137 --- ccsrc/Framework/include/t_layer.hh | 72 -- ccsrc/Framework/module.mk | 6 - ccsrc/Framework/src/base_time.cc | 13 - ccsrc/Framework/src/codec_stack_builder.cc | 4 - ccsrc/Framework/src/converter.cc | 202 ----- ccsrc/Framework/src/layer_factory.cc | 71 -- ccsrc/Framework/src/params.cc | 142 ---- ccsrc/Ports/LibHttp/HttpPort.cc | 16 +- ccsrc/Ports/LibHttp/HttpPort.hh | 10 +- ccsrc/Protocols/ETH/ethernet_layer.cc | 82 -- ccsrc/Protocols/ETH/ethernet_layer.hh | 48 -- ccsrc/Protocols/ETH/ethernet_layer_factory.hh | 45 - ccsrc/Protocols/ETH/module.mk | 3 - ccsrc/Protocols/Http/http_codec.cc | 783 ------------------ ccsrc/Protocols/Http/http_codec.hh | 67 -- ccsrc/Protocols/Http/http_codec_mec.cc | 41 + ccsrc/Protocols/Http/http_codec_mec.hh | 16 + ccsrc/Protocols/Http/http_layer.cc | 154 ---- ccsrc/Protocols/Http/http_layer.hh | 84 -- ccsrc/Protocols/Http/http_layer_factory.hh | 45 - ccsrc/Protocols/Http/module.mk | 2 +- ccsrc/Protocols/Json/json_codec.cc | 42 +- ccsrc/Protocols/Json/json_codec.hh | 12 +- ccsrc/Protocols/Json/json_codec_factory.hh | 4 +- ccsrc/Protocols/Pcap/module.mk | 3 - ccsrc/Protocols/Pcap/pcap_cygwin_layer.cc | 263 ------ ccsrc/Protocols/Pcap/pcap_cygwin_layer.hh | 78 -- ccsrc/Protocols/Pcap/pcap_layer.cc | 276 ------ ccsrc/Protocols/Pcap/pcap_layer.hh | 5 - ccsrc/Protocols/Pcap/pcap_layer_factory.hh | 45 - ccsrc/Protocols/Pcap/pcap_linux_layer.cc | 199 ----- ccsrc/Protocols/Pcap/pcap_linux_layer.hh | 62 -- ccsrc/Protocols/Pcap/pcap_offline_layer.cc | 228 ----- ccsrc/Protocols/Pcap/pcap_offline_layer.hh | 78 -- .../Pcap/pcap_offline_layer_factory.hh | 45 - ccsrc/Protocols/Tcp/module.mk | 3 - ccsrc/Protocols/Tcp/tcp_layer.cc | 247 ------ ccsrc/Protocols/Tcp/tcp_layer.hh | 99 --- ccsrc/Protocols/Tcp/tcp_layer_factory.hh | 44 - ccsrc/loggers/loggers.cc | 4 - ccsrc/loggers/loggers.hh | 289 ------- ccsrc/loggers/module.mk | 3 - etc/AtsMec/AtsMec_Sandbox.cf_ | 575 ------------- .../AtsMec_Lewis.cf_ | 8 +- .../AtsMec_Mockoon.cf_ | 8 +- etc/AtsMec_Location/AtsMec_Sandbox.cf_ | 161 ++++ titan-test-system-framework | 1 + .../AtsMec_Ams_TestCases.ttcn | 10 +- .../AtsMec_Ams_TestControl.ttcn} | 0 ttcn/AtsMec/{ => AtsMec_Ams}/module.mk | 3 +- ...viceApplicationInterfaceAPI_TestCases.ttcn | 10 +- ...ceApplicationInterfaceAPI_TestControl.ttcn | 126 +++ .../AtsMec_UEAppInterfaceAPI_TestCases.ttcn | 10 +- .../module.mk | 48 ++ ...ormApplicationEnablementAPI_TestCases.ttcn | 10 +- ...mApplicationEnablementAPI_TestControl.ttcn | 126 +++ .../module.mk | 48 ++ .../AtsMec_FixedAccessInfoAPI_TestCases.ttcn | 10 +- ...AtsMec_FixedAccessInfoAPI_TestControl.ttcn | 126 +++ ttcn/AtsMec/AtsMec_FixedAccessInfo/module.mk | 48 ++ ...ycleAndOperationGrantingAPI_TestCases.ttcn | 10 +- ...leAndOperationGrantingAPI_TestControl.ttcn | 126 +++ ttcn/AtsMec/AtsMec_LcRRm/module.mk | 48 ++ .../AtsMec_RnisAPI_TestCases.ttcn | 14 +- .../AtsMec_RnisAPI_TestControl.ttcn | 126 +++ ttcn/AtsMec/AtsMec_Rnis/module.mk | 48 ++ ..._MultiAccessSteeringInfoAPI_TestCases.ttcn | 10 +- ...AtsMec_TrafficManagementAPI_TestCases.ttcn | 10 +- ...sMec_TrafficManagementAPI_TestControl.ttcn | 126 +++ .../AtsMec/AtsMec_TrafficManagement/module.mk | 48 ++ .../AtsMec_UEidentityAPI_TestCases.ttcn | 10 +- .../AtsMec_UEidentityAPI_TestControl.ttcn | 126 +++ ttcn/AtsMec/AtsMec_UEidentity/module.mk | 48 ++ ...ec_V2XInformationServiceAPI_TestCases.ttcn | 10 +- ..._V2XInformationServiceAPI_TestControl.ttcn | 126 +++ ttcn/AtsMec/AtsMec_V2x/module.mk | 48 ++ .../AtsMec_WlanInformationAPI_TestCases.ttcn | 10 +- ...AtsMec_WlanInformationAPI_TestControl.ttcn | 126 +++ ttcn/AtsMec/AtsMec_Wlan/module.mk | 48 ++ .../AtsMec_LocationAPI_TestCases.ttcn | 10 +- .../AtsMec_LocationAPI_TestControl.ttcn | 42 + ttcn/AtsMec_Location/module.mk | 34 + ttcn/LibIts | 2 +- ...viceApplicationInterfaceAPI_Functions.ttcn | 10 +- ...ormApplicationEnablementAPI_Functions.ttcn | 10 +- ...plicationEnablementAPI_TypesAndValues.ttcn | 2 +- .../FixedAccessInformationAPI/module.mk | 6 + ...sInformationServiceAPI_TypesAndValues.ttcn | 5 + ttcn/LibMec/LocationAPI/module.mk | 3 +- .../ttcn/LocationAPI_Functions.ttcn | 10 +- .../ttcn/LocationAPI_TypesAndValues.ttcn | 2 +- .../ttcn/TrafficManagementAPI_Functions.ttcn | 10 +- .../ttcn/TrafficManagementAPI_Pixits.ttcn | 4 +- .../ttcn/UEAppInterfaceAPI_Functions.ttcn | 10 +- .../V2XInformationServiceAPI_Functions.ttcn | 10 +- .../ttcn/WlanInformationAPI_Functions.ttcn | 10 +- ttcn/LibMec/ttcn/LibMec_Functions.ttcn | 289 +------ ttcn/LibMec/ttcn/LibMec_Pixits.ttcn | 10 - .../LibItsHttp_BinaryMessageBodyTypes.ttcn | 26 - .../LibItsHttp_BinaryTemplates.ttcn | 32 - .../LibItsHttp_BinaryTypes.ttcn | 9 - .../patch_lib_http/LibItsHttp_TestSystem.ttcn | 39 - ttcn/patch_lib_http/module.mk | 3 + .../LibHttp_JsonMessageBodyTypes.ttcn} | 6 +- .../LibHttp_JsonTemplates.ttcn} | 30 +- virtualization/docker/Dockerfile | 7 +- virtualization/docker/README.md | 8 +- virtualization/docker/build.sh | 4 +- .../docker/home/etc/init.d/40-ttf_t012.sh | 20 +- .../docker/home/etc/init.d/50-doxygen.sh | 4 +- virtualization/docker/run.sh | 4 +- virtualization/vagrant/provisioner.bash | 32 +- 125 files changed, 2106 insertions(+), 6126 deletions(-) delete mode 100644 ccsrc/EncDec/LibHttp/LibItsHttp_Encdec.cc delete mode 100644 ccsrc/EncDec/LibHttp/module.mk delete mode 100644 ccsrc/Framework/include/base_time.hh delete mode 100644 ccsrc/Framework/include/codec.hh delete mode 100644 ccsrc/Framework/include/codec_factory.hh delete mode 100644 ccsrc/Framework/include/codec_stack_builder.hh delete mode 100644 ccsrc/Framework/include/converter.hh delete mode 100644 ccsrc/Framework/include/layer.hh delete mode 100644 ccsrc/Framework/include/layer_factory.hh delete mode 100644 ccsrc/Framework/include/layer_stack_builder.hh delete mode 100644 ccsrc/Framework/include/params.hh delete mode 100644 ccsrc/Framework/include/t_layer.hh delete mode 100644 ccsrc/Framework/module.mk delete mode 100644 ccsrc/Framework/src/base_time.cc delete mode 100644 ccsrc/Framework/src/codec_stack_builder.cc delete mode 100644 ccsrc/Framework/src/converter.cc delete mode 100644 ccsrc/Framework/src/layer_factory.cc delete mode 100644 ccsrc/Framework/src/params.cc delete mode 100644 ccsrc/Protocols/ETH/ethernet_layer.cc delete mode 100644 ccsrc/Protocols/ETH/ethernet_layer.hh delete mode 100644 ccsrc/Protocols/ETH/ethernet_layer_factory.hh delete mode 100644 ccsrc/Protocols/ETH/module.mk delete mode 100644 ccsrc/Protocols/Http/http_codec.cc delete mode 100644 ccsrc/Protocols/Http/http_codec.hh create mode 100644 ccsrc/Protocols/Http/http_codec_mec.cc create mode 100644 ccsrc/Protocols/Http/http_codec_mec.hh delete mode 100644 ccsrc/Protocols/Http/http_layer.cc delete mode 100644 ccsrc/Protocols/Http/http_layer.hh delete mode 100644 ccsrc/Protocols/Http/http_layer_factory.hh delete mode 100644 ccsrc/Protocols/Pcap/module.mk delete mode 100644 ccsrc/Protocols/Pcap/pcap_cygwin_layer.cc delete mode 100644 ccsrc/Protocols/Pcap/pcap_cygwin_layer.hh delete mode 100644 ccsrc/Protocols/Pcap/pcap_layer.cc delete mode 100644 ccsrc/Protocols/Pcap/pcap_layer.hh delete mode 100644 ccsrc/Protocols/Pcap/pcap_layer_factory.hh delete mode 100644 ccsrc/Protocols/Pcap/pcap_linux_layer.cc delete mode 100644 ccsrc/Protocols/Pcap/pcap_linux_layer.hh delete mode 100644 ccsrc/Protocols/Pcap/pcap_offline_layer.cc delete mode 100644 ccsrc/Protocols/Pcap/pcap_offline_layer.hh delete mode 100644 ccsrc/Protocols/Pcap/pcap_offline_layer_factory.hh delete mode 100644 ccsrc/Protocols/Tcp/module.mk delete mode 100644 ccsrc/Protocols/Tcp/tcp_layer.cc delete mode 100644 ccsrc/Protocols/Tcp/tcp_layer.hh delete mode 100644 ccsrc/Protocols/Tcp/tcp_layer_factory.hh delete mode 100644 ccsrc/loggers/loggers.cc delete mode 100644 ccsrc/loggers/loggers.hh delete mode 100644 ccsrc/loggers/module.mk delete mode 100644 etc/AtsMec/AtsMec_Sandbox.cf_ rename etc/{AtsMec => AtsMec_Location}/AtsMec_Lewis.cf_ (98%) rename etc/{AtsMec => AtsMec_Location}/AtsMec_Mockoon.cf_ (99%) create mode 100644 etc/AtsMec_Location/AtsMec_Sandbox.cf_ create mode 160000 titan-test-system-framework rename ttcn/AtsMec/{ => AtsMec_Ams}/AtsMec_Ams_TestCases.ttcn (99%) rename ttcn/AtsMec/{AtsMec_TestControl.ttcn => AtsMec_Ams/AtsMec_Ams_TestControl.ttcn} (100%) rename ttcn/AtsMec/{ => AtsMec_Ams}/module.mk (94%) rename ttcn/AtsMec/{ => AtsMec_DeviceApplicationInterface}/AtsMec_DeviceApplicationInterfaceAPI_TestCases.ttcn (99%) create mode 100644 ttcn/AtsMec/AtsMec_DeviceApplicationInterface/AtsMec_DeviceApplicationInterfaceAPI_TestControl.ttcn rename ttcn/AtsMec/{ => AtsMec_DeviceApplicationInterface}/AtsMec_UEAppInterfaceAPI_TestCases.ttcn (99%) create mode 100644 ttcn/AtsMec/AtsMec_DeviceApplicationInterface/module.mk rename ttcn/AtsMec/{ => AtsMec_EdgePlatformApplicationEnablement}/AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn (99%) create mode 100644 ttcn/AtsMec/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestControl.ttcn create mode 100644 ttcn/AtsMec/AtsMec_EdgePlatformApplicationEnablement/module.mk rename ttcn/AtsMec/{ => AtsMec_FixedAccessInfo}/AtsMec_FixedAccessInfoAPI_TestCases.ttcn (99%) create mode 100644 ttcn/AtsMec/AtsMec_FixedAccessInfo/AtsMec_FixedAccessInfoAPI_TestControl.ttcn create mode 100644 ttcn/AtsMec/AtsMec_FixedAccessInfo/module.mk rename ttcn/AtsMec/{ => AtsMec_LcRRm}/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases.ttcn (99%) create mode 100644 ttcn/AtsMec/AtsMec_LcRRm/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestControl.ttcn create mode 100644 ttcn/AtsMec/AtsMec_LcRRm/module.mk rename ttcn/AtsMec/{ => AtsMec_Rnis}/AtsMec_RnisAPI_TestCases.ttcn (99%) create mode 100644 ttcn/AtsMec/AtsMec_Rnis/AtsMec_RnisAPI_TestControl.ttcn create mode 100644 ttcn/AtsMec/AtsMec_Rnis/module.mk rename ttcn/AtsMec/{ => AtsMec_TrafficManagement}/AtsMec_MultiAccessSteeringInfoAPI_TestCases.ttcn (99%) rename ttcn/AtsMec/{ => AtsMec_TrafficManagement}/AtsMec_TrafficManagementAPI_TestCases.ttcn (99%) create mode 100644 ttcn/AtsMec/AtsMec_TrafficManagement/AtsMec_TrafficManagementAPI_TestControl.ttcn create mode 100644 ttcn/AtsMec/AtsMec_TrafficManagement/module.mk rename ttcn/AtsMec/{ => AtsMec_UEidentity}/AtsMec_UEidentityAPI_TestCases.ttcn (99%) create mode 100644 ttcn/AtsMec/AtsMec_UEidentity/AtsMec_UEidentityAPI_TestControl.ttcn create mode 100644 ttcn/AtsMec/AtsMec_UEidentity/module.mk rename ttcn/AtsMec/{ => AtsMec_V2x}/AtsMec_V2XInformationServiceAPI_TestCases.ttcn (99%) create mode 100644 ttcn/AtsMec/AtsMec_V2x/AtsMec_V2XInformationServiceAPI_TestControl.ttcn create mode 100644 ttcn/AtsMec/AtsMec_V2x/module.mk rename ttcn/AtsMec/{ => AtsMec_Wlan}/AtsMec_WlanInformationAPI_TestCases.ttcn (99%) create mode 100644 ttcn/AtsMec/AtsMec_Wlan/AtsMec_WlanInformationAPI_TestControl.ttcn create mode 100644 ttcn/AtsMec/AtsMec_Wlan/module.mk rename ttcn/{AtsMec => AtsMec_Location}/AtsMec_LocationAPI_TestCases.ttcn (99%) create mode 100644 ttcn/AtsMec_Location/AtsMec_LocationAPI_TestControl.ttcn create mode 100644 ttcn/AtsMec_Location/module.mk create mode 100644 ttcn/LibMec/FixedAccessInformationAPI/module.mk delete mode 100644 ttcn/patch_lib_http/LibItsHttp_BinaryMessageBodyTypes.ttcn delete mode 100644 ttcn/patch_lib_http/LibItsHttp_BinaryTemplates.ttcn delete mode 100644 ttcn/patch_lib_http/LibItsHttp_BinaryTypes.ttcn delete mode 100644 ttcn/patch_lib_http/LibItsHttp_TestSystem.ttcn create mode 100644 ttcn/patch_lib_http/module.mk rename ttcn/patch_lib_http/{LibItsHttp_JsonMessageBodyTypes.ttcn => ttcn/LibHttp_JsonMessageBodyTypes.ttcn} (98%) rename ttcn/patch_lib_http/{LibItsHttp_JsonTemplates.ttcn => ttcn/LibHttp_JsonTemplates.ttcn} (98%) diff --git a/.gitmodules b/.gitmodules index a4742ea..ce684dc 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,3 +4,7 @@ [submodule "ttcn\\LibIts"] path = ttcn\\LibIts url = https://forge.etsi.org/rep/LIBS/LibIts +[submodule "titan-test-system-framework"] + path = titan-test-system-framework + url = https://labs.etsi.org/rep/cti-tools/titan-test-system-framework.git + branch = devel diff --git a/.jenkins.sh b/.jenkins.sh index 344abf1..54e5a9f 100755 --- a/.jenkins.sh +++ b/.jenkins.sh @@ -16,7 +16,7 @@ cd ./virtualization/docker if [ "$1" == "--remove" ] then - docker rmi --force ttf_t012_mec:latest + docker rmi --force mec_devel:latest fi cd - diff --git a/ccsrc/EncDec/LibHttp/LibItsHttp_Encdec.cc b/ccsrc/EncDec/LibHttp/LibItsHttp_Encdec.cc deleted file mode 100644 index 4eb8379..0000000 --- a/ccsrc/EncDec/LibHttp/LibItsHttp_Encdec.cc +++ /dev/null @@ -1,28 +0,0 @@ - -#include "LibItsHttp_MessageBodyTypes.hh" - -#include "http_codec.hh" - -#include "loggers.hh" - -namespace LibItsHttp__EncdecDeclarations { - - BITSTRING fx__enc__http__message(const LibItsHttp__TypesAndValues::HttpMessage& p) { - loggers::get_instance().log_msg(">>> fx__enc__http__message: ", (const Base_Type&)p); - - OCTETSTRING os; - http_codec codec; - codec.encode(p, os); - - return oct2bit(os); - } - INTEGER fx__dec__http__message(BITSTRING& pdu, LibItsHttp__TypesAndValues::HttpMessage& p) { - loggers::get_instance().log_msg(">>> fx__dec__http__message: ", pdu); - - OCTETSTRING os = bit2oct(pdu); - http_codec codec; - codec.decode(os, p); - - return 0; - } -} // End of namespace LibItsHttp__EncdecDeclarations diff --git a/ccsrc/EncDec/LibHttp/module.mk b/ccsrc/EncDec/LibHttp/module.mk deleted file mode 100644 index 5de9398..0000000 --- a/ccsrc/EncDec/LibHttp/module.mk +++ /dev/null @@ -1 +0,0 @@ -sources := LibItsHttp_Encdec.cc diff --git a/ccsrc/Framework/include/base_time.hh b/ccsrc/Framework/include/base_time.hh deleted file mode 100644 index 78bf5f9..0000000 --- a/ccsrc/Framework/include/base_time.hh +++ /dev/null @@ -1,62 +0,0 @@ -/*! - * \file base_time.hh - * \brief Header file for the control port base_time functionality. - * \author ETSI STF525 - * \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. - * \version 0.1 - */ -#pragma once - -#include - -/** - * \class base_time - * \brief This class provides time tools such as getting current time - */ -class base_time { - const unsigned long long its_base_time_ms = 1072915200000L; //! Base time 01/01/2004 12:00am in millseconds - - static base_time* _instance; -private: - base_time() { }; //! Can not be created manually -public: - static inline base_time& get_instance(); - - virtual ~base_time() { if (_instance != nullptr) delete _instance; }; - -public: - inline const unsigned long long get_current_time_ms() const; - inline const unsigned long long get_its_base_time_ms() const; - inline const unsigned long long get_its_current_time_ms() const; - inline const unsigned long long get_its_current_time_us() const; - inline const unsigned long long get_its_current_time_mod_ms() const; -}; // End of class base_time - -// static functions -base_time& base_time::get_instance() { - return (_instance != nullptr) ? *_instance : *(_instance = new base_time()); -} - -const unsigned long long base_time::get_current_time_ms() const { - return std::chrono::duration_cast(std::chrono::system_clock::now().time_since_epoch()).count(); -} - -const unsigned long long base_time::get_its_base_time_ms() const { - return base_time::its_base_time_ms; -} - -const unsigned long long base_time::get_its_current_time_ms() const { - return std::chrono::duration_cast(std::chrono::system_clock::now().time_since_epoch()).count() - base_time::its_base_time_ms; -} - -const unsigned long long base_time::get_its_current_time_us() const { - return std::chrono::duration_cast(std::chrono::system_clock::now().time_since_epoch()).count() - base_time::its_base_time_ms * 1000; -} - -const unsigned long long base_time::get_its_current_time_mod_ms() const { - return (std::chrono::duration_cast(std::chrono::system_clock::now().time_since_epoch()).count() - base_time::its_base_time_ms) % 65536; -} - diff --git a/ccsrc/Framework/include/codec.hh b/ccsrc/Framework/include/codec.hh deleted file mode 100644 index 9a6f4b5..0000000 --- a/ccsrc/Framework/include/codec.hh +++ /dev/null @@ -1,63 +0,0 @@ -/*! - * \file codec.hh - * \brief Header file for ITS abstract codec definition. - * \author ETSI STF525 - * \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. - * \version 0.1 - */ -#pragma once - -#include "params.hh" - -class OCTETSTRING; //! Declare TITAN class -class CHARSTRING; //! Declare TITAN class -class BITSTRING; //! Declare TITAN class - -/*! - * \class codec - * \brief This class provides the interface for all ITS codecs, include UT and AC codecs - * \abstract - */ -template -class codec { -protected: - params* _params; //! Reference to params stack - // \todo Use smart pointer std::unique_ptr - -public: //! \publicsection - /*! - * \fn codec(); - * \brief Default constructor - * \todo Remove logs - */ - explicit codec() : _params(nullptr) { }; - /*! - * \fn ~codec(); - * \brief Default destructor - * \virtual - * \todo Remove logs - */ - virtual ~codec() { }; - /*! - * \fn int encode(const TPDUEnc& msg, OCTETSTRING& data); - * \brief Encode typed message into an octet string - * \param[in] p_message The typed message to be encoded - * \param[out] p_data The encoding result - * \return 0 on success, -1 otherwise - * \pure - */ - virtual int encode(const TPDUEnc& p_message, OCTETSTRING& p_data) = 0; - /*! - * \fn int decode(const OCTETSTRING& p_, TPDUDec& p_message, params* p_params = NULL); - * \brief Encode typed message into an octet string format - * \param[in] p_data The message in its octet string - * \param[out] p_message The decoded typed message - * \return 0 on success, -1 otherwise - * \pure - */ - virtual int decode(const OCTETSTRING& p_, TPDUDec& p_message, params* p_params = NULL) = 0; -}; // End of class codec - diff --git a/ccsrc/Framework/include/codec_factory.hh b/ccsrc/Framework/include/codec_factory.hh deleted file mode 100644 index cbded3b..0000000 --- a/ccsrc/Framework/include/codec_factory.hh +++ /dev/null @@ -1,46 +0,0 @@ -/*! - * \file codec_factory.hh - * \brief Header file for ITS abstract protocol codec definition. - * \author ETSI STF525 - * \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. - * \version 0.1 - */ -#pragma once - -#include -#include -#include -#include - -#include "codec.hh" - -class Record_Type; //! TITAN forward declaration - -/*! - * \class codec_factory - * \brief This class provides a factory class to create codec class instances - * \abstract - */ -class codec_factory { -public: //! \publicsection - /*! - * \fn codec(); - * \brief Default constructor - */ - codec_factory() { }; - /*! - * \fn codec* create_codec(const std::string & type, const std::string & param); - * \brief Create the codecs stack based on the provided codecs stack description (cf. remark) - * \param[in] p_type The provided codecs stack description - * \param[in] p_params Optional parameters - * \return 0 on success, -1 otherwise - * \remark The description below introduces codecs stack in case of ITS project: - * HTTP(codecs=xml:held_codec;html:html_codec,json:json_codec)/TCP(debug=1,server=httpbin.org,port=80,use_ssl=0) - * \pure - */ - virtual codec* create_codec() = 0; -}; // End of class codec_factory - diff --git a/ccsrc/Framework/include/codec_stack_builder.hh b/ccsrc/Framework/include/codec_stack_builder.hh deleted file mode 100644 index 1a4d430..0000000 --- a/ccsrc/Framework/include/codec_stack_builder.hh +++ /dev/null @@ -1,74 +0,0 @@ -/*! - * \file codec_stack_builder.hh - * \brief Header file for ITS protocol stack builder. - * \author ETSI STF525 - * \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. - * \version 0.1 - */ -#pragma once - -#include "codec_factory.hh" - -class Record_Type; //! TITAN forward declaration - -/*! - * \class codec_stack_builder - * \brief This class provides a factory class to create Codec class instances - */ -class codec_stack_builder { -private: //! \privatesection - static codec_stack_builder* _instance; //! Smart pointer to the unique instance of the logger framework - std::map _codecs; //! The list of the registered \see t_codec factories - - /*! - * \brief Default constructor - * Create a new instance of the codec_stack_builder class - * \private - */ - codec_stack_builder() { }; // can not be created manually -public: //! \publicsection - /*! - * \fn codec_stack_builder* get_instance(); - * \brief Accessor for the unique instance of the logger framework - * \static - */ - static codec_stack_builder* get_instance() { return _instance ? _instance : _instance = new codec_stack_builder(); }; - - /*! - * \fn void register_codec_factory(const std::string & p_type, codec_factory* p_codec_factory); - * \brief Add a new codec factory - * \param[in] p_type The codec identifier (e.g. GN for the GeoNetworking codec...) - * \param[in] p_codec_factory A reference to the \see codec_factory - * \static - */ - static void register_codec_factory(const std::string & p_type, codec_factory* p_codec_factory) { codec_stack_builder::get_instance()->_register_codec_factory(p_type, p_codec_factory); }; - -private: //! \privatesection - /*! - * \fn void _register_codec_factory(const std::string & p_type, codec_factory* p_codec_factory); - * \brief Add a new codec factory - * \param[in] p_type The codec identifier (e.g. GN for the GeoNetworking codec...) - * \param[in] p_codec_factory A reference to the \see codec_factory - */ - void _register_codec_factory(const std::string & p_type, codec_factory* p_codec_factory) { _codecs[p_type] = p_codec_factory; }; - -public: //! \publicsection - /*! - * \fn codec* get_codec(const char* p_codec_name); - * \brief Retrieve the specified codec name from the list of the registered codecs - * \param[in] p_codec_name The codec indentifier - * \return The pointer to the codec object on success, nullptr otherwise - */ - inline codec* get_codec(const char* p_codec_name) { // NOTE A virtual method cannot not be a template ==> polymorphism required here - typename std::map::const_iterator it = _codecs.find(p_codec_name); - if (it != _codecs.cend()) { - return it->second->create_codec(); - } - - return nullptr; - } -}; // End of class codec_stack_builder - diff --git a/ccsrc/Framework/include/converter.hh b/ccsrc/Framework/include/converter.hh deleted file mode 100644 index 77800b5..0000000 --- a/ccsrc/Framework/include/converter.hh +++ /dev/null @@ -1,406 +0,0 @@ -/*! - * \file converter.hh - * \brief Helper class for types converter. - * \author ETSI STF525 - * \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. - * \version 0.1 - */ -#pragma once - -#include -#include -#include - -#include -#include -#include - -#include -#include -#include // LONG_MAX, LLONG_MAX -#include // time_t, struct tm, difftime, time, mktime - -/*! - * \class converter - * \brief This class provide a set of methods for types conversions - * \remark Singleton pattern - */ -class converter { - - /*! - * \brief Unique static object reference of this class - */ - static converter * instance; - - /*! - * \brief Default private ctor - */ - converter() {}; - /*! - * \brief Default private dtor - */ - ~converter() { - if (instance != NULL) { - delete instance; - instance = NULL; - } - }; - -public: /*! \publicsection */ - /*! - * \brief Public accessor to the single object reference - */ - inline static converter & get_instance() { - if (instance == NULL) instance = new converter(); - return *instance; - }; - -public: - /*! - * \enum endian_t - * \brief Endianess style - */ - typedef enum { - big_endian, - little_endian - } endian_t; - -public: - /*! - * \brief Convert a Binary Coded Decimal value into a binary value - * \param[in] p_value The BDC value - * \return The binary value - * \inline - */ - inline uint8_t bcd_to_bin(const uint8_t p_value) { - return ((p_value / 16 * 10) + (p_value % 16)); - }; - - /*! - * \brief Convert a binary value into a Binary Coded Decimal value - * \param[in] p_value The binary value - * \return The BCD value - * \inline - */ - inline uint8_t bin_to_bcd(const uint8_t p_value) { - return ((p_value / 10 * 16) + (p_value % 10)); - }; - - /*! - * \brief Swap two bytes length value (e.g. 0xCAFE becomes 0xFECA) - * \param[in] p_value The value to swap - * \return The swapped value - * \inline - */ - uint16_t swap(const uint16_t p_value); - inline int16_t swap(const int16_t p_value) { - return static_cast(swap(static_cast(p_value))); - }; - /*! - * \brief Swap four bytes length value (used for littel endian / big endian) - * \param[in] p_value The value to swap - * \return The swapped value - */ - uint32_t swap(const uint32_t p_value); - inline int32_t swap(const int32_t p_value) { - return static_cast(swap(static_cast(p_value))); - }; - - /*! - * \brief Convert a string into an hexadecimal string - * \param[in] p_value The string value - * \return The hexadecimal value - */ - std::string string_to_hexa(const std::string & p_value, const bool p_uppercase = false); - /*! - * \brief Convert a bytes array int32_t an hexadecimal string - * \param[in] p_value The bytes array value - * \return The hexadecimal value - */ - std::string bytes_to_hexa(const std::vector & p_value, const bool p_uppercase = false); - /*! - * \brief Convert an hexadecimal string into a bytes array - * \param[in] p_value The hexadecimal value - * \return The bytes array value - */ - std::vector hexa_to_bytes(const std::string & p_value); - - /*! - * \brief Convert a time in time_t format into a string formated according to RFC 822, 1036, 1123, 2822 - * \param[in] p_time The time to convert in time_t format - * \return The time string formated - * \see http://www.unixtimestamp.com/ - * @code - * std::string result = time_to_string(1489755780); - * result.compare("Fri, 17 Mar 2017 13:03:00 +0000") == 0 // When time zone is set to UTC - * @endcode - * \remark Use commands 1) timedatectl to change your machine timezone (e.g. sudo timedatectl set-timezone UTC to change machine timezone to UTC, 2) timedatectl list-timezones to get the list of the timezones) - */ - std::string time_to_string(const time_t p_time); - /*! - * \brief Convert a time in struct tm format into a string formated according to RFC 822, 1036, 1123, 2822 - * \param[in] p_time The time to convert in struct tm format - * \return The time string formated - * \see http://www.unixtimestamp.com/ - */ - std::string time_to_string(const struct tm & p_time); - - /*! - * \brief Convert a 16-bits integer (int16_t) into a bytes array - * \param[in] p_value The 16-bits integer value - * \param[in] p_endianess Endianess style. Default: big_endian - * \return The bytes array value - */ - inline std::vector short_to_bytes(const int16_t p_value, const endian_t p_endianess = big_endian) const { - std::vector result(sizeof(short), 0x00); - for (int i = sizeof(short) - 1; i >= 0; i--) { - int offset = (sizeof(short) - 1 - i) * 8; - result[i] = static_cast((p_value >> offset) & 0xFF); - } // End of 'for' statement - return result; - }; // End of short_to_bytes - - /*! - * \brief Convert a bytes array into a 16-bits integer (int16_t) - * \param[in] p_value The bytes array - * \param[in] p_endianess Endianess style. Default: big_endian - * \return The 16-bits integer on success, SHRT_MAX on error (wrong bytes array size) - */ - inline int16_t bytes_to_short(const std::vector & p_value, const endian_t p_endianess = big_endian) const { - // Sanity check - if (p_value.size() > sizeof(short)) { - return SHRT_MAX; - } - int16_t value = 0; - for (size_t i = 0; i < p_value.size(); i++) { - value = (value << 8) + (p_value[i] & 0xff); - } // End of 'for' statement - return value; - }; // End of bytes_to_short - - /*! - * \brief Convert a 32-bits integer (int32_t) into a bytes array - * \param[in] p_value The 32-bits integer value - * \param[in] p_endianess Endianess style. Default: big_endian - * \return The bytes array value - */ - inline std::vector int_to_bytes(const int32_t p_value, const endian_t p_endianess = big_endian) const { - /*uint8_t bytes[sizeof(p_value)]; - std::copy( - static_cast(static_cast(&p_value)), - static_cast(static_cast(&p_value)) + sizeof(p_value), - bytes - ); - std::vector result(bytes, bytes + sizeof(bytes) / sizeof(uint8_t));*/ - std::vector result(sizeof(int), 0x00); - for (int i = sizeof(int) - 1; i >= 0; i--) { - int offset = (sizeof(int) - 1 - i) * 8; - result[i] = static_cast((p_value >> offset) & 0xFF); - } // End of 'for' statement - return result; - }; // End of int_to_bytes - - /*! - * \brief Convert a bytes array into a 32-bits integer (int32_t) - * \param[in] p_value The bytes array - * \param[in] p_endianess Endianess style. Default: big_endian - * \return The 32-bits integer on success, LONG_MAX on error (wrong bytes array size) - */ - inline int32_t bytes_to_int(const std::vector & p_value, const endian_t p_endianess = big_endian) const { - // Sanity check - if (p_value.size() > sizeof(int)) { - return INT_MAX; - } - int32_t value = 0; - for (size_t i = 0; i < p_value.size(); i++) { - value = (value << 8) + (p_value[i] & 0xff); - } // End of 'for' statement - return value; - // return *((int *)(&p_value[0])); - }; // End of bytes_to_int - - /*! - * \brief Convert a 64-bits integer (int64_t) into a bytes array - * \param[in] p_value The 64-bits integer value - * \param[in] p_endianess Endianess style. Default: big_endian - * \return The bytes array value - */ - inline std::vector long_to_bytes(const int64_t p_value, const endian_t p_endianess = big_endian) const { - /*uint8_t bytes[sizeof(p_value)]; - std::copy( - static_cast(static_cast(&p_value)), - static_cast(static_cast(&p_value)) + sizeof(p_value), - bytes - ); - std::vector result(bytes, bytes + sizeof(bytes) / sizeof(uint8_t));*/ - std::vector result(sizeof(int64_t), 0x00); - for (int i = sizeof(int64_t) - 1; i >= 0; i--) { - int offset = (sizeof(int64_t) - 1 - i) * 8; - result[i] = static_cast((p_value >> offset) & 0xFF); - } // End of 'for' statement - return result; - }; // End of long_to_bytes - - /*! - * \brief Convert a bytes array into a 64-bits integer (int64_t) - * \param[in] p_value The bytes array - * \param[in] p_endianess Endianess style. Default: big_endian - * \return The 64-bits integer on success, LLONG_MAX on error (wrong bytes array size) - */ - inline int64_t bytes_to_long(const std::vector & p_value, const endian_t p_endianess = big_endian) const { - // Sanity check - if (p_value.size() > sizeof(int64_t)) { - return LLONG_MAX; - } - int64_t value = 0; - for (size_t i = 0; i < p_value.size(); i++) { - value = (value << 8) + (p_value[i] & 0xff); - } // End of 'for' statement - return value; - // return *((long *)(&p_value[0])); - }; // End of bytes_to_long - - /*! - * \brief Convert a float value into a bytes array - * \param[in] p_value The float value - * \return The bytes array value - */ - inline std::vector float_to_bytes(const float p_value) const { - uint8_t bytes[sizeof(p_value)]; - std::copy( - static_cast(static_cast(&p_value)), - static_cast(static_cast(&p_value)) + sizeof(p_value), - bytes - ); - std::vector result(bytes, bytes + sizeof(bytes) / sizeof(uint8_t)); - return result; - }; // End of float_to_long - - /*! - * \brief Convert a bytes array into a float - * \param[in] p_value The bytes array - * \return The float value - */ - inline float bytes_to_float(const std::vector & p_value) const { - return *((float *)(&p_value[0])); - }; // End of bytes_to_float - - /*! - * \brief Convert a string into a bytes array - * \param[in] p_value The string value - * \return The bytes array value - */ - inline std::vector string_to_bytes(const std::string & p_value) const { - return std::vector(p_value.begin(), p_value.end()); - }; // End of string_to_bytes - - /*! - * \brief Convert a bytes array into a string - * \param[in] p_value The bytes array value - * \return The string value - */ - inline std::string bytes_to_string(const std::vector & p_value) const { - return std::string(p_value.begin(), p_value.end()); - }; // End of bytes_to_string - -public: - /*! - * \brief Convert a string into an integer - * \param[in] p_value The string value - * \return The integer value - */ - inline int32_t string_to_int(const std::string & p_value) const { - return std::stoi(p_value); - //return atoi(p_value.c_str()); - }; // End of string_to_int - - /*! - * \brief Convert an integer into a string - * \param[in] p_value The integer value - * \return The string value - */ - inline std::string int_to_string(const int32_t & p_value) const { - std::ostringstream ss; - ss << p_value; - return ss.str(); - }; // End of string_to_bytes - - /*! - * \brief Convert a string in to lower case - * \param[in/out] p_value The string value to convert - */ - inline void to_lower(std::string& p_value) { - std::transform(p_value.begin(), p_value.end(), p_value.begin(), ::tolower); - } - - /*! - * \brief Convert a string in to upper case - * \param[in/out] p_value The string value to convert - */ - inline void to_upper(std::string& p_value) { - std::transform(p_value.begin(), p_value.end(), p_value.begin(), ::toupper); - } - -public: - - /*! - * \brief Returns a copy of the string, with leading and trailing special characters omitted - * \param[in] p_value The string value - * \param[in] p_trim_chars The special characters to be omitted. Default: ' ' and TAB - * \return The new string value - */ - std::string trim(const std::string& p_value, const std::string& p_trim_chars = " \t"); - - /*! - * \brief Convert the provided string into a list of arguments - * \param[in] p_value The string value - * \param[in] p_separator The separator sequence to use for the spliting process - * \return The item list - * \code{.cc} - * std::string str = "This is a test for spliting a string with a white spave"; - * std::vector tokens = converter::get_instance().split(str, " "); - * std::clog << "Tokens: " << std::endl; - * for (auto it = tokens.begin(); it != tokens.end(); ++it) { - * std::clog << " " << *it << std::endl; - * } - * \endcode - */ - std::vector split(const std::string & p_value, const std::string& p_separator); - - /*! - * \brief Convert the provided string into a list of arguments - * \param[in] p_value The string value - * \return The arguments list - * \code{.cc} - * std::string str = "--host localhost --port 12345 --duration -1"; - * std::vector tokens = converter::get_instance().split_arguments_line(str); - * std::clog << "Tokens: " << std::endl; - * for (auto it = tokens.begin(); it != tokens.end(); ++it) { - * std::clog << " " << *it << std::endl; - * } - * \endcode - */ - std::vector split_arguments_line(const std::string & p_value); - - /*! - * \brief Convert the provided buffer into a Base64 - * \param[in] p_value The buffer value - * \return The Base64 encoded buffert - */ - std::vector buffer_to_base64(const std::vector & p_value); - - /*! - * \brief Convert the provided Base64 buffer - * \param[in] p_value The buffer value - * \return The Base64 encoded buffert - */ - std::vector base64_to_buffer(const std::vector & p_value); - - static const std::string lut_u; - static const std::string lut_l; - static const std::string base64_enc_map; - -}; // End of class converter diff --git a/ccsrc/Framework/include/layer.hh b/ccsrc/Framework/include/layer.hh deleted file mode 100644 index abd4eae..0000000 --- a/ccsrc/Framework/include/layer.hh +++ /dev/null @@ -1,144 +0,0 @@ -/*! - * \file layer.hh - * \brief Header file for ITS abstract protocol layer definition. - * \author ETSI STF525 - * \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. - * \version 0.1 - */ -#pragma once - -#include -#include -#include -#include - -#include "params.hh" - -class OCTETSTRING; //! Forward declaration of TITAN class -class BITSTRING; //! Forward declaration of TITAN class -class CHARSTRING; //! Forward declaration of TITAN class -class INTEGER; //! Forward declaration of TITAN class - -/*! - * \class layer - * \brief This class provides basic description of an ITS protocol layer - */ -class layer { - std::vector upperLayers; //! List of the upper protocol layers - std::vector lowerLayers; //! List of the lower protocol layers - -protected: - std::string type; //! Type description, it indicates the protocol type (e.g. CAM, DENM, GN, ETH, PCAP...) - -public: //! \publicsection - /*! - * \brief Default constructor - * Create a new instance of the layer class - */ - explicit layer() : upperLayers(), lowerLayers(), type(std::string("")) { }; - - /*! - * \brief Specialized constructor - * Create a new instance of the layer class with its type description - * \param[in] p_type The port type name (e.g. GN for the GeoNetworking layer) - * \remark This constructor is called by the layer factory - * \see layer_factory - */ - explicit layer(const std::string& p_type) : upperLayers(), lowerLayers(), type(std::string(p_type.begin(), p_type.end())) { }; - - /*! - * \brief Default destructor - * \todo Remove logs - */ - virtual ~layer() { - // Double linked list, only remove layers in lowerLayers from the lowest one - std::for_each(lowerLayers.rbegin(), lowerLayers.rend(), [](layer* it) { delete it; } ); - lowerLayers.clear(); - upperLayers.clear(); - }; - - /*! - * \fn void delete_layer(); - * \brief Delete this layer - * \todo To be implemented - */ - void delete_layer() { }; - -public: //! \publicsection - /*! - * \inline - * \fn void add_upper_layer(layer* p_layer); - * \brief Add a new layer in the list of the upper layer - * \param[in] p_layer The layer protocol to be removed - */ - inline void add_upper_layer(layer* p_layer) { - if (p_layer != NULL) { - upperLayers.push_back(p_layer); - p_layer->lowerLayers.push_back(this); - }; - }; - - /*! - * \fn void remove_upper_layer(layer* p_layer); - * \brief Remove the specified upper layer protocol from the list of the upper layer - * \param[in] p_layer The layer protocol to be removed - * \todo To be implemented - */ - void remove_upper_layer(layer* p_layer) { }; - - /*! - * \virtual - * \fn void send_data(OCTETSTRING& data, params& params); - * \brief Send bytes formated data to the lower layers - * \param[in] p_data The data to be sent - * \param[in] p_params Some parameters to overwrite default value of the lower layers parameters - * \todo Remove the logs - * \virtual - */ - virtual void send_data(OCTETSTRING& p_data, params& p_params) { }; - - /*! - * \virtual - * \fn void receive_data(OCTETSTRING& data, params& params); - * \brief Receive bytes formated data from the lower layers - * \param[in] p_data The bytes formated data received - * \param[in] p_params Some lower layers parameters values when data was received - * \todo Remove the logs - * \virtual - */ - virtual void receive_data(OCTETSTRING& p_data, params& p_params) { } - - /*! - * \inline - * \fn const std::string& to_string(); - * \brief Remove the specified upper layer protocol from the list of the upper layer - * \param[in] The layer protocol to be removed - */ - inline const std::string& to_string() const { return type; }; - -protected: //! \protectedsection - inline void to_all_layers(std::vector&layers, OCTETSTRING& data, params& params) { - for (std::vector::const_iterator it = layers.cbegin(); it != layers.cend(); ++it) { - layer* p = *it; - p->receive_data(data, params); // FIXME BUG I - } // End of 'for' statement - }; - - inline void receive_to_all_layers(OCTETSTRING& data, params& params) { - for (std::vector::const_iterator it = upperLayers.cbegin(); it != upperLayers.cend(); ++it) { - layer* p = *it; - p->receive_data(data, params); - } // End of 'for' statement - }; - - inline void send_to_all_layers(OCTETSTRING& data, params& params) { - for (std::vector::const_iterator it = lowerLayers.cbegin(); it != lowerLayers.cend(); ++it) { - layer* p = *it; - p->send_data(data, params); - } // End of 'for' statement - }; -}; // End of class layer - diff --git a/ccsrc/Framework/include/layer_factory.hh b/ccsrc/Framework/include/layer_factory.hh deleted file mode 100644 index c66fdc3..0000000 --- a/ccsrc/Framework/include/layer_factory.hh +++ /dev/null @@ -1,114 +0,0 @@ -/*! - * \file layer_factory.hh - * \brief Header file for ITS abstract protocol layer definition. - * \author ETSI STF525 - * \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. - * \version 0.1 - */ -#pragma once - -#include -#include -#include -#include - -#include "layer.hh" - -/*! - * \class layer_factory - * \brief This class provides a factory class to create layer class instances - * \abstract - */ -class layer_factory { -public: //! \publicsection - /*! - * \fn codec(); - * \brief Default constructor - */ - layer_factory() {}; - /*! - * \fn layer* create_layer(const std::string & type, const std::string & param); - * \brief Create the layers stack based on the provided layers stack description (cf. remark) - * \param[in] p_type The provided layers stack description - * \param[in] p_params Optional parameters - * \return 0 on success, -1 otherwise - * \remark The description below introduces layers stack in case of ITS project: - * CAM layer - * next_header : btpA|btpB (overwrite BTP.type) - * header_type : tsb|gbc - * header_sub_type : sh (single hop) - * DENM layer - * next_header : btpA|btpB (overwrite BTP.type) - * header_type : tsb|gbc - * BTP layer - * type : btpA|btpB - * destination port: dst_port - * source port : src_port - * device_mode : Set to 1 if the layer shall encapsulate upper layer PDU - * GN layer - * its_aid : ITS AID as defined by ETSI TS 102 965 V1.2.1. Default: 141 - * ll_address : GeoNetworking address of the Test System - * latitude : latitude of the Test System - * longitude : longitude of the Test System - * beaconing : Set to 1 if GnLayer shall start beaconing - * Beaconing timer expiry : expiry (ms) - * device_mode : Set to 1 if the layer shall encapsulate upper layer PDU - * secured_mode : Set to 1 if message exchanges shall be signed - * encrypted_mode : Set to 1 if message exchanges shall be encrypted - * NOTE: For signed & encrypted message exchanges, both secured_mode and encrypted_mode shall be set to 1 - * certificate : Certificate identifier the Test Adapter shall use - * secure_db_path : Path to the certificates and keys storage location - * hash : Hash algorithm to be used when secured mode is set - * Authorized values are SHA-256 or SHA-384 - * Default: SHA-256 - * signature : Signature algorithm to be used when secured mode is set - * Authorized values are NISTP-256, BP-256 and BP-384 - * Default: NISTP-256 - * cypher : Cyphering algorithm to be used when secured mode is set - * Ethernet layer - * mac_src :Source MAC address - * mac_bc :Broadcast address - * eth_type : Ethernet type - * Commsignia layer - * mac_src : Device MAC address, used to discard packets - * To indicate no filering, use the value 000000000000 - * mac_bc : Broadcast address - * eth_type : Ethernet type, used to discard packets - * target_host : Device address - * target_port : Device port - * source_port : Test System port - * interface_id: Interface id, used to discard packets - * tx_power : TX power (dB) - * UDP layer (IP/UDP based on Pcap) - * dst_ip : destination IPv4 address (aa.bb.cc.dd) - * dst_port: destination port - * src_ip : source IPv4 address (aa.bb.cc.dd) - * src_port: source port - * Pcap layer - * mac_src : Source MAC address, used to exclude from capture the acket sent by the Test System - * filter : Pcap filter (compliant with tcpdump syntax) - * E.g. filter=and ether src 04e548000001 - * Online mode: - * nic: Local NIC - * If set, online mode is used - * Offline mode (nic is present but not set): - * file : File to read - * frame_offset: Frame offset, used to skip packets with frame number < frame_offset - * time_offset : Time offset, used to skip packets with time offset < time_offset - * save_mode : 1 to save sent packet, 0 otherwise - * Here are some examples: - * GeoNetworking multiple component case: - * NodeB.geoNetworkingPort.params := "GN(ll_address=04e548000001,latitude=43551050,longitude=10298730,beaconing=0,expiry=1000,its_aid=141)/COMMSIGNIA(mac_src=04e548000001,mac_bc=FFFFFFFFFFFF,eth_type=8947,target_host=10.200.1.101,target_port=7942,source_port=7943,its_aid=141,interface_id=2,tx_power=-32)/UDP(dst_ip=192.168.56.1,dst_port=12346,src_ip=192.168.156.4,src_port=12345)/ETH(mac_src=04e548000001,mac_dst=0A0027000011,eth_type=0800)/PCAP(mac_src=04e548000001,file=/home/vagrant/TriesAndDelete/etsi_its/testdata/TC_AUTO_IOT_DENM_RWW_BV_01_short.pcap,filter=and (udp port 30000 or udp port 7943))" -NodeC.geoNetworkingPort.params := "GN(ll_address=70b3d5791b48,latitude=43551050,longitude=10298730,beaconing=0,expiry=1000,its_aid=141)/COMMSIGNIA(mac_src=70b3d5791b48,mac_bc=FFFFFFFFFFFF,eth_type=8947,target_host=10.200.1.101,target_port=7942,source_port=7943,its_aid=141,interface_id=2,tx_power=-32)/UDP(dst_ip=192.168.56.1,dst_port=12346,src_ip=192.168.156.4,src_port=12345)/ETH(mac_src=70b3d5791b48,mac_dst=0A0027000011,eth_type=0800)/PCAP(mac_src=70b3d5791b48,file=/home/vagrant/TriesAndDelete/etsi_its/testdata/TC_AUTO_IOT_DENM_RWW_BV_01_short.pcap,filter=and (udp port 30000 or udp port 7943))" - * NodeB.geoNetworkingPort.params := "GN(ll_address=04e548000001,latitude=43551050,longitude=10298730,beaconing=0,expiry=1000,its_aid=141)/ETH(mac_src=04e548000001,mac_dst=0A0027000011,eth_type=0800)/PCAP(mac_src=04e548000001,file=/home/vagrant/TriesAndDelete/etsi_its/testdata/TC_AUTO_IOT_DENM_RWW_BV_01.pcap,filter=and ether src 04e548000001)" -#NodeC.geoNetworkingPort.params := "GN(ll_address=70b3d5791b48,latitude=43551050,longitude=10298730,beaconing=0,expiry=1000,its_aid=141)/ETH(mac_src=70b3d5791b48,mac_dst=0A0027000011,eth_type=0800)/PCAP(mac_src=70b3d5791b48,file=/home/vagrant/TriesAndDelete/etsi_its/testdata/TC_AUTO_IOT_DENM_RWW_BV_01.pcap,filter=and ether src 70b3d5791b48)" - * UpperTester port based on UDP - * system.utPort.params := "UT_GN/UDP(dst_ip=192.168.1.1,dst_port=12346,src_ip=192.168.156.4,src_port=12345)/ETH(mac_src=026f8338c1e5,mac_dst=0A0027000011,eth_type=0800)/PCAP(mac_src=0800275c4959,nic=enp0s8,filter=and udp port 12346)" - * \pure - */ - virtual layer* create_layer(const std::string & p_type, const std::string & p_params) = 0; -}; // End of class layer_factory - diff --git a/ccsrc/Framework/include/layer_stack_builder.hh b/ccsrc/Framework/include/layer_stack_builder.hh deleted file mode 100644 index af797a3..0000000 --- a/ccsrc/Framework/include/layer_stack_builder.hh +++ /dev/null @@ -1,67 +0,0 @@ -/*! - * \file layer_stack_builder.hh - * \brief Header file for ITS protocol stack builder. - * \author ETSI STF525 - * \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. - * \version 0.1 - */ -#pragma once - -#include "layer_factory.hh" - -/*! - * \class layer_stack_builder - * \brief This class provides a factory class to create Layer class instances - */ -class layer_stack_builder { -private: //! \privatesection - typedef std::map LayerFactoryMap; - - static layer_stack_builder * _instance; //! Smart pointer to the unique instance of the logger framework - std::map _layer_factories; //! The list of the registered \see t_layer factories - - /*! - * \brief Default constructor - * Create a new instance of the layer_stack_builder class - * \private - */ - layer_stack_builder(); // can not be created manually -public: //! \publicsection - /*! - * \fn layer_stack_builder* get_instance(); - * \brief Accessor for the unique instance of the logger framework - * \static - */ - static layer_stack_builder* get_instance(); - - /*! - * \fn void register_layer_factory(const std::string & p_type, layer_factory* p_layer_factory); - * \brief Add a new layer factory - * \param[in] p_type The layer identifier (e.g. GN for the GeoNetworking layer...) - * \param[in] p_layer_factory A reference to the \see layer_factory - * \static - */ - static void register_layer_factory(const std::string & p_type, layer_factory* p_layer_factory); - -private: //! \privatesection - /*! - * \fn void _register_layer_factory(const std::string & p_type, layer_factory* p_layer_factory); - * \brief Add a new layer factory - * \param[in] p_type The layer identifier (e.g. GN for the GeoNetworking layer...) - * \param[in] p_layer_factory A reference to the \see layer_factory - */ - void _register_layer_factory(const std::string & p_type, layer_factory* p_layer_factory); - -public: //! \publicsection - /*! - * \fn layer* create_layer_stack(const char* p_layer_stack_description); - * \brief Add a new layer factory - * \param[in] p_layer_stack_description A textual description of the layer to create - * \return The created layer object on success, nullptr otherwise - */ - layer* create_layer_stack(const char* p_layer_stack_description); -}; // End of class layer_stack_builder - diff --git a/ccsrc/Framework/include/params.hh b/ccsrc/Framework/include/params.hh deleted file mode 100644 index 046fd72..0000000 --- a/ccsrc/Framework/include/params.hh +++ /dev/null @@ -1,137 +0,0 @@ -/*! - * \file params.hh - * \brief Header file for the parameter dictionary. - * \author ETSI STF525 - * \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. - * \version 0.1 - */ -#pragma once - -#include -#include -#include - - /*! - * \class params - * \brief This class provides basic functionalities for an ITS dictionary - * \implements std::map - */ -class params : public std::map { -public: //! \publicsection - // TODO Use static constexpr (see commsignia_layer.hh) - static const std::string& debug; //! Set to 1 to enable the debug mode - - static const std::string& loopback; - - static const std::string& mac_src; //! Source MAC address parameter name - static const std::string& mac_dst; //! Destination MAC address parameter name - static const std::string& mac_bc; //! Broadcast MAC address parameter name - static const std::string& eth_type; //! Ethernet type parameter name - static const std::string& beaconing; //! Beaconing mode parameter name - static const std::string& timestamp; //! Packet reception timestamp - static const std::string& station_type; - static const std::string& country; - static const std::string& type_of_address; - static const std::string& ssp; //! SSP parameter name - static const std::string& its_aid; //! ITS-AID parameter name - static const std::string& gn_payload; //! GeoNetworking Payload parameter name - static const std::string& gn_next_header; //! GeoNetworking NextHeader parameter name - static const std::string& gn_header_type; //! GeoNetworking HeaderType parameter name - static const std::string& gn_header_sub_type; //! GeoNetworking HeaderSubType parameter name - static const std::string& gn_lifetime; //! GeoNetworking Lifetime parameter name - static const std::string& gn_traffic_class; //! GeoNetworking Traffic class parameter name - static const std::string& btp_type; //! BTP Type parameter name - static const std::string& btp_payload; //! BTP Payload parameter name - static const std::string& btp_destination_port; //! BTP DestinationPort parameter name - static const std::string& btp_info; //! BTP Info parameter name - - static const std::string& nic; //! Network Interface Card parameter name - static const std::string& ll_address; //! Test system GeoNetworking LL-Address parameter name - static const std::string& latitude; //! Test system Latitude parameter name - static const std::string& longitude; //! Test system Longitude parameter name - static const std::string& expiry; //! Test system GeoNetworking Lifetime parameter name (in ms) - - static const std::string& station_id; //! To indicate to the peer ITS_Container::stationID - - static const std::string& device_mode; //! To indicate to the lower layer to act as a standalone device - static const std::string& secured_mode; //! To indicate to the lower layer to apply signature on message exchanges as defined in IEEE 1609.2 & ETSI TS 102 965 - static const std::string& encrypted_mode; //! To indicate to the lower layer to apply encryption on message exchanges as defined in IEEE 1609.2 & ETSI TS 102 965 - static const std::string& enable_security_checks;//! To indicates if security check failures shall be treated as error or warning - static const std::string& sec_db_path; //! Path to the folder containing certificates - static const std::string& certificate; //! The certificate identifier the Test System shall use. E.g. CERT_TS_A - static const std::string& peer_certificate; //! The peer certificate identifier the Test System shall use for encryption. E.g. CERT_TS_A - static const std::string& hash; //! The digest algorithm the Test System shall use, authorised values are SHA-256 or SHA-384. Default: SHA-256 - static const std::string& signature; //! The signature algorithm the Test System shall use, authorised values are NISTP-256, BP-256 and BP-384. Default: NISTP-256 - static const std::string& cypher; //! The encryption algorithm the Test System shall use, authorised values are NISTP-256 and BP-256. Default: NISTP-256 - static const std::string& distanceA; //! Test system GeoNetworking DistanceA parameter name - static const std::string& distanceB; //! Test system GeoNetworking DistanceB parameter name - static const std::string& angle; //! Test system GeoNetworking Angle parameter name - - static const std::string& payload_type; //! Tyoe of payload, value is the ITS Conatainer message identifier or omitted in case of unknown payload - - static const std::string& next_header; //! Upper layer settings - static const std::string& header_type; //! Upper layer settings - static const std::string& header_sub_type; //! Upper layer settings - - static const std::string& interface_id; //! Commsignia antenna selector - - 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 - - static const std::string& method; //! HTTP method type. Default: POST - static const std::string& uri; //! HTTP URI value. Default: / - static const std::string& host; //! HTTP Host value. Default: 127.0.0.1 - static const std::string& content_type; //! HTTP Content-type value. Default: application/text - - static const std::string& codecs; //! List of codecs to use for HTTP application layers - - /*! - * \brief Default constructor - * Create a new instance of the params class - */ - params() : std::map() {}; - /*! - * \brief Copy constructor - * Clone an existing instance of a params object - * \param[in] p_params An existing instance of a params object - */ - explicit params(const params& p_params) : std::map(p_params.begin(), p_params.end()) { }; - - /*! - * \brief Default destructor - */ - virtual ~params() { }; - - /*! - * \fn void log() const; - * \brief Provides a dump of the content of this instance - */ - void log() const; - /*! - * \fn void log() const; - * \brief Provides a dump of the content of this instance - */ - void log(); - /*! - * \fn void reset(); - * \brief Reset the content of this instance - */ - void reset(); - - /*! - * \static - * \fn void convert(params& p_param, const std::string p_parameters); - * \brief Create a new instance of a params object by converting a list of ITS parameters in string format (t1=v1,T2=(v0,v1v2)...) - * \return a new instance of a params object - */ - static void convert(params& p_param, const std::string p_parameters); -}; // End of class params - diff --git a/ccsrc/Framework/include/t_layer.hh b/ccsrc/Framework/include/t_layer.hh deleted file mode 100644 index 8e355a9..0000000 --- a/ccsrc/Framework/include/t_layer.hh +++ /dev/null @@ -1,72 +0,0 @@ -/*! - * \file t_layer.hh - * \brief Header file for ITS abstract protocol layer definition. - * \author ETSI STF525 - * \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. - * \version 0.1 - */ -#pragma once - -#include "layer.hh" - -/*! - * \class t_layer - * \brief This class provides basic description of an ITS port protocol layer. - * A port protocol layer is the final layer which provides the access to the physical communication channel - * A port protocol layer derives from both a layer class and a template port class - */ -template class t_layer : public layer { - typedef std::vector TPortList; - typedef typename std::vector::iterator TPortListIterator; - - TPortList upperPorts; //! The list of the upper ports - -public: //! \publicsection - /*! - * \brief Default constructor - * Create a new instance of the t_layer class - * \todo Remove logs - */ - explicit t_layer() : layer(), upperPorts() { }; - - /*! - * \brief Specialized constructor - * Create a new instance of the layer class with its type description - * \param[in] p_type The port type name (e.g. TCP for the TCP sockect based layer) - * \remark This constructor is called by the layer factory - * \see layer_factory - */ - explicit t_layer(const std::string& p_type) : layer(p_type), upperPorts() { }; - /*! - * \inline - * \fn void add_upper_port(TPort * p_port); - * \brief Add a new upper port layer - * \todo To be done - */ - inline void add_upper_port(TPort * p_port) { upperPorts.push_back(p_port); }; - /*! - * \fn void remove_upper_port(TPort*); - * \brief Remove the specified upper layer port protocol from the list of the upper layers - * \param[in] p_layer The layer protocol to be removed - */ - void remove_upper_port(TPort*); - -protected: //! \protectedsection - /*! - * \inline - * \fn void to_all_upper_ports(const TMessage& m, const params& param); - * \brief Forward the message to all available upper port layers - * \param[in] p_message The message to be forwarded - * \param[in] p_params Some lower layers parameters values when data was received - */ - template - inline void to_all_upper_ports(const TMessage& p_message, const params& p_params) { - for(TPortListIterator it=upperPorts.begin(); itreceiveMsg(p_message, p_params); - } - } -}; // End of class t_layer - diff --git a/ccsrc/Framework/module.mk b/ccsrc/Framework/module.mk deleted file mode 100644 index b4ca0ce..0000000 --- a/ccsrc/Framework/module.mk +++ /dev/null @@ -1,6 +0,0 @@ -sources := src/base_time.cc \ - src/codec_stack_builder.cc \ - src/converter.cc \ - src/layer_factory.cc \ - src/params.cc -includes += ./include diff --git a/ccsrc/Framework/src/base_time.cc b/ccsrc/Framework/src/base_time.cc deleted file mode 100644 index 79924f8..0000000 --- a/ccsrc/Framework/src/base_time.cc +++ /dev/null @@ -1,13 +0,0 @@ -/*! - * \file base_time.cc - * \brief Source file for the control port base_time functionality. - * \author ETSI STF525 - * \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. - * \version 0.1 - */ -#include "base_time.hh" - -base_time* base_time::_instance = nullptr; diff --git a/ccsrc/Framework/src/codec_stack_builder.cc b/ccsrc/Framework/src/codec_stack_builder.cc deleted file mode 100644 index 2bf087e..0000000 --- a/ccsrc/Framework/src/codec_stack_builder.cc +++ /dev/null @@ -1,4 +0,0 @@ -#include "codec_stack_builder.hh" - -codec_stack_builder* codec_stack_builder::_instance = NULL; - diff --git a/ccsrc/Framework/src/converter.cc b/ccsrc/Framework/src/converter.cc deleted file mode 100644 index 44e9bb8..0000000 --- a/ccsrc/Framework/src/converter.cc +++ /dev/null @@ -1,202 +0,0 @@ -#include "converter.hh" -#include -converter * converter::instance = NULL; - -uint16_t converter::swap(const uint16_t p_value) { - uint8_t *ptr = (uint8_t *)&p_value; - return (ptr[0] << 8) | ptr[1]; -} - -uint32_t converter::swap(const uint32_t p_value) { - uint8_t *ptr = (uint8_t *)&p_value; - return (ptr[0] << 24) | (ptr[1] << 16) | (ptr[2] << 8) | ptr[3]; -} - -const std::string converter::lut_u = "0123456789ABCDEF"; -const std::string converter::lut_l = "0123456789abcdef"; -std::string converter::string_to_hexa(const std::string & p_value, const bool p_uppercase) { - - std::string input(p_value); - std::for_each( - input.begin(), - input.end(), - [](char & c) { - c = std::toupper(c); - } - ); - - std::string output; - uint32_t length = p_value.length(); - output.reserve(2 * length); - if (p_uppercase) { // TODO Use pointer to reduce code size - for (uint32_t i = 0; i < length; ++i) { - const uint8_t c = input[i]; - output.push_back(lut_u[c >> 4]); - output.push_back(lut_u[c & 15]); - } // End of 'for' statement - } else { - for (uint32_t i = 0; i < length; ++i) { - const uint8_t c = input[i]; - output.push_back(lut_l[c >> 4]); - output.push_back(lut_l[c & 15]); - } // End of 'for' statement - } - - return output; -} - -std::string converter::bytes_to_hexa(const std::vector & p_value, const bool p_uppercase) { - std::string ret; - ret.assign(p_value.size()*2, ' '); - if (p_uppercase) { // TODO Use pointer to reduce code size - for(size_t i=0; i>4]; - ret[i*2+1] = lut_u[c&0xF]; - } - } else { - for(size_t i=0; i>4]; - ret[i*2+1] = lut_l[c&0xF]; - } - } - return ret; -} - -inline uint8_t char2byte(const char p_ch) { - size_t s = converter::lut_l.find(p_ch); - if(s == std::string::npos) { - if ((s = converter::lut_u.find(p_ch)) == std::string::npos) { - throw (std::length_error("")); - } - } - return s; -} - -std::vector converter::hexa_to_bytes(const std::string & p_value) { - // Sanity check - std::vector output; - size_t i=0, idx = 0, outlen=(p_value.length()+1) / 2; - - output.assign(outlen, 0x00); - try{ - if (p_value.length() & 1) - output[idx++] = char2byte(p_value[i++]); - for(;idx converter::split(const std::string & p_value, const std::string& p_separator) { - std::vector output; - std::size_t current, previous = 0; - current = p_value.find(p_separator); - while (current != std::string::npos) { - output.push_back(p_value.substr(previous, current - previous)); - previous = current + 1; - current = p_value.find(p_separator, previous); - } - output.push_back(p_value.substr(previous, current - previous)); - - return output; -} - -std::vector converter::split_arguments_line(const std::string & p_value) { - std::vector output; - std::string line = trim(p_value); - if (!line.empty() && (line[0] == '-')) { // Valid command line - size_t current = 0; - size_t next = (size_t)-1; - size_t pos = 0; - do { - if (line[pos + 1] == '-') { // -- - current = pos + 2; - } else { - current = pos + 1; - } - next = line.find("-", current); - std::string str(line.substr(pos, next - pos)); - output.push_back(str); - pos = next; - } while (next != std::string::npos); - } // else, invalid command line - return output; -} - -const std::string converter::base64_enc_map = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; - -std::vector converter::buffer_to_base64(const std::vector & p_value) { - std::vector out; - - int val = 0, valb = -6; - for (unsigned char c : p_value) { - val = (val << 8) + c; - valb += 8; - while (valb >= 0) { - out.push_back(converter::base64_enc_map[(val >> valb) & 0x3F]); - valb -= 6; - } // End of 'while' statement - } // End of 'for' statement - if (valb > -6) { - out.push_back(converter::base64_enc_map[((val << 8) >> (valb + 8)) & 0x3F]); - } - while (out.size() % 4) { - out.push_back('='); - } // End of 'while' statement - - return out; -} - -std::vector converter::base64_to_buffer(const std::vector &p_value) { - std::vector out; - - std::vector T(256, -1); - for (int i = 0; i < 64; i++) { - T[converter::base64_enc_map[i]] = i; - } - - int val = 0, valb = -8; - for (unsigned char c : p_value) { - if (T[c] == -1) { - break; - } - val = (val << 6) + T[c]; - valb += 6; - if (valb >= 0) { - out.push_back((unsigned char)char((val >> valb) & 0xFF)); - valb -= 8; - } - } // End of 'for' statement - return out; -} diff --git a/ccsrc/Framework/src/layer_factory.cc b/ccsrc/Framework/src/layer_factory.cc deleted file mode 100644 index 33f24fe..0000000 --- a/ccsrc/Framework/src/layer_factory.cc +++ /dev/null @@ -1,71 +0,0 @@ -#include -#include - -#include "layer_stack_builder.hh" - -#include "loggers.hh" - -layer_stack_builder* layer_stack_builder::_instance = NULL; - -// static functions -layer_stack_builder * layer_stack_builder::get_instance() -{ - return _instance ? _instance : _instance = new layer_stack_builder(); -} - -void layer_stack_builder::register_layer_factory(const std::string & p_type, layer_factory* p_layer_factory) -{ - layer_stack_builder::get_instance()->_register_layer_factory(p_type, p_layer_factory); -} - -// member functions -layer_stack_builder::layer_stack_builder() -{ -} - -void layer_stack_builder::_register_layer_factory(const std::string & p_type, layer_factory* p_layer_factory) -{ - _layer_factories[p_type] = p_layer_factory; -} - -layer* layer_stack_builder::create_layer_stack(const char* p_layer_stack_description) -{ - loggers::get_instance().log(">>> layer_stack_builder::create_layer_stack: %s", p_layer_stack_description); - - layer* entry = NULL; // Initial layer (the first declared) - layer* up = NULL; // Upper layer - // Parse the layer description - try { - std::regex rgx ("(\\w+)(\\((.*?)\\))?(\\/|$)"); - std::string str = p_layer_stack_description; - std::sregex_iterator begin(str.cbegin(), str.cend(), rgx); - std::sregex_iterator end = std::sregex_iterator(); - for (std::sregex_iterator it = begin; it != end; ++it) { - std::smatch m = *it; - loggers::get_instance().log("layer_stack_builder::create_layer_stack: %d - %s - %s - %s - %s", m.size(), m[0].str().c_str(), m[1].str().c_str(), m[2].str().c_str(), m[3].str().c_str()); - LayerFactoryMap::iterator i = _layer_factories.find(m[1].str()); - if (i == _layer_factories.end()) { - loggers::get_instance().error("layer_stack_builder::create_layer_stack: %s: Unknown layer type", m[1].str().c_str()); - } - loggers::get_instance().log("layer_stack_builder::create_layer_stack: Create layer %s, %s", m[1].str().c_str(), m[3].str().c_str()); - layer* l = i->second->create_layer(m[1].str(), m[3].str()); - if (NULL == l) { - loggers::get_instance().error("layer_stack_builder::create_layer_stack: %s: Layer creation error", m[1].str().c_str()); - } - - loggers::get_instance().log("layer_stack_builder::create_layer_stack: Setup layers for %s", l->to_string().c_str()); - l->add_upper_layer(up); - if (entry == NULL) { // Set the first declared layer - entry = l; - } - up = l; // Build the linked list of layers - } // End of 'for' statement - } - catch(const std::logic_error& e){ - if(up){ // FIXME To be reviewed - up->delete_layer(); - up = NULL; - } - } - return entry; -} diff --git a/ccsrc/Framework/src/params.cc b/ccsrc/Framework/src/params.cc deleted file mode 100644 index d35f551..0000000 --- a/ccsrc/Framework/src/params.cc +++ /dev/null @@ -1,142 +0,0 @@ -/*! - * \file params.cc - * \brief Source file for the parameter dictionary. - * \author ETSI STF525 - * \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. - * \version 0.1 - */ -#include -#include - -#include "params.hh" -#include "loggers.hh" - -const std::string& params::debug = std::string("debug"); - -const std::string& params::loopback = std::string("loopback"); - -const std::string& params::mac_src = std::string("mac_src"); -const std::string& params::mac_dst = std::string("mac_dst"); -const std::string& params::mac_bc = std::string("mac_bc"); -const std::string& params::eth_type = std::string("eth_type"); -const std::string& params::beaconing = std::string("beaconing"); -const std::string& params::timestamp = std::string("timestamp"); -const std::string& params::station_type = std::string("station_type"); -const std::string& params::country = std::string("country"); -const std::string& params::type_of_address = std::string("type_of_address"); -const std::string& params::its_aid = std::string("its_aid"); -const std::string& params::ssp = std::string("ssp"); -const std::string& params::gn_payload = std::string("gn_payload"); -const std::string& params::gn_next_header = std::string("gnNextHeader"); -const std::string& params::gn_header_type = std::string("gnHeaderType"); -const std::string& params::gn_header_sub_type = std::string("gnHeaderSubtype"); -const std::string& params::gn_lifetime = std::string("gnLifetime"); -const std::string& params::gn_traffic_class = std::string("gnTrafficClass"); -const std::string& params::btp_type = std::string("btp_type"); -const std::string& params::btp_payload = std::string("btp_payload"); -const std::string& params::btp_destination_port = std::string("dst_port"); -const std::string& params::btp_info = std::string("btp_info"); - -const std::string& params::nic = std::string("nic"); -const std::string& params::latitude = std::string("latitude"); -const std::string& params::longitude = std::string("longitude"); -const std::string& params::ll_address = std::string("ll_address"); -const std::string& params::expiry = std::string("expiry"); - -const std::string& params::station_id = std::string("station_id"); - -const std::string& params::device_mode = std::string("device_mode"); -const std::string& params::secured_mode = std::string("secured_mode"); -const std::string& params::encrypted_mode = std::string("encrypted_mode"); -const std::string& params::enable_security_checks = std::string("enable_security_checks"); -const std::string& params::certificate = std::string("certificate"); -const std::string& params::peer_certificate = std::string("peer_certificate"); -const std::string& params::sec_db_path = std::string("sec_db_path"); -const std::string& params::hash = std::string("hash"); -const std::string& params::signature = std::string("signature"); -const std::string& params::cypher = std::string("cypher"); -const std::string& params::distanceA = std::string("distanceA"); -const std::string& params::distanceB = std::string("distanceB"); -const std::string& params::angle = std::string("angle"); - -const std::string& params::payload_type = std::string("payload_type"); - -const std::string& params::next_header = std::string("next_header"); -const std::string& params::header_type = std::string("header_type"); -const std::string& params::header_sub_type = std::string("header_sub_type"); - -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"); - -const std::string& params::method = std::string("method"); -const std::string& params::uri = std::string("uri"); -const std::string& params::host = std::string("host"); -const std::string& params::content_type = std::string("content_type"); - -//const std::string& params::sip_url = std::string("sip_url"); -//const std::string& params::sip_version = std::string("sip_version"); -//const std::string& params::payload = std::string("payload"); - -const std::string& params::codecs = std::string("codecs"); - -void params::convert(params& p_param, const std::string p_parameters) { - // Sanity checks - if (p_parameters.length() == 0) { - return; - } - loggers::get_instance().log(">>> params::convert: %s", p_parameters.c_str()); - // Extract parameters - try { - std::regex rgx ("(\\w+)=(.*?)(,|$)"); - std::sregex_iterator begin(p_parameters.cbegin(), p_parameters.cend(), rgx); - std::sregex_iterator end = std::sregex_iterator(); - for (std::sregex_iterator it = begin; it != end; ++it) { - std::smatch m = *it; - loggers::get_instance().log("params::convert: %d - %s - %s - %s - %s", m.size(), m[0].str().c_str(), m[1].str().c_str(), m[2].str().c_str(), m[3].str().c_str()); - p_param.insert(std::pair(m[1].str(), m[2].str())); - } // End of 'for' statement - } - catch(const std::logic_error& e){ - p_param.clear(); - } - loggers::get_instance().log("<<< params::convert"); -} - -void params::log() const { - loggers::get_instance().log("params::log"); - if (size() == 0) { - loggers::get_instance().log("\tEmpty"); - } else { - for (const_iterator it = cbegin(); it != cend(); ++it) { - loggers::get_instance().log("\t(%s, %s)", it->first.c_str(), it->second.c_str()); - } // End of 'for' statement - } -} - -void params::log() { - loggers::get_instance().log("params::log"); - if (size() == 0) { - loggers::get_instance().log("\tEmpty"); - } else { - for (const_iterator it = cbegin(); it != cend(); ++it) { - loggers::get_instance().log("\t(%s, %s)", it->first.c_str(), it->second.c_str()); - } // End of 'for' statement - } -} - -void params::reset() { - loggers::get_instance().log("params::reset"); - for (iterator it = begin(); it != end(); ++it) { - it->second.clear(); - } // End of 'for' statement -} diff --git a/ccsrc/Ports/LibHttp/HttpPort.cc b/ccsrc/Ports/LibHttp/HttpPort.cc index c20a2af..044f6b7 100644 --- a/ccsrc/Ports/LibHttp/HttpPort.cc +++ b/ccsrc/Ports/LibHttp/HttpPort.cc @@ -1,10 +1,12 @@ #include "HttpPort.hh" #include "http_layer_factory.hh" +#include "http_layer.hh" +#include "http_codec_mec.hh" #include "loggers.hh" -#include "LibItsHttp_TypesAndValues.hh" +#include "LibHttp_TypesAndValues.hh" -namespace LibItsHttp__TestSystem { +namespace LibHttp__TestSystem { HttpPort::HttpPort(const char *par_port_name): HttpPort_BASE(par_port_name), _cfg_params(), _layer_params(), _layer(nullptr), _time_key("HttpPort::outgoing_send") { // Nothing to do @@ -55,11 +57,13 @@ namespace LibItsHttp__TestSystem { params::convert(_layer_params, it->second); // TODO This _layer_params seems to be useless // Create layer _layer = layer_stack_builder::get_instance()->create_layer_stack(it->second.c_str()); - if (static_cast(_layer) == nullptr) { + if (static_cast(_layer) == nullptr) { loggers::get_instance().error("HttpPort::user_map: Invalid stack configuration: %s", it->second.c_str()); } + if (!static_cast(_layer)->set_codec(new http_codec_mec())) { + loggers::get_instance().error("HttpPort::user_map: Null codec"); + } static_cast(_layer)->add_upper_port(this); - } else { loggers::get_instance().error("HttpPort::user_map: No layers defined in configuration file"); } @@ -88,7 +92,7 @@ namespace LibItsHttp__TestSystem { } // End of user_stop method - void HttpPort::outgoing_send(const LibItsHttp__TypesAndValues::HttpMessage& send_par) + void HttpPort::outgoing_send(const LibHttp__TypesAndValues::HttpMessage& send_par) { loggers::get_instance().log_msg(">>> HttpPort::outgoing_send: payload=", send_par); @@ -99,7 +103,7 @@ namespace LibItsHttp__TestSystem { loggers::get_instance().set_stop_time(_time_key, duration); } - void HttpPort::receiveMsg (const LibItsHttp__TypesAndValues::HttpMessage& p_ind, const params& p_params) { + void HttpPort::receiveMsg (const LibHttp__TypesAndValues::HttpMessage& p_ind, const params& p_params) { loggers::get_instance().log_msg(">>> HttpPort::receive_msg: ", p_ind); // Sanity check if (!p_ind.is_bound()) { diff --git a/ccsrc/Ports/LibHttp/HttpPort.hh b/ccsrc/Ports/LibHttp/HttpPort.hh index 63c70c5..5acb520 100644 --- a/ccsrc/Ports/LibHttp/HttpPort.hh +++ b/ccsrc/Ports/LibHttp/HttpPort.hh @@ -1,15 +1,15 @@ #pragma once -#include "LibItsHttp_TestSystem.hh" +#include "LibHttp_TestSystem.hh" #include "layer.hh" #include "params.hh" -namespace LibItsHttp__TypesAndValues { +namespace LibHttp__TypesAndValues { class HttpMessage; } -namespace LibItsHttp__TestSystem { +namespace LibHttp__TestSystem { class HttpPort : public HttpPort_BASE { params _cfg_params; @@ -21,7 +21,7 @@ namespace LibItsHttp__TestSystem { ~HttpPort(); void set_parameter(const char *parameter_name, const char *parameter_value); - void receiveMsg (const LibItsHttp__TypesAndValues::HttpMessage& p_ind, const params& p_params); + void receiveMsg (const LibHttp__TypesAndValues::HttpMessage& p_ind, const params& p_params); private: /* void Handle_Fd_Event(int fd, boolean is_readable, @@ -39,7 +39,7 @@ namespace LibItsHttp__TestSystem { void user_stop(); protected: - void outgoing_send(const LibItsHttp__TypesAndValues::HttpMessage& send_par); + void outgoing_send(const LibHttp__TypesAndValues::HttpMessage& send_par); }; // End of class HttpPort } diff --git a/ccsrc/Protocols/ETH/ethernet_layer.cc b/ccsrc/Protocols/ETH/ethernet_layer.cc deleted file mode 100644 index d0ba32a..0000000 --- a/ccsrc/Protocols/ETH/ethernet_layer.cc +++ /dev/null @@ -1,82 +0,0 @@ -#include "ethernet_layer_factory.hh" - -#include "loggers.hh" - -ethernet_layer::ethernet_layer(const std::string & p_type, const std::string & param) : layer(p_type), _params() { - loggers::get_instance().log(">>> ethernet_layer::ethernet_layer: %s, %s", to_string().c_str(), param.c_str()); - // Setup parameters - params::convert(_params, param); - params::const_iterator it = _params.find("mac_src"); - if (it == _params.cend()) { - _params.insert(std::pair(std::string("mac_src"), "000000000000")); - } - it = _params.find("mac_bc"); - if (it == _params.cend()) { - _params.insert(std::pair(std::string("mac_bc"), "FFFFFFFFFFFF")); - } - it = _params.find("eth_type"); - if (it == _params.cend()) { - _params.insert(std::pair(std::string("eth_type"), "8947")); - } - //_params.log(); -} - -void ethernet_layer::send_data(OCTETSTRING& data, params& params) { - loggers::get_instance().log_msg(">>> ethernet_layer::send_data: ", data); - - OCTETSTRING eth; - // Destination MAC address - params::const_iterator it = params.find(params::mac_dst); // Find in provided parameters, params - if (it != params.cend()) { - eth = str2oct(CHARSTRING(it->second.c_str())); - } else { - it = _params.find(params::mac_dst); - if (it != _params.cend()) { - eth = str2oct(CHARSTRING(it->second.c_str())); - } else { - eth = str2oct(CHARSTRING(_params[params::mac_bc].c_str())); - } - } - // Source MAC address - it = params.find(params::mac_src); // Find in provided parameters, params - if (it != params.cend()) { - eth += str2oct(CHARSTRING(it->second.c_str())); - } else { - eth += str2oct(CHARSTRING(_params[params::mac_src].c_str())); - } - // Ethernet type - it = params.find(params::eth_type); // Find in layer parameters - if (it != params.cend()) { - eth += str2oct(CHARSTRING(it->second.c_str())); - } else { - eth += str2oct(CHARSTRING(_params[params::eth_type].c_str())); - } - - eth += data; - send_to_all_layers(eth, params); -} - -void ethernet_layer::receive_data(OCTETSTRING& data, params& params) { - loggers::get_instance().log_msg(">>> ethernet_layer::receive_data: ", data); - - // Extract dest MAC Address - OCTETSTRING dst = OCTETSTRING(6, static_cast(data)); - //loggers::get_instance().log_msg("ethernet_layer::receive_data: dst: ", dst); - // Extract source MAC Address - OCTETSTRING src = OCTETSTRING(6, 6 + static_cast(data)); - //loggers::get_instance().log_msg("ethernet_layer::receive_data: src: ", src); - // Extract ethertype - OCTETSTRING proto = OCTETSTRING(2, 2 + static_cast(data)); - //loggers::get_instance().log_msg("ethernet_layer::receive_data: proto: ", proto); - data = OCTETSTRING(data.lengthof() - 14, 14 + static_cast(data)); - // Update params - CHARSTRING s = oct2str(dst); - params.insert(std::pair(params::mac_dst, std::string(static_cast(s)))); - s = oct2str(src); - params.insert(std::pair(params::mac_src, std::string(static_cast(s)))); - //loggers::get_instance().log_msg("ethernet_layer::receive_data: payload for upper layer:", data); - - receive_to_all_layers(data, params); -} - -ethernet_layer_factory ethernet_layer_factory::_f; diff --git a/ccsrc/Protocols/ETH/ethernet_layer.hh b/ccsrc/Protocols/ETH/ethernet_layer.hh deleted file mode 100644 index 6f224a8..0000000 --- a/ccsrc/Protocols/ETH/ethernet_layer.hh +++ /dev/null @@ -1,48 +0,0 @@ -/*! - * \file udp_layer.hh - * \brief Header file for ITS UDP/IP protocol layer definition. - * \author ETSI STF525 - * \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. - * \version 0.1 - */ -#pragma once - -#include "t_layer.hh" -#include "params.hh" - -class ethernet_layer : public layer { - params _params; //! Layer parameters - -public: //! \publicsection - /*! - * \brief Specialised constructor - * Create a new instance of the ethernet_layer class - * \param[in] p_type \todo - * \param[in] p_param \todo - */ - ethernet_layer(const std::string & p_type, const std::string & param); - /*! - * \brief Default destructor - */ - virtual ~ethernet_layer() {}; - - /*! - * \virtual - * \fn void send_data(OCTETSTRING& data, params& params); - * \brief Send bytes formated data to the lower layers - * \param[in] p_data The data to be sent - * \param[in] p_params Some parameters to overwrite default value of the lower layers parameters - */ - virtual void send_data(OCTETSTRING& data, params& params); - /*! - * \virtual - * \fn void receive_data(OCTETSTRING& data, params& params); - * \brief Receive bytes formated data from the lower layers - * \param[in] p_data The bytes formated data received - * \param[in] p_params Some lower layers parameters values when data was received - */ - virtual void receive_data(OCTETSTRING& data, params& info); -}; // End of class ethernet_layer diff --git a/ccsrc/Protocols/ETH/ethernet_layer_factory.hh b/ccsrc/Protocols/ETH/ethernet_layer_factory.hh deleted file mode 100644 index 099a925..0000000 --- a/ccsrc/Protocols/ETH/ethernet_layer_factory.hh +++ /dev/null @@ -1,45 +0,0 @@ -/*! - * \file ethernet_layer_factory.hh - * \brief Header file for ITS Ethernet protocol layer factory. - * \author ETSI STF525 - * \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. - * \version 0.1 - */ -#pragma once - -#include "layer_stack_builder.hh" - -#include "ethernet_layer.hh" - -/*! - * \class ethernet_layer_factory - * \brief This class provides a factory class to create an ethernet_layer class instance - */ -class ethernet_layer_factory: public layer_factory { - static ethernet_layer_factory _f; //! Reference to the unique instance of this class -public: //! \publicsection - /*! - * \brief Default constructor - * Create a new instance of the ethernet_layer_factory class - * \remark The ETH layer identifier is ETH - */ - ethernet_layer_factory() { - // register factory - layer_stack_builder::register_layer_factory("ETH", this); - }; - /*! - * \fn layer* create_layer(const std::string & type, const std::string & param); - * \brief Create the layers stack based on the provided layers stack description - * \param[in] p_type The provided layers stack description - * \param[in] p_params Optional parameters - * \return 0 on success, -1 otherwise - * \inline - */ - inline virtual layer* create_layer(const std::string& p_type, const std::string& p_param) { - return new ethernet_layer(p_type, p_param); - }; -}; // End of class ethernet_layer_factory - diff --git a/ccsrc/Protocols/ETH/module.mk b/ccsrc/Protocols/ETH/module.mk deleted file mode 100644 index e81733a..0000000 --- a/ccsrc/Protocols/ETH/module.mk +++ /dev/null @@ -1,3 +0,0 @@ -sources := ethernet_layer.cc -includes := . - diff --git a/ccsrc/Protocols/Http/http_codec.cc b/ccsrc/Protocols/Http/http_codec.cc deleted file mode 100644 index 9e633ba..0000000 --- a/ccsrc/Protocols/Http/http_codec.cc +++ /dev/null @@ -1,783 +0,0 @@ -#include -#include -#include - -#include "codec_stack_builder.hh" - -#include "http_codec.hh" - -#include "loggers.hh" - -#include "LibItsHttp_TypesAndValues.hh" -#include "LibItsHttp_MessageBodyTypes.hh" -#include "LibItsHttp_XmlMessageBodyTypes.hh" -#include "LibItsHttp_JsonMessageBodyTypes.hh" - -int http_codec::encode (const LibItsHttp__TypesAndValues::HttpMessage& msg, OCTETSTRING& data) -{ - loggers::get_instance().log_msg(">>> http_codec::encode: ", (const Base_Type&)msg); - loggers::get_instance().log(">>> http_codec::encode: %p", this); - - TTCN_EncDec::clear_error(); - TTCN_Buffer encoding_buffer; - - _ec.reset(); - - int result; - if (msg.ischosen(LibItsHttp__TypesAndValues::HttpMessage::ALT_request)) { - result = encode_request(msg.request(), encoding_buffer); - } else if (msg.ischosen(LibItsHttp__TypesAndValues::HttpMessage::ALT_response)) { - result = encode_response(msg.response(), encoding_buffer); - } else { - loggers::get_instance().warning("http_codec::encode: Unbound HttpMessage"); - return -1; - } - - data = OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data()); - - loggers::get_instance().log_msg("<<< http_codec::encode: data=", data); - return result; -} - -int http_codec::decode (const OCTETSTRING& data, LibItsHttp__TypesAndValues::HttpMessage& msg, params* params) -{ - loggers::get_instance().log_msg(">>> http_codec::decode: data=", data); - - TTCN_EncDec::clear_error(); - TTCN_Buffer decoding_buffer(data); - loggers::get_instance().log_to_hexa("http_codec::decode: decoding_buffer=", decoding_buffer); - - _dc.reset(); - - _params = params; - - // Get the first line (e.g. HTTP/1.1 302 Found or POST / HTTP/1.1) - CHARSTRING message_id; - if (get_line(decoding_buffer, message_id) == -1) { - return -1; - } - loggers::get_instance().log_msg("http_codec::decode: message_id: ", message_id); - - // Extract parameters - try { - std::string str(static_cast(message_id)); - std::regex rgx ("\\s*(\\w+)/"); - std::sregex_iterator begin(str.cbegin(), str.cend(), rgx); - std::smatch m = *begin; - loggers::get_instance().log("http_codec::decode: %d - %s", m.size(), m[0].str().c_str()); - if (m[0].str().compare("HTTP/") == 0) { // HTTP response - LibItsHttp__TypesAndValues::Response response; - std::regex rgx ("\\s*HTTP/(\\d+)\\.(\\d+)\\s+(\\d+)\\s+([\\w\\s\\t\\v\\f]+)*"); - std::sregex_iterator begin(str.cbegin(), str.cend(), rgx); - std::smatch m = *begin; - loggers::get_instance().log("http_codec::decode: Process response: %d", m.size()); - if (m.size() != 5) { - loggers::get_instance().error("http_codec::decode: Unsupported tag"); - return -1; - } - response.version__major() = std::stoi(m[1].str().c_str()); - response.version__minor() = std::stoi(m[2].str().c_str()); - response.statuscode() = std::stoi(m[3].str().c_str()); - response.statustext() = CHARSTRING(m[4].str().c_str()); - LibItsHttp__TypesAndValues::Headers headers; - std::string content_type; - decode_headers(decoding_buffer, headers, content_type); - response.header() = headers; - loggers::get_instance().log_to_hexa("Before decoding Body: ", decoding_buffer); - LibItsHttp__MessageBodyTypes::HttpMessageBody body; - if (decode_body(decoding_buffer, body, content_type) == -1) { - response.body().set_to_omit(); - } else { - response.body() = OPTIONAL(body); - } - msg.response() = response; - } else { // HTTP request - LibItsHttp__TypesAndValues::Request request; - std::regex rgx ("\\s*(\\w+)\\s+(.+)\\s+HTTP/(\\d)\\.(\\d)"); - std::sregex_iterator begin(str.cbegin(), str.cend(), rgx); - std::smatch m = *begin; - if (m.size() != 5) { - loggers::get_instance().error("http_codec::decode: Unsupported tag"); - return -1; - } - request.method() = CHARSTRING(m[1].str().c_str()); - request.uri() = CHARSTRING(m[2].str().c_str()); - request.version__major() = std::stoi(m[3].str().c_str()); - request.version__minor() = std::stoi(m[4].str().c_str()); - LibItsHttp__TypesAndValues::Headers headers; - std::string content_type; - decode_headers(decoding_buffer, headers, content_type); - request.header() = headers; - OPTIONAL body; - body.set_to_omit(); - if (decode_body(decoding_buffer, body, content_type) == -1) { - request.body().set_to_omit(); - } else { - request.body() = body; - } - msg.request() = request; - } - - loggers::get_instance().log_msg("<<< http_codec::decode: ", (const Base_Type&)msg); - return 0; - } - catch(const std::logic_error& e) { - return -1; - } -} - -int http_codec::encode_request(const LibItsHttp__TypesAndValues::Request& p_request, TTCN_Buffer& p_encoding_buffer) -{ - loggers::get_instance().log_msg(">>> http_codec::encode_request: ", (const Base_Type&)p_request); - - // Encode generic part - p_encoding_buffer.put_cs(p_request.method()); - p_encoding_buffer.put_c(' '); - p_encoding_buffer.put_cs(p_request.uri()); - p_encoding_buffer.put_cs(" HTTP/"); - p_encoding_buffer.put_cs(int2str(p_request.version__major())); - p_encoding_buffer.put_c('.'); - p_encoding_buffer.put_cs(int2str(p_request.version__minor())); - p_encoding_buffer.put_cs("\r\n"); - - // Encode headers excepeted the Content-Length - const LibItsHttp__TypesAndValues::Headers& headers = p_request.header(); - std::string content_type; - for (int i = 0; i < headers.size_of(); i++) { - const LibItsHttp__TypesAndValues::Header& header = headers[i]; - loggers::get_instance().log_msg("http_codec::encode_request: Processing header ", header.header__name()); - if (std::string(static_cast(header.header__name())).compare("Content-Length") == 0) { // Skip it, processed later - loggers::get_instance().log("http_codec::encode_request: Skip it"); - continue; - } else { - p_encoding_buffer.put_cs(header.header__name()); - p_encoding_buffer.put_cs(": "); - const OPTIONAL& o = header.header__value(); - if (o.ispresent()) { - const LibItsHttp__TypesAndValues::charstring__list& v = dynamic_cast &>(o); - if (v.size_of() > 0) { - loggers::get_instance().log_msg("http_codec::encode_request: Processing value ", v[0]); - if (std::string(static_cast(header.header__name())).compare("Content-Type") == 0) { // Store it for HTTP body payload encoding - loggers::get_instance().log("http_codec::encode_request: Storing Content-Type"); - int j = 0; - while (j < v.size_of()) { - content_type += v[j++]; - } // End of 'while' statement - } - p_encoding_buffer.put_cs(v[0]); - int j = 1; - while (j < v.size_of()) { - p_encoding_buffer.put_cs(", "); - loggers::get_instance().log_msg("http_codec::encode_request: Processing value ", v[j]); - p_encoding_buffer.put_cs(v[j++]); - } // End of 'while' statement - } - } // else, do not include it - } - p_encoding_buffer.put_cs("\r\n"); - } // End of 'for' statement - - // Encode message body - const OPTIONAL& v = p_request.body(); - OCTETSTRING os; - if (v.ispresent()) { - const LibItsHttp__MessageBodyTypes::HttpMessageBody& body = static_cast(*v.get_opt_value()); - loggers::get_instance().log_msg("http_codec::encode_request: body: ", body); - if (encode_body(body, os, content_type) == -1) { - loggers::get_instance().warning("http_codec::encode_request: Failed to encode HTTP body"); - _ec.length = 0; - _ec.is_content_length_present = 0x00; - } else { - _ec.length = os.lengthof(); - _ec.is_content_length_present = 0x01; - } - loggers::get_instance().log("http_codec::encode_request: length=%d", _ec.length); - } else { - loggers::get_instance().log("http_codec::encode_request: HTTP body field not present"); - _ec.length = 0; - _ec.is_content_length_present = 0x00; - } - - // Encode Content-Length header - p_encoding_buffer.put_cs("Content-Length: "); - if (_ec.length != 0) { - loggers::get_instance().log("http_codec::encode_request: Content-Length: %s", static_cast(int2str(_ec.length + 2/*Stand for the last CRLF*/))); - p_encoding_buffer.put_cs(static_cast(int2str(_ec.length))); - _ec.is_content_length_present = 0x01; - } else { - p_encoding_buffer.put_cs("0"); - _ec.is_content_length_present = 0x00; - } - loggers::get_instance().log("http_codec::encode_request: Content-Length: %d - %x", _ec.length, _ec.is_content_length_present); - p_encoding_buffer.put_cs("\r\n"); - - // Add message body - p_encoding_buffer.put_cs("\r\n"); - if (_ec.is_content_length_present == 0x01) { - loggers::get_instance().log_msg("http_codec::encode_request: Add body ", os); - p_encoding_buffer.put_os(os); - //p_encoding_buffer.put_cs("\r\n"); - } - - loggers::get_instance().log_to_hexa("<<< http_codec::encode_request: ", p_encoding_buffer); - return 0; -} - -int http_codec::encode_response (const LibItsHttp__TypesAndValues::Response& p_response, TTCN_Buffer& p_encoding_buffer) { - loggers::get_instance().log_msg(">>> http_codec::encode_response: ", (const Base_Type&)p_response); - - // Encode generic part - p_encoding_buffer.put_cs("HTTP/"); - p_encoding_buffer.put_cs(int2str(p_response.version__major())); - p_encoding_buffer.put_c('.'); - p_encoding_buffer.put_cs(int2str(p_response.version__minor())); - p_encoding_buffer.put_cs(" "); - p_encoding_buffer.put_cs(int2str(p_response.statuscode())); - p_encoding_buffer.put_cs(" "); - if (p_response.statustext().lengthof() != 0) { - p_encoding_buffer.put_cs(p_response.statustext()); - } - p_encoding_buffer.put_cs("\r\n"); - - // Encode headers excepeted the Content-Length - const LibItsHttp__TypesAndValues::Headers& headers = p_response.header(); - std::string content_type; - for (int i = 0; i < headers.size_of(); i++) { - const LibItsHttp__TypesAndValues::Header& header = headers[i]; - loggers::get_instance().log_msg("http_codec::encode_response: Processing header ", header.header__name()); - p_encoding_buffer.put_cs(header.header__name()); - p_encoding_buffer.put_cs(": "); - if (std::string(static_cast(header.header__name())).compare("Content-Length") == 0) { - continue; - } else { - const OPTIONAL& o = header.header__value(); - if (o.ispresent()) { - const LibItsHttp__TypesAndValues::charstring__list& v = dynamic_cast &>(o); - if (v.size_of() > 0) { - loggers::get_instance().log_msg("http_codec::encode_response: Processing value ", v[0]); - if (std::string(static_cast(header.header__name())).compare("Content-Type") == 0) { // Store it for HTTP body payload encoding - loggers::get_instance().log("http_codec::encode_response: Storing Content-Type"); - int j = 0; - while (j < v.size_of()) { - content_type += v[j++]; - } // End of 'while' statement - } - p_encoding_buffer.put_cs(v[0]); - int j = 1; - while (j < v.size_of()) { - p_encoding_buffer.put_cs(", "); - loggers::get_instance().log_msg("http_codec::encode_response: Processing value ", v[j]); - p_encoding_buffer.put_cs(v[j++]); - j += 1; - } // End of 'while' statement - } - } // else, do not include it - } - p_encoding_buffer.put_cs("\r\n"); - } // End of 'for' statement - - // Encode message body - const OPTIONAL& v = p_response.body(); - OCTETSTRING os; - if (v.ispresent()) { - const LibItsHttp__MessageBodyTypes::HttpMessageBody& body = static_cast(*v.get_opt_value()); - loggers::get_instance().log_msg("http_codec::encode_response: body: ", body); - if (encode_body(body, os, content_type) == -1) { - _ec.length = 0; - _ec.is_content_length_present = 0x00; - } else { - _ec.length = os.lengthof(); - _ec.is_content_length_present = 0x01; - } - loggers::get_instance().log("http_codec::encode_response: length=%d", _ec.length); - } else { - loggers::get_instance().log("http_codec::encode_response: HTTP body field not present"); - _ec.length = 0; - _ec.is_content_length_present = 0x00; - } - - // Encode Content-Length header - p_encoding_buffer.put_cs("Content-Length: "); - if (_ec.length != 0) { - loggers::get_instance().log("http_codec::encode_request: Content-Length: %s", static_cast(int2str(_ec.length + 2/*Stand for the last CRLF*/))); - p_encoding_buffer.put_cs(static_cast(int2str(_ec.length))); - _ec.is_content_length_present = 0x01; - } else { - p_encoding_buffer.put_cs("0"); - _ec.is_content_length_present = 0x00; - } - loggers::get_instance().log("http_codec::encode_request: Content-Length: %d - %x", _ec.length, _ec.is_content_length_present); - p_encoding_buffer.put_cs("\r\n"); - - // Add message body - p_encoding_buffer.put_cs("\r\n"); - if (_ec.is_content_length_present == 0x01) { - loggers::get_instance().log_msg("http_codec::encode_request: Add body ", os); - p_encoding_buffer.put_os(os); - // p_encoding_buffer.put_cs("\r\n"); - } - - loggers::get_instance().log_to_hexa("<<< http_codec::encode_response: ", p_encoding_buffer); - return 0; -} - -int http_codec::decode_headers(TTCN_Buffer& decoding_buffer, LibItsHttp__TypesAndValues::Headers& headers, std::string& p_content_type) { - loggers::get_instance().log(">>> http_codec::decode_headers"); - loggers::get_instance().log_to_hexa("http_codec::decode_headers", decoding_buffer); - - CHARSTRING cstr; - int i = 0; - while (true) { - switch(get_line(decoding_buffer, cstr, true)) { - case 0: { - loggers::get_instance().log_msg("http_codec::decode_headers: ", cstr); - LibItsHttp__TypesAndValues::Header header; - if (decode_header(cstr, header) == -1) { - loggers::get_instance().warning("http_codec::decode_headers: Failed to decode header %s", static_cast(cstr)); - return -1; - } - headers[i++] = header; - if (std::string(static_cast(header.header__name())).compare("Content-Type") == 0) { - if (header.header__value().is_present() != 0) { - const PreGenRecordOf::PREGEN__RECORD__OF__CHARSTRING& l = static_cast(*header.header__value().get_opt_value()); - p_content_type = static_cast(l[0]); - } else { - p_content_type = ""; - } - } - } - break; - case 1: - loggers::get_instance().log_msg("<<< http_codec::decode_headers: ", headers); - return 0; - case -1: - loggers::get_instance().warning("http_codec::decode_headers: Failed to decode headers"); - return -1; - } // End of 'switch' statement - } // End of 'while' statement -} - -int http_codec::decode_header(CHARSTRING& header_line, LibItsHttp__TypesAndValues::Header& header) { - loggers::get_instance().log_msg(">>> http_codec::decode_header", header_line); - - try { - std::string str(static_cast(header_line)); - std::regex rgx ("([0-9a-zA-Z-]+)\\:\\s+(.+)(,(.+))*"); - std::sregex_iterator begin(str.cbegin(), str.cend(), rgx); - std::smatch m = *begin; - if (m.size() < 5) { - loggers::get_instance().warning("http_codec::decode_header: Failed to decode header %s", str.c_str()); - return -1; - } - loggers::get_instance().log("http_codec::decode_header: %d", m.size()); - header.header__name() = CHARSTRING(m[1].str().c_str()); - LibItsHttp__TypesAndValues::charstring__list v; - for (unsigned int j = 0; j < m.size(); j++) { - if (m[j + 2].str().length() == 0) { - break; - } - v[j] = CHARSTRING(m[j + 2].str().c_str()); - } // End of 'for' statement - header.header__value() = OPTIONAL(v); - - if (m[1].str().compare("Content-Length") == 0) { - // Save the the body length - loggers::get_instance().log("http_codec::decode_header: decoded Content-Length %s", m[2].str().c_str()); - _dc.length = std::stoi(m[2].str()); - } else if (m[1].str().compare("Transfer-Encoding") == 0) { - if (m[2].str().find("chunked") != std::string::npos) { - _dc.chunked = true; - loggers::get_instance().log("http_codec::decode_header: decoded Transfer-Encoding %x", _dc.chunked); - } - } - - return 0; - } - catch(const std::logic_error& e) { - return -1; - } -} - -int http_codec::encode_body(const LibItsHttp__MessageBodyTypes::HttpMessageBody& p_message_body, OCTETSTRING& p_encoding_buffer, const std::string& p_content_type) { - loggers::get_instance().log_msg(">>> http_codec::encode_body: ", (const Base_Type&)p_message_body); - - // Sanity check - if (p_content_type.empty()) { - loggers::get_instance().warning("http_codec::encode_body: Failed to select a codec for HTTP body payload"); - return -1; - } - - if (p_message_body.ischosen(LibItsHttp__MessageBodyTypes::HttpMessageBody::ALT_binary__body)) { - const LibItsHttp__BinaryMessageBodyTypes::BinaryBody& binary_body = p_message_body.binary__body(); - if (binary_body.ischosen(LibItsHttp__BinaryMessageBodyTypes::BinaryBody::ALT_raw)) { - p_encoding_buffer = OCTETSTRING(binary_body.raw().lengthof(), (unsigned char*)static_cast(binary_body.raw())); - } else { - std::map > >::const_iterator it; - bool processed = false; - if (p_content_type.find("x-its") != std::string::npos) { - loggers::get_instance().log("http_codec::encode_body: Find x-its"); - it = _codecs.find("http_its"); // TODO Use params - if (it != _codecs.cend()) { - loggers::get_instance().log("http_codec::encode_body: Call '%s'", it->first.c_str()); - //_codecs["http_its"]->encode((Record_Type&)binary_body.ieee1609dot2__data(), p_encoding_buffer); // TODO Use params - processed = true; - } - } // TODO Add new HTTP message codec here - if (!processed) { - loggers::get_instance().warning("http_codec::encode_body: Unsupported HTTP codec, use raw field as default"); - p_encoding_buffer = OCTETSTRING(0, nullptr); - } - } - } else if (p_message_body.ischosen(LibItsHttp__MessageBodyTypes::HttpMessageBody::ALT_html__body)) { - p_encoding_buffer = OCTETSTRING(p_message_body.html__body().lengthof(), (unsigned char*)static_cast(p_message_body.html__body())); - } else if (p_message_body.ischosen(LibItsHttp__MessageBodyTypes::HttpMessageBody::ALT_text__body)) { - p_encoding_buffer = OCTETSTRING(p_message_body.text__body().lengthof(), (unsigned char*)static_cast(p_message_body.text__body())); - } else if (p_message_body.ischosen(LibItsHttp__MessageBodyTypes::HttpMessageBody::ALT_xml__body)) { - const LibItsHttp__XmlMessageBodyTypes::XmlBody& xml_body = p_message_body.xml__body(); - if (xml_body.ischosen(LibItsHttp__XmlMessageBodyTypes::XmlBody::ALT_raw)) { - p_encoding_buffer = OCTETSTRING(xml_body.raw().lengthof(), (unsigned char*)static_cast(xml_body.raw())); - } else { - std::map > >::const_iterator it; - bool processed = false; - loggers::get_instance().log("http_codec::encode_body: Content-Type:'%s'", p_content_type.c_str()); - if (p_content_type.find("held") != std::string::npos) { - it = _codecs.find("held"); // TODO Use params - if (it != _codecs.cend()) { - loggers::get_instance().log("http_codec::encode_body: Call 'held_codec'"); - _codecs["held"]->encode((Record_Type&)xml_body, p_encoding_buffer); // TODO Use params - processed = true; - } - } else if (p_content_type.find("lost") != std::string::npos) { - it = _codecs.find("lost"); // TODO Use params - if (it != _codecs.cend()) { - loggers::get_instance().log("http_codec::encode_body: Call 'lost_codec'"); - _codecs["lost"]->encode((Record_Type&)xml_body, p_encoding_buffer); // TODO Use params - processed = true; - } - } // TODO Add new HTTP message codec here - if (!processed) { - loggers::get_instance().warning("http_codec::encode_body: Unsupported HTTP codec, use raw field as default"); - p_encoding_buffer = OCTETSTRING(0, nullptr); - } - } - } else if (p_message_body.ischosen(LibItsHttp__MessageBodyTypes::HttpMessageBody::ALT_json__body)) { - const LibItsHttp__JsonMessageBodyTypes::JsonBody& json_body = p_message_body.json__body(); - if (json_body.ischosen(LibItsHttp__JsonMessageBodyTypes::JsonBody::ALT_raw)) { - p_encoding_buffer = unichar2oct(json_body.raw()); - } else { - std::map > >::const_iterator it; - bool processed = false; - loggers::get_instance().log("http_codec::encode_body: Content-Type:'%s'", p_content_type.c_str()); - if (p_content_type.find("json") != std::string::npos) { - it = _codecs.find("json"); // TODO Use params - if (it != _codecs.cend()) { - loggers::get_instance().log("http_codec::encode_body: Call 'json_codec'"); - _codecs["json"]->encode((Record_Type&)json_body, p_encoding_buffer); // TODO Use params - processed = true; - } - } // TODO Add new HTTP message codec here - if (!processed) { - loggers::get_instance().warning("http_codec::encode_body: Unsupported HTTP codec, use raw field as default"); - p_encoding_buffer = OCTETSTRING(0, nullptr); - } - } - } else { - loggers::get_instance().warning("http_codec::encode_body: Failed to encode HTTP message body"); - return -1; - } - loggers::get_instance().log_msg("http_codec::encode_body: HTTP message ", p_encoding_buffer); - _ec.length = p_encoding_buffer.lengthof(); - loggers::get_instance().log("http_codec::encode_body: HTTP message length: %d", _ec.length); - - return 0; -} - -int http_codec::decode_body(TTCN_Buffer& decoding_buffer, LibItsHttp__MessageBodyTypes::HttpMessageBody& message_body, const std::string& p_content_type) { - loggers::get_instance().log(">>> http_codec::decode_body"); - loggers::get_instance().log_to_hexa("http_codec::decode_body", decoding_buffer); - loggers::get_instance().log("http_codec::decode_body: # of codecs=%d - %p", _codecs.size(), this); - loggers::get_instance().log("http_codec::decode_body: Content-Type=%s", p_content_type.c_str()); - - // Sanity checks - if (decoding_buffer.get_len() - decoding_buffer.get_pos() <= 0) { - return -1; - } - /* TODO Uncomment if (p_content_type.empty()) { - loggers::get_instance().warning("http_codec::encode_body: Failed to select a codec for HTTP body payload"); - return -1; - }*/ - - OCTETSTRING s(decoding_buffer.get_len() - decoding_buffer.get_pos(), decoding_buffer.get_data() + decoding_buffer.get_pos()); - loggers::get_instance().log_msg("http_codec::decode_body: raw body=", s); - - // Align the payload length with the specified Content-Lenght value - loggers::get_instance().log("http_codec::decode_body: _dc.length=%d - body length=%d", _dc.length, s.lengthof()); - OCTETSTRING body; - if (_dc.length != 0) { - const unsigned char* p = static_cast(s); - if ((unsigned int)s.lengthof() <= _dc.length) { - body = OCTETSTRING(s.lengthof(), p); - } else { - body = OCTETSTRING(_dc.length, p); - } - } else { - loggers::get_instance().warning("http_codec::decode_body: No Conten-Length header, process all remaining bytes"); - body = s; - } - loggers::get_instance().log_msg("http_codec::decode_body: Aligned body=", body); - loggers::get_instance().log("http_codec::decode_body: body length=%d", body.lengthof()); - // Remove CRLF if any - int counter = 0; - if ((body[body.lengthof() - 1].get_octet() == 0x0d) || (body[body.lengthof() - 1].get_octet() == 0x0a)) { - counter += 1; - if ((body[body.lengthof() - 2].get_octet() == 0x0d) || (body[body.lengthof() - 2].get_octet() == 0x0a)) { - counter += 1; - } - } - loggers::get_instance().log("http_codec::decode_body: counter=%d", counter); - body = OCTETSTRING(body.lengthof() - counter, static_cast(body)); - if (_dc.chunked) { - int counter = 0; - int prev = 0; - OCTETSTRING os(0, nullptr); - do { - while (counter < body.lengthof()) { // Extract the size of the chunk \r[\n] - if ((body[counter].get_octet() == '\r') || (body[counter].get_octet() == '\n')) { - break; - } - counter += 1; - } // End of 'while' statement - loggers::get_instance().log("http_codec::decode_body: Chunked(0): prev = %d, counter=%d / %d", prev, counter, body.lengthof()); - if (counter < body.lengthof()) { - int idx = counter - prev; - OCTETSTRING trunk(idx, static_cast(body)); - loggers::get_instance().log_msg("http_codec::decode_body: trunk: ", trunk); - std::string str((const char*)static_cast(trunk), idx); - 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 - if (counter < body.lengthof()) { - loggers::get_instance().log("http_codec::decode_body: Chunked (1): prev = %d, counter=%d / %d", prev, counter, body.lengthof()); - os += OCTETSTRING(len, counter + static_cast(body)); - loggers::get_instance().log_msg("http_codec::decode_body: os=", os); - counter += len; - //loggers::get_instance().log("http_codec::decode_body: Chunked: %02x %02x %02x", body[counter].get_octet(), body[counter + 1].get_octet(), body[counter + 2].get_octet()); - loggers::get_instance().log("http_codec::decode_body: Chunked (2): prev = %d, counter=%d / %d", prev, counter, body.lengthof()); - while (counter < body.lengthof() && ((body[counter].get_octet() == '\r') || (body[counter].get_octet() == '\n'))) { // Skip additional \n - counter += 1; - } // End of 'while' statement - prev = counter; - loggers::get_instance().log("http_codec::decode_body: Chunked (3): prev = %d, counter=%d / %d", prev, counter, body.lengthof()); - } - } - } while (counter < body.lengthof()); // Process next chunk if any - body = os; - loggers::get_instance().log_msg("http_codec::decode_body: Finalised body=", body); - } - // Check if HTTP message body contains binary characters - for (int i = 0; i < body.lengthof(); i++) { - unsigned char c = body[i].get_octet(); - if (!std::isprint(c) && !std::isspace(c) && !std::ispunct(c)) { - loggers::get_instance().log("http_codec::decode_body: Byte #%d is not printable: 0x%02x", i, body[i].get_octet()); - _dc.is_binary = 0x01; - break; - } - } // End of 'for' statement - loggers::get_instance().log("http_codec::decode_body: Binary mode: %x", _dc.is_binary); - LibItsHttp__MessageBodyTypes::HttpMessageBody v; - if (_dc.is_binary == 0x01) { - LibItsHttp__BinaryMessageBodyTypes::BinaryBody binary_body; - std::map > >::const_iterator it; - bool processed = false; - // TODO To be refined adding a string identifier to check which codec to use. E.g. held_code.id() returns "xmlns=\"urn:ietf:params:xml:ns:geopriv:held\">" - if (p_content_type.find("x-its") != std::string::npos) { - loggers::get_instance().log("http_codec::decode_body: Find 'x-its'"); - it = _codecs.cbegin();//_codecs.find("http_its"); - if (it != _codecs.cend()) { - /*** - FIXME: - This code generate a codedump, I don't undertsand the reason. - The same code works file for Ng112 HELD & LOST codec. Ununderstandable!!!! - ==> Use a patch - if (_codecs["http_its"].get() != nullptr) { - loggers::get_instance().log("http_codec::decode_body: Call 'http_etsi_ieee1609dot2_codec'"); - if (_codecs["http_its"]->decode(body, (Record_Type&)binary_body) == 0) { - processed = true; - } - }*/ - loggers::get_instance().log("http_codec::decode_body: Call '%s'", it->first.c_str()); - /*http_etsi_ieee1609dot2_codec* codec = new http_etsi_ieee1609dot2_codec(); - if (codec->decode(body, binary_body.ieee1609dot2__data()) == 0) { - message_body.binary__body() = binary_body; - processed = true; - } - delete codec;*/ - } - } // TODO Add new HTTP message codec here - if (!processed) { - loggers::get_instance().warning("http_codec::decode_body: Unsupported HTTP codec, use raw field as default"); - binary_body.raw() = body; - message_body.binary__body() = binary_body; - } - } else { - // Convert into string - params p; - p["decode_str"] = std::string(static_cast(body), body.lengthof() + static_cast(body)); - loggers::get_instance().log("http_codec::decode_body: decode_str: %s", p["decode_str"].c_str()); - // Try to identify xml - if (p["decode_str"].find("" - if ( - (p["decode_str"].find("=\"urn:ietf:params:xml:ns:geopriv:held\"") != std::string::npos) || - (p["decode_str"].find("=\"urn:ietf:params:xml:ns:pidf\"") != std::string::npos) - ) { - loggers::get_instance().log("http_codec::decode_body: Find 'urn:ietf:params:xml:ns:geopriv:held'"); - if (_codecs["held"].get() != nullptr) { - loggers::get_instance().log("http_codec::decode_body: Call 'held_codec'"); - if (_codecs["held"]->decode(body, (Record_Type&)xml_body, &p) == -1) { - loggers::get_instance().warning("http_codec::decode_body: Failed to decode HELD message"); - xml_body.raw() = CHARSTRING(body.lengthof(), (char*)static_cast(body)); - } else { - loggers::get_instance().log_msg("http_codec::decode_body: Decoded message:", xml_body); - message_body.xml__body() = xml_body; - } - } else { - loggers::get_instance().warning("http_codec::decode_body: No codec for HELD"); - xml_body.raw() = CHARSTRING(body.lengthof(), (char*)static_cast(body)); - } - message_body.xml__body() = xml_body; - } else if (p["decode_str"].find("=\"urn:ietf:params:xml:ns:lost1\"") != std::string::npos) { - loggers::get_instance().log("http_codec::decode_body: Find 'urn:ietf:params:xml:ns:lost1'"); - if (_codecs["lost"].get() != nullptr) { - loggers::get_instance().log("http_codec::decode_body: Call 'lost_codec'"); - if (_codecs["lost"]->decode(body, (Record_Type&)xml_body, &p) == -1) { - loggers::get_instance().warning("http_codec::decode_body: Failed to decode LOST message"); - xml_body.raw() = CHARSTRING(body.lengthof(), (char*)static_cast(body)); - } else { - loggers::get_instance().log_msg("http_codec::decode_body: Decoded message:", xml_body); - message_body.xml__body() = xml_body; - } - } else { - loggers::get_instance().warning("http_codec::decode_body: No codec for LOST"); - xml_body.raw() = CHARSTRING(body.lengthof(), (char*)static_cast(body)); - } - message_body.xml__body() = xml_body; - } else { - loggers::get_instance().warning("http_codec::decode_body: No XML codec found"); - xml_body.raw() = CHARSTRING(body.lengthof(), (char*)static_cast(body)); - message_body.xml__body() = xml_body; - } - } else if (p_content_type.find("json") != std::string::npos) { // Try to identify JSON - loggers::get_instance().log("http_codec::decode_body: Find json message"); - LibItsHttp__JsonMessageBodyTypes::JsonBody json_body; - if (_codecs["json"].get() != nullptr) { - loggers::get_instance().log("http_codec::decode_body: Call 'json_codec'"); - if (_codecs["json"]->decode(body, (Record_Type&)json_body, &p) == -1) { - loggers::get_instance().warning("http_codec::decode_body: Failed to decode JSON message"); - json_body.raw() = CHARSTRING(body.lengthof(), (char*)static_cast(body)); - } else { - loggers::get_instance().log_msg("http_codec::decode_body: Decoded message:", json_body); - message_body.json__body() = json_body; - } - } else { - loggers::get_instance().warning("http_codec::decode_body: No JSON codec found"); - json_body.raw() = CHARSTRING(body.lengthof(), (char*)static_cast(body)); - message_body.json__body() = json_body; - } - } else if (p["decode_str"].find("") != std::string::npos) { // Try to identify HTML - loggers::get_instance().log("http_codec::decode_body: Find html message"); - LibItsHttp__MessageBodyTypes::HtmlBody html_body; - message_body.html__body() = CHARSTRING(body.lengthof(), (char*)static_cast(body)); - } else { - loggers::get_instance().log("http_codec::decode_body: Use textBdy as default"); - LibItsHttp__MessageBodyTypes::TextBody text_body; - message_body.text__body() = CHARSTRING(body.lengthof(), (char*)static_cast(body)); - } - } - - return 0; -} - -int http_codec::get_line(TTCN_Buffer& buffer, CHARSTRING& to, const bool concatenate_header_lines) { - unsigned int i = 0; - const unsigned char *cc_to = buffer.get_read_data(); - - // Sanity checks - if(buffer.get_read_len() == 0) { - return -1; - } - - while (true) { - // Skip spaces, and empty lines - for( ; i < buffer.get_read_len() && cc_to[i] != '\0' && cc_to[i] != '\r' && cc_to[i] != '\n'; i++); - if(i >= buffer.get_read_len()) { // No more characters to process - to = CHARSTRING(""); - return -1; - } else if(cc_to[i] == '\n') { // New line found, we don't care is '\r' is missing - if ((i > 0) && ((i + 1) < buffer.get_read_len()) && concatenate_header_lines && ((cc_to[i + 1] == ' ') || (cc_to[i + 1] == '\t'))) { - i += 1; // Skip it - } else { - to = CHARSTRING(i, (const char*)cc_to); - buffer.set_pos(buffer.get_pos() + i + 1); - return i == 0 ? 1 : 0; - } - } else { - if ((i + 1) < buffer.get_read_len() && cc_to[i + 1] != '\n') { - return -1; - } else if(i > 0 && (i + 2) < buffer.get_read_len() && concatenate_header_lines && (cc_to[i+2] == ' ' || cc_to[i+2] == '\t')) { - i += 2; - } else { - to = CHARSTRING(i, (const char*)cc_to); - buffer.set_pos(buffer.get_pos() + i + 2); - return i == 0 ? 1 : 0; - } - } - } // End of 'while' statement -} - -void http_codec::set_payload_codecs(const std::string& p_codecs) { - loggers::get_instance().log(">>> http_codec::set_payload_codecs: %s", p_codecs.c_str()); - - // Sanity check - if (p_codecs.length() == 0) { - return; - } - - // Extract codecs - try { - std::regex rgx("(\\w+):(\\w+)(;(\\w+):(\\w+))*"); - std::sregex_iterator begin(p_codecs.cbegin(), p_codecs.cend(), rgx); - std::sregex_iterator end = std::sregex_iterator(); - // E.g. 9 - xml - :held_codec - held_codec - ;html:html_codec - html:html_codec - html - :html_codec - html_codec - for (std::sregex_iterator it = begin; it != end; ++it) { - std::smatch m = *it; - loggers::get_instance().log("http_codec::set_payload_codecs: %d - %s - %s - %s - %s - %s - %s - %s - %s", m.size(), m[1].str().c_str(), m[2].str().c_str(), m[3].str().c_str(), m[4].str().c_str(), m[5].str().c_str(), m[6].str().c_str(), m[7].str().c_str(), m[8].str().c_str()); - for (unsigned int j = 1; j < m.size() - 1; j += 3) { // Exclude m[0] - loggers::get_instance().log("http_codec::set_payload_codecs: insert (%s, %s), j = %d", m[j].str().c_str(), m[j + 1].str().c_str(), j); - if (m[j].str().empty()) { - break; - } - std::string key(m[j].str()); - _codecs.insert(std::make_pair(key, std::unique_ptr >(codec_stack_builder::get_instance()->get_codec(m[j + 1].str().c_str())))); - } // End of 'for' statement - } // End of 'for' statement - loggers::get_instance().log("http_codec::set_payload_codecs: _codecs length=%d - %p", _codecs.size(), this); - } - catch(const std::logic_error& e){ - loggers::get_instance().warning("http_codec::set_payload_codecs: std::logic_error: %s", e.what()); - _codecs.clear(); - } -} diff --git a/ccsrc/Protocols/Http/http_codec.hh b/ccsrc/Protocols/Http/http_codec.hh deleted file mode 100644 index 5115c53..0000000 --- a/ccsrc/Protocols/Http/http_codec.hh +++ /dev/null @@ -1,67 +0,0 @@ -#pragma once - -#include - -#include "codec.hh" -#include "params.hh" - -class Base_Type; -class Record_Type; -class TTCN_Typedescriptor_t; -class TTCN_Buffer; - -namespace LibItsHttp__TypesAndValues { - class HttpMessage; - class Request; - class Response; - class Headers; - class Header; -} -namespace LibItsHttp__MessageBodyTypes { - class HttpMessageBody; -} - -struct encoding_context { - unsigned int length; - unsigned char is_content_length_present; - - encoding_context() { reset(); }; - void reset() { length = -1; is_content_length_present = 0x00; }; -}; - -struct decoding_context { - unsigned int length; - unsigned char is_binary; - bool chunked; - - decoding_context() { reset(); }; - void reset() { length = -1; is_binary = 0x00; chunked = false; }; -}; - -class http_codec: public codec < -LibItsHttp__TypesAndValues::HttpMessage, -LibItsHttp__TypesAndValues::HttpMessage> -{ - encoding_context _ec; - decoding_context _dc; - std::map > > _codecs; -public: - explicit http_codec() : codec(), _ec(), _dc(), _codecs() { }; - virtual ~http_codec() { }; - - virtual int encode (const LibItsHttp__TypesAndValues::HttpMessage&, OCTETSTRING& data); - virtual int decode (const OCTETSTRING& data, LibItsHttp__TypesAndValues::HttpMessage&, params* params = NULL); - - void set_payload_codecs(const std::string& p_codecs); - -private: - int encode_request (const LibItsHttp__TypesAndValues::Request& p_request, TTCN_Buffer& p_encoding_buffer); - int encode_response (const LibItsHttp__TypesAndValues::Response& p_response, TTCN_Buffer& p_encoding_buffer); - int encode_body(const LibItsHttp__MessageBodyTypes::HttpMessageBody& p_message_body, OCTETSTRING& p_encoding_buffer, const std::string& p_content_type); - - int decode_headers(TTCN_Buffer& decoding_buffer, LibItsHttp__TypesAndValues::Headers& headers, std::string& p_content_type); - int decode_header(CHARSTRING& header_line, LibItsHttp__TypesAndValues::Header& header); - int decode_body(TTCN_Buffer& decoding_buffer, LibItsHttp__MessageBodyTypes::HttpMessageBody& message_body, const std::string& p_content_type); - int get_line(TTCN_Buffer& buffer, CHARSTRING& to, const bool concatenate_header_lines = false); - -}; // End of class http_codec diff --git a/ccsrc/Protocols/Http/http_codec_mec.cc b/ccsrc/Protocols/Http/http_codec_mec.cc new file mode 100644 index 0000000..f6df151 --- /dev/null +++ b/ccsrc/Protocols/Http/http_codec_mec.cc @@ -0,0 +1,41 @@ +#include "http_codec_mec.hh" + +#include "loggers.hh" + +bool http_codec_mec::encode_body_json(const LibHttp__JsonMessageBodyTypes::JsonBody &p_json_body, OCTETSTRING &p_encoding_buffer, const std::string &p_content_type) { + loggers::get_instance().log(">>> http_codec_mec::encode_body_json"); + + std::map > >::const_iterator it; + bool processed = false; + loggers::get_instance().log("http_codec_mec::encode_body_json: Content-Type:'%s'", p_content_type.c_str()); + if (p_content_type.find("json") != std::string::npos) { + it = _codecs.find("json"); // TODO Use params + if (it != _codecs.cend()) { + loggers::get_instance().log("http_codec_mec::encode_body_json: Call 'json_codec'"); + _codecs["json"]->encode((Record_Type&)p_json_body, p_encoding_buffer); // TODO Use params + processed = true; + } + } // TODO Add new HTTP message codec here + if (!processed) { + loggers::get_instance().warning("http_codec_mec::encode_body_json: Unsupported HTTP codec, use raw field as default"); + p_encoding_buffer = OCTETSTRING(0, nullptr); + } + + return true; +} + +bool http_codec_mec::decode_body_json(const OCTETSTRING &p_data, LibHttp__JsonMessageBodyTypes::JsonBody &p_json_body, const std::string &p_content_type, params* p_params) { + loggers::get_instance().log(">>> http_codec_mec::decode_body_json"); + + if (_codecs["json"].get() != nullptr) { + loggers::get_instance().log("http_codec::decode_body: Call 'json_codec'"); + if (_codecs["json"]->decode(p_data, (Record_Type&)p_json_body, p_params) == -1) { + loggers::get_instance().warning("http_codec::decode_body: Failed to decode JSON message"); + p_json_body.raw() = CHARSTRING(p_data.lengthof(), (char*)static_cast(p_data)); + } else { + loggers::get_instance().log_msg("http_codec::decode_body: Decoded message:", p_json_body); + } + } + + return true; +} diff --git a/ccsrc/Protocols/Http/http_codec_mec.hh b/ccsrc/Protocols/Http/http_codec_mec.hh new file mode 100644 index 0000000..dd0f783 --- /dev/null +++ b/ccsrc/Protocols/Http/http_codec_mec.hh @@ -0,0 +1,16 @@ +#pragma once + +#include "http_codec.hh" + +#include "LibHttp_MessageBodyTypes.hh" + +class http_codec_mec : public http_codec { + +public: + explicit http_codec_mec() : http_codec(){}; + virtual ~http_codec_mec(){}; + +protected: //! \protectedsection + bool encode_body_json(const LibHttp__JsonMessageBodyTypes::JsonBody &p_json_body, OCTETSTRING &p_encoding_buffer, const std::string &p_content_type); + bool decode_body_json(const OCTETSTRING &p_data, LibHttp__JsonMessageBodyTypes::JsonBody &p_json_body, const std::string &p_content_type, params* p_params); +}; \ No newline at end of file diff --git a/ccsrc/Protocols/Http/http_layer.cc b/ccsrc/Protocols/Http/http_layer.cc deleted file mode 100644 index 33c8351..0000000 --- a/ccsrc/Protocols/Http/http_layer.cc +++ /dev/null @@ -1,154 +0,0 @@ -#include "LibItsHttp_TypesAndValues.hh" - -#include "http_layer_factory.hh" -#include "codec_stack_builder.hh" - -#include "loggers.hh" - -#include "converter.hh" - -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}, _stream_buffer(0, NULL) -{ - loggers::get_instance().log(">>> http_layer::http_layer: %s, %s", to_string().c_str(), param.c_str()); - // Setup parameters - params::convert(_params, param); - - params::const_iterator it = _params.find(params::codecs); - if (it != _params.cend()) { - _codec.set_payload_codecs(it->second); - } - it = _params.find(params::device_mode); - if (it != _params.cend()) { - _device_mode = (1 == converter::get_instance().string_to_int(it->second)); - } - it = _params.find(params::method); - if (it == _params.cend()) { - _params[params::method] = "POST"; - } - it = _params.find(params::uri); - if (it == _params.cend()) { - _params[params::uri] = "/"; - } - it = _params.find(params::host); - if (it == _params.cend()) { - _params[params::host] = "127.0.0.1"; - } - it = _params.find(params::content_type); - if (it == _params.cend()) { - _params[params::content_type] = "application/text"; - } -} - -void http_layer::sendMsg(const LibItsHttp__TypesAndValues::HttpMessage& p_http_message, params& p_param) { - loggers::get_instance().log_msg(">>> http_layer::sendMsg: ", p_http_message); - - // Encode HttpMessage - OCTETSTRING data; - _codec.encode(p_http_message, data); - send_data(data, _params); -} - -void http_layer::send_data(OCTETSTRING& data, params& params) { - loggers::get_instance().log_msg(">>> http_layer::send_data: ", data); - - if (_device_mode) { // Need to build an HTTP packet - loggers::get_instance().log("http_layer::send_data: Build http layer"); - TTCN_Buffer buffer; - buffer.put_cs(_params[params::method].c_str()); - buffer.put_c(' '); - buffer.put_cs(_params[params::uri].c_str()); - buffer.put_cs(" HTTP/1.1\r\n"); - buffer.put_cs("Host: "); - buffer.put_cs(_params[params::host].c_str()); - buffer.put_cs("\r\n"); - buffer.put_cs("Content-type: "); - buffer.put_cs(_params[params::content_type].c_str()); - buffer.put_cs("\r\n"); - buffer.put_cs("Content-length: "); - buffer.put_cs(static_cast(int2str(data.lengthof() + 2/*Stand for the last CRLF*/))); - buffer.put_cs("\r\n\r\n"); - buffer.put_os(data); - buffer.put_cs("\r\n"); - data = OCTETSTRING(buffer.get_len(), buffer.get_data()); - } - - loggers::get_instance().log_msg("http_layer::send_data: ", data); - send_to_all_layers(data, 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 (!_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; - if (http_message.ischosen(LibItsHttp__TypesAndValues::HttpMessage::ALT_response)) { - if (http_message.response().body().ispresent()) { - LibItsHttp__MessageBodyTypes::HttpMessageBody& body = static_cast(*http_message.response().body().get_opt_value()); - if (body.ischosen(LibItsHttp__MessageBodyTypes::HttpMessageBody::ALT_binary__body)) { - LibItsHttp__BinaryMessageBodyTypes::BinaryBody& binary = body.binary__body(); - if (binary.ischosen(LibItsHttp__BinaryMessageBodyTypes::BinaryBody::ALT_raw)) { - os = binary.raw(); - } else { - loggers::get_instance().warning("http_layer::receive_data: A raw binary payload is expected"); - } - } else if (body.ischosen(LibItsHttp__MessageBodyTypes::HttpMessageBody::ALT_html__body)){ - // TODO To be done - loggers::get_instance().warning("http_layer::receive_data: Not implemented yet"); - } else if (body.ischosen(LibItsHttp__MessageBodyTypes::HttpMessageBody::ALT_xml__body)){ - // TODO To be done - loggers::get_instance().warning("http_layer::receive_data: Not implemented yet"); - } else if (body.ischosen(LibItsHttp__MessageBodyTypes::HttpMessageBody::ALT_text__body)){ - // TODO To be done - loggers::get_instance().warning("http_layer::receive_data: Not implemented yet"); - } - receive_to_all_layers(os, params); - } else { - loggers::get_instance().warning("http_layer::receive_data: No body present"); - } - } else { - 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); - } -} - -http_layer_factory http_layer_factory::_f; - diff --git a/ccsrc/Protocols/Http/http_layer.hh b/ccsrc/Protocols/Http/http_layer.hh deleted file mode 100644 index d22dfea..0000000 --- a/ccsrc/Protocols/Http/http_layer.hh +++ /dev/null @@ -1,84 +0,0 @@ -/*! - * \file http_layer.hh - * \brief Header file for ITS HTTP protocol layer. - * \author ETSI STF549 - * \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. - * \version 0.1 - */ -#pragma once - -#include - -#include "t_layer.hh" - -#include "http_codec.hh" - -namespace LibItsHttp__TestSystem { - class HttpPort; -} - -namespace LibItsHttp__TypesAndValues { - class HttpMessage; //! Forward declaration of TITAN class -} - -class OCTETSTRING; //! Forward declaration of TITAN class - -/*! - * \class http_layer - * \brief This class provides a factory class to create an tcp_layer class instance - */ -class http_layer : public t_layer { - params _params; - http_codec _codec; - bool _device_mode; - OCTETSTRING _stream_buffer; - -public: //! \publicsection - /*! - * \brief Specialised constructor - * Create a new instance of the http_layer class - * \param[in] p_type \todo - * \param[in] p_param \todo - */ - http_layer() : t_layer(), _params(), _device_mode{false} { }; - /*! - * \brief Specialised constructor - * Create a new instance of the http_layer class - * \param[in] p_type \todo - * \param[in] p_param \todo - */ - http_layer(const std::string& p_type, const std::string& p_param); - /*! - * \brief Default destructor - */ - virtual ~http_layer() { }; - - /*! - * \fn void sendMsg(const LibItsHttp__TypesAndValues::HttpMessage& p_http_message, params& p_param); - * \brief Send HTTP message to the lower layers - * \param[in] p_http_message The GeoNetworking message to be sent - * \param[in] p_params Some parameters to overwrite default value of the lower layers parameters - */ - void sendMsg(const LibItsHttp__TypesAndValues::HttpMessage& p_http_message, params& p_param); - - /*! - * \virtual - * \fn void send_data(OCTETSTRING& data, params& params); - * \brief Send bytes formated data to the lower layers - * \param[in] p_data The data to be sent - * \param[in] p_params Some parameters to overwrite default value of the lower layers parameters - */ - virtual void send_data(OCTETSTRING& data, params& params); - /*! - * \virtual - * \fn void receive_data(OCTETSTRING& data, params& params); - * \brief Receive bytes formated data from the lower layers - * \param[in] p_data The bytes formated data received - * \param[in] p_params Some lower layers parameters values when data was received - */ - virtual void receive_data(OCTETSTRING& data, params& info); -}; // End of class http_layer - diff --git a/ccsrc/Protocols/Http/http_layer_factory.hh b/ccsrc/Protocols/Http/http_layer_factory.hh deleted file mode 100644 index b6ebebd..0000000 --- a/ccsrc/Protocols/Http/http_layer_factory.hh +++ /dev/null @@ -1,45 +0,0 @@ -/*! - * \file http_layer_factory.hh - * \brief Header file for ITS Http protocol layer factory. - * \author ETSI STF525 - * \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. - * \version 0.1 - */ -#pragma once - -#include "layer_stack_builder.hh" - -#include "http_layer.hh" - -/*! - * \class http_layer_factory - * \brief This class provides a factory class to create an http_layer class instance - */ -class http_layer_factory : public layer_factory { - static http_layer_factory _f; //! Reference to the unique instance of this class -public: //! \publicsection - /*! - * \brief Default constructor - * Create a new instance of the http_layer_factory class - * \remark The HTTP layer identifier is HTTP - */ - http_layer_factory() { - // Register factory - layer_stack_builder::register_layer_factory("HTTP", this); - }; - /*! - * \fn layer* create_layer(const std::string & type, const std::string & param); - * \brief Create the layers stack based on the provided layers stack description - * \param[in] p_type The provided layers stack description - * \param[in] p_params Optional parameters - * \return 0 on success, -1 otherwise - * \inline - */ - inline virtual layer* create_layer(const std::string& p_type, const std::string& p_param){ - return new http_layer(p_type, p_param); - }; -}; // End of class http_layer_factory - diff --git a/ccsrc/Protocols/Http/module.mk b/ccsrc/Protocols/Http/module.mk index 12304eb..c296975 100644 --- a/ccsrc/Protocols/Http/module.mk +++ b/ccsrc/Protocols/Http/module.mk @@ -1,3 +1,3 @@ -sources := http_codec.cc http_layer.cc +sources := http_codec_mec.cc includes := . diff --git a/ccsrc/Protocols/Json/json_codec.cc b/ccsrc/Protocols/Json/json_codec.cc index 06ee679..230da83 100644 --- a/ccsrc/Protocols/Json/json_codec.cc +++ b/ccsrc/Protocols/Json/json_codec.cc @@ -6,9 +6,9 @@ #include "loggers.hh" -#include "LibItsHttp_JsonMessageBodyTypes.hh" +#include "LibHttp_JsonMessageBodyTypes.hh" -int json_codec::encode (const LibItsHttp__JsonMessageBodyTypes::JsonBody& msg, OCTETSTRING& data) +int json_codec::encode (const LibHttp__JsonMessageBodyTypes::JsonBody& msg, OCTETSTRING& data) { loggers::get_instance().log_msg(">>> json_codec::encode: ", (const Base_Type&)msg); @@ -16,75 +16,75 @@ int json_codec::encode (const LibItsHttp__JsonMessageBodyTypes::JsonBody& msg, O TTCN_EncDec::set_error_behavior(TTCN_EncDec::ET_ALL, TTCN_EncDec::EB_DEFAULT); TTCN_Buffer encoding_buffer; - if (msg.ischosen(LibItsHttp__JsonMessageBodyTypes::JsonBody::ALT_ueIdentityTagInfo)) { + if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_ueIdentityTagInfo)) { const UEidentityAPI__TypesAndValues::UeIdentityTagInfo& ue_identity_tag_info = msg.ueIdentityTagInfo(); ue_identity_tag_info.encode(UEidentityAPI__TypesAndValues::UeIdentityTagInfo_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); data = OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data()); - } else if (msg.ischosen(LibItsHttp__JsonMessageBodyTypes::JsonBody::ALT_userTrackingSubscription)) { + } else if (msg.ischosen(LibHttp__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("}")); - } else if (msg.ischosen(LibItsHttp__JsonMessageBodyTypes::JsonBody::ALT_periodicNotificationSubscription)) { + } else if (msg.ischosen(LibHttp__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)) { + } else if (msg.ischosen(LibHttp__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("}")); - } else if (msg.ischosen(LibItsHttp__JsonMessageBodyTypes::JsonBody::ALT_circleNotificationSubscription)) { + } else if (msg.ischosen(LibHttp__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("}")); - } else if (msg.ischosen(LibItsHttp__JsonMessageBodyTypes::JsonBody::ALT_distanceNotificationSubscription)) { + } else if (msg.ischosen(LibHttp__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("}")); - } else if (msg.ischosen(LibItsHttp__JsonMessageBodyTypes::JsonBody::ALT_cellChangeSubscription)) { + } else if (msg.ischosen(LibHttp__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("}"))*/; - } else if (msg.ischosen(LibItsHttp__JsonMessageBodyTypes::JsonBody::ALT_appContext)) { + } else if (msg.ischosen(LibHttp__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)) { + } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_serviceInfo)) { 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)) { + } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_appTerminationNotificationSubscription)) { 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)) { + } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_dnsRule)) { 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)) { + } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_serAvailabilityNotificationSubscription)) { 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)) { + } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_trafficRule)) { 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)) { + } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_bwInfo)) { const TrafficManagementAPI__TypesAndValues::BwInfo& bw_info = msg.bwInfo(); bw_info.encode(TrafficManagementAPI__TypesAndValues::BwInfo_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); data = /*char2oct(CHARSTRING("{\"TrafficRule\": ")) + */OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; - } else if (msg.ischosen(LibItsHttp__JsonMessageBodyTypes::JsonBody::ALT_mtsSessionInfo)) { + } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_mtsSessionInfo)) { const TrafficManagementAPI__TypesAndValues::MtsSessionInfo& mts_session_info = msg.mtsSessionInfo(); mts_session_info.encode(TrafficManagementAPI__TypesAndValues::MtsSessionInfo_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); data = /*char2oct(CHARSTRING("{\"TrafficRule\": ")) + */OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; - } else if (msg.ischosen(LibItsHttp__JsonMessageBodyTypes::JsonBody::ALT_predictedQos)) { + } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_predictedQos)) { const V2XInformationServiceAPI__TypesAndValues::PredictedQos& predicted_qos = msg.predictedQos(); predicted_qos.encode(V2XInformationServiceAPI__TypesAndValues::PredictedQos_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_assocStaSubscription)) { + } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_assocStaSubscription)) { const WlanInformationAPI__TypesAndValues::AssocStaSubscription& assoc_sta_subscription = msg.assocStaSubscription(); assoc_sta_subscription.encode(WlanInformationAPI__TypesAndValues::AssocStaSubscription_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_staDataRateSubscription)) { + } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_staDataRateSubscription)) { const WlanInformationAPI__TypesAndValues::StaDataRateSubscription& sta_data_rate_subscription = msg.staDataRateSubscription(); sta_data_rate_subscription.encode(WlanInformationAPI__TypesAndValues::StaDataRateSubscription_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); data = /*char2oct(CHARSTRING("{\"TrafficRule\": ")) + */OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; @@ -96,7 +96,7 @@ int json_codec::encode (const LibItsHttp__JsonMessageBodyTypes::JsonBody& msg, O return 0; } -int json_codec::decode (const OCTETSTRING& p_data, LibItsHttp__JsonMessageBodyTypes::JsonBody& msg, params* p_params) +int json_codec::decode (const OCTETSTRING& p_data, LibHttp__JsonMessageBodyTypes::JsonBody& msg, params* p_params) { loggers::get_instance().log_msg(">>> json_codec::decode: p_data=", p_data); diff --git a/ccsrc/Protocols/Json/json_codec.hh b/ccsrc/Protocols/Json/json_codec.hh index 01073c5..a245e82 100644 --- a/ccsrc/Protocols/Json/json_codec.hh +++ b/ccsrc/Protocols/Json/json_codec.hh @@ -1,23 +1,23 @@ #pragma once -#include "codec.hh" +#include "codec_gen.hh" #include "params.hh" class Base_Type; class TTCN_Typedescriptor_t; class TTCN_Buffer; -namespace LibItsHttp__JsonMessageBodyTypes { +namespace LibHttp__JsonMessageBodyTypes { class JsonBody; } -class json_codec: public codec +class json_codec: public codec_gen { public: - explicit json_codec() : codec() { }; + explicit json_codec() : codec_gen() { }; virtual ~json_codec() { }; - virtual int encode (const LibItsHttp__JsonMessageBodyTypes::JsonBody&, OCTETSTRING& data); - virtual int decode (const OCTETSTRING& p_data, LibItsHttp__JsonMessageBodyTypes::JsonBody&, params* p_params = NULL); + virtual int encode (const LibHttp__JsonMessageBodyTypes::JsonBody&, OCTETSTRING& data); + virtual int decode (const OCTETSTRING& p_data, LibHttp__JsonMessageBodyTypes::JsonBody&, params* p_params = NULL); }; // End of class json_codec diff --git a/ccsrc/Protocols/Json/json_codec_factory.hh b/ccsrc/Protocols/Json/json_codec_factory.hh index 7cbd4f4..d3d27eb 100644 --- a/ccsrc/Protocols/Json/json_codec_factory.hh +++ b/ccsrc/Protocols/Json/json_codec_factory.hh @@ -40,7 +40,7 @@ public: //! \publicsection * \return 0 on success, -1 otherwise * \inline */ - inline virtual codec* create_codec() { - return (codec*)new json_codec(); + inline virtual codec_gen* create_codec() { + return (codec_gen*)new json_codec(); }; }; // End of class json_codec_factory diff --git a/ccsrc/Protocols/Pcap/module.mk b/ccsrc/Protocols/Pcap/module.mk deleted file mode 100644 index 0f6495f..0000000 --- a/ccsrc/Protocols/Pcap/module.mk +++ /dev/null @@ -1,3 +0,0 @@ -sources := pcap_cygwin_layer.cc pcap_layer.cc pcap_linux_layer.cc pcap_offline_layer.cc -includes := . - diff --git a/ccsrc/Protocols/Pcap/pcap_cygwin_layer.cc b/ccsrc/Protocols/Pcap/pcap_cygwin_layer.cc deleted file mode 100644 index 2e3cc7a..0000000 --- a/ccsrc/Protocols/Pcap/pcap_cygwin_layer.cc +++ /dev/null @@ -1,263 +0,0 @@ -#if defined (__CYGWIN__) - -#define _GNU_SOURCE - -#include -#include -#include -#include -#include -#include -#include - -#include - -#include "pcap_layer_factory.hh" - -#include "loggers.hh" - -#include - -typedef struct { - bpf_int32 tv_sec; /* seconds */ - bpf_int32 tv_usec; /* microseconds */ -}pcap_o_timeval; - -typedef struct pcap_o_pkthdr { - pcap_o_timeval ts; /* time stamp */ - bpf_u_int32 caplen; /* length of portion present */ - bpf_u_int32 len; /* length this packet (off wire) */ -}pcap_o_pkthdr; - -extern "C" int pcap_oid_get_request(pcap_t *p, bpf_u_int32 oid, void *data, size_t *lenp); - -static const char* _hexDigits = "0123456789ABCDEF"; -static char * _bin2hex(char * hex, size_t hlen, const char * bin, size_t blen) -{ - const unsigned char *b, *e; - char * s; - - // sanity check - if (hlen >= 0 && hlen < blen * 2) return NULL; - - b = (const unsigned char *)bin; - e = b + blen - 1; - s = hex + blen * 2; - if (s < hex + hlen) *s = 0; - for (; b <= e; e--){ - *(--s) = _hexDigits[(*e) & 0xF]; - *(--s) = _hexDigits[(*e) >> 4]; - } - return hex + blen * 2; -} - -pcap_layer::pcap_layer(const std::string& p_type, const std::string& param) : - layer(p_type), PORT(p_type.c_str()), _params(), _device(NULL), _running(FALSE), _time_key("pcap_layer::Handle_Fd_Event_Readable") { - loggers::get_instance().log(">>> pcap_layer::pcap_layer: %s, %s", p_type.c_str(), param.c_str()); - params::convert(_params, param); - - char error_buffer[PCAP_ERRBUF_SIZE]; - params::const_iterator it; - std::string nic; //network interface name - bpf_u_int32 mask; // subnet mask - bpf_u_int32 net; // ip address - - it = _params.find(params::nic); - if ((it == _params.end()) || it->second.empty()) { - loggers::get_instance().error("pcap_layer::pcap_layer: NIC must be specified"); - return; - } - - nic = std::string("\\Device\\NPF_{") + it->second + "}"; - - if (pcap_lookupnet(nic.c_str(), &net, &mask, error_buffer) != 0) { - loggers::get_instance().error("pcap_layer::pcap_layer: pcap_layer::pcap_layer: Failed to fetch newtork address for device %s", nic.c_str()); - } - loggers::get_instance().log("pcap_layer::pcap_layer: Device %s Network address: %d", nic.c_str(), net); - - // Open the device - _device = pcap_open_live(nic.c_str(), 65536/*64*1024*/, 1, 100, error_buffer); - if (_device == NULL) { - loggers::get_instance().error("pcap_layer::pcap_layer: Failed to open device %s", nic.c_str()); - return; - } - - // Setup filter - std::string filter = ""; - std::string mac_src; - it = _params.find(params::mac_src); - if (it != _params.end() && !it->second.empty()) { - mac_src = it->second; - } else { - // Not found - // determine it automatically -#ifndef OID_802_3_CURRENT_ADDRESS -#define OID_802_3_CURRENT_ADDRESS 0x01010102 -#endif - char mac[6] = {0}; - size_t l = sizeof(mac); - pcap_oid_get_request(_device, OID_802_3_CURRENT_ADDRESS, mac, &l); - char buf[13]; - *_bin2hex(buf, sizeof(buf), mac, 6) = 0; - mac_src = buf; - loggers::get_instance().user("pcap_layer::pcap_layer: local MAC is %s", mac_src.c_str()); - _params[params::mac_src] = mac_src; - } - - std::string mac_bc; - it = _params.find(params::mac_bc); - if (it != _params.end() && !it->second.empty()) - mac_bc = it->second; - else - mac_bc = "ffffffffffff"; - - if(mac_bc == mac_src || mac_src.empty()) - filter = "ether dst " + mac_bc; - else - filter = "( ether dst " + mac_bc + " or ether dst " + mac_src + " )"; - - if(! mac_src.empty()) - // Reject ITS messages sent by this component - filter += " and not ether src " + mac_src; - - // Add user defined filter - it = _params.find(std::string("filter")); - if ((it != _params.end()) && !it->second.empty()) { - filter += std::string(" ") + it->second; - } - - // Log final PCAP filter - loggers::get_instance().user("pcap_layer::pcap_layer: Filter: %s", filter.c_str()); - - // setup filter - { - struct bpf_program f = {0}; - if (pcap_compile(_device, &f, filter.c_str(), 1, PCAP_NETMASK_UNKNOWN) != 0) { - loggers::get_instance().error("pcap_layer::pcap_layer: Failed to compile PCAP filter"); - } else { - if (pcap_setfilter(_device, &f) != 0) { - loggers::get_instance().error("pcap_layer::pcap_layer: Failed to set PCAP filter"); - } - } - pcap_freecode(&f); - } - - _o_params.insert(std::pair(std::string("timestamp"), std::string())); - - // create pipe and run thread - if (pipe2(_fd, O_NONBLOCK) == -1) { - loggers::get_instance().error("pcap_layer::pcap_layer: Failed to create a pipe: %s", ::strerror(errno)); - } - // Pass the pipe handler to the polling procedure - loggers::get_instance().log("pcap_layer::pcap_layer: Call handler with descriptor %d", _fd[0]); - Handler_Add_Fd_Read(_fd[0]); - - // Create the reader thread - _thread = new std::thread(&pcap_layer::run, (void *)this); - if (_thread == NULL) { - loggers::get_instance().error("pcap_layer::pcap_layer: Failed to start offline thread"); - } - while (_running == FALSE) { - std::this_thread::sleep_for(std::chrono::milliseconds(500)); - } - // Thread was started - loggers::get_instance().log("<<< pcap_layer::pcap_layer"); -} // End of ctor - -pcap_layer::~pcap_layer() { - loggers::get_instance().log(">>> pcap_layer::~pcap_layer"); - - if (_device != NULL) { - if (_thread != NULL) { - _running = FALSE; - // Wait for the working thread to terminate - _thread->join(); - loggers::get_instance().log("pcap_layer::~pcap_layer: Thread were stops"); - // Cleanup - delete _thread; - close(_fd[0]); - close(_fd[1]); - } - pcap_close(_device); - } -} // End of dtor - -void* pcap_layer::run(void* p_this) { - pcap_layer& p = *static_cast(p_this); - return p.thread(); -} - -void* pcap_layer::thread() { - pcap_o_pkthdr *pkt_header; - const u_char *pkt_data; - unsigned char pkt_count = 0; - -// loggers::get_instance().log(">>> pcap_layer::run"); - - _running = TRUE; - - // wait a bit before sending first packet - std::this_thread::sleep_for(std::chrono::milliseconds(500)); - - while (_running) { // Loop while _running flag is up - // get next frame - int result = pcap_next_ex(_device, (struct pcap_pkthdr**)&pkt_header, &pkt_data); - if(result == 0){ - continue; - } - if(result < 0){ -// loggers::get_instance().log("<<< pcap_layer::run: error %s", pcap_geterr(_device)); - break; - } - - while(_running && !_resume.try_lock()) { - std::this_thread::sleep_for(std::chrono::milliseconds(100)); - } -#if 0 - { - char buf[128]; - std::time_t t = pkt_header->ts.tv_sec; - std::tm * pt = std::localtime( &t ); - t = std::strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", pt); - std::sprintf(buf+t, "%ld", pkt_header->ts.tv_sec * 1000 + static_cast(pkt_header->ts.tv_usec / 1000)); // Use milliseconds - _o_params[params::timestamp] = std::string(buf); - } -#else - _o_params[params::timestamp] = std::to_string(pkt_header->ts.tv_sec * 1000 + static_cast(pkt_header->ts.tv_usec / 1000)); // Use milliseconds -#endif - _o_data = OCTETSTRING(pkt_header->len, pkt_data); - write(_fd[1], &pkt_count, 1);pkt_count++; - } - _running = FALSE; -// loggers::get_instance().log("<<< pcap_layer::run"); - return NULL; -} - -void pcap_layer::send_data(OCTETSTRING& data, params& params) { - loggers::get_instance().log_msg(">>> pcap_layer::send_data: ", data); - if (pcap_sendpacket(_device, static_cast(data), data.lengthof()) == -1) { - loggers::get_instance().error("pcap_layer::send_data: Failed to send packet: %s", pcap_geterr(_device)); - } -} - -void pcap_layer::receive_data(OCTETSTRING& data, params& params) { - loggers::get_instance().log(">>> pcap_layer::receive_data: Received %d bytes", data.lengthof()); - loggers::get_instance().log_to_hexa("Packet dump", data); - - // Pass the packet to the upper layers - receive_to_all_layers(data, params); -} - -void pcap_layer::Handle_Fd_Event_Readable(int fd) { - char c[2]; - float duration; - loggers::get_instance().set_start_time(_time_key); - this->receive_data(_o_data, _o_params); - loggers::get_instance().set_stop_time(_time_key, duration); - read(_fd[0], &c, 1); - _resume.unlock(); -} - -pcap_layer_factory pcap_layer_factory::_f; - -#endif //__CYGWIN__ diff --git a/ccsrc/Protocols/Pcap/pcap_cygwin_layer.hh b/ccsrc/Protocols/Pcap/pcap_cygwin_layer.hh deleted file mode 100644 index 37008f5..0000000 --- a/ccsrc/Protocols/Pcap/pcap_cygwin_layer.hh +++ /dev/null @@ -1,78 +0,0 @@ -/*! - * \file pcap_layer.hh - * \brief Header file for ITS Offline Pcap port layer. - * \author ETSI STF525 - * \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. - * \version 0.1 - */ -#pragma once - -#include -#include - -#include "t_layer.hh" -#include "params.hh" - -#include - -class PORT; //! Forward declaration of TITAN class - -typedef struct pcap pcap_t; - -/*! - * \class pcap_layer - * \brief This class provides description of ITS PCAP port protocol layer - */ -class pcap_layer : public layer, public PORT { - - params _params; //! Layer parameters - pcap_t* _device; //! Device handle - std::thread* _thread; //! Thread handle, used to read PCAP file instead of NIC, used in file mode - std::mutex _resume; - bool _running; //! Set to true when the thread is running, used in file mode - int _fd[2]; //! pipe to signal to Titan - - - OCTETSTRING _o_data; - params _o_params; - - std::string _time_key; - - static void* run(void* p_this); -public: - void* thread(void); -public: //! \publicsection - /*! - * \brief Specialised constructor - * Create a new instance of the pcap_layer class - * \param[in] p_type \todo - * \param[in] p_param \todo - */ - pcap_layer(const std::string& p_type, const std::string& param); - /*! - * \brief Default destructor - */ - virtual ~pcap_layer(); - - /*! - * \virtual - * \fn void send_data(OCTETSTRING& data, params& params); - * \brief Send bytes formated data to the lower layers - * \param[in] p_data The data to be sent - * \param[in] p_params Some parameters to overwrite default value of the lower layers parameters - */ - virtual void send_data(OCTETSTRING& data, params& params); - /*! - * \virtual - * \fn void receive_data(OCTETSTRING& data, params& params); - * \brief Receive bytes formated data from the lower layers - * \param[in] p_data The bytes formated data received - * \param[in] p_params Some lower layers parameters values when data was received - */ - virtual void receive_data(OCTETSTRING& data, params& info); - - void Handle_Fd_Event_Readable(int fd); -}; diff --git a/ccsrc/Protocols/Pcap/pcap_layer.cc b/ccsrc/Protocols/Pcap/pcap_layer.cc deleted file mode 100644 index 92fd099..0000000 --- a/ccsrc/Protocols/Pcap/pcap_layer.cc +++ /dev/null @@ -1,276 +0,0 @@ -#if 0 -#include -#include -#include -#include -#include - -#include - -#include "pcap_layer_factory.hh" - -typedef struct pcap_pkthdr pcap_o_pkthdr; -typedef struct timeval pcap_o_timeval; - -#include "loggers.hh" - -pcap_layer::pcap_layer(const std::string& p_type, const std::string& param) : layer(p_type), PORT(p_type.c_str()), _params(), _device(NULL), _pcap_h(-1), _thread(NULL), _running(FALSE), _resume(), _sent_file(NULL), _time_key("pcap_layer::Handle_Fd_Event_Readable") { - bool online = false; - loggers::get_instance().log(">>> pcap_layer::pcap_layer: %s, %s", to_string().c_str(), param.c_str()); - _fd[0] = -1; _fd[1] = -1; - // Setup parameters - params::convert(_params, param); - //_params.log(); - // Prepare capture processing - char error_buffer[PCAP_ERRBUF_SIZE]; - params::const_iterator it = _params.find(params::nic); - if ((it != _params.end()) && !it->second.empty()) { // Use online capture - // Fetch the network address and network mask - bpf_u_int32 mask; // subnet mask - bpf_u_int32 net; // ip address - std::string nic; - online = true; - nic = _params[params::nic]; - if (pcap_lookupnet(nic.c_str(), &net, &mask, error_buffer) != 0) { - loggers::get_instance().error("pcap_layer::pcap_layer: pcap_layer::pcap_layer: Failed to fetch newtork address for device %s", nic.c_str()); - } - loggers::get_instance().log("pcap_layer::pcap_layer: Device %s Network address: %d", nic.c_str(), net); - // Open the device - _device = pcap_open_live(nic.c_str(), 65536, 1, 1000, error_buffer); // TODO Replace hard coded values by pcap_layer:: - if (_device == NULL) { - loggers::get_instance().error("pcap_layer::pcap_layer: Failed to open device %s", nic.c_str()); - } // else, continue - // Set non-blocking flag for the polling procedure - if (pcap_setnonblock(_device, 1, error_buffer) != 0) { - loggers::get_instance().error("pcap_layer::pcap_layer: Failed to set blocking mode: %s", error_buffer); - } - // Retrieve the device file handler - _pcap_h = pcap_get_selectable_fd(_device); - if (_pcap_h == -1) { - loggers::get_instance().error("pcap_layer::pcap_layer: Failed to get device handler"); - } - } else { - // Check file name - it = _params.find(std::string("file")); - if ((it != _params.cend()) && !it->second.empty()) { // Use offline capture - struct stat s = {0}; - if ((stat(_params["file"].c_str(), &s) != 0) || !S_ISREG(s.st_mode)) { - loggers::get_instance().error("pcap_layer::pcap_layer: Failed to acces PCAP file %s", _params["file"].c_str()); - } - // File exist, open it - _device = pcap_open_offline(_params["file"].c_str(), error_buffer); - if (_device == NULL) { - loggers::get_instance().error("pcap_layer::pcap_layer: Failed to open PCAP file %s", error_buffer); - } // else, continue - // Create the dump file for the sent packet based on the openned file name and the current time in milliseconds - it = _params.find("save_mode"); - if ((it != _params.cend()) && (it->second.compare("1") == 0)) { - unsigned long ms = std::chrono::system_clock::now().time_since_epoch() / std::chrono::milliseconds(1); - std::string ext("_" + std::to_string(ms)); - int i = _params["file"].find(".pcap"); - if (i > 0) { - std::string f(_params["file"].substr(0, i) + ext + ".pcap"); - loggers::get_instance().log("pcap_layer::pcap_layer: Save file name: %s", f.c_str()); - if ((_sent_file = pcap_dump_open(_device, f.c_str())) == NULL) { - loggers::get_instance().warning("pcap_layer::pcap_layer: Failed to open save file %s", f.c_str()); - } - } - } // else, nothing to do - } else { - loggers::get_instance().error("pcap_layer::pcap_layer: Failed to open PCAP file %s", error_buffer); - } - } - - // Setup filter - std::string filter = ""; - it = _params.find(params::mac_src); - if (it == _params.end()) { // Not found - loggers::get_instance().error("pcap_layer::pcap_layer: mac_src parameter not found, cannot continue"); - } else { - // Reject ITS messages sent by this component - filter = "not ether src " + _params[params::mac_src]; - // Accept ITS broadcasted to this componenet - filter += " and (ether dst " + _params[params::mac_src]; - // Accept ITS broadcasted messages - it = _params.find(params::mac_bc); - if ((it != _params.end()) && !it->second.empty()) { - filter += " or ether dst " + it->second + ")"; - } else { - filter += " or ether dst ffffffffffff) "; - } - // Add user defined filter - it = _params.find(std::string("filter")); - if ((it != _params.end()) && !it->second.empty()) { - filter += _params["filter"]; - } // else nothing to do - } - // Log final PCAP filter - loggers::get_instance().user("pcap_layer::pcap_layer: Filter: %s", filter.c_str()); - if (!filter.empty()) { - struct bpf_program f = {0}; - if (pcap_compile(_device, &f, filter.c_str(), 1, PCAP_NETMASK_UNKNOWN) != 0) { - loggers::get_instance().error("pcap_layer::pcap_layer: Failed to compile PCAP filter"); - } - if (pcap_setfilter(_device, &f) != 0) { - loggers::get_instance().error("pcap_layer::pcap_layer: Failed to set PCAP filter"); - } - pcap_freecode(&f); - } - - // Pass the device file handler to the polling procedure - if (_pcap_h != -1) { // Live capture - Handler_Add_Fd_Read(_pcap_h); - } else { // Offline capture or cygwin - // Create a pipe - if (pipe2(_fd, O_NONBLOCK) == -1) { - loggers::get_instance().error("pcap_layer::pcap_layer: Failed to create a pipe: %s", ::strerror(errno)); - } - if(online){ - _pcap_h = _fd[0]; - } - // Pass the pipe handler to the polling procedure - loggers::get_instance().log("pcap_layer::pcap_layer: Call handler with descriptor %d", _fd[0]); - Handler_Add_Fd_Read(_fd[0]); - // Create the offline reader thread - _thread = new std::thread(&pcap_layer::run, (void *)this); - if (_thread == NULL) { - loggers::get_instance().error("pcap_layer::pcap_layer: Failed to start offline thread"); - } - // Start it to dispatch packet to a pipe - while (_running == FALSE) { - std::this_thread::sleep_for(std::chrono::milliseconds(500)); - } - // Thread was started - loggers::get_instance().log("<<< pcap_layer::pcap_layer"); - } -} // End of ctor - -pcap_layer::~pcap_layer() { - loggers::get_instance().log(">>> pcap_layer::~pcap_layer"); - - if (_device != NULL) { - if (_thread != NULL) { - _running = FALSE; - // Wait for the working thread to terminate - _thread->join(); - loggers::get_instance().log("pcap_layer::~pcap_layer: Thread were stops"); - // Cleanup - delete _thread; - close(_fd[0]); - close(_fd[1]); - } - if (_sent_file != NULL) { - pcap_dump_close(_sent_file); - } - pcap_close(_device); - } -} // End of dtor - -void* pcap_layer::run(void* p_this) { - pcap_layer& p = *static_cast(p_this); - return p.thread(); -} - -void* pcap_layer::thread() { - loggers::get_instance().log(">>> pcap_layer::run"); - - // Wait a little bit before to start sending packet - std::this_thread::sleep_for(std::chrono::milliseconds(500)); - params::const_iterator it = _params.find("frame_offset"); - if ((it != _params.cend()) && (it->second.compare("0") != 0)) { - // TODO Try t use PCAP filter to start directly to the correct frame offset - /*try { - unsigned int offset = std::stoul(str_dec, &s); - // Skip frames - struct pcap_pkthdr *pkt_header; - const u_char *pkt_data; - int result = pcap_next_ex(_device, &pkt_header, &pkt_data); - if (result == 1) { // Succeed - } - } - catch (invalid_argument& i) { - } - catch (out_of_range& o) { - }*/ - } - // Let's go - _running = TRUE; - while (_running) { // Loop while _running flag is up - if (_resume.try_lock() == TRUE) { // Previous packet was consumed, lock for the next one - write(_fd[1], "\n", 1); // Any character will do the job - } else { // not ready yet - std::this_thread::sleep_for(std::chrono::milliseconds(100)); - } - } - - loggers::get_instance().log("<<< pcap_layer::run"); - return NULL; -} - -void pcap_layer::send_data(OCTETSTRING& data, params& params) { - loggers::get_instance().log_msg(">>> pcap_layer::send_data: ", data); - - if (_pcap_h != -1) { // Check if offline mode is used - if (pcap_sendpacket(_device, static_cast(data), data.lengthof()) == -1) { - loggers::get_instance().error("pcap_layer::send_data: Failed to send packet: %s", pcap_geterr(_device)); - } - } else if (_sent_file != NULL) { - struct pcap_pkthdr hdr; - std::chrono::system_clock::time_point now = std::chrono::system_clock::now(); - std::chrono::milliseconds ms = std::chrono::duration_cast(now.time_since_epoch()); - hdr.ts.tv_sec = ms.count() / 1000; - hdr.ts.tv_usec = (ms.count() % 1000) * 1000; - hdr.caplen = data.lengthof(); - hdr.len = hdr.caplen; - pcap_dump((u_char *)_sent_file, &hdr, static_cast(data)); - } else { - loggers::get_instance().log("pcap_layer::send_data: Offline mode, operation was skipped"); - } -} - -void pcap_layer::receive_data(OCTETSTRING& data, params& params) { - loggers::get_instance().log(">>> pcap_layer::receive_data: Received %d bytes", data.lengthof()); - loggers::get_instance().log_to_hexa("Packet dump", data); - - // Pass the packet to the upper layers - receive_to_all_layers(data, params); -} - -void pcap_layer::Handle_Fd_Event_Readable(int fd) { - //loggers::get_instance().log(">>> pcap_layer::Handle_Fd_Event_Readable: %d", fd); - - pcap_o_pkthdr *pkt_header; - const u_char *pkt_data; - int result = pcap_next_ex(_device, (struct pcap_pkthdr**)&pkt_header, &pkt_data); - if (result == 1) { // Succeed - if (pkt_header->caplen > 14) { // Reject too small packet - //loggers::get_instance().log("pcap_layer::Handle_Fd_Event_Readable: %ld - % ld - %d", pkt_header->ts.tv_sec, pkt_header->ts.tv_usec, pkt_header->len); - // Fill parameters from PCAP layer - params params; - params.insert(std::pair(params::timestamp, std::to_string(pkt_header->ts.tv_sec * 1000 + static_cast(pkt_header->ts.tv_usec / 1000)))); // Use milliseconds - // Process the packet at this layer - OCTETSTRING os(pkt_header->caplen, pkt_data); - //loggers::get_instance().log_to_hexa("pcap_layer::Handle_Fd_Event_Readable: ", os); - // TODO Case of caplen != len !!! - float duration; - loggers::get_instance().set_start_time(_time_key); - this->receive_data(os, params); // TODO Check execution time for decoding operation - loggers::get_instance().set_stop_time(_time_key, duration); - } - } // else, skip the packet - // Specific to offline mode - if (_fd[0] != -1) { // Check if offline mode is used - //loggers::get_instance().log("pcap_layer::Handle_Fd_Event_Readable: Read pipe"); - char c[2]; - read(_fd[0], &c, 1); - if (result == -2) { // End of file, therminate worker thread - _running = FALSE; - } - //loggers::get_instance().log("pcap_layer::Handle_Fd_Event_Readable: pcap_next_ex failed: result=%d", result); - _resume.unlock(); - } // else, nothing to do -} - -pcap_layer_factory pcap_layer_factory::_f; - -#endif // !CYGWIN diff --git a/ccsrc/Protocols/Pcap/pcap_layer.hh b/ccsrc/Protocols/Pcap/pcap_layer.hh deleted file mode 100644 index 098e1de..0000000 --- a/ccsrc/Protocols/Pcap/pcap_layer.hh +++ /dev/null @@ -1,5 +0,0 @@ -#if defined (__CYGWIN__) - #include "pcap_cygwin_layer.hh" -#else - #include "pcap_linux_layer.hh" -#endif diff --git a/ccsrc/Protocols/Pcap/pcap_layer_factory.hh b/ccsrc/Protocols/Pcap/pcap_layer_factory.hh deleted file mode 100644 index 0c3c3cc..0000000 --- a/ccsrc/Protocols/Pcap/pcap_layer_factory.hh +++ /dev/null @@ -1,45 +0,0 @@ -/*! - * \file pcap_layer_factory.hh - * \brief Header file for Pcap layer factory. - * \author ETSI STF525 - * \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. - * \version 0.1 - */ -#pragma once - -#include "layer_stack_builder.hh" - -#include "pcap_layer.hh" - -/*! - * \class pcap_layer_factory - * \brief This class provides a factory class to create an pcap_layer class instance - */ -class pcap_layer_factory: public layer_factory { - static pcap_layer_factory _f; //! Reference to the unique instance of this class -public: //! \publicsection - /*! - * \brief Default constructor - * Create a new instance of the udp_layer_factory class - * \remark The PCAP layer identifier is PCAP - */ - pcap_layer_factory() { - // register factory - layer_stack_builder::register_layer_factory("PCAP", this); - }; - /*! - * \fn layer* create_layer(const std::string & type, const std::string & param); - * \brief Create the layers stack based on the provided layers stack description - * \param[in] p_type The provided layers stack description - * \param[in] p_params Optional parameters - * \return 0 on success, -1 otherwise - * \inline - */ - inline virtual layer* create_layer(const std::string& p_type, const std::string& p_param) { - return new pcap_layer(p_type, p_param); - }; -}; // End of class pcap_layer_factory - diff --git a/ccsrc/Protocols/Pcap/pcap_linux_layer.cc b/ccsrc/Protocols/Pcap/pcap_linux_layer.cc deleted file mode 100644 index 3190ce6..0000000 --- a/ccsrc/Protocols/Pcap/pcap_linux_layer.cc +++ /dev/null @@ -1,199 +0,0 @@ -#if !defined (__CYGWIN__) -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#include "pcap_layer_factory.hh" - -#include "loggers.hh" - -static const char* _hexDigits = "0123456789ABCDEF"; -static char * _bin2hex(char * hex, size_t hlen, const char * bin, size_t blen) -{ - const unsigned char *b, *e; - char * s; - - // sanity check - if (hlen >= 0 && hlen < blen * 2) return NULL; - - b = (const unsigned char *)bin; - e = b + blen - 1; - s = hex + blen * 2; - if (s < hex + hlen) *s = 0; - for (; b <= e; e--){ - *(--s) = _hexDigits[(*e) & 0xF]; - *(--s) = _hexDigits[(*e) >> 4]; - } - return hex + blen * 2; -} - - -pcap_layer::pcap_layer(const std::string& p_type, const std::string& param) -: layer(p_type), PORT(p_type.c_str()), _params(), _device(NULL), _pcap_h(-1), - _time_key("pcap_layer::Handle_Fd_Event_Readable") -{ - char error_buffer[PCAP_ERRBUF_SIZE]; - params::const_iterator it; - std::string nic; - - loggers::get_instance().log(">>> pcap_layer::pcap_layer: %s, %s", to_string().c_str(), param.c_str()); - // Setup parameters - params::convert(_params, param); - // Prepare capture processing - it = _params.find(params::nic); - if ((it == _params.end()) || it->second.empty()) { // Use online capture - loggers::get_instance().error("pcap_layer::pcap_layer: NIC name must be specified"); - return; - } - - nic = _params[params::nic]; - { - bpf_u_int32 net, mask; // ip address and subnet mask - if (pcap_lookupnet(nic.c_str(), &net, &mask, error_buffer) != 0) { - loggers::get_instance().error("pcap_layer::pcap_layer: Failed to fetch newtork address for device %s", nic.c_str()); - } else { - loggers::get_instance().log("pcap_layer::pcap_layer: Device %s Network address: %d", nic.c_str(), net); - } - } - // Open the device in promiscuous mode - _device = pcap_open_live(nic.c_str(), 65536/*64*1024*/, 1, 100, error_buffer); // TODO Replace hard coded values by pcap_layer:: - if (_device == NULL) { - loggers::get_instance().error("pcap_layer::pcap_layer: Failed to open device %s", nic.c_str()); - return; - } // else, continue - // Set non-blocking flag for the polling procedure - if (pcap_setnonblock(_device, 1, error_buffer) != 0) { - loggers::get_instance().error("pcap_layer::pcap_layer: Failed to set blocking mode: %s", error_buffer); - } - // Retrieve the device file handler - _pcap_h = pcap_get_selectable_fd(_device); - if (_pcap_h == -1) { - loggers::get_instance().error("pcap_layer::pcap_layer: Failed to get device handler"); - } - - // Setup filter - std::string filter = ""; - std::string mac_src; - it = _params.find(params::mac_src); - if (it != _params.end()) { // Use online capture - mac_src = it->second; - } else { - // Detect MAC address of NIC - struct ifreq ifr; - memset(&ifr, 0, sizeof(ifr)); - nic.copy(ifr.ifr_name, sizeof(ifr.ifr_name)); - if (ioctl(_pcap_h, SIOCGIFHWADDR, &ifr) == -1) { - loggers::get_instance().error("pcap_layer::pcap_layer: Failed to get device MAC address"); - } else { - char buf[13]; - *_bin2hex(buf, sizeof(buf), ifr.ifr_hwaddr.sa_data, 6) = 0; - mac_src = buf; - loggers::get_instance().user("pcap_layer::pcap_layer: local MAC is %s", mac_src.c_str()); - _params[params::mac_src] = mac_src; - } - } - - // Accept ITS broadcasted messages - std::string mac_bc; - it = _params.find(params::mac_bc); - if (it != _params.end() && !it->second.empty()) { - mac_bc = it->second; - } else { - mac_bc = "ffffffffffff"; - } - - if ((mac_bc == mac_src) || mac_src.empty()) { - filter = "ether dst " + mac_bc; - } else { - filter = "( ether dst " + mac_bc + " or ether dst " + mac_src + " )"; - } - - if (!mac_src.empty()) { - // Reject ITS messages sent by this component - filter += " and not ether src " + mac_src; - } - - // Add user defined filter - it = _params.find(std::string("filter")); - if ((it != _params.end()) && !it->second.empty()) { - filter += std::string(" ") + it->second; - } - // Log final PCAP filter - loggers::get_instance().user("pcap_layer::pcap_layer: Filter: %s", filter.c_str()); - - { - struct bpf_program f = {0}; - if (pcap_compile(_device, &f, filter.c_str(), 1, PCAP_NETMASK_UNKNOWN) != 0) { - loggers::get_instance().error("pcap_layer::pcap_layer: Failed to compile PCAP filter"); - }else{ - if (pcap_setfilter(_device, &f) != 0) { - loggers::get_instance().error("pcap_layer::pcap_layer: Failed to set PCAP filter"); - } - } - pcap_freecode(&f); - } - - // Pass the device file handler to the polling procedure - Handler_Add_Fd_Read(_pcap_h); -} // End of ctor - -pcap_layer::~pcap_layer() { - loggers::get_instance().log(">>> pcap_layer::~pcap_layer"); - - if (_device != NULL) { - pcap_close(_device); - } -} // End of dtor - - -void pcap_layer::send_data(OCTETSTRING& data, params& params) { - loggers::get_instance().log_msg(">>> pcap_layer::send_data: ", data); - - if (pcap_sendpacket(_device, static_cast(data), data.lengthof()) == -1) { - loggers::get_instance().error("pcap_layer::send_data: Failed to send packet: %s", pcap_geterr(_device)); - } -} - -void pcap_layer::receive_data(OCTETSTRING& data, params& params) { - loggers::get_instance().log(">>> pcap_layer::receive_data: Received %d bytes", data.lengthof()); - loggers::get_instance().log_to_hexa("Packet dump", data); - - // Pass the packet to the upper layers - receive_to_all_layers(data, params); -} - -void pcap_layer::Handle_Fd_Event_Readable(int fd) { - //loggers::get_instance().log(">>> pcap_layer::Handle_Fd_Event_Readable: %d", fd); - - pcap_pkthdr *pkt_header; - const u_char *pkt_data; - int result = pcap_next_ex(_device, &pkt_header, &pkt_data); - if (result == 1) { // Succeed - if (pkt_header->caplen > 14) { // Reject too small packet - loggers::get_instance().log("pcap_layer::Handle_Fd_Event_Readable: %ld - %ld - %ld - %d", pkt_header->ts.tv_sec, pkt_header->ts.tv_usec, pkt_header->ts.tv_sec * 1000 + static_cast(pkt_header->ts.tv_usec / 1000), pkt_header->len); - // Fill parameters from PCAP layer - params params; - params.insert(std::pair(params::timestamp, std::to_string(pkt_header->ts.tv_sec * 1000 + static_cast(pkt_header->ts.tv_usec / 1000)))); // Use milliseconds - // Process the packet at this layer - OCTETSTRING os(pkt_header->caplen, pkt_data); - //loggers::get_instance().log_to_hexa("pcap_layer::Handle_Fd_Event_Readable: ", os); - // TODO Case of caplen != len !!! - float duration; - loggers::get_instance().set_start_time(_time_key); - this->receive_data(os, params); // TODO Check execution time for decoding operation - loggers::get_instance().set_stop_time(_time_key, duration); - } - } // else, skip the packet -} - -pcap_layer_factory pcap_layer_factory::_f; - -#endif // !CYGWIN diff --git a/ccsrc/Protocols/Pcap/pcap_linux_layer.hh b/ccsrc/Protocols/Pcap/pcap_linux_layer.hh deleted file mode 100644 index f09fe59..0000000 --- a/ccsrc/Protocols/Pcap/pcap_linux_layer.hh +++ /dev/null @@ -1,62 +0,0 @@ -/*! - * \file pcap_layer.hh - * \brief Header file for ITS Pcap port layer. - * \author ETSI STF525 - * \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. - * \version 0.1 - */ -#pragma once - -#include - -#include "t_layer.hh" -#include "params.hh" - -class PORT; //! Forward declaration of TITAN class - -/*! - * \class pcap_layer - * \brief This class provides description of ITS PCAP port protocol layer - */ -class pcap_layer : public layer, public PORT { - params _params; //! Layer parameters - pcap_t* _device; //! Device handle - int _pcap_h; //! PCAP instance handle - pcap_dumper_t* _sent_file; //! Write file handle to save sent packet, used in file mode - std::string _time_key; //! \todo - -public: //! \publicsection - /*! - * \brief Specialised constructor - * Create a new instance of the pcap_layer class - * \param[in] p_type \todo - * \param[in] p_param \todo - */ - pcap_layer(const std::string& p_type, const std::string& param); - /*! - * \brief Default destructor - */ - virtual ~pcap_layer(); - - /*! - * \virtual - * \fn void send_data(OCTETSTRING& data, params& params); - * \brief Send bytes formated data to the lower layers - * \param[in] p_data The data to be sent - * \param[in] p_params Some parameters to overwrite default value of the lower layers parameters - */ - virtual void send_data(OCTETSTRING& data, params& params); - /*! - * \virtual - * \fn void receive_data(OCTETSTRING& data, params& params); - * \brief Receive bytes formated data from the lower layers - * \param[in] p_data The bytes formated data received - * \param[in] p_params Some lower layers parameters values when data was received - */ - virtual void receive_data(OCTETSTRING& data, params& info); - - void Handle_Fd_Event_Readable(int fd); -}; diff --git a/ccsrc/Protocols/Pcap/pcap_offline_layer.cc b/ccsrc/Protocols/Pcap/pcap_offline_layer.cc deleted file mode 100644 index e57a4b6..0000000 --- a/ccsrc/Protocols/Pcap/pcap_offline_layer.cc +++ /dev/null @@ -1,228 +0,0 @@ -#if defined (__CYGWIN__) -#define _GNU_SOURCE -#endif -#include -#include -#include -#include -#include - -#include - -#include "pcap_offline_layer_factory.hh" - -#include "loggers.hh" - -#include - -#ifdef __CYGWIN__ -typedef struct { - bpf_int32 tv_sec; /* seconds */ - bpf_int32 tv_usec; /* microseconds */ -}pcap_o_timeval; - -typedef struct pcap_o_pkthdr { - pcap_o_timeval ts; /* time stamp */ - bpf_u_int32 caplen; /* length of portion present */ - bpf_u_int32 len; /* length this packet (off wire) */ -}pcap_o_pkthdr; -#else -typedef struct pcap_pkthdr pcap_o_pkthdr; -typedef struct timeval pcap_o_timeval; -#endif - -pcap_offline_layer::pcap_offline_layer(const std::string& p_type, const std::string& param) : - layer(p_type), PORT(p_type.c_str()), _params(), _device(NULL), _running(FALSE), _time_key("pcap_offline_layer::Handle_Fd_Event_Readable") { - loggers::get_instance().log(">>> pcap_offline_layer::pcap_offline_layer: %s, %s", p_type.c_str(), param.c_str()); - params::convert(_params, param); - - _o_params.insert(std::pair(std::string("timestamp"), std::string())); - - char error_buffer[PCAP_ERRBUF_SIZE]; - params::const_iterator it; - - it = _params.find(std::string("realtime")); - _realtime = ((it != _params.end()) && !it->second.empty()); - - it = _params.find(std::string("loop")); - _loop = ((it != _params.end()) && !it->second.empty()); - - it = _params.find(std::string("file")); - if ((it != _params.end()) && !it->second.empty()) { - const std::string& file = it->second; - _device = pcap_open_offline(file.c_str(), error_buffer); - if (_device) { - - // Add user defined filter - it = _params.find(std::string("filter")); - if ((it != _params.end()) && !it->second.empty()) { - const std::string& filter = it->second; - // Log final PCAP filter - loggers::get_instance().user("pcap_offline_layer::pcap_offline_layer: Filter: %s", filter.c_str()); - struct bpf_program f = {0}; - if (pcap_compile(_device, &f, filter.c_str(), 1, PCAP_NETMASK_UNKNOWN) != 0) { - loggers::get_instance().error("pcap_offline_layer::pcap_offline_layer: Failed to compile PCAP filter"); - }else{ - if (pcap_setfilter(_device, &f) != 0) { - loggers::get_instance().error("pcap_offline_layer::pcap_offline_layer: Failed to set PCAP filter"); - } - } - pcap_freecode(&f); - } - - // create pipe and run thread - if (pipe2(_fd, O_NONBLOCK) == -1) { - loggers::get_instance().error("pcap_offline_layer::pcap_offline_layer: Failed to create a pipe: %s", ::strerror(errno)); - } - // Pass the pipe handler to the polling procedure - loggers::get_instance().log("pcap_offline_layer::pcap_offline_layer: Call handler with descriptor %d", _fd[0]); - Handler_Add_Fd_Read(_fd[0]); - // Create the offline reader thread - _thread = new std::thread(&pcap_offline_layer::run, (void *)this); - if (_thread == NULL) { - loggers::get_instance().error("pcap_offline_layer::pcap_offline_layer: Failed to start offline thread"); - } - while (_running == FALSE) { - std::this_thread::sleep_for(std::chrono::milliseconds(500)); - } - // Thread was started - loggers::get_instance().log("<<< pcap_offline_layer::pcap_offline_layer"); - } - } -} // End of ctor - -pcap_offline_layer::~pcap_offline_layer() { - loggers::get_instance().log(">>> pcap_offline_layer::~pcap_offline_layer"); - - if (_device != NULL) { - if (_thread != NULL) { - _running = FALSE; - // Wait for the working thread to terminate - _thread->join(); - loggers::get_instance().log("pcap_offline_layer::~pcap_offline_layer: Thread were stops"); - // Cleanup - delete _thread; - close(_fd[0]); - close(_fd[1]); - } - pcap_close(_device); - } -} // End of dtor - -void* pcap_offline_layer::run(void* p_this) { - pcap_offline_layer& p = *static_cast(p_this); - return p.thread(); -} - - -static long timeval_diff (const pcap_o_timeval &x, const pcap_o_timeval &y) -{ - pcap_o_timeval z = y; - /* Perform the carry for the later subtraction by updating y. */ - if (x.tv_usec < y.tv_usec) { - int nsec = (y.tv_usec - x.tv_usec) / 1000000 + 1; - z.tv_usec -= 1000000 * nsec; - z.tv_sec += nsec; - } - if (x.tv_usec - z.tv_usec > 1000000) { - int nsec = (x.tv_usec - z.tv_usec) / 1000000; - z.tv_usec += 1000000 * nsec; - z.tv_sec -= nsec; - } - - return (x.tv_sec - z.tv_sec) * 1000 + ((x.tv_usec - z.tv_usec)/1000); -} - -void* pcap_offline_layer::thread() { - pcap_o_pkthdr *pkt_header; - pcap_o_pkthdr lh; - const u_char *pkt_data; - unsigned char pkt_count = 0; - -// loggers::get_instance().log(">>> pcap_offline_layer::run"); - - memset(&lh, 0, sizeof(lh)); - - _running = TRUE; - - int delay = 1000; - params::const_iterator it; - it = _params.find(std::string("delay")); - if(it != _params.cend()){ - delay = std::stoi(it->second); - } - - // wait a bit before sending first packet - std::this_thread::sleep_for(std::chrono::milliseconds(delay)); - - while (_running) { // Loop while _running flag is up - // get next frame - int result = pcap_next_ex(_device, (struct pcap_pkthdr**)&pkt_header, &pkt_data); - if(result == 2){ - if(_loop){ - - }else{ - _running = FALSE; - return NULL; - } - } - if(_realtime) { - // wait for next packet timestamp - if(lh.ts.tv_sec|lh.ts.tv_usec){ - long diff = timeval_diff(pkt_header->ts, lh.ts); - if(diff > 0) { - loggers::get_instance().log("<<< pcap_offline_layer::run: Wait %d msec", diff); - std::this_thread::sleep_for(std::chrono::milliseconds(diff)); - loggers::get_instance().log("<<< pcap_offline_layer::run: Wait done"); - } - } - } - while(_running && !_resume.try_lock()) { - std::this_thread::sleep_for(std::chrono::milliseconds(100)); - } - lh = *pkt_header; -#if 0 - { - char buf[128]; - std::time_t t = pkt_header->ts.tv_sec; - std::tm * pt = std::localtime( &t ); - t = std::strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", pt); - std::sprintf(buf+t, ".%06ld", pkt_header->ts.tv_usec); - _o_params["timestamp"] = std::string(buf); - } -#else - _o_params["timestamp"] = std::to_string(pkt_header->ts.tv_usec); -#endif - _o_data = OCTETSTRING(pkt_header->len, pkt_data); - write(_fd[1], &pkt_count, 1);pkt_count++; - } - -// loggers::get_instance().log("<<< pcap_offline_layer::run"); - return NULL; -} - -void pcap_offline_layer::send_data(OCTETSTRING& data, params& params) { - loggers::get_instance().log("pcap_offline_layer::send_data: Offline mode, operation was skipped"); -} - -void pcap_offline_layer::receive_data(OCTETSTRING& data, params& params) { - loggers::get_instance().log(">>> pcap_offline_layer::receive_data: Received %d bytes", data.lengthof()); - loggers::get_instance().log_to_hexa("Packet dump", data); - - // Pass the packet to the upper layers - receive_to_all_layers(data, params); -} - -void pcap_offline_layer::Handle_Fd_Event_Readable(int fd) { - //loggers::get_instance().log(">>> pcap_offline_layer::Handle_Fd_Event_Readable: %d", fd); - char c[2]; - float duration; - // Process the packet at this layer - loggers::get_instance().set_start_time(_time_key); - this->receive_data(_o_data, _o_params); - loggers::get_instance().set_stop_time(_time_key, duration); - read(_fd[0], &c, 1); - _resume.unlock(); -} - -pcap_offline_layer_factory pcap_offline_layer_factory::_f; diff --git a/ccsrc/Protocols/Pcap/pcap_offline_layer.hh b/ccsrc/Protocols/Pcap/pcap_offline_layer.hh deleted file mode 100644 index 0886683..0000000 --- a/ccsrc/Protocols/Pcap/pcap_offline_layer.hh +++ /dev/null @@ -1,78 +0,0 @@ -/*! - * \file pcap_offline_layer.hh - * \brief Header file for ITS Offline Pcap port layer. - * \author ETSI STF525 - * \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. - * \version 0.1 - */ -#pragma once - -#include -#include - -#include "t_layer.hh" -#include "params.hh" - -#include - -class PORT; //! Forward declaration of TITAN class - -typedef struct pcap pcap_t; - -/*! - * \class pcap_layer - * \brief This class provides description of ITS PCAP port protocol layer - */ -class pcap_offline_layer : public layer, public PORT { - params _params; //! Layer parameters - pcap_t* _device; //! Device handle - std::thread* _thread; //! Thread handle, used to read PCAP file instead of NIC, used in file mode - std::mutex _resume; - bool _running; //! Set to true when the thread is running, used in file mode - bool _realtime; //! Set to true if realtime delay shall be added between packets - bool _loop; //! Set to true if playback shall be looped - int _fd[2]; //! pipe to signal to Titan - - params _o_params; - OCTETSTRING _o_data; - - std::string _time_key; - - static void* run(void* p_this); -public: - void* thread(void); -public: //! \publicsection - /*! - * \brief Specialised constructor - * Create a new instance of the pcap_layer class - * \param[in] p_type \todo - * \param[in] p_param \todo - */ - pcap_offline_layer(const std::string& p_type, const std::string& param); - /*! - * \brief Default destructor - */ - virtual ~pcap_offline_layer(); - - /*! - * \virtual - * \fn void send_data(OCTETSTRING& data, params& params); - * \brief Send bytes formated data to the lower layers - * \param[in] p_data The data to be sent - * \param[in] p_params Some parameters to overwrite default value of the lower layers parameters - */ - virtual void send_data(OCTETSTRING& data, params& params); - /*! - * \virtual - * \fn void receive_data(OCTETSTRING& data, params& params); - * \brief Receive bytes formated data from the lower layers - * \param[in] p_data The bytes formated data received - * \param[in] p_params Some lower layers parameters values when data was received - */ - virtual void receive_data(OCTETSTRING& data, params& info); - - void Handle_Fd_Event_Readable(int fd); -}; diff --git a/ccsrc/Protocols/Pcap/pcap_offline_layer_factory.hh b/ccsrc/Protocols/Pcap/pcap_offline_layer_factory.hh deleted file mode 100644 index ac6e6a6..0000000 --- a/ccsrc/Protocols/Pcap/pcap_offline_layer_factory.hh +++ /dev/null @@ -1,45 +0,0 @@ -/*! - * \file pcap_offline_layer_factory.hh - * \brief Header file for Pcap layer factory. - * \author ETSI STF525 - * \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. - * \version 0.1 - */ -#pragma once - -#include "layer_stack_builder.hh" - -#include "pcap_offline_layer.hh" - -/*! - * \class pcap_offline_layer_factory - * \brief This class provides a factory class to create an pcap_offline_layer class instance - */ -class pcap_offline_layer_factory: public layer_factory { - static pcap_offline_layer_factory _f; //! Reference to the unique instance of this class -public: //! \publicsection - /*! - * \brief Default constructor - * Create a new instance of the udp_layer_factory class - * \remark The PCAP layer identifier is PCAP - */ - pcap_offline_layer_factory() { - // register factory - layer_stack_builder::register_layer_factory("PCAP_FILE", this); - }; - /*! - * \fn layer* create_layer(const std::string & type, const std::string & param); - * \brief Create the layers stack based on the provided layers stack description - * \param[in] p_type The provided layers stack description - * \param[in] p_params Optional parameters - * \return 0 on success, -1 otherwise - * \inline - */ - inline virtual layer* create_layer(const std::string& p_type, const std::string& p_param) { - return new pcap_offline_layer(p_type, p_param); - }; -}; // End of class pcap_offline_layer_factory - diff --git a/ccsrc/Protocols/Tcp/module.mk b/ccsrc/Protocols/Tcp/module.mk deleted file mode 100644 index 8231756..0000000 --- a/ccsrc/Protocols/Tcp/module.mk +++ /dev/null @@ -1,3 +0,0 @@ -sources := tcp_layer.cc -includes := . - diff --git a/ccsrc/Protocols/Tcp/tcp_layer.cc b/ccsrc/Protocols/Tcp/tcp_layer.cc deleted file mode 100644 index 1072375..0000000 --- a/ccsrc/Protocols/Tcp/tcp_layer.cc +++ /dev/null @@ -1,247 +0,0 @@ -#include -#include -#include -#include -#include - -#include "tcp_layer_factory.hh" - -#include "loggers.hh" - -tcp_layer::tcp_layer(const std::string & p_type, const std::string & param) : layer(p_type), SSL_Socket(), PORT(p_type.c_str()), _params(), _client_id{-1}, _time_key("tcp_layer::Handle_Fd_Event_Readable"), _reconnect_on_send{false} { - loggers::get_instance().log(">>> tcp_layer::tcp_layer: %s, %s", to_string().c_str(), param.c_str()); - // Setup parameters - params::convert(_params, param); - _params.log(); - - set_socket_debugging(false); - params::const_iterator it = _params.find(params::debug); - if (it == _params.cend()) { - _params.insert(std::pair(std::string("debug"), "0")); - } else if (it->second.compare("1") == 0) { - set_socket_debugging(true); - } - it = _params.find(std::string("tcp_fragmented")); - if (it == _params.cend()) { - _params.insert(std::pair(std::string("tcp_fragmented"), "0")); - } - bool server_mode = false; - it = _params.find(params::server_mode); - if (it != _params.cend()) { - server_mode = (1 == std::stoi(it->second)); - } else { - _params.insert(std::pair(std::string("server_mode"), "0")); - } - it = _params.find(params::server); - if (it == _params.cend()) { - _params.insert(std::pair(std::string("server"), "127.0.0.1")); // TODO Try using params::server instead of std::string("server") - } - if (!parameter_set(params::server.c_str(), _params[params::server].c_str())) { - loggers::get_instance().warning("tcp_layer::set_parameter: Unprocessed parameter: %s", params::server.c_str()); - } - bool ssl_mode = false; - it = _params.find(params::use_ssl); - if (it == _params.cend()) { - _params.insert(std::pair(std::string("use_ssl"), "0")); - } else if (it->second.compare("1") == 0) { - _params.insert(std::pair(std::string("use_ssl"), "1")); - ssl_mode = true; - } - set_ssl_use_ssl(ssl_mode); - it = _params.find(params::port); - if (it == _params.cend()) { - if (_params[params::use_ssl].compare("0") == 0) { // Use standard HTTP port - _params.insert(std::pair(std::string("port"), "80")); - } else { // Use standard HTTPS port - _params.insert(std::pair(std::string("port"), "443")); - } - } - if (!parameter_set(remote_port_name(), _params[params::port].c_str())) { - loggers::get_instance().warning("tcp_layer::set_parameter: Unprocessed parameter: %s", params::port.c_str()); - } - it = _params.find(params::local_port); - if (it == _params.cend()) { - if (_params[params::use_ssl].compare("0") == 0) { // Use standard HTTP local_port - _params.insert(std::pair(std::string("local_port"), "80")); - } else { // Use standard HTTPS local_port - _params.insert(std::pair(std::string("local_port"), "443")); - } - } - if (!parameter_set(local_port_name(), _params[params::local_port].c_str())) { - loggers::get_instance().warning("tcp_layer::set_parameter: Unprocessed parameter: %s", params::local_port.c_str()); - } - - parameter_set(use_connection_ASPs_name(), (!server_mode) ? "yes" : "no"); - parameter_set(server_backlog_name(), "1024"); - loggers::get_instance().log("tcp_layer::tcp_layer: server_mode=%x", server_mode); - set_server_mode(server_mode); - if (server_mode) { - parameter_set("serverPort", _params[params::local_port].c_str()); - } - 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); - - map_user(); - - parameter_set(client_TCP_reconnect_name(), "yes"); - - 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); - if (_client_id != -1) { - remove_client(_client_id); - } - - unmap_user(); -} - -void tcp_layer::Handle_Fd_Event(int fd, boolean is_readable, boolean is_writable, boolean is_error) -{ - loggers::get_instance().log(">>> tcp_layer::Handle_Fd_Event: %d", fd); - Handle_Socket_Event(fd, is_readable, is_writable, is_error); - log_debug("<<< tcp_layer::Handle_Fd_Event"); -} - -void tcp_layer::Handle_Timeout(double time_since_last_call) -{ - loggers::get_instance().log(">>> tcp_layer::Handle_Timeout: %f", time_since_last_call); - Handle_Timeout_Event(time_since_last_call); - loggers::get_instance().log("<<< tcp_layer::Handle_Timeout"); -} - -void tcp_layer::send_data(OCTETSTRING& data, params& params) { - loggers::get_instance().log_msg(">>> tcp_layer::send_data: ", data); - - loggers::get_instance().log("tcp_layer::send_data: SSL mode: %x", get_ssl_use_ssl()); - loggers::get_instance().log("tcp_layer::send_data: server_mode: %s", _params[params::server_mode].c_str()); - loggers::get_instance().log("tcp_layer::send_data: peer_list_get_nr_of_peers: %d", peer_list_get_nr_of_peers()); - - if ((_params[params::server_mode].compare("0") == 0) && (peer_list_get_nr_of_peers() == 0)) { - // Reconnect (e.g. HTTP connection lost - loggers::get_instance().log("tcp_layer::send_data: Re-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); - } - send_outgoing(static_cast(data), data.lengthof(), _client_id); -} - -void tcp_layer::receive_data(OCTETSTRING& data, params& params) { - loggers::get_instance().log_msg(">>> tcp_layer::receive_data: ", data); - - receive_to_all_layers(data, params); -} - -void tcp_layer::message_incoming(const unsigned char* message_buffer, int length, int client_id) { - loggers::get_instance().log(">>> tcp_layer::message_incoming"); - loggers::get_instance().log_to_hexa("tcp_layer::message_incoming: ", message_buffer, length); - - - float duration; - loggers::get_instance().set_start_time(_time_key); - OCTETSTRING data(length, message_buffer); - params params; - this->receive_data(data, params); // TODO Check execution time for decoding operation - loggers::get_instance().set_stop_time(_time_key, duration); -} - -void tcp_layer::client_connection_opened(int p_client_id) -{ - loggers::get_instance().log(">>> tcp_layer::client_connection_opened: %d", p_client_id); - _client_id = p_client_id; -} - -bool tcp_layer::add_user_data(int p_client_id) -{ - loggers::get_instance().log(">>> tcp_layer::add_user_data: %d", p_client_id); - if (_params[params::use_ssl].compare("0") == 0) { - loggers::get_instance().log("tcp_layer::add_user_data: Non secured mode"); - return Abstract_Socket::add_user_data(p_client_id); - } - loggers::get_instance().log("tcp_layer::add_user_data: SSL mode"); - return SSL_Socket::add_user_data(p_client_id); -} - -int tcp_layer::send_message_on_fd(int p_client_id, const unsigned char * message_buffer, int length_of_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); - } - - 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); -} - -int tcp_layer::send_message_on_nonblocking_fd(int p_client_id, const unsigned char * message_buffer, int length_of_message) -{ - 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); - } - - 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); -} - -int tcp_layer::receive_message_on_fd(int p_client_id) -{ - loggers::get_instance().log(">>> tcp_layer::receive_message_on_fd: %d", p_client_id); - - if(get_user_data(p_client_id)) { - // INFO: it is assumed that only SSL_Socket assigns user data to each peer - loggers::get_instance().log("tcp_layer::receive_message_on_fd: SSL mode"); - return SSL_Socket::receive_message_on_fd(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); -} - -void tcp_layer::peer_disconnected(int p_client_id) -{ - loggers::get_instance().log(">>> tcp_layer::peer_disconnected: %d", p_client_id); - - Abstract_Socket::peer_disconnected(p_client_id); - _client_id = -1; -} - -tcp_layer_factory tcp_layer_factory::_f; - diff --git a/ccsrc/Protocols/Tcp/tcp_layer.hh b/ccsrc/Protocols/Tcp/tcp_layer.hh deleted file mode 100644 index 166a145..0000000 --- a/ccsrc/Protocols/Tcp/tcp_layer.hh +++ /dev/null @@ -1,99 +0,0 @@ -/*! - * \file tcp_layer.hh - * \brief Header file for ITS TCP socket based protocol port layer. - * \author ETSI STF525 - * \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. - * \version 0.1 - */ -#pragma once - -#include "layer.hh" - -#include "Abstract_Socket.hh" - -class PORT; //! Forward declaration of TITAN class - -/*! - * \class tcp_layer - * \brief This class provides description of ITS TCP port protocol layer - */ -class tcp_layer : public layer, public SSL_Socket, public PORT { - params _params; //! Layer parameters - int _client_id; //! Connection identifier - std::string _time_key; //! \todo - bool _reconnect_on_send; //! Set to true if connection shall be done when sending data. Otherwise, connection is established by the \see constructor - -public: //! \publicsection - /*! - * \brief Specialised constructor - * Create a new instance of the tcp_layer class - * \param[in] p_type \todo - * \param[in] p_param \todo - */ - tcp_layer(const std::string& p_type, const std::string& p_param); - /*! - * \brief Default destructor - * \remark If \see _reconnect_on_send is set to false, the disconnection is done by the destructor - */ - virtual ~tcp_layer(); - - /*! - * \virtual - * \fn void send_data(OCTETSTRING& data, params& params); - * \brief Send bytes formated data to the lower layers - * \param[in] p_data The data to be sent - * \param[in] p_params Some parameters to overwrite default value of the lower layers parameters - * \virtual - */ - virtual void send_data(OCTETSTRING& data, params& params); - /*! - * \virtual - * \fn void receive_data(OCTETSTRING& data, params& params); - * \brief Receive bytes formated data from the lower layers - * \param[in] p_data The bytes formated data received - * \param[in] p_params Some lower layers parameters values when data was received - */ - virtual void receive_data(OCTETSTRING& data, params& info); - - /*! - * \virtual - * \fn void message_incoming(const unsigned char* message_buffer, int length, int client_id = -1); - * \brief Receive bytes formated data from the lower layers - * \param[in] p_buffer The bytes formated data received - * \param[in] p_length The number of bytes received - * \param[in] p_client_id The connection identifier.Default: -1 - */ - virtual void message_incoming(const unsigned char* p_buffer, int p_length, int p_client_id = -1); - -protected: //! \protectedsection - void Add_Fd_Read_Handler(int fd) { Handler_Add_Fd_Read(fd); }; - void Add_Fd_Write_Handler(int fd) { Handler_Add_Fd_Write(fd); }; - void Remove_Fd_Read_Handler(int fd) { Handler_Remove_Fd_Read(fd); }; - void Remove_Fd_Write_Handler(int fd) { Handler_Remove_Fd_Write(fd); }; - void Remove_Fd_All_Handlers(int fd) { Handler_Remove_Fd(fd); }; - void Handler_Uninstall() { Uninstall_Handler(); } - void Timer_Set_Handler(double call_interval, boolean is_timeout = TRUE, - boolean call_anyway = TRUE, boolean is_periodic = TRUE) { - Handler_Set_Timer(call_interval, is_timeout, call_anyway, is_periodic); - }; - - const char* remote_address_name() { return params::server.c_str(); }; - const char* remote_port_name() { return params::port.c_str(); }; - const char* socket_debugging_name() { return params::debug.c_str(); }; - const char* ssl_use_ssl_name() { return params::use_ssl.c_str(); }; - - void client_connection_opened(int p_client_id); - bool add_user_data(int p_client_id); - int send_message_on_fd(int p_client_id, const unsigned char * message_buffer, int length_of_message); - int send_message_on_nonblocking_fd(int client_id, const unsigned char * message_buffer, int length_of_message); - int receive_message_on_fd(int p_client_id); - void peer_disconnected(int p_client_id); - -private: //! \privatesection - void Handle_Fd_Event(int fd, boolean is_readable, boolean is_writable, boolean is_error); - void Handle_Timeout(double time_since_last_call); -}; // End of class tcp_layer - diff --git a/ccsrc/Protocols/Tcp/tcp_layer_factory.hh b/ccsrc/Protocols/Tcp/tcp_layer_factory.hh deleted file mode 100644 index 47a1613..0000000 --- a/ccsrc/Protocols/Tcp/tcp_layer_factory.hh +++ /dev/null @@ -1,44 +0,0 @@ -/*! - * \file tcp_layer_factory.hh - * \brief Header file for ITS TCP socket based protocol layer factory. - * \author ETSI STF525 - * \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. - * \version 0.1 - */ -#pragma once - -#include "layer_stack_builder.hh" - -#include "tcp_layer.hh" - -/*! - * \class tcp_layer_factory - * \brief This class provides a factory class to create an tcp_layer class instance - */ -class tcp_layer_factory : public layer_factory { - static tcp_layer_factory _f; //! Reference to the unique instance of this class -public: //! \publicsection - /*! - * \brief Default constructor - * Create a new instance of the tcp_layer class - * \remark The TCP socket based layer identifier is TCP - */ - tcp_layer_factory() { - // Register factory - layer_stack_builder::register_layer_factory("TCP", this); - }; - /*! - * \fn layer* create_layer(const std::string & type, const std::string & param); - * \brief Create the layers stack based on the provided layers stack description - * \param[in] p_type The provided layers stack description - * \param[in] p_params Optional parameters - * \return 0 on success, -1 otherwise - */ - inline virtual layer* create_layer(const std::string& p_type, const std::string& p_param){ - return new tcp_layer(p_type, p_param); - }; -}; // End of class tcp_layer_factory - diff --git a/ccsrc/loggers/loggers.cc b/ccsrc/loggers/loggers.cc deleted file mode 100644 index fba1c59..0000000 --- a/ccsrc/loggers/loggers.cc +++ /dev/null @@ -1,4 +0,0 @@ -#include "loggers.hh" - -std::unique_ptr loggers::_instance = static_cast>(new loggers); - diff --git a/ccsrc/loggers/loggers.hh b/ccsrc/loggers/loggers.hh deleted file mode 100644 index 6f252f5..0000000 --- a/ccsrc/loggers/loggers.hh +++ /dev/null @@ -1,289 +0,0 @@ -/*! - * \file loogers.hh - * \brief Header file for the logger framework. - * \author ETSI STF525 - * \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. - * \version 0.1 - */ -#pragma once - -#include -#include -#include -#include -#include - -/** -class Base_Type; -class OCTETSTRING; -class TTCN_Buffer; -class TTCN_Logger; -enum TTCN_Logger::Severity; -extern void TTCN_error(const char *err_msg, ...) __attribute__ ((__format__ (__printf__, 1, 2), __noreturn__)); -extern void TTCN_error_begin(const char *err_msg, ...) __attribute__ ((__format__ (__printf__, 1, 2))); -extern void TTCN_error_end() __attribute__ ((__noreturn__)); -void TTCN_warning(const char *warning_msg, ...) __attribute__ ((__format__ (__printf__, 1, 2))); -extern void TTCN_warning_begin(const char *warning_msg, ...) __attribute__ ((__format__ (__printf__, 1, 2))); -extern void TTCN_warning_end(); -**/ - -using namespace std; // Required for isnan() -#include - -/*! - * \class loggers - * \brief This class provides basic functionalities for an ITS dictionary - * \implements Singleton pattern - * \todo Remove reference to TTCN3.hh - */ -class loggers { -private: //! \privatesection - static std::unique_ptr _instance; //! Smart pointer to the unique instance of the logger framework - std::map _times; //! Timer used to measure execution time between calls to methods \loggers::set_start_time and \loggers::set_stop_time - - /*! - * \brief Default constructor - * Create a new instance of the loggers class - * \private - */ - explicit loggers() : _times() { }; - - inline void log_time_exec(const char *p_fmt, ...); - -public: //! \publicsection - /*! - * \brief Default destructor - */ - virtual ~loggers() {}; - - /*! - * \fn static loggers& get_instance(); - * \brief Accessor for the unique instance of the logger framework - * \inline - */ - static inline loggers& get_instance() { return *_instance.get(); }; - - /*! - * \fn void log_to_hexa(const char *p_prompt, const TTCN_Buffer& buffer); - * \brief Hexa dump of the \see TTCN_Buffer buffer - * \param[in] p_prompt Label of the log to be produced - * \param[in] buffer The TTCN_Buffer buffer to dump - * \inline - */ - inline void log_to_hexa(const char *p_prompt, const TTCN_Buffer& buffer); - /*! - * \fn void log_to_hexa(const char *p_prompt, const OCTETSTRING& msg); - * \brief Hexa dump of the \see OCTETSTRING buffer - * \param[in] p_prompt Label of the log to be produced - * \param[in] msg The OCTETSTRING buffer to dump - * \inline - */ - inline void log_to_hexa(const char *p_prompt, const OCTETSTRING& msg); - /*! - * \fn void log_to_hexa(const char *p_prompt, const unsigned char* msg, const size_t msg_size); - * \brief Hexa dump of the provided buffer - * \param[in] p_prompt Label of the log to be produced - * \param[in] msg The buffer to dump - * \inline - */ - inline void log_to_hexa(const char *p_prompt, const unsigned char* msg, const size_t msg_size); - /*! - * \fn void log_msg(const char *p_prompt, const Base_Type& p_type); - * \brief Debug log of TITAN data structures - * \param[in] p_prompt Label of the log to be produced - * \param[in] msg The TITAN data structure to log - * \inline - */ - inline void log_msg(const char *p_prompt, const Base_Type& p_type); - /*! - * \fn void log(const char *p_fmt, ...); - * \brief Debug message based on printf-compliant formatting message - * \param[in] p_fmt The printf-compliant format of the message to log - * \param[in] ... The arguments - * \inline - */ - inline void log(const char *p_fmt, ...); - - /*! - * \fn void user_msg(const char *p_prompt, const Base_Type& p_type); - * \brief User message of TITAN data structures - * \param[in] p_prompt Label of the log to be produced - * \param[in] msg The TITAN data structure to log - * \inline - */ - inline void user_msg(const char *p_prompt, const Base_Type& p_type); - /*! - * \fn void user(const char *p_fmt, ...); - * \brief User message based on printf-compliant formatting message - * \param[in] p_fmt The printf-compliant format of the message to log - * \param[in] ... The arguments - * \inline - */ - inline void user(const char *p_fmt, ...); - - /*! - * \fn void user_msg(const char *p_prompt, const Base_Type& p_type); - * \brief Warning message of TITAN data structures - * \param[in] p_prompt Label of the log to be produced - * \param[in] msg The TITAN data structure to log - * \inline - */ - inline void warning_msg(const char *p_prompt, const Base_Type& p_type); - /*! - * \fn void user(const char *p_fmt, ...); - * \brief Warning message based on printf-compliant formatting message - * \param[in] p_fmt The printf-compliant format of the message to log - * \param[in] ... The arguments - * \inline - */ - inline void warning(const char *p_fmt, ...); - - /*! - * \fn void user(const char *p_fmt, ...); - * \brief Error message based on printf-compliant formatting message - * \param[in] p_fmt The printf-compliant format of the message to log - * \param[in] ... The arguments - * \inline - */ - inline void error(const char *p_fmt, ...); - - /*! - * \fn void set_start_time(std::string& p_time_key); - * \brief Start execution time measurement - * \param[in] p_time_key A timer identifier (any string) - * \inline - */ - inline void set_start_time(std::string& p_time_key); - /*! - * \fn void set_stop_time(std::string& p_time_key, float& p_time); - * \brief Stop execution time measurement - * \param[in] p_time_key The timer identifier provided while calling \see loggers::set_start_time method - * \param[out] p_time The execution time measured in milliseconds - * \inline - */ - inline void set_stop_time(std::string& p_time_key, float& p_time); -}; // End of class loggers - -void loggers::log_to_hexa(const char *p_prompt, const TTCN_Buffer & buffer) -{ - TTCN_Logger::begin_event(TTCN_Logger::DEBUG_UNQUALIFIED); - TTCN_Logger::log_event_str(p_prompt); - buffer.log(); - TTCN_Logger::end_event(); -} - -void loggers::log_to_hexa(const char *p_prompt, const OCTETSTRING& msg) -{ - TTCN_Logger::begin_event(TTCN_Logger::DEBUG_UNQUALIFIED); - TTCN_Logger::log_event_str(p_prompt); - TTCN_Logger::log_event("Size: %d,\nMsg: ", msg.lengthof()); - - for(int i = 0; i < msg.lengthof(); i++) { - TTCN_Logger::log_event(" %02x", ((const unsigned char*)msg)[i]); - } - TTCN_Logger::log_event("\n"); - TTCN_Logger::end_event(); -} - -void loggers::log_to_hexa(const char *p_prompt, const unsigned char* msg, const size_t msg_size) -{ - TTCN_Logger::begin_event(TTCN_Logger::DEBUG_UNQUALIFIED); - TTCN_Logger::log_event_str(p_prompt); - for(size_t i = 0; i < msg_size; i++) { - TTCN_Logger::log_event(" %02x", *(msg + i)); - } - TTCN_Logger::log_event("\n"); - TTCN_Logger::end_event(); -} - -void loggers::log_msg(const char *p_prompt, const Base_Type& p_type) -{ - TTCN_Logger::begin_event(TTCN_Logger::DEBUG_UNQUALIFIED); - TTCN_Logger::log_event_str(p_prompt); - p_type.log(); - TTCN_Logger::end_event(); -} - -void loggers::log(const char *p_fmt, ...) -{ - TTCN_Logger::begin_event(TTCN_Logger::DEBUG_UNQUALIFIED); - va_list args; - va_start(args, p_fmt); - TTCN_Logger::log_event_va_list(p_fmt, args); - va_end(args); - TTCN_Logger::end_event(); -} - -void loggers::user_msg(const char *p_prompt, const Base_Type& p_type) -{ - TTCN_Logger::begin_event(TTCN_Logger::USER_UNQUALIFIED); - TTCN_Logger::log_event_str(p_prompt); - p_type.log(); - TTCN_Logger::end_event(); -} - -void loggers::user(const char *p_fmt, ...) -{ - TTCN_Logger::begin_event(TTCN_Logger::USER_UNQUALIFIED); - va_list args; - va_start(args, p_fmt); - TTCN_Logger::log_event_va_list(p_fmt, args); - va_end(args); - TTCN_Logger::end_event(); -} - -void loggers::warning(const char *p_fmt, ...) -{ - TTCN_Logger::begin_event(TTCN_Logger::WARNING_UNQUALIFIED); - va_list args; - va_start(args, p_fmt); - TTCN_Logger::log_event_va_list(p_fmt, args); - va_end(args); - TTCN_Logger::end_event(); -} - -void loggers::warning_msg(const char *p_prompt, const Base_Type& p_type) -{ - TTCN_Logger::begin_event(TTCN_Logger::WARNING_UNQUALIFIED); - TTCN_Logger::log_event_str(p_prompt); - p_type.log(); - TTCN_Logger::end_event(); -} - -void loggers::error(const char *p_fmt, ...) -{ - va_list args; - va_start(args, p_fmt); - TTCN_error(p_fmt, args); - va_end(args); -} - -void loggers::set_start_time(std::string& p_time_key) -{ - _times[p_time_key] = std::clock(); -} - -void loggers::set_stop_time(std::string& p_time_key, float& p_time) -{ - std::map::iterator it = _times.find(p_time_key); - if (it != loggers::_times.end()) { - p_time = (std::clock() - _times[p_time_key]) * 1000.0 / CLOCKS_PER_SEC; // in milliseconds - _times.erase(it); - loggers::get_instance().log_time_exec("%s: Execution duration: %f ms", p_time_key.c_str(), p_time); - - } -} - -void loggers::log_time_exec(const char *p_fmt, ...) -{ - TTCN_Logger::begin_event(TTCN_Logger::EXECUTOR_RUNTIME); - va_list args; - va_start(args, p_fmt); - TTCN_Logger::log_event_va_list(p_fmt, args); - va_end(args); - TTCN_Logger::end_event(); -} - diff --git a/ccsrc/loggers/module.mk b/ccsrc/loggers/module.mk deleted file mode 100644 index c735f82..0000000 --- a/ccsrc/loggers/module.mk +++ /dev/null @@ -1,3 +0,0 @@ -sources := loggers.cc -includes := . - diff --git a/etc/AtsMec/AtsMec_Sandbox.cf_ b/etc/AtsMec/AtsMec_Sandbox.cf_ deleted file mode 100644 index c6006e9..0000000 --- a/etc/AtsMec/AtsMec_Sandbox.cf_ +++ /dev/null @@ -1,575 +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 := "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 := "/sbxdflb1km/mep1" # Need to sign in on https://try-mec.etsi.org/, section 'Try-it from your MEC application' - -# LibMec_Pixits -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/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 -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_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" -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_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 := "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 - -# 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 -# 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 | TESTCASE -#ConsoleMask := ERROR | WARNING | USER | MATCHING | EXECUTOR_RUNTIME | VERDICTOP | PORTEVENT | TESTCASE -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=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=80,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 - -# 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 -# 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 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 -# [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_Lewis.cf_ b/etc/AtsMec_Location/AtsMec_Lewis.cf_ similarity index 98% rename from etc/AtsMec/AtsMec_Lewis.cf_ rename to etc/AtsMec_Location/AtsMec_Lewis.cf_ index e660e3b..4255964 100644 --- a/etc/AtsMec/AtsMec_Lewis.cf_ +++ b/etc/AtsMec_Location/AtsMec_Lewis.cf_ @@ -8,11 +8,11 @@ LibCommon_Time.PX_TAC := 30.0 LibCommon_Sync.PX_TSYNC_TIME_LIMIT := 30.0; LibCommon_Sync.PX_TSHUT_DOWN_TIME_LIMIT := 30.0; -LibItsHttp_Pics.PICS_HEADER_HOST := "172.22.1.6" +LibHttp_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" +LibHttp_Pics.PICS_HEADER_CONTENT_TYPE := "application/json" +LibHttp_Pics.PICS_USE_TOKEN_HEADER := true +#LibHttp_Pics.PICS_TOKEN_HEADER := "Basic WrongToken" LibMec_Pics.PICS_ROOT_API := "etsi-013" diff --git a/etc/AtsMec/AtsMec_Mockoon.cf_ b/etc/AtsMec_Location/AtsMec_Mockoon.cf_ similarity index 99% rename from etc/AtsMec/AtsMec_Mockoon.cf_ rename to etc/AtsMec_Location/AtsMec_Mockoon.cf_ index 893163f..7909087 100644 --- a/etc/AtsMec/AtsMec_Mockoon.cf_ +++ b/etc/AtsMec_Location/AtsMec_Mockoon.cf_ @@ -8,11 +8,11 @@ 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" #"192.168.1.39" +LibHttp_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" +LibHttp_Pics.PICS_HEADER_CONTENT_TYPE := "application/json" +LibHttp_Pics.PICS_USE_TOKEN_HEADER := true +#LibHttp_Pics.PICS_TOKEN_HEADER := "Basic WrongToken" LibMec_Pics.PICS_ROOT_API := "/sbx1y8q0x9/mep1" # Need to sign in on https://try-mec.etsi.org/, section 'Try-it from your MEC application' diff --git a/etc/AtsMec_Location/AtsMec_Sandbox.cf_ b/etc/AtsMec_Location/AtsMec_Sandbox.cf_ new file mode 100644 index 0000000..3a5c961 --- /dev/null +++ b/etc/AtsMec_Location/AtsMec_Sandbox.cf_ @@ -0,0 +1,161 @@ +[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; + +LibHttp_Pics.PICS_HEADER_HOST := "try-mec.etsi.org" #"192.168.1.39" + +LibHttp_Pics.PICS_HEADER_CONTENT_TYPE := "application/json" +LibHttp_Pics.PICS_USE_TOKEN_HEADER := true +#LibHttp_Pics.PICS_TOKEN_HEADER := "Basic WrongToken" + +LibMec_Pics.PICS_ROOT_API := "/sbx1w3aaas/mep1" # Need to sign in on https://try-mec.etsi.org/, section 'Try-it from your MEC application' + +# LibMec_Pixits +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/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-013 LocationAPI +LocationAPI_Pics.PICS_LOCATION_API_SUPPORTED := true +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 := "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 + +[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_Location/%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 | TESTCASE +#ConsoleMask := ERROR | WARNING | USER | MATCHING | EXECUTOR_RUNTIME | VERDICTOP | PORTEVENT | TESTCASE +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_notif.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server_mode=1,local_port=443,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 + +# 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 + +[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/titan-test-system-framework b/titan-test-system-framework new file mode 160000 index 0000000..13e13a5 --- /dev/null +++ b/titan-test-system-framework @@ -0,0 +1 @@ +Subproject commit 13e13a5759ad795a8726bdcdad30232d454fafd2 diff --git a/ttcn/AtsMec/AtsMec_Ams_TestCases.ttcn b/ttcn/AtsMec/AtsMec_Ams/AtsMec_Ams_TestCases.ttcn similarity index 99% rename from ttcn/AtsMec/AtsMec_Ams_TestCases.ttcn rename to ttcn/AtsMec/AtsMec_Ams/AtsMec_Ams_TestCases.ttcn index 79fdc78..4778a5e 100644 --- a/ttcn/AtsMec/AtsMec_Ams_TestCases.ttcn +++ b/ttcn/AtsMec/AtsMec_Ams/AtsMec_Ams_TestCases.ttcn @@ -16,11 +16,11 @@ 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 LibHttp_TypesAndValues all; + import from LibHttp_Functions all; + import from LibHttp_Templates all; + import from LibHttp_JsonTemplates all; + import from LibHttp_TestSystem all; // LibMec_LocationAPI import from Ams_Templates all; diff --git a/ttcn/AtsMec/AtsMec_TestControl.ttcn b/ttcn/AtsMec/AtsMec_Ams/AtsMec_Ams_TestControl.ttcn similarity index 100% rename from ttcn/AtsMec/AtsMec_TestControl.ttcn rename to ttcn/AtsMec/AtsMec_Ams/AtsMec_Ams_TestControl.ttcn diff --git a/ttcn/AtsMec/module.mk b/ttcn/AtsMec/AtsMec_Ams/module.mk similarity index 94% rename from ttcn/AtsMec/module.mk rename to ttcn/AtsMec/AtsMec_Ams/module.mk index 77286db..449db40 100644 --- a/ttcn/AtsMec/module.mk +++ b/ttcn/AtsMec/AtsMec_Ams/module.mk @@ -1,4 +1,4 @@ -suite := AtsMEC +suite := AtsMec sources := \ AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn \ @@ -32,6 +32,7 @@ modules := ../LibCommon \ ../LibMec/DeviceApplicationInterfaceAPI \ ../LibMec/WlanInformationAPI \ ../LibMec/ApplicationMobilityServiceAPI \ + ../LibMec/FixedAccessInformationAPI \ ../../ccsrc/Ports/LibHttp \ ../../ccsrc/EncDec/LibHttp \ ../../ccsrc/EncDec/LibMec \ diff --git a/ttcn/AtsMec/AtsMec_DeviceApplicationInterfaceAPI_TestCases.ttcn b/ttcn/AtsMec/AtsMec_DeviceApplicationInterface/AtsMec_DeviceApplicationInterfaceAPI_TestCases.ttcn similarity index 99% rename from ttcn/AtsMec/AtsMec_DeviceApplicationInterfaceAPI_TestCases.ttcn rename to ttcn/AtsMec/AtsMec_DeviceApplicationInterface/AtsMec_DeviceApplicationInterfaceAPI_TestCases.ttcn index 4386301..d0208a7 100644 --- a/ttcn/AtsMec/AtsMec_DeviceApplicationInterfaceAPI_TestCases.ttcn +++ b/ttcn/AtsMec/AtsMec_DeviceApplicationInterface/AtsMec_DeviceApplicationInterfaceAPI_TestCases.ttcn @@ -21,11 +21,11 @@ module AtsMec_DeviceApplicationInterfaceAPI_TestCases { 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 LibHttp_TypesAndValues all; + import from LibHttp_Functions all; + import from LibHttp_Templates all; + import from LibHttp_JsonTemplates all; + import from LibHttp_TestSystem all; // LibMec/DeviceApplicationInterface import from DeviceApplicationInterfaceAPI_TypesAndValues all; diff --git a/ttcn/AtsMec/AtsMec_DeviceApplicationInterface/AtsMec_DeviceApplicationInterfaceAPI_TestControl.ttcn b/ttcn/AtsMec/AtsMec_DeviceApplicationInterface/AtsMec_DeviceApplicationInterfaceAPI_TestControl.ttcn new file mode 100644 index 0000000..4c74736 --- /dev/null +++ b/ttcn/AtsMec/AtsMec_DeviceApplicationInterface/AtsMec_DeviceApplicationInterfaceAPI_TestControl.ttcn @@ -0,0 +1,126 @@ +module AtsMec_TestControl { + + // LibMec/LocationAPI + import from LocationAPI_Pics all; + // LibMec/UEidentityAPI + import from UEidentityAPI_Pics all; + // LibMec/RnisAPI + import from RnisAPI_Pics all; + // LibMec/TrafficManagementAPI + import from TrafficManagementAPI_Pics all; + // LibMec/AppEnablementAPI + import from EdgePlatformApplicationEnablementAPI_Pics all; + // LibMec/UEAppInterfaceAPI + import from UEAppInterfaceAPI_Pics all; + + // LibMec + import from LibMec_Pics all; + + // AtsMec + import from AtsMec_LocationAPI_TestCases all; + import from AtsMec_UEidentityAPI_TestCases all; +// import from AtsMec_RadioNodeLocationAPI_TestCases all; + import from AtsMec_RnisAPI_TestCases all; + import from AtsMec_TrafficManagementAPI_TestCases all; + import from AtsMec_EdgePlatformApplicationEnablementAPI_TestCases all; + import from AtsMec_UEAppInterfaceAPI_TestCases all; + + control { + + if (PICS_MEC_PLAT and PICS_SERVICES) { + if (PICS_UE_IDENTITY_API_SUPPORTED) { + execute(TC_MEC_MEC014_SRV_UETAG_001_OK()); + execute(TC_MEC_MEC014_SRV_UETAG_001_BR()); + execute(TC_MEC_MEC014_SRV_UETAG_001_NF()); + execute(TC_MEC_MEC014_SRV_UETAG_002_OK()); + execute(TC_MEC_MEC014_SRV_UETAG_002_BR()); + execute(TC_MEC_MEC014_SRV_UETAG_002_PF()); + } + if (PICS_LOCATION_API_SUPPORTED) { + execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_OK()); + execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_BR()); + execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_NF()); + + execute(TC_MEC_MEC013_SRV_UELOCSUB_001_OK()); + execute(TC_MEC_MEC013_SRV_UELOCSUB_001_BR()); + execute(TC_MEC_MEC013_SRV_UELOCSUB_002_OK()); + execute(TC_MEC_MEC013_SRV_UELOCSUB_002_NF()); + + execute(TC_MEC_MEC013_SRV_UETRACKSUB_001_OK()); + execute(TC_MEC_MEC013_SRV_UETRACKSUB_001_BR()); + execute(TC_MEC_MEC013_SRV_UETRACKSUB_002_OK()); + execute(TC_MEC_MEC013_SRV_UETRACKSUB_002_NF()); + + execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_OK()); + execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_BR()); + execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_NF()); + + execute(TC_MEC_MEC013_SRV_UEINFSUB_001_OK()); + execute(TC_MEC_MEC013_SRV_UEINFSUB_001_BR()); + execute(TC_MEC_MEC013_SRV_UEINFSUB_002_OK()); + execute(TC_MEC_MEC013_SRV_UEINFSUB_002_NF()); + +// execute(TC_MEC_PLAT_RLOC_001_OK()); +// execute(TC_MEC_PLAT_RLOC_001_NF()); + } + + if (PICS_APP_ENABLEMENT_API_SUPPORTED) { + /*execute(TC_MEC_SRV_TRANS_001_OK()); + execute(TC_MEC_SRV_TRAF_001_OK()); + execute(TC_MEC_SRV_TRAF_002_OK()); + execute(TC_MEC_SRV_TRAF_003_OK()); + execute(TC_MEC_SRV_TRAF_001_NF());*/ + } + + if (PICS_ENABLE_UE_APP_CTX) { + execute(TC_MEC_MEC016_MEO_UEAPPCTX_001_OK()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_001_BR()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_OK()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_BR()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_NF()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_003_OK()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_003_NF()); + execute(TC_MEC_MEC016_MEO_UEAPPS_001_OK()); + execute(TC_MEC_MEC016_MEO_UEAPPS_001_BR()); + execute(TC_MEC_MEC016_MEO_UEAPPS_001_NF()); + } + } + + /*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()); + execute(TC_MEC_MEC012_SRV_RNIS_011_BR()); + execute(TC_MEC_MEC012_SRV_RNIS_012_BR()); + } + if (PICS_RNIS_QUERY) { + execute(TC_MEC_MEC012_SRV_RNIS_016_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_016_BR()); + execute(TC_MEC_MEC012_SRV_RNIS_016_NF()); + execute(TC_MEC_MEC012_SRV_RNIS_017_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_017_BR()); + execute(TC_MEC_MEC012_SRV_RNIS_017_NF()); + execute(TC_MEC_MEC012_SRV_RNIS_018_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_018_BR()); + execute(TC_MEC_MEC012_SRV_RNIS_018_NF()); + execute(TC_MEC_MEC012_SRV_RNIS_019_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_019_BR()); + execute(TC_MEC_MEC012_SRV_RNIS_019_NF()); + } + }*/ + + if (PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED) { + execute(TC_MEC_MEC015_SRV_TM_001_OK()); + execute(TC_MEC_MEC015_SRV_TM_002_OK()); + execute(TC_MEC_MEC015_SRV_TM_002_BR()); + execute(TC_MEC_MEC015_SRV_TM_002_NF()); + } + } // End of 'control' statement + +} // End of module AtsMec_TestControl diff --git a/ttcn/AtsMec/AtsMec_UEAppInterfaceAPI_TestCases.ttcn b/ttcn/AtsMec/AtsMec_DeviceApplicationInterface/AtsMec_UEAppInterfaceAPI_TestCases.ttcn similarity index 99% rename from ttcn/AtsMec/AtsMec_UEAppInterfaceAPI_TestCases.ttcn rename to ttcn/AtsMec/AtsMec_DeviceApplicationInterface/AtsMec_UEAppInterfaceAPI_TestCases.ttcn index 3066da2..7952f35 100644 --- a/ttcn/AtsMec/AtsMec_UEAppInterfaceAPI_TestCases.ttcn +++ b/ttcn/AtsMec/AtsMec_DeviceApplicationInterface/AtsMec_UEAppInterfaceAPI_TestCases.ttcn @@ -15,11 +15,11 @@ module AtsMec_UEAppInterfaceAPI_TestCases { 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 LibHttp_TypesAndValues all; + import from LibHttp_Functions all; + import from LibHttp_Templates all; + import from LibHttp_JsonTemplates all; + import from LibHttp_TestSystem all; // LibMec/UEAppInterfaceAPI import from UEAppInterfaceAPI_Templates all; diff --git a/ttcn/AtsMec/AtsMec_DeviceApplicationInterface/module.mk b/ttcn/AtsMec/AtsMec_DeviceApplicationInterface/module.mk new file mode 100644 index 0000000..449db40 --- /dev/null +++ b/ttcn/AtsMec/AtsMec_DeviceApplicationInterface/module.mk @@ -0,0 +1,48 @@ +suite := AtsMec + +sources := \ + AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn \ + AtsMec_TrafficManagementAPI_TestCases.ttcn \ + AtsMec_MultiAccessSteeringInfoAPI_TestCases.ttcn \ + AtsMec_LocationAPI_TestCases.ttcn \ + AtsMec_RnisAPI_TestCases.ttcn \ + AtsMec_TestControl.ttcn \ + AtsMec_UEAppInterfaceAPI_TestCases.ttcn \ + AtsMec_UEidentityAPI_TestCases.ttcn \ + AtsMec_V2XInformationServiceAPI_TestCases.ttcn \ + AtsMec_DeviceApplicationInterfaceAPI_TestCases.ttcn \ + AtsMec_WlanInformationAPI_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/EdgePlatformApplicationEnablementAPI \ + ../LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI \ + ../LibMec/TrafficManagementAPI \ + ../LibMec/LocationAPI \ + ../LibMec/RnisAPI \ + ../LibMec/UEAppInterfaceAPI \ + ../LibMec/UEidentityAPI \ + ../LibMec/V2XInformationServiceAPI \ + ../LibMec/DeviceApplicationInterfaceAPI \ + ../LibMec/WlanInformationAPI \ + ../LibMec/ApplicationMobilityServiceAPI \ + ../LibMec/FixedAccessInformationAPI \ + ../../ccsrc/Ports/LibHttp \ + ../../ccsrc/EncDec/LibHttp \ + ../../ccsrc/EncDec/LibMec \ + ../../ccsrc/Framework \ + ../../ccsrc/externals \ + ../../ccsrc/loggers \ + ../../ccsrc/Protocols/ETH \ + ../../ccsrc/Protocols/Http \ + ../../ccsrc/Protocols/Json \ + ../../ccsrc/Protocols/Pcap \ + ../../ccsrc/Protocols/Tcp \ + ../modules/titan.TestPorts.Common_Components.Abstract_Socket \ + diff --git a/ttcn/AtsMec/AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn b/ttcn/AtsMec/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn similarity index 99% rename from ttcn/AtsMec/AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn rename to ttcn/AtsMec/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn index a97354a..e00b0ff 100644 --- a/ttcn/AtsMec/AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn +++ b/ttcn/AtsMec/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn @@ -16,11 +16,11 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { 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 LibHttp_TypesAndValues all; + import from LibHttp_Functions all; + import from LibHttp_Templates all; + import from LibHttp_JsonTemplates all; + import from LibHttp_TestSystem all; // LibMec/EdgePlatformApplicationEnablementAPI import from EdgePlatformApplicationEnablementAPI_TypesAndValues all; diff --git a/ttcn/AtsMec/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestControl.ttcn b/ttcn/AtsMec/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestControl.ttcn new file mode 100644 index 0000000..4c74736 --- /dev/null +++ b/ttcn/AtsMec/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestControl.ttcn @@ -0,0 +1,126 @@ +module AtsMec_TestControl { + + // LibMec/LocationAPI + import from LocationAPI_Pics all; + // LibMec/UEidentityAPI + import from UEidentityAPI_Pics all; + // LibMec/RnisAPI + import from RnisAPI_Pics all; + // LibMec/TrafficManagementAPI + import from TrafficManagementAPI_Pics all; + // LibMec/AppEnablementAPI + import from EdgePlatformApplicationEnablementAPI_Pics all; + // LibMec/UEAppInterfaceAPI + import from UEAppInterfaceAPI_Pics all; + + // LibMec + import from LibMec_Pics all; + + // AtsMec + import from AtsMec_LocationAPI_TestCases all; + import from AtsMec_UEidentityAPI_TestCases all; +// import from AtsMec_RadioNodeLocationAPI_TestCases all; + import from AtsMec_RnisAPI_TestCases all; + import from AtsMec_TrafficManagementAPI_TestCases all; + import from AtsMec_EdgePlatformApplicationEnablementAPI_TestCases all; + import from AtsMec_UEAppInterfaceAPI_TestCases all; + + control { + + if (PICS_MEC_PLAT and PICS_SERVICES) { + if (PICS_UE_IDENTITY_API_SUPPORTED) { + execute(TC_MEC_MEC014_SRV_UETAG_001_OK()); + execute(TC_MEC_MEC014_SRV_UETAG_001_BR()); + execute(TC_MEC_MEC014_SRV_UETAG_001_NF()); + execute(TC_MEC_MEC014_SRV_UETAG_002_OK()); + execute(TC_MEC_MEC014_SRV_UETAG_002_BR()); + execute(TC_MEC_MEC014_SRV_UETAG_002_PF()); + } + if (PICS_LOCATION_API_SUPPORTED) { + execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_OK()); + execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_BR()); + execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_NF()); + + execute(TC_MEC_MEC013_SRV_UELOCSUB_001_OK()); + execute(TC_MEC_MEC013_SRV_UELOCSUB_001_BR()); + execute(TC_MEC_MEC013_SRV_UELOCSUB_002_OK()); + execute(TC_MEC_MEC013_SRV_UELOCSUB_002_NF()); + + execute(TC_MEC_MEC013_SRV_UETRACKSUB_001_OK()); + execute(TC_MEC_MEC013_SRV_UETRACKSUB_001_BR()); + execute(TC_MEC_MEC013_SRV_UETRACKSUB_002_OK()); + execute(TC_MEC_MEC013_SRV_UETRACKSUB_002_NF()); + + execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_OK()); + execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_BR()); + execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_NF()); + + execute(TC_MEC_MEC013_SRV_UEINFSUB_001_OK()); + execute(TC_MEC_MEC013_SRV_UEINFSUB_001_BR()); + execute(TC_MEC_MEC013_SRV_UEINFSUB_002_OK()); + execute(TC_MEC_MEC013_SRV_UEINFSUB_002_NF()); + +// execute(TC_MEC_PLAT_RLOC_001_OK()); +// execute(TC_MEC_PLAT_RLOC_001_NF()); + } + + if (PICS_APP_ENABLEMENT_API_SUPPORTED) { + /*execute(TC_MEC_SRV_TRANS_001_OK()); + execute(TC_MEC_SRV_TRAF_001_OK()); + execute(TC_MEC_SRV_TRAF_002_OK()); + execute(TC_MEC_SRV_TRAF_003_OK()); + execute(TC_MEC_SRV_TRAF_001_NF());*/ + } + + if (PICS_ENABLE_UE_APP_CTX) { + execute(TC_MEC_MEC016_MEO_UEAPPCTX_001_OK()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_001_BR()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_OK()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_BR()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_NF()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_003_OK()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_003_NF()); + execute(TC_MEC_MEC016_MEO_UEAPPS_001_OK()); + execute(TC_MEC_MEC016_MEO_UEAPPS_001_BR()); + execute(TC_MEC_MEC016_MEO_UEAPPS_001_NF()); + } + } + + /*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()); + execute(TC_MEC_MEC012_SRV_RNIS_011_BR()); + execute(TC_MEC_MEC012_SRV_RNIS_012_BR()); + } + if (PICS_RNIS_QUERY) { + execute(TC_MEC_MEC012_SRV_RNIS_016_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_016_BR()); + execute(TC_MEC_MEC012_SRV_RNIS_016_NF()); + execute(TC_MEC_MEC012_SRV_RNIS_017_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_017_BR()); + execute(TC_MEC_MEC012_SRV_RNIS_017_NF()); + execute(TC_MEC_MEC012_SRV_RNIS_018_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_018_BR()); + execute(TC_MEC_MEC012_SRV_RNIS_018_NF()); + execute(TC_MEC_MEC012_SRV_RNIS_019_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_019_BR()); + execute(TC_MEC_MEC012_SRV_RNIS_019_NF()); + } + }*/ + + if (PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED) { + execute(TC_MEC_MEC015_SRV_TM_001_OK()); + execute(TC_MEC_MEC015_SRV_TM_002_OK()); + execute(TC_MEC_MEC015_SRV_TM_002_BR()); + execute(TC_MEC_MEC015_SRV_TM_002_NF()); + } + } // End of 'control' statement + +} // End of module AtsMec_TestControl diff --git a/ttcn/AtsMec/AtsMec_EdgePlatformApplicationEnablement/module.mk b/ttcn/AtsMec/AtsMec_EdgePlatformApplicationEnablement/module.mk new file mode 100644 index 0000000..449db40 --- /dev/null +++ b/ttcn/AtsMec/AtsMec_EdgePlatformApplicationEnablement/module.mk @@ -0,0 +1,48 @@ +suite := AtsMec + +sources := \ + AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn \ + AtsMec_TrafficManagementAPI_TestCases.ttcn \ + AtsMec_MultiAccessSteeringInfoAPI_TestCases.ttcn \ + AtsMec_LocationAPI_TestCases.ttcn \ + AtsMec_RnisAPI_TestCases.ttcn \ + AtsMec_TestControl.ttcn \ + AtsMec_UEAppInterfaceAPI_TestCases.ttcn \ + AtsMec_UEidentityAPI_TestCases.ttcn \ + AtsMec_V2XInformationServiceAPI_TestCases.ttcn \ + AtsMec_DeviceApplicationInterfaceAPI_TestCases.ttcn \ + AtsMec_WlanInformationAPI_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/EdgePlatformApplicationEnablementAPI \ + ../LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI \ + ../LibMec/TrafficManagementAPI \ + ../LibMec/LocationAPI \ + ../LibMec/RnisAPI \ + ../LibMec/UEAppInterfaceAPI \ + ../LibMec/UEidentityAPI \ + ../LibMec/V2XInformationServiceAPI \ + ../LibMec/DeviceApplicationInterfaceAPI \ + ../LibMec/WlanInformationAPI \ + ../LibMec/ApplicationMobilityServiceAPI \ + ../LibMec/FixedAccessInformationAPI \ + ../../ccsrc/Ports/LibHttp \ + ../../ccsrc/EncDec/LibHttp \ + ../../ccsrc/EncDec/LibMec \ + ../../ccsrc/Framework \ + ../../ccsrc/externals \ + ../../ccsrc/loggers \ + ../../ccsrc/Protocols/ETH \ + ../../ccsrc/Protocols/Http \ + ../../ccsrc/Protocols/Json \ + ../../ccsrc/Protocols/Pcap \ + ../../ccsrc/Protocols/Tcp \ + ../modules/titan.TestPorts.Common_Components.Abstract_Socket \ + diff --git a/ttcn/AtsMec/AtsMec_FixedAccessInfoAPI_TestCases.ttcn b/ttcn/AtsMec/AtsMec_FixedAccessInfo/AtsMec_FixedAccessInfoAPI_TestCases.ttcn similarity index 99% rename from ttcn/AtsMec/AtsMec_FixedAccessInfoAPI_TestCases.ttcn rename to ttcn/AtsMec/AtsMec_FixedAccessInfo/AtsMec_FixedAccessInfoAPI_TestCases.ttcn index a12cf32..45ae338 100644 --- a/ttcn/AtsMec/AtsMec_FixedAccessInfoAPI_TestCases.ttcn +++ b/ttcn/AtsMec/AtsMec_FixedAccessInfo/AtsMec_FixedAccessInfoAPI_TestCases.ttcn @@ -17,11 +17,11 @@ module AtsMec_FixedAccessInformationAPI_TestCases { 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 LibHttp_TypesAndValues all; + import from LibHttp_Functions all; + import from LibHttp_Templates all; + import from LibHttp_JsonTemplates all; + import from LibHttp_TestSystem all; // LibMec_FixedAccessInformationServiceAPI import from FixedAccessInformationServiceAPI_Templates all; diff --git a/ttcn/AtsMec/AtsMec_FixedAccessInfo/AtsMec_FixedAccessInfoAPI_TestControl.ttcn b/ttcn/AtsMec/AtsMec_FixedAccessInfo/AtsMec_FixedAccessInfoAPI_TestControl.ttcn new file mode 100644 index 0000000..4c74736 --- /dev/null +++ b/ttcn/AtsMec/AtsMec_FixedAccessInfo/AtsMec_FixedAccessInfoAPI_TestControl.ttcn @@ -0,0 +1,126 @@ +module AtsMec_TestControl { + + // LibMec/LocationAPI + import from LocationAPI_Pics all; + // LibMec/UEidentityAPI + import from UEidentityAPI_Pics all; + // LibMec/RnisAPI + import from RnisAPI_Pics all; + // LibMec/TrafficManagementAPI + import from TrafficManagementAPI_Pics all; + // LibMec/AppEnablementAPI + import from EdgePlatformApplicationEnablementAPI_Pics all; + // LibMec/UEAppInterfaceAPI + import from UEAppInterfaceAPI_Pics all; + + // LibMec + import from LibMec_Pics all; + + // AtsMec + import from AtsMec_LocationAPI_TestCases all; + import from AtsMec_UEidentityAPI_TestCases all; +// import from AtsMec_RadioNodeLocationAPI_TestCases all; + import from AtsMec_RnisAPI_TestCases all; + import from AtsMec_TrafficManagementAPI_TestCases all; + import from AtsMec_EdgePlatformApplicationEnablementAPI_TestCases all; + import from AtsMec_UEAppInterfaceAPI_TestCases all; + + control { + + if (PICS_MEC_PLAT and PICS_SERVICES) { + if (PICS_UE_IDENTITY_API_SUPPORTED) { + execute(TC_MEC_MEC014_SRV_UETAG_001_OK()); + execute(TC_MEC_MEC014_SRV_UETAG_001_BR()); + execute(TC_MEC_MEC014_SRV_UETAG_001_NF()); + execute(TC_MEC_MEC014_SRV_UETAG_002_OK()); + execute(TC_MEC_MEC014_SRV_UETAG_002_BR()); + execute(TC_MEC_MEC014_SRV_UETAG_002_PF()); + } + if (PICS_LOCATION_API_SUPPORTED) { + execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_OK()); + execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_BR()); + execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_NF()); + + execute(TC_MEC_MEC013_SRV_UELOCSUB_001_OK()); + execute(TC_MEC_MEC013_SRV_UELOCSUB_001_BR()); + execute(TC_MEC_MEC013_SRV_UELOCSUB_002_OK()); + execute(TC_MEC_MEC013_SRV_UELOCSUB_002_NF()); + + execute(TC_MEC_MEC013_SRV_UETRACKSUB_001_OK()); + execute(TC_MEC_MEC013_SRV_UETRACKSUB_001_BR()); + execute(TC_MEC_MEC013_SRV_UETRACKSUB_002_OK()); + execute(TC_MEC_MEC013_SRV_UETRACKSUB_002_NF()); + + execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_OK()); + execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_BR()); + execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_NF()); + + execute(TC_MEC_MEC013_SRV_UEINFSUB_001_OK()); + execute(TC_MEC_MEC013_SRV_UEINFSUB_001_BR()); + execute(TC_MEC_MEC013_SRV_UEINFSUB_002_OK()); + execute(TC_MEC_MEC013_SRV_UEINFSUB_002_NF()); + +// execute(TC_MEC_PLAT_RLOC_001_OK()); +// execute(TC_MEC_PLAT_RLOC_001_NF()); + } + + if (PICS_APP_ENABLEMENT_API_SUPPORTED) { + /*execute(TC_MEC_SRV_TRANS_001_OK()); + execute(TC_MEC_SRV_TRAF_001_OK()); + execute(TC_MEC_SRV_TRAF_002_OK()); + execute(TC_MEC_SRV_TRAF_003_OK()); + execute(TC_MEC_SRV_TRAF_001_NF());*/ + } + + if (PICS_ENABLE_UE_APP_CTX) { + execute(TC_MEC_MEC016_MEO_UEAPPCTX_001_OK()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_001_BR()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_OK()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_BR()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_NF()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_003_OK()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_003_NF()); + execute(TC_MEC_MEC016_MEO_UEAPPS_001_OK()); + execute(TC_MEC_MEC016_MEO_UEAPPS_001_BR()); + execute(TC_MEC_MEC016_MEO_UEAPPS_001_NF()); + } + } + + /*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()); + execute(TC_MEC_MEC012_SRV_RNIS_011_BR()); + execute(TC_MEC_MEC012_SRV_RNIS_012_BR()); + } + if (PICS_RNIS_QUERY) { + execute(TC_MEC_MEC012_SRV_RNIS_016_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_016_BR()); + execute(TC_MEC_MEC012_SRV_RNIS_016_NF()); + execute(TC_MEC_MEC012_SRV_RNIS_017_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_017_BR()); + execute(TC_MEC_MEC012_SRV_RNIS_017_NF()); + execute(TC_MEC_MEC012_SRV_RNIS_018_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_018_BR()); + execute(TC_MEC_MEC012_SRV_RNIS_018_NF()); + execute(TC_MEC_MEC012_SRV_RNIS_019_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_019_BR()); + execute(TC_MEC_MEC012_SRV_RNIS_019_NF()); + } + }*/ + + if (PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED) { + execute(TC_MEC_MEC015_SRV_TM_001_OK()); + execute(TC_MEC_MEC015_SRV_TM_002_OK()); + execute(TC_MEC_MEC015_SRV_TM_002_BR()); + execute(TC_MEC_MEC015_SRV_TM_002_NF()); + } + } // End of 'control' statement + +} // End of module AtsMec_TestControl diff --git a/ttcn/AtsMec/AtsMec_FixedAccessInfo/module.mk b/ttcn/AtsMec/AtsMec_FixedAccessInfo/module.mk new file mode 100644 index 0000000..449db40 --- /dev/null +++ b/ttcn/AtsMec/AtsMec_FixedAccessInfo/module.mk @@ -0,0 +1,48 @@ +suite := AtsMec + +sources := \ + AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn \ + AtsMec_TrafficManagementAPI_TestCases.ttcn \ + AtsMec_MultiAccessSteeringInfoAPI_TestCases.ttcn \ + AtsMec_LocationAPI_TestCases.ttcn \ + AtsMec_RnisAPI_TestCases.ttcn \ + AtsMec_TestControl.ttcn \ + AtsMec_UEAppInterfaceAPI_TestCases.ttcn \ + AtsMec_UEidentityAPI_TestCases.ttcn \ + AtsMec_V2XInformationServiceAPI_TestCases.ttcn \ + AtsMec_DeviceApplicationInterfaceAPI_TestCases.ttcn \ + AtsMec_WlanInformationAPI_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/EdgePlatformApplicationEnablementAPI \ + ../LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI \ + ../LibMec/TrafficManagementAPI \ + ../LibMec/LocationAPI \ + ../LibMec/RnisAPI \ + ../LibMec/UEAppInterfaceAPI \ + ../LibMec/UEidentityAPI \ + ../LibMec/V2XInformationServiceAPI \ + ../LibMec/DeviceApplicationInterfaceAPI \ + ../LibMec/WlanInformationAPI \ + ../LibMec/ApplicationMobilityServiceAPI \ + ../LibMec/FixedAccessInformationAPI \ + ../../ccsrc/Ports/LibHttp \ + ../../ccsrc/EncDec/LibHttp \ + ../../ccsrc/EncDec/LibMec \ + ../../ccsrc/Framework \ + ../../ccsrc/externals \ + ../../ccsrc/loggers \ + ../../ccsrc/Protocols/ETH \ + ../../ccsrc/Protocols/Http \ + ../../ccsrc/Protocols/Json \ + ../../ccsrc/Protocols/Pcap \ + ../../ccsrc/Protocols/Tcp \ + ../modules/titan.TestPorts.Common_Components.Abstract_Socket \ + diff --git a/ttcn/AtsMec/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases.ttcn b/ttcn/AtsMec/AtsMec_LcRRm/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases.ttcn similarity index 99% rename from ttcn/AtsMec/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases.ttcn rename to ttcn/AtsMec/AtsMec_LcRRm/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases.ttcn index 03c3c78..34b146f 100644 --- a/ttcn/AtsMec/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases.ttcn +++ b/ttcn/AtsMec/AtsMec_LcRRm/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases.ttcn @@ -18,11 +18,11 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { 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 LibHttp_TypesAndValues all; + import from LibHttp_Functions all; + import from LibHttp_Templates all; + import from LibHttp_JsonTemplates all; + import from LibHttp_TestSystem all; // LibMec_ApplicationPackageLifecycleAndOperationGrantingAPI import from ApplicationPackageLifecycleAndOperationGrantingAPI_Templates all; diff --git a/ttcn/AtsMec/AtsMec_LcRRm/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestControl.ttcn b/ttcn/AtsMec/AtsMec_LcRRm/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestControl.ttcn new file mode 100644 index 0000000..4c74736 --- /dev/null +++ b/ttcn/AtsMec/AtsMec_LcRRm/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestControl.ttcn @@ -0,0 +1,126 @@ +module AtsMec_TestControl { + + // LibMec/LocationAPI + import from LocationAPI_Pics all; + // LibMec/UEidentityAPI + import from UEidentityAPI_Pics all; + // LibMec/RnisAPI + import from RnisAPI_Pics all; + // LibMec/TrafficManagementAPI + import from TrafficManagementAPI_Pics all; + // LibMec/AppEnablementAPI + import from EdgePlatformApplicationEnablementAPI_Pics all; + // LibMec/UEAppInterfaceAPI + import from UEAppInterfaceAPI_Pics all; + + // LibMec + import from LibMec_Pics all; + + // AtsMec + import from AtsMec_LocationAPI_TestCases all; + import from AtsMec_UEidentityAPI_TestCases all; +// import from AtsMec_RadioNodeLocationAPI_TestCases all; + import from AtsMec_RnisAPI_TestCases all; + import from AtsMec_TrafficManagementAPI_TestCases all; + import from AtsMec_EdgePlatformApplicationEnablementAPI_TestCases all; + import from AtsMec_UEAppInterfaceAPI_TestCases all; + + control { + + if (PICS_MEC_PLAT and PICS_SERVICES) { + if (PICS_UE_IDENTITY_API_SUPPORTED) { + execute(TC_MEC_MEC014_SRV_UETAG_001_OK()); + execute(TC_MEC_MEC014_SRV_UETAG_001_BR()); + execute(TC_MEC_MEC014_SRV_UETAG_001_NF()); + execute(TC_MEC_MEC014_SRV_UETAG_002_OK()); + execute(TC_MEC_MEC014_SRV_UETAG_002_BR()); + execute(TC_MEC_MEC014_SRV_UETAG_002_PF()); + } + if (PICS_LOCATION_API_SUPPORTED) { + execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_OK()); + execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_BR()); + execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_NF()); + + execute(TC_MEC_MEC013_SRV_UELOCSUB_001_OK()); + execute(TC_MEC_MEC013_SRV_UELOCSUB_001_BR()); + execute(TC_MEC_MEC013_SRV_UELOCSUB_002_OK()); + execute(TC_MEC_MEC013_SRV_UELOCSUB_002_NF()); + + execute(TC_MEC_MEC013_SRV_UETRACKSUB_001_OK()); + execute(TC_MEC_MEC013_SRV_UETRACKSUB_001_BR()); + execute(TC_MEC_MEC013_SRV_UETRACKSUB_002_OK()); + execute(TC_MEC_MEC013_SRV_UETRACKSUB_002_NF()); + + execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_OK()); + execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_BR()); + execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_NF()); + + execute(TC_MEC_MEC013_SRV_UEINFSUB_001_OK()); + execute(TC_MEC_MEC013_SRV_UEINFSUB_001_BR()); + execute(TC_MEC_MEC013_SRV_UEINFSUB_002_OK()); + execute(TC_MEC_MEC013_SRV_UEINFSUB_002_NF()); + +// execute(TC_MEC_PLAT_RLOC_001_OK()); +// execute(TC_MEC_PLAT_RLOC_001_NF()); + } + + if (PICS_APP_ENABLEMENT_API_SUPPORTED) { + /*execute(TC_MEC_SRV_TRANS_001_OK()); + execute(TC_MEC_SRV_TRAF_001_OK()); + execute(TC_MEC_SRV_TRAF_002_OK()); + execute(TC_MEC_SRV_TRAF_003_OK()); + execute(TC_MEC_SRV_TRAF_001_NF());*/ + } + + if (PICS_ENABLE_UE_APP_CTX) { + execute(TC_MEC_MEC016_MEO_UEAPPCTX_001_OK()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_001_BR()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_OK()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_BR()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_NF()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_003_OK()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_003_NF()); + execute(TC_MEC_MEC016_MEO_UEAPPS_001_OK()); + execute(TC_MEC_MEC016_MEO_UEAPPS_001_BR()); + execute(TC_MEC_MEC016_MEO_UEAPPS_001_NF()); + } + } + + /*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()); + execute(TC_MEC_MEC012_SRV_RNIS_011_BR()); + execute(TC_MEC_MEC012_SRV_RNIS_012_BR()); + } + if (PICS_RNIS_QUERY) { + execute(TC_MEC_MEC012_SRV_RNIS_016_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_016_BR()); + execute(TC_MEC_MEC012_SRV_RNIS_016_NF()); + execute(TC_MEC_MEC012_SRV_RNIS_017_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_017_BR()); + execute(TC_MEC_MEC012_SRV_RNIS_017_NF()); + execute(TC_MEC_MEC012_SRV_RNIS_018_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_018_BR()); + execute(TC_MEC_MEC012_SRV_RNIS_018_NF()); + execute(TC_MEC_MEC012_SRV_RNIS_019_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_019_BR()); + execute(TC_MEC_MEC012_SRV_RNIS_019_NF()); + } + }*/ + + if (PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED) { + execute(TC_MEC_MEC015_SRV_TM_001_OK()); + execute(TC_MEC_MEC015_SRV_TM_002_OK()); + execute(TC_MEC_MEC015_SRV_TM_002_BR()); + execute(TC_MEC_MEC015_SRV_TM_002_NF()); + } + } // End of 'control' statement + +} // End of module AtsMec_TestControl diff --git a/ttcn/AtsMec/AtsMec_LcRRm/module.mk b/ttcn/AtsMec/AtsMec_LcRRm/module.mk new file mode 100644 index 0000000..449db40 --- /dev/null +++ b/ttcn/AtsMec/AtsMec_LcRRm/module.mk @@ -0,0 +1,48 @@ +suite := AtsMec + +sources := \ + AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn \ + AtsMec_TrafficManagementAPI_TestCases.ttcn \ + AtsMec_MultiAccessSteeringInfoAPI_TestCases.ttcn \ + AtsMec_LocationAPI_TestCases.ttcn \ + AtsMec_RnisAPI_TestCases.ttcn \ + AtsMec_TestControl.ttcn \ + AtsMec_UEAppInterfaceAPI_TestCases.ttcn \ + AtsMec_UEidentityAPI_TestCases.ttcn \ + AtsMec_V2XInformationServiceAPI_TestCases.ttcn \ + AtsMec_DeviceApplicationInterfaceAPI_TestCases.ttcn \ + AtsMec_WlanInformationAPI_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/EdgePlatformApplicationEnablementAPI \ + ../LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI \ + ../LibMec/TrafficManagementAPI \ + ../LibMec/LocationAPI \ + ../LibMec/RnisAPI \ + ../LibMec/UEAppInterfaceAPI \ + ../LibMec/UEidentityAPI \ + ../LibMec/V2XInformationServiceAPI \ + ../LibMec/DeviceApplicationInterfaceAPI \ + ../LibMec/WlanInformationAPI \ + ../LibMec/ApplicationMobilityServiceAPI \ + ../LibMec/FixedAccessInformationAPI \ + ../../ccsrc/Ports/LibHttp \ + ../../ccsrc/EncDec/LibHttp \ + ../../ccsrc/EncDec/LibMec \ + ../../ccsrc/Framework \ + ../../ccsrc/externals \ + ../../ccsrc/loggers \ + ../../ccsrc/Protocols/ETH \ + ../../ccsrc/Protocols/Http \ + ../../ccsrc/Protocols/Json \ + ../../ccsrc/Protocols/Pcap \ + ../../ccsrc/Protocols/Tcp \ + ../modules/titan.TestPorts.Common_Components.Abstract_Socket \ + diff --git a/ttcn/AtsMec/AtsMec_RnisAPI_TestCases.ttcn b/ttcn/AtsMec/AtsMec_Rnis/AtsMec_RnisAPI_TestCases.ttcn similarity index 99% rename from ttcn/AtsMec/AtsMec_RnisAPI_TestCases.ttcn rename to ttcn/AtsMec/AtsMec_Rnis/AtsMec_RnisAPI_TestCases.ttcn index 5821f34..cbf0e9b 100644 --- a/ttcn/AtsMec/AtsMec_RnisAPI_TestCases.ttcn +++ b/ttcn/AtsMec/AtsMec_Rnis/AtsMec_RnisAPI_TestCases.ttcn @@ -17,13 +17,13 @@ module AtsMec_RnisAPI_TestCases { import from LibCommon_Sync all; // LibHttp - import from LibItsHttp_TypesAndValues all; - import from LibItsHttp_JsonMessageBodyTypes all; - import from LibItsHttp_Functions all; - import from LibItsHttp_Templates all; - import from LibItsHttp_JsonTemplates all; - import from LibItsHttp_TestSystem all; - import from LibItsHttp_Pics all; + import from LibHttp_TypesAndValues all; + import from LibHttp_JsonMessageBodyTypes all; + import from LibHttp_Functions all; + import from LibHttp_Templates all; + import from LibHttp_JsonTemplates all; + import from LibHttp_TestSystem all; + import from LibHttp_Pics all; // LibMec/RnisAPI import from RnisAPI_TypesAndValues all; diff --git a/ttcn/AtsMec/AtsMec_Rnis/AtsMec_RnisAPI_TestControl.ttcn b/ttcn/AtsMec/AtsMec_Rnis/AtsMec_RnisAPI_TestControl.ttcn new file mode 100644 index 0000000..4c74736 --- /dev/null +++ b/ttcn/AtsMec/AtsMec_Rnis/AtsMec_RnisAPI_TestControl.ttcn @@ -0,0 +1,126 @@ +module AtsMec_TestControl { + + // LibMec/LocationAPI + import from LocationAPI_Pics all; + // LibMec/UEidentityAPI + import from UEidentityAPI_Pics all; + // LibMec/RnisAPI + import from RnisAPI_Pics all; + // LibMec/TrafficManagementAPI + import from TrafficManagementAPI_Pics all; + // LibMec/AppEnablementAPI + import from EdgePlatformApplicationEnablementAPI_Pics all; + // LibMec/UEAppInterfaceAPI + import from UEAppInterfaceAPI_Pics all; + + // LibMec + import from LibMec_Pics all; + + // AtsMec + import from AtsMec_LocationAPI_TestCases all; + import from AtsMec_UEidentityAPI_TestCases all; +// import from AtsMec_RadioNodeLocationAPI_TestCases all; + import from AtsMec_RnisAPI_TestCases all; + import from AtsMec_TrafficManagementAPI_TestCases all; + import from AtsMec_EdgePlatformApplicationEnablementAPI_TestCases all; + import from AtsMec_UEAppInterfaceAPI_TestCases all; + + control { + + if (PICS_MEC_PLAT and PICS_SERVICES) { + if (PICS_UE_IDENTITY_API_SUPPORTED) { + execute(TC_MEC_MEC014_SRV_UETAG_001_OK()); + execute(TC_MEC_MEC014_SRV_UETAG_001_BR()); + execute(TC_MEC_MEC014_SRV_UETAG_001_NF()); + execute(TC_MEC_MEC014_SRV_UETAG_002_OK()); + execute(TC_MEC_MEC014_SRV_UETAG_002_BR()); + execute(TC_MEC_MEC014_SRV_UETAG_002_PF()); + } + if (PICS_LOCATION_API_SUPPORTED) { + execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_OK()); + execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_BR()); + execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_NF()); + + execute(TC_MEC_MEC013_SRV_UELOCSUB_001_OK()); + execute(TC_MEC_MEC013_SRV_UELOCSUB_001_BR()); + execute(TC_MEC_MEC013_SRV_UELOCSUB_002_OK()); + execute(TC_MEC_MEC013_SRV_UELOCSUB_002_NF()); + + execute(TC_MEC_MEC013_SRV_UETRACKSUB_001_OK()); + execute(TC_MEC_MEC013_SRV_UETRACKSUB_001_BR()); + execute(TC_MEC_MEC013_SRV_UETRACKSUB_002_OK()); + execute(TC_MEC_MEC013_SRV_UETRACKSUB_002_NF()); + + execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_OK()); + execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_BR()); + execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_NF()); + + execute(TC_MEC_MEC013_SRV_UEINFSUB_001_OK()); + execute(TC_MEC_MEC013_SRV_UEINFSUB_001_BR()); + execute(TC_MEC_MEC013_SRV_UEINFSUB_002_OK()); + execute(TC_MEC_MEC013_SRV_UEINFSUB_002_NF()); + +// execute(TC_MEC_PLAT_RLOC_001_OK()); +// execute(TC_MEC_PLAT_RLOC_001_NF()); + } + + if (PICS_APP_ENABLEMENT_API_SUPPORTED) { + /*execute(TC_MEC_SRV_TRANS_001_OK()); + execute(TC_MEC_SRV_TRAF_001_OK()); + execute(TC_MEC_SRV_TRAF_002_OK()); + execute(TC_MEC_SRV_TRAF_003_OK()); + execute(TC_MEC_SRV_TRAF_001_NF());*/ + } + + if (PICS_ENABLE_UE_APP_CTX) { + execute(TC_MEC_MEC016_MEO_UEAPPCTX_001_OK()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_001_BR()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_OK()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_BR()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_NF()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_003_OK()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_003_NF()); + execute(TC_MEC_MEC016_MEO_UEAPPS_001_OK()); + execute(TC_MEC_MEC016_MEO_UEAPPS_001_BR()); + execute(TC_MEC_MEC016_MEO_UEAPPS_001_NF()); + } + } + + /*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()); + execute(TC_MEC_MEC012_SRV_RNIS_011_BR()); + execute(TC_MEC_MEC012_SRV_RNIS_012_BR()); + } + if (PICS_RNIS_QUERY) { + execute(TC_MEC_MEC012_SRV_RNIS_016_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_016_BR()); + execute(TC_MEC_MEC012_SRV_RNIS_016_NF()); + execute(TC_MEC_MEC012_SRV_RNIS_017_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_017_BR()); + execute(TC_MEC_MEC012_SRV_RNIS_017_NF()); + execute(TC_MEC_MEC012_SRV_RNIS_018_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_018_BR()); + execute(TC_MEC_MEC012_SRV_RNIS_018_NF()); + execute(TC_MEC_MEC012_SRV_RNIS_019_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_019_BR()); + execute(TC_MEC_MEC012_SRV_RNIS_019_NF()); + } + }*/ + + if (PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED) { + execute(TC_MEC_MEC015_SRV_TM_001_OK()); + execute(TC_MEC_MEC015_SRV_TM_002_OK()); + execute(TC_MEC_MEC015_SRV_TM_002_BR()); + execute(TC_MEC_MEC015_SRV_TM_002_NF()); + } + } // End of 'control' statement + +} // End of module AtsMec_TestControl diff --git a/ttcn/AtsMec/AtsMec_Rnis/module.mk b/ttcn/AtsMec/AtsMec_Rnis/module.mk new file mode 100644 index 0000000..449db40 --- /dev/null +++ b/ttcn/AtsMec/AtsMec_Rnis/module.mk @@ -0,0 +1,48 @@ +suite := AtsMec + +sources := \ + AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn \ + AtsMec_TrafficManagementAPI_TestCases.ttcn \ + AtsMec_MultiAccessSteeringInfoAPI_TestCases.ttcn \ + AtsMec_LocationAPI_TestCases.ttcn \ + AtsMec_RnisAPI_TestCases.ttcn \ + AtsMec_TestControl.ttcn \ + AtsMec_UEAppInterfaceAPI_TestCases.ttcn \ + AtsMec_UEidentityAPI_TestCases.ttcn \ + AtsMec_V2XInformationServiceAPI_TestCases.ttcn \ + AtsMec_DeviceApplicationInterfaceAPI_TestCases.ttcn \ + AtsMec_WlanInformationAPI_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/EdgePlatformApplicationEnablementAPI \ + ../LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI \ + ../LibMec/TrafficManagementAPI \ + ../LibMec/LocationAPI \ + ../LibMec/RnisAPI \ + ../LibMec/UEAppInterfaceAPI \ + ../LibMec/UEidentityAPI \ + ../LibMec/V2XInformationServiceAPI \ + ../LibMec/DeviceApplicationInterfaceAPI \ + ../LibMec/WlanInformationAPI \ + ../LibMec/ApplicationMobilityServiceAPI \ + ../LibMec/FixedAccessInformationAPI \ + ../../ccsrc/Ports/LibHttp \ + ../../ccsrc/EncDec/LibHttp \ + ../../ccsrc/EncDec/LibMec \ + ../../ccsrc/Framework \ + ../../ccsrc/externals \ + ../../ccsrc/loggers \ + ../../ccsrc/Protocols/ETH \ + ../../ccsrc/Protocols/Http \ + ../../ccsrc/Protocols/Json \ + ../../ccsrc/Protocols/Pcap \ + ../../ccsrc/Protocols/Tcp \ + ../modules/titan.TestPorts.Common_Components.Abstract_Socket \ + diff --git a/ttcn/AtsMec/AtsMec_MultiAccessSteeringInfoAPI_TestCases.ttcn b/ttcn/AtsMec/AtsMec_TrafficManagement/AtsMec_MultiAccessSteeringInfoAPI_TestCases.ttcn similarity index 99% rename from ttcn/AtsMec/AtsMec_MultiAccessSteeringInfoAPI_TestCases.ttcn rename to ttcn/AtsMec/AtsMec_TrafficManagement/AtsMec_MultiAccessSteeringInfoAPI_TestCases.ttcn index 25a4622..e9021ce 100644 --- a/ttcn/AtsMec/AtsMec_MultiAccessSteeringInfoAPI_TestCases.ttcn +++ b/ttcn/AtsMec/AtsMec_TrafficManagement/AtsMec_MultiAccessSteeringInfoAPI_TestCases.ttcn @@ -20,11 +20,11 @@ module AtsMec_MultiAccessSteeringInfoAPI_TestCases { 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 LibHttp_TypesAndValues all; + import from LibHttp_Functions all; + import from LibHttp_Templates all; + import from LibHttp_JsonTemplates all; + import from LibHttp_TestSystem all; // LibMec/TrafficManagementAPI import from TrafficManagementAPI_TypesAndValues all; diff --git a/ttcn/AtsMec/AtsMec_TrafficManagementAPI_TestCases.ttcn b/ttcn/AtsMec/AtsMec_TrafficManagement/AtsMec_TrafficManagementAPI_TestCases.ttcn similarity index 99% rename from ttcn/AtsMec/AtsMec_TrafficManagementAPI_TestCases.ttcn rename to ttcn/AtsMec/AtsMec_TrafficManagement/AtsMec_TrafficManagementAPI_TestCases.ttcn index 67bdef5..920a31c 100644 --- a/ttcn/AtsMec/AtsMec_TrafficManagementAPI_TestCases.ttcn +++ b/ttcn/AtsMec/AtsMec_TrafficManagement/AtsMec_TrafficManagementAPI_TestCases.ttcn @@ -20,11 +20,11 @@ module AtsMec_TrafficManagementAPI_TestCases { 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 LibHttp_TypesAndValues all; + import from LibHttp_Functions all; + import from LibHttp_Templates all; + import from LibHttp_JsonTemplates all; + import from LibHttp_TestSystem all; // LibMec/TrafficManagementAPI import from TrafficManagementAPI_TypesAndValues all; diff --git a/ttcn/AtsMec/AtsMec_TrafficManagement/AtsMec_TrafficManagementAPI_TestControl.ttcn b/ttcn/AtsMec/AtsMec_TrafficManagement/AtsMec_TrafficManagementAPI_TestControl.ttcn new file mode 100644 index 0000000..4c74736 --- /dev/null +++ b/ttcn/AtsMec/AtsMec_TrafficManagement/AtsMec_TrafficManagementAPI_TestControl.ttcn @@ -0,0 +1,126 @@ +module AtsMec_TestControl { + + // LibMec/LocationAPI + import from LocationAPI_Pics all; + // LibMec/UEidentityAPI + import from UEidentityAPI_Pics all; + // LibMec/RnisAPI + import from RnisAPI_Pics all; + // LibMec/TrafficManagementAPI + import from TrafficManagementAPI_Pics all; + // LibMec/AppEnablementAPI + import from EdgePlatformApplicationEnablementAPI_Pics all; + // LibMec/UEAppInterfaceAPI + import from UEAppInterfaceAPI_Pics all; + + // LibMec + import from LibMec_Pics all; + + // AtsMec + import from AtsMec_LocationAPI_TestCases all; + import from AtsMec_UEidentityAPI_TestCases all; +// import from AtsMec_RadioNodeLocationAPI_TestCases all; + import from AtsMec_RnisAPI_TestCases all; + import from AtsMec_TrafficManagementAPI_TestCases all; + import from AtsMec_EdgePlatformApplicationEnablementAPI_TestCases all; + import from AtsMec_UEAppInterfaceAPI_TestCases all; + + control { + + if (PICS_MEC_PLAT and PICS_SERVICES) { + if (PICS_UE_IDENTITY_API_SUPPORTED) { + execute(TC_MEC_MEC014_SRV_UETAG_001_OK()); + execute(TC_MEC_MEC014_SRV_UETAG_001_BR()); + execute(TC_MEC_MEC014_SRV_UETAG_001_NF()); + execute(TC_MEC_MEC014_SRV_UETAG_002_OK()); + execute(TC_MEC_MEC014_SRV_UETAG_002_BR()); + execute(TC_MEC_MEC014_SRV_UETAG_002_PF()); + } + if (PICS_LOCATION_API_SUPPORTED) { + execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_OK()); + execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_BR()); + execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_NF()); + + execute(TC_MEC_MEC013_SRV_UELOCSUB_001_OK()); + execute(TC_MEC_MEC013_SRV_UELOCSUB_001_BR()); + execute(TC_MEC_MEC013_SRV_UELOCSUB_002_OK()); + execute(TC_MEC_MEC013_SRV_UELOCSUB_002_NF()); + + execute(TC_MEC_MEC013_SRV_UETRACKSUB_001_OK()); + execute(TC_MEC_MEC013_SRV_UETRACKSUB_001_BR()); + execute(TC_MEC_MEC013_SRV_UETRACKSUB_002_OK()); + execute(TC_MEC_MEC013_SRV_UETRACKSUB_002_NF()); + + execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_OK()); + execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_BR()); + execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_NF()); + + execute(TC_MEC_MEC013_SRV_UEINFSUB_001_OK()); + execute(TC_MEC_MEC013_SRV_UEINFSUB_001_BR()); + execute(TC_MEC_MEC013_SRV_UEINFSUB_002_OK()); + execute(TC_MEC_MEC013_SRV_UEINFSUB_002_NF()); + +// execute(TC_MEC_PLAT_RLOC_001_OK()); +// execute(TC_MEC_PLAT_RLOC_001_NF()); + } + + if (PICS_APP_ENABLEMENT_API_SUPPORTED) { + /*execute(TC_MEC_SRV_TRANS_001_OK()); + execute(TC_MEC_SRV_TRAF_001_OK()); + execute(TC_MEC_SRV_TRAF_002_OK()); + execute(TC_MEC_SRV_TRAF_003_OK()); + execute(TC_MEC_SRV_TRAF_001_NF());*/ + } + + if (PICS_ENABLE_UE_APP_CTX) { + execute(TC_MEC_MEC016_MEO_UEAPPCTX_001_OK()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_001_BR()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_OK()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_BR()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_NF()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_003_OK()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_003_NF()); + execute(TC_MEC_MEC016_MEO_UEAPPS_001_OK()); + execute(TC_MEC_MEC016_MEO_UEAPPS_001_BR()); + execute(TC_MEC_MEC016_MEO_UEAPPS_001_NF()); + } + } + + /*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()); + execute(TC_MEC_MEC012_SRV_RNIS_011_BR()); + execute(TC_MEC_MEC012_SRV_RNIS_012_BR()); + } + if (PICS_RNIS_QUERY) { + execute(TC_MEC_MEC012_SRV_RNIS_016_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_016_BR()); + execute(TC_MEC_MEC012_SRV_RNIS_016_NF()); + execute(TC_MEC_MEC012_SRV_RNIS_017_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_017_BR()); + execute(TC_MEC_MEC012_SRV_RNIS_017_NF()); + execute(TC_MEC_MEC012_SRV_RNIS_018_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_018_BR()); + execute(TC_MEC_MEC012_SRV_RNIS_018_NF()); + execute(TC_MEC_MEC012_SRV_RNIS_019_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_019_BR()); + execute(TC_MEC_MEC012_SRV_RNIS_019_NF()); + } + }*/ + + if (PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED) { + execute(TC_MEC_MEC015_SRV_TM_001_OK()); + execute(TC_MEC_MEC015_SRV_TM_002_OK()); + execute(TC_MEC_MEC015_SRV_TM_002_BR()); + execute(TC_MEC_MEC015_SRV_TM_002_NF()); + } + } // End of 'control' statement + +} // End of module AtsMec_TestControl diff --git a/ttcn/AtsMec/AtsMec_TrafficManagement/module.mk b/ttcn/AtsMec/AtsMec_TrafficManagement/module.mk new file mode 100644 index 0000000..449db40 --- /dev/null +++ b/ttcn/AtsMec/AtsMec_TrafficManagement/module.mk @@ -0,0 +1,48 @@ +suite := AtsMec + +sources := \ + AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn \ + AtsMec_TrafficManagementAPI_TestCases.ttcn \ + AtsMec_MultiAccessSteeringInfoAPI_TestCases.ttcn \ + AtsMec_LocationAPI_TestCases.ttcn \ + AtsMec_RnisAPI_TestCases.ttcn \ + AtsMec_TestControl.ttcn \ + AtsMec_UEAppInterfaceAPI_TestCases.ttcn \ + AtsMec_UEidentityAPI_TestCases.ttcn \ + AtsMec_V2XInformationServiceAPI_TestCases.ttcn \ + AtsMec_DeviceApplicationInterfaceAPI_TestCases.ttcn \ + AtsMec_WlanInformationAPI_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/EdgePlatformApplicationEnablementAPI \ + ../LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI \ + ../LibMec/TrafficManagementAPI \ + ../LibMec/LocationAPI \ + ../LibMec/RnisAPI \ + ../LibMec/UEAppInterfaceAPI \ + ../LibMec/UEidentityAPI \ + ../LibMec/V2XInformationServiceAPI \ + ../LibMec/DeviceApplicationInterfaceAPI \ + ../LibMec/WlanInformationAPI \ + ../LibMec/ApplicationMobilityServiceAPI \ + ../LibMec/FixedAccessInformationAPI \ + ../../ccsrc/Ports/LibHttp \ + ../../ccsrc/EncDec/LibHttp \ + ../../ccsrc/EncDec/LibMec \ + ../../ccsrc/Framework \ + ../../ccsrc/externals \ + ../../ccsrc/loggers \ + ../../ccsrc/Protocols/ETH \ + ../../ccsrc/Protocols/Http \ + ../../ccsrc/Protocols/Json \ + ../../ccsrc/Protocols/Pcap \ + ../../ccsrc/Protocols/Tcp \ + ../modules/titan.TestPorts.Common_Components.Abstract_Socket \ + diff --git a/ttcn/AtsMec/AtsMec_UEidentityAPI_TestCases.ttcn b/ttcn/AtsMec/AtsMec_UEidentity/AtsMec_UEidentityAPI_TestCases.ttcn similarity index 99% rename from ttcn/AtsMec/AtsMec_UEidentityAPI_TestCases.ttcn rename to ttcn/AtsMec/AtsMec_UEidentity/AtsMec_UEidentityAPI_TestCases.ttcn index 5e8a7e8..2e63169 100644 --- a/ttcn/AtsMec/AtsMec_UEidentityAPI_TestCases.ttcn +++ b/ttcn/AtsMec/AtsMec_UEidentity/AtsMec_UEidentityAPI_TestCases.ttcn @@ -15,11 +15,11 @@ module AtsMec_UEidentityAPI_TestCases { 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 LibHttp_TypesAndValues all; + import from LibHttp_Functions all; + import from LibHttp_Templates all; + import from LibHttp_JsonTemplates all; + import from LibHttp_TestSystem all; // LibMec/UEidentityAPI import from UEidentityAPI_Templates all; diff --git a/ttcn/AtsMec/AtsMec_UEidentity/AtsMec_UEidentityAPI_TestControl.ttcn b/ttcn/AtsMec/AtsMec_UEidentity/AtsMec_UEidentityAPI_TestControl.ttcn new file mode 100644 index 0000000..4c74736 --- /dev/null +++ b/ttcn/AtsMec/AtsMec_UEidentity/AtsMec_UEidentityAPI_TestControl.ttcn @@ -0,0 +1,126 @@ +module AtsMec_TestControl { + + // LibMec/LocationAPI + import from LocationAPI_Pics all; + // LibMec/UEidentityAPI + import from UEidentityAPI_Pics all; + // LibMec/RnisAPI + import from RnisAPI_Pics all; + // LibMec/TrafficManagementAPI + import from TrafficManagementAPI_Pics all; + // LibMec/AppEnablementAPI + import from EdgePlatformApplicationEnablementAPI_Pics all; + // LibMec/UEAppInterfaceAPI + import from UEAppInterfaceAPI_Pics all; + + // LibMec + import from LibMec_Pics all; + + // AtsMec + import from AtsMec_LocationAPI_TestCases all; + import from AtsMec_UEidentityAPI_TestCases all; +// import from AtsMec_RadioNodeLocationAPI_TestCases all; + import from AtsMec_RnisAPI_TestCases all; + import from AtsMec_TrafficManagementAPI_TestCases all; + import from AtsMec_EdgePlatformApplicationEnablementAPI_TestCases all; + import from AtsMec_UEAppInterfaceAPI_TestCases all; + + control { + + if (PICS_MEC_PLAT and PICS_SERVICES) { + if (PICS_UE_IDENTITY_API_SUPPORTED) { + execute(TC_MEC_MEC014_SRV_UETAG_001_OK()); + execute(TC_MEC_MEC014_SRV_UETAG_001_BR()); + execute(TC_MEC_MEC014_SRV_UETAG_001_NF()); + execute(TC_MEC_MEC014_SRV_UETAG_002_OK()); + execute(TC_MEC_MEC014_SRV_UETAG_002_BR()); + execute(TC_MEC_MEC014_SRV_UETAG_002_PF()); + } + if (PICS_LOCATION_API_SUPPORTED) { + execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_OK()); + execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_BR()); + execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_NF()); + + execute(TC_MEC_MEC013_SRV_UELOCSUB_001_OK()); + execute(TC_MEC_MEC013_SRV_UELOCSUB_001_BR()); + execute(TC_MEC_MEC013_SRV_UELOCSUB_002_OK()); + execute(TC_MEC_MEC013_SRV_UELOCSUB_002_NF()); + + execute(TC_MEC_MEC013_SRV_UETRACKSUB_001_OK()); + execute(TC_MEC_MEC013_SRV_UETRACKSUB_001_BR()); + execute(TC_MEC_MEC013_SRV_UETRACKSUB_002_OK()); + execute(TC_MEC_MEC013_SRV_UETRACKSUB_002_NF()); + + execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_OK()); + execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_BR()); + execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_NF()); + + execute(TC_MEC_MEC013_SRV_UEINFSUB_001_OK()); + execute(TC_MEC_MEC013_SRV_UEINFSUB_001_BR()); + execute(TC_MEC_MEC013_SRV_UEINFSUB_002_OK()); + execute(TC_MEC_MEC013_SRV_UEINFSUB_002_NF()); + +// execute(TC_MEC_PLAT_RLOC_001_OK()); +// execute(TC_MEC_PLAT_RLOC_001_NF()); + } + + if (PICS_APP_ENABLEMENT_API_SUPPORTED) { + /*execute(TC_MEC_SRV_TRANS_001_OK()); + execute(TC_MEC_SRV_TRAF_001_OK()); + execute(TC_MEC_SRV_TRAF_002_OK()); + execute(TC_MEC_SRV_TRAF_003_OK()); + execute(TC_MEC_SRV_TRAF_001_NF());*/ + } + + if (PICS_ENABLE_UE_APP_CTX) { + execute(TC_MEC_MEC016_MEO_UEAPPCTX_001_OK()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_001_BR()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_OK()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_BR()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_NF()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_003_OK()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_003_NF()); + execute(TC_MEC_MEC016_MEO_UEAPPS_001_OK()); + execute(TC_MEC_MEC016_MEO_UEAPPS_001_BR()); + execute(TC_MEC_MEC016_MEO_UEAPPS_001_NF()); + } + } + + /*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()); + execute(TC_MEC_MEC012_SRV_RNIS_011_BR()); + execute(TC_MEC_MEC012_SRV_RNIS_012_BR()); + } + if (PICS_RNIS_QUERY) { + execute(TC_MEC_MEC012_SRV_RNIS_016_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_016_BR()); + execute(TC_MEC_MEC012_SRV_RNIS_016_NF()); + execute(TC_MEC_MEC012_SRV_RNIS_017_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_017_BR()); + execute(TC_MEC_MEC012_SRV_RNIS_017_NF()); + execute(TC_MEC_MEC012_SRV_RNIS_018_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_018_BR()); + execute(TC_MEC_MEC012_SRV_RNIS_018_NF()); + execute(TC_MEC_MEC012_SRV_RNIS_019_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_019_BR()); + execute(TC_MEC_MEC012_SRV_RNIS_019_NF()); + } + }*/ + + if (PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED) { + execute(TC_MEC_MEC015_SRV_TM_001_OK()); + execute(TC_MEC_MEC015_SRV_TM_002_OK()); + execute(TC_MEC_MEC015_SRV_TM_002_BR()); + execute(TC_MEC_MEC015_SRV_TM_002_NF()); + } + } // End of 'control' statement + +} // End of module AtsMec_TestControl diff --git a/ttcn/AtsMec/AtsMec_UEidentity/module.mk b/ttcn/AtsMec/AtsMec_UEidentity/module.mk new file mode 100644 index 0000000..449db40 --- /dev/null +++ b/ttcn/AtsMec/AtsMec_UEidentity/module.mk @@ -0,0 +1,48 @@ +suite := AtsMec + +sources := \ + AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn \ + AtsMec_TrafficManagementAPI_TestCases.ttcn \ + AtsMec_MultiAccessSteeringInfoAPI_TestCases.ttcn \ + AtsMec_LocationAPI_TestCases.ttcn \ + AtsMec_RnisAPI_TestCases.ttcn \ + AtsMec_TestControl.ttcn \ + AtsMec_UEAppInterfaceAPI_TestCases.ttcn \ + AtsMec_UEidentityAPI_TestCases.ttcn \ + AtsMec_V2XInformationServiceAPI_TestCases.ttcn \ + AtsMec_DeviceApplicationInterfaceAPI_TestCases.ttcn \ + AtsMec_WlanInformationAPI_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/EdgePlatformApplicationEnablementAPI \ + ../LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI \ + ../LibMec/TrafficManagementAPI \ + ../LibMec/LocationAPI \ + ../LibMec/RnisAPI \ + ../LibMec/UEAppInterfaceAPI \ + ../LibMec/UEidentityAPI \ + ../LibMec/V2XInformationServiceAPI \ + ../LibMec/DeviceApplicationInterfaceAPI \ + ../LibMec/WlanInformationAPI \ + ../LibMec/ApplicationMobilityServiceAPI \ + ../LibMec/FixedAccessInformationAPI \ + ../../ccsrc/Ports/LibHttp \ + ../../ccsrc/EncDec/LibHttp \ + ../../ccsrc/EncDec/LibMec \ + ../../ccsrc/Framework \ + ../../ccsrc/externals \ + ../../ccsrc/loggers \ + ../../ccsrc/Protocols/ETH \ + ../../ccsrc/Protocols/Http \ + ../../ccsrc/Protocols/Json \ + ../../ccsrc/Protocols/Pcap \ + ../../ccsrc/Protocols/Tcp \ + ../modules/titan.TestPorts.Common_Components.Abstract_Socket \ + diff --git a/ttcn/AtsMec/AtsMec_V2XInformationServiceAPI_TestCases.ttcn b/ttcn/AtsMec/AtsMec_V2x/AtsMec_V2XInformationServiceAPI_TestCases.ttcn similarity index 99% rename from ttcn/AtsMec/AtsMec_V2XInformationServiceAPI_TestCases.ttcn rename to ttcn/AtsMec/AtsMec_V2x/AtsMec_V2XInformationServiceAPI_TestCases.ttcn index ce87389..75e107e 100644 --- a/ttcn/AtsMec/AtsMec_V2XInformationServiceAPI_TestCases.ttcn +++ b/ttcn/AtsMec/AtsMec_V2x/AtsMec_V2XInformationServiceAPI_TestCases.ttcn @@ -20,11 +20,11 @@ module AtsMec_V2XInformationServiceAPI_TestCases { 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 LibHttp_TypesAndValues all; + import from LibHttp_Functions all; + import from LibHttp_Templates all; + import from LibHttp_JsonTemplates all; + import from LibHttp_TestSystem all; // LibMec/V2XInformationServiceAPI import from V2XInformationServiceAPI_TypesAndValues all; diff --git a/ttcn/AtsMec/AtsMec_V2x/AtsMec_V2XInformationServiceAPI_TestControl.ttcn b/ttcn/AtsMec/AtsMec_V2x/AtsMec_V2XInformationServiceAPI_TestControl.ttcn new file mode 100644 index 0000000..4c74736 --- /dev/null +++ b/ttcn/AtsMec/AtsMec_V2x/AtsMec_V2XInformationServiceAPI_TestControl.ttcn @@ -0,0 +1,126 @@ +module AtsMec_TestControl { + + // LibMec/LocationAPI + import from LocationAPI_Pics all; + // LibMec/UEidentityAPI + import from UEidentityAPI_Pics all; + // LibMec/RnisAPI + import from RnisAPI_Pics all; + // LibMec/TrafficManagementAPI + import from TrafficManagementAPI_Pics all; + // LibMec/AppEnablementAPI + import from EdgePlatformApplicationEnablementAPI_Pics all; + // LibMec/UEAppInterfaceAPI + import from UEAppInterfaceAPI_Pics all; + + // LibMec + import from LibMec_Pics all; + + // AtsMec + import from AtsMec_LocationAPI_TestCases all; + import from AtsMec_UEidentityAPI_TestCases all; +// import from AtsMec_RadioNodeLocationAPI_TestCases all; + import from AtsMec_RnisAPI_TestCases all; + import from AtsMec_TrafficManagementAPI_TestCases all; + import from AtsMec_EdgePlatformApplicationEnablementAPI_TestCases all; + import from AtsMec_UEAppInterfaceAPI_TestCases all; + + control { + + if (PICS_MEC_PLAT and PICS_SERVICES) { + if (PICS_UE_IDENTITY_API_SUPPORTED) { + execute(TC_MEC_MEC014_SRV_UETAG_001_OK()); + execute(TC_MEC_MEC014_SRV_UETAG_001_BR()); + execute(TC_MEC_MEC014_SRV_UETAG_001_NF()); + execute(TC_MEC_MEC014_SRV_UETAG_002_OK()); + execute(TC_MEC_MEC014_SRV_UETAG_002_BR()); + execute(TC_MEC_MEC014_SRV_UETAG_002_PF()); + } + if (PICS_LOCATION_API_SUPPORTED) { + execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_OK()); + execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_BR()); + execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_NF()); + + execute(TC_MEC_MEC013_SRV_UELOCSUB_001_OK()); + execute(TC_MEC_MEC013_SRV_UELOCSUB_001_BR()); + execute(TC_MEC_MEC013_SRV_UELOCSUB_002_OK()); + execute(TC_MEC_MEC013_SRV_UELOCSUB_002_NF()); + + execute(TC_MEC_MEC013_SRV_UETRACKSUB_001_OK()); + execute(TC_MEC_MEC013_SRV_UETRACKSUB_001_BR()); + execute(TC_MEC_MEC013_SRV_UETRACKSUB_002_OK()); + execute(TC_MEC_MEC013_SRV_UETRACKSUB_002_NF()); + + execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_OK()); + execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_BR()); + execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_NF()); + + execute(TC_MEC_MEC013_SRV_UEINFSUB_001_OK()); + execute(TC_MEC_MEC013_SRV_UEINFSUB_001_BR()); + execute(TC_MEC_MEC013_SRV_UEINFSUB_002_OK()); + execute(TC_MEC_MEC013_SRV_UEINFSUB_002_NF()); + +// execute(TC_MEC_PLAT_RLOC_001_OK()); +// execute(TC_MEC_PLAT_RLOC_001_NF()); + } + + if (PICS_APP_ENABLEMENT_API_SUPPORTED) { + /*execute(TC_MEC_SRV_TRANS_001_OK()); + execute(TC_MEC_SRV_TRAF_001_OK()); + execute(TC_MEC_SRV_TRAF_002_OK()); + execute(TC_MEC_SRV_TRAF_003_OK()); + execute(TC_MEC_SRV_TRAF_001_NF());*/ + } + + if (PICS_ENABLE_UE_APP_CTX) { + execute(TC_MEC_MEC016_MEO_UEAPPCTX_001_OK()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_001_BR()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_OK()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_BR()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_NF()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_003_OK()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_003_NF()); + execute(TC_MEC_MEC016_MEO_UEAPPS_001_OK()); + execute(TC_MEC_MEC016_MEO_UEAPPS_001_BR()); + execute(TC_MEC_MEC016_MEO_UEAPPS_001_NF()); + } + } + + /*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()); + execute(TC_MEC_MEC012_SRV_RNIS_011_BR()); + execute(TC_MEC_MEC012_SRV_RNIS_012_BR()); + } + if (PICS_RNIS_QUERY) { + execute(TC_MEC_MEC012_SRV_RNIS_016_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_016_BR()); + execute(TC_MEC_MEC012_SRV_RNIS_016_NF()); + execute(TC_MEC_MEC012_SRV_RNIS_017_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_017_BR()); + execute(TC_MEC_MEC012_SRV_RNIS_017_NF()); + execute(TC_MEC_MEC012_SRV_RNIS_018_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_018_BR()); + execute(TC_MEC_MEC012_SRV_RNIS_018_NF()); + execute(TC_MEC_MEC012_SRV_RNIS_019_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_019_BR()); + execute(TC_MEC_MEC012_SRV_RNIS_019_NF()); + } + }*/ + + if (PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED) { + execute(TC_MEC_MEC015_SRV_TM_001_OK()); + execute(TC_MEC_MEC015_SRV_TM_002_OK()); + execute(TC_MEC_MEC015_SRV_TM_002_BR()); + execute(TC_MEC_MEC015_SRV_TM_002_NF()); + } + } // End of 'control' statement + +} // End of module AtsMec_TestControl diff --git a/ttcn/AtsMec/AtsMec_V2x/module.mk b/ttcn/AtsMec/AtsMec_V2x/module.mk new file mode 100644 index 0000000..449db40 --- /dev/null +++ b/ttcn/AtsMec/AtsMec_V2x/module.mk @@ -0,0 +1,48 @@ +suite := AtsMec + +sources := \ + AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn \ + AtsMec_TrafficManagementAPI_TestCases.ttcn \ + AtsMec_MultiAccessSteeringInfoAPI_TestCases.ttcn \ + AtsMec_LocationAPI_TestCases.ttcn \ + AtsMec_RnisAPI_TestCases.ttcn \ + AtsMec_TestControl.ttcn \ + AtsMec_UEAppInterfaceAPI_TestCases.ttcn \ + AtsMec_UEidentityAPI_TestCases.ttcn \ + AtsMec_V2XInformationServiceAPI_TestCases.ttcn \ + AtsMec_DeviceApplicationInterfaceAPI_TestCases.ttcn \ + AtsMec_WlanInformationAPI_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/EdgePlatformApplicationEnablementAPI \ + ../LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI \ + ../LibMec/TrafficManagementAPI \ + ../LibMec/LocationAPI \ + ../LibMec/RnisAPI \ + ../LibMec/UEAppInterfaceAPI \ + ../LibMec/UEidentityAPI \ + ../LibMec/V2XInformationServiceAPI \ + ../LibMec/DeviceApplicationInterfaceAPI \ + ../LibMec/WlanInformationAPI \ + ../LibMec/ApplicationMobilityServiceAPI \ + ../LibMec/FixedAccessInformationAPI \ + ../../ccsrc/Ports/LibHttp \ + ../../ccsrc/EncDec/LibHttp \ + ../../ccsrc/EncDec/LibMec \ + ../../ccsrc/Framework \ + ../../ccsrc/externals \ + ../../ccsrc/loggers \ + ../../ccsrc/Protocols/ETH \ + ../../ccsrc/Protocols/Http \ + ../../ccsrc/Protocols/Json \ + ../../ccsrc/Protocols/Pcap \ + ../../ccsrc/Protocols/Tcp \ + ../modules/titan.TestPorts.Common_Components.Abstract_Socket \ + diff --git a/ttcn/AtsMec/AtsMec_WlanInformationAPI_TestCases.ttcn b/ttcn/AtsMec/AtsMec_Wlan/AtsMec_WlanInformationAPI_TestCases.ttcn similarity index 99% rename from ttcn/AtsMec/AtsMec_WlanInformationAPI_TestCases.ttcn rename to ttcn/AtsMec/AtsMec_Wlan/AtsMec_WlanInformationAPI_TestCases.ttcn index 77e9626..49a2d50 100644 --- a/ttcn/AtsMec/AtsMec_WlanInformationAPI_TestCases.ttcn +++ b/ttcn/AtsMec/AtsMec_Wlan/AtsMec_WlanInformationAPI_TestCases.ttcn @@ -20,11 +20,11 @@ module AtsMec_WlanInformationAPI_TestCases { 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 LibHttp_TypesAndValues all; + import from LibHttp_Functions all; + import from LibHttp_Templates all; + import from LibHttp_JsonTemplates all; + import from LibHttp_TestSystem all; // LibMec/WlanInformationAPI import from WlanInformationAPI_TypesAndValues all; diff --git a/ttcn/AtsMec/AtsMec_Wlan/AtsMec_WlanInformationAPI_TestControl.ttcn b/ttcn/AtsMec/AtsMec_Wlan/AtsMec_WlanInformationAPI_TestControl.ttcn new file mode 100644 index 0000000..4c74736 --- /dev/null +++ b/ttcn/AtsMec/AtsMec_Wlan/AtsMec_WlanInformationAPI_TestControl.ttcn @@ -0,0 +1,126 @@ +module AtsMec_TestControl { + + // LibMec/LocationAPI + import from LocationAPI_Pics all; + // LibMec/UEidentityAPI + import from UEidentityAPI_Pics all; + // LibMec/RnisAPI + import from RnisAPI_Pics all; + // LibMec/TrafficManagementAPI + import from TrafficManagementAPI_Pics all; + // LibMec/AppEnablementAPI + import from EdgePlatformApplicationEnablementAPI_Pics all; + // LibMec/UEAppInterfaceAPI + import from UEAppInterfaceAPI_Pics all; + + // LibMec + import from LibMec_Pics all; + + // AtsMec + import from AtsMec_LocationAPI_TestCases all; + import from AtsMec_UEidentityAPI_TestCases all; +// import from AtsMec_RadioNodeLocationAPI_TestCases all; + import from AtsMec_RnisAPI_TestCases all; + import from AtsMec_TrafficManagementAPI_TestCases all; + import from AtsMec_EdgePlatformApplicationEnablementAPI_TestCases all; + import from AtsMec_UEAppInterfaceAPI_TestCases all; + + control { + + if (PICS_MEC_PLAT and PICS_SERVICES) { + if (PICS_UE_IDENTITY_API_SUPPORTED) { + execute(TC_MEC_MEC014_SRV_UETAG_001_OK()); + execute(TC_MEC_MEC014_SRV_UETAG_001_BR()); + execute(TC_MEC_MEC014_SRV_UETAG_001_NF()); + execute(TC_MEC_MEC014_SRV_UETAG_002_OK()); + execute(TC_MEC_MEC014_SRV_UETAG_002_BR()); + execute(TC_MEC_MEC014_SRV_UETAG_002_PF()); + } + if (PICS_LOCATION_API_SUPPORTED) { + execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_OK()); + execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_BR()); + execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_NF()); + + execute(TC_MEC_MEC013_SRV_UELOCSUB_001_OK()); + execute(TC_MEC_MEC013_SRV_UELOCSUB_001_BR()); + execute(TC_MEC_MEC013_SRV_UELOCSUB_002_OK()); + execute(TC_MEC_MEC013_SRV_UELOCSUB_002_NF()); + + execute(TC_MEC_MEC013_SRV_UETRACKSUB_001_OK()); + execute(TC_MEC_MEC013_SRV_UETRACKSUB_001_BR()); + execute(TC_MEC_MEC013_SRV_UETRACKSUB_002_OK()); + execute(TC_MEC_MEC013_SRV_UETRACKSUB_002_NF()); + + execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_OK()); + execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_BR()); + execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_NF()); + + execute(TC_MEC_MEC013_SRV_UEINFSUB_001_OK()); + execute(TC_MEC_MEC013_SRV_UEINFSUB_001_BR()); + execute(TC_MEC_MEC013_SRV_UEINFSUB_002_OK()); + execute(TC_MEC_MEC013_SRV_UEINFSUB_002_NF()); + +// execute(TC_MEC_PLAT_RLOC_001_OK()); +// execute(TC_MEC_PLAT_RLOC_001_NF()); + } + + if (PICS_APP_ENABLEMENT_API_SUPPORTED) { + /*execute(TC_MEC_SRV_TRANS_001_OK()); + execute(TC_MEC_SRV_TRAF_001_OK()); + execute(TC_MEC_SRV_TRAF_002_OK()); + execute(TC_MEC_SRV_TRAF_003_OK()); + execute(TC_MEC_SRV_TRAF_001_NF());*/ + } + + if (PICS_ENABLE_UE_APP_CTX) { + execute(TC_MEC_MEC016_MEO_UEAPPCTX_001_OK()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_001_BR()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_OK()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_BR()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_NF()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_003_OK()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_003_NF()); + execute(TC_MEC_MEC016_MEO_UEAPPS_001_OK()); + execute(TC_MEC_MEC016_MEO_UEAPPS_001_BR()); + execute(TC_MEC_MEC016_MEO_UEAPPS_001_NF()); + } + } + + /*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()); + execute(TC_MEC_MEC012_SRV_RNIS_011_BR()); + execute(TC_MEC_MEC012_SRV_RNIS_012_BR()); + } + if (PICS_RNIS_QUERY) { + execute(TC_MEC_MEC012_SRV_RNIS_016_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_016_BR()); + execute(TC_MEC_MEC012_SRV_RNIS_016_NF()); + execute(TC_MEC_MEC012_SRV_RNIS_017_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_017_BR()); + execute(TC_MEC_MEC012_SRV_RNIS_017_NF()); + execute(TC_MEC_MEC012_SRV_RNIS_018_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_018_BR()); + execute(TC_MEC_MEC012_SRV_RNIS_018_NF()); + execute(TC_MEC_MEC012_SRV_RNIS_019_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_019_BR()); + execute(TC_MEC_MEC012_SRV_RNIS_019_NF()); + } + }*/ + + if (PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED) { + execute(TC_MEC_MEC015_SRV_TM_001_OK()); + execute(TC_MEC_MEC015_SRV_TM_002_OK()); + execute(TC_MEC_MEC015_SRV_TM_002_BR()); + execute(TC_MEC_MEC015_SRV_TM_002_NF()); + } + } // End of 'control' statement + +} // End of module AtsMec_TestControl diff --git a/ttcn/AtsMec/AtsMec_Wlan/module.mk b/ttcn/AtsMec/AtsMec_Wlan/module.mk new file mode 100644 index 0000000..449db40 --- /dev/null +++ b/ttcn/AtsMec/AtsMec_Wlan/module.mk @@ -0,0 +1,48 @@ +suite := AtsMec + +sources := \ + AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn \ + AtsMec_TrafficManagementAPI_TestCases.ttcn \ + AtsMec_MultiAccessSteeringInfoAPI_TestCases.ttcn \ + AtsMec_LocationAPI_TestCases.ttcn \ + AtsMec_RnisAPI_TestCases.ttcn \ + AtsMec_TestControl.ttcn \ + AtsMec_UEAppInterfaceAPI_TestCases.ttcn \ + AtsMec_UEidentityAPI_TestCases.ttcn \ + AtsMec_V2XInformationServiceAPI_TestCases.ttcn \ + AtsMec_DeviceApplicationInterfaceAPI_TestCases.ttcn \ + AtsMec_WlanInformationAPI_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/EdgePlatformApplicationEnablementAPI \ + ../LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI \ + ../LibMec/TrafficManagementAPI \ + ../LibMec/LocationAPI \ + ../LibMec/RnisAPI \ + ../LibMec/UEAppInterfaceAPI \ + ../LibMec/UEidentityAPI \ + ../LibMec/V2XInformationServiceAPI \ + ../LibMec/DeviceApplicationInterfaceAPI \ + ../LibMec/WlanInformationAPI \ + ../LibMec/ApplicationMobilityServiceAPI \ + ../LibMec/FixedAccessInformationAPI \ + ../../ccsrc/Ports/LibHttp \ + ../../ccsrc/EncDec/LibHttp \ + ../../ccsrc/EncDec/LibMec \ + ../../ccsrc/Framework \ + ../../ccsrc/externals \ + ../../ccsrc/loggers \ + ../../ccsrc/Protocols/ETH \ + ../../ccsrc/Protocols/Http \ + ../../ccsrc/Protocols/Json \ + ../../ccsrc/Protocols/Pcap \ + ../../ccsrc/Protocols/Tcp \ + ../modules/titan.TestPorts.Common_Components.Abstract_Socket \ + diff --git a/ttcn/AtsMec/AtsMec_LocationAPI_TestCases.ttcn b/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestCases.ttcn similarity index 99% rename from ttcn/AtsMec/AtsMec_LocationAPI_TestCases.ttcn rename to ttcn/AtsMec_Location/AtsMec_LocationAPI_TestCases.ttcn index 0a3b1b3..58ee7f9 100644 --- a/ttcn/AtsMec/AtsMec_LocationAPI_TestCases.ttcn +++ b/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestCases.ttcn @@ -15,11 +15,11 @@ module AtsMec_LocationAPI_TestCases { 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 LibHttp_TypesAndValues all; + import from LibHttp_Functions all; + import from LibHttp_Templates all; + import from LibHttp_JsonTemplates all; + import from LibHttp_TestSystem all; // LibMec/LocationAPI import from LocationAPI_TypesAndValues all; diff --git a/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestControl.ttcn b/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestControl.ttcn new file mode 100644 index 0000000..aef4802 --- /dev/null +++ b/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestControl.ttcn @@ -0,0 +1,42 @@ +module AtsMec_LocationAPI_TestControl { + + // LibMec/LocationAPI + import from LocationAPI_Pics all; + + // LibMec + import from LibMec_Pics all; + + // AtsMec_LocationAPI + import from AtsMec_LocationAPI_TestCases all; + + control { + + if (PICS_MEC_PLAT and PICS_SERVICES) { + if (PICS_LOCATION_API_SUPPORTED) { + execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_OK()); + execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_BR()); + execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_NF()); + + execute(TC_MEC_MEC013_SRV_UELOCSUB_001_OK()); + execute(TC_MEC_MEC013_SRV_UELOCSUB_001_BR()); + execute(TC_MEC_MEC013_SRV_UELOCSUB_002_OK()); + execute(TC_MEC_MEC013_SRV_UELOCSUB_002_NF()); + + execute(TC_MEC_MEC013_SRV_UETRACKSUB_001_OK()); + execute(TC_MEC_MEC013_SRV_UETRACKSUB_001_BR()); + execute(TC_MEC_MEC013_SRV_UETRACKSUB_002_OK()); + execute(TC_MEC_MEC013_SRV_UETRACKSUB_002_NF()); + + execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_OK()); + execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_BR()); + execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_NF()); + + execute(TC_MEC_MEC013_SRV_UEINFSUB_001_OK()); + execute(TC_MEC_MEC013_SRV_UEINFSUB_001_BR()); + execute(TC_MEC_MEC013_SRV_UEINFSUB_002_OK()); + execute(TC_MEC_MEC013_SRV_UEINFSUB_002_NF()); + } + } + } // End of 'control' statement + +} // End of module AtsMec_TestControl diff --git a/ttcn/AtsMec_Location/module.mk b/ttcn/AtsMec_Location/module.mk new file mode 100644 index 0000000..51cca8a --- /dev/null +++ b/ttcn/AtsMec_Location/module.mk @@ -0,0 +1,34 @@ +suite := AtsMec_Location + +sources := \ + AtsMec_LocationAPI_TestCases.ttcn \ + AtsMec_LocationAPI_TestControl.ttcn + +modules := ../LibCommon \ + ../../titan-test-system-framework/ttcn/LibHelpers \ + ../../titan-test-system-framework/ttcn/LibHttp \ + ../patch_lib_http \ + ../LibMec \ + ../LibMec/LocationAPI \ + ../LibMec/EdgePlatformApplicationEnablementAPI \ + ../LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI \ + ../LibMec/TrafficManagementAPI \ + ../LibMec/RnisAPI \ + ../LibMec/UEAppInterfaceAPI \ + ../LibMec/UEidentityAPI \ + ../LibMec/V2XInformationServiceAPI \ + ../LibMec/DeviceApplicationInterfaceAPI \ + ../LibMec/WlanInformationAPI \ + ../LibMec/ApplicationMobilityServiceAPI \ + ../../titan-test-system-framework/ccsrc/Framework \ + ../../titan-test-system-framework/ccsrc/loggers \ + ../../titan-test-system-framework/ccsrc/Protocols/Http \ + ../../titan-test-system-framework/ccsrc/Protocols/Tcp \ + ../../titan-test-system-framework/ccsrc/Helpers \ + ../../ccsrc/Ports/LibHttp \ + ../../ccsrc/EncDec/LibMec \ + ../../ccsrc/externals \ + ../../ccsrc/Protocols/Http \ + ../../ccsrc/Protocols/Json \ + ../modules/titan.TestPorts.Common_Components.Abstract_Socket \ + diff --git a/ttcn/LibIts b/ttcn/LibIts index 913d130..289f34c 160000 --- a/ttcn/LibIts +++ b/ttcn/LibIts @@ -1 +1 @@ -Subproject commit 913d130353cf716ab620edbafcb56d2213dc344d +Subproject commit 289f34c96c7b759615d5e9b56b385d74bb0d89cc diff --git a/ttcn/LibMec/DeviceApplicationInterfaceAPI/ttcn/DeviceApplicationInterfaceAPI_Functions.ttcn b/ttcn/LibMec/DeviceApplicationInterfaceAPI/ttcn/DeviceApplicationInterfaceAPI_Functions.ttcn index bf59275..cabc783 100644 --- a/ttcn/LibMec/DeviceApplicationInterfaceAPI/ttcn/DeviceApplicationInterfaceAPI_Functions.ttcn +++ b/ttcn/LibMec/DeviceApplicationInterfaceAPI/ttcn/DeviceApplicationInterfaceAPI_Functions.ttcn @@ -11,11 +11,11 @@ module DeviceApplicationInterfaceAPI_Functions { 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 LibHttp_TypesAndValues all; + import from LibHttp_Functions all; + import from LibHttp_Templates all; + import from LibHttp_JsonTemplates all; + import from LibHttp_TestSystem all; // LibMec/DeviceApplicationInterfaceAPI import from DeviceApplicationInterfaceAPI_TypesAndValues all; diff --git a/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Functions.ttcn b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Functions.ttcn index e0dedcf..9e6c807 100644 --- a/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Functions.ttcn +++ b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Functions.ttcn @@ -10,11 +10,11 @@ module EdgePlatformApplicationEnablementAPI_Functions { 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 LibHttp_TypesAndValues all; + import from LibHttp_Functions all; + import from LibHttp_Templates all; + import from LibHttp_JsonTemplates all; + import from LibHttp_TestSystem all; // LibMec/EdgePlatformApplicationEnablementAPI import from EdgePlatformApplicationEnablementAPI_TypesAndValues all; diff --git a/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_TypesAndValues.ttcn b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_TypesAndValues.ttcn index bd8e608..b5b4e78 100644 --- a/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_TypesAndValues.ttcn @@ -413,7 +413,7 @@ running /** * @desc This type represents a subscription to the notifications from the mobile edge platform regarding the availability of a mobile edge service or a list of mobile edge services. */ - type record SerAvailabilityNotificationSubscription_ { + type record SerAvailabilityNotificationSubscription { SerAvailabilityNotificationSubscription_SubscriptionType subscriptionType, SerAvailabilityNotificationSubscription_CallbackReference callbackReference, Self links optional, diff --git a/ttcn/LibMec/FixedAccessInformationAPI/module.mk b/ttcn/LibMec/FixedAccessInformationAPI/module.mk new file mode 100644 index 0000000..341b7f8 --- /dev/null +++ b/ttcn/LibMec/FixedAccessInformationAPI/module.mk @@ -0,0 +1,6 @@ +sources := \ + ttcn/FixedAccessInformationServiceAPI_Pics.ttcn \ + ttcn/FixedAccessInformationServiceAPI_Pixits.ttcn \ + ttcn/FixedAccessInformationServiceAPI_Templates.ttcn \ + ttcn/FixedAccessInformationServiceAPI_TypesAndValues.ttcn + diff --git a/ttcn/LibMec/FixedAccessInformationAPI/ttcn/FixedAccessInformationServiceAPI_TypesAndValues.ttcn b/ttcn/LibMec/FixedAccessInformationAPI/ttcn/FixedAccessInformationServiceAPI_TypesAndValues.ttcn index d328bd5..45c2466 100644 --- a/ttcn/LibMec/FixedAccessInformationAPI/ttcn/FixedAccessInformationServiceAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/FixedAccessInformationAPI/ttcn/FixedAccessInformationServiceAPI_TypesAndValues.ttcn @@ -482,7 +482,12 @@ module FixedAccessInformationServiceAPI_TypesAndValues { PseOverloadYellow, // (Indicates that the ONU is nearing its maximum ability to supply the known PoE demand of the attached PDs. The thresholds for declaring and clearing this alarm are vendor-specific.) PseOverloadRed, //(Indicates that the ONU is unable to supply all of the PoE demand of the attached PDs and has removed or reduced power to at least one PD.) All + } with { + variant "JSON: as number" } + type record of Alarm Alarms; + } with { + encode "JSON" } // End of module FixedAccessInformationServiceAPI_TypesAndValues diff --git a/ttcn/LibMec/LocationAPI/module.mk b/ttcn/LibMec/LocationAPI/module.mk index f0a2cf5..fb33917 100644 --- a/ttcn/LibMec/LocationAPI/module.mk +++ b/ttcn/LibMec/LocationAPI/module.mk @@ -4,4 +4,5 @@ sources := \ ttcn/LocationAPI_Pics.ttcn \ ttcn/LocationAPI_Pixits.ttcn \ ttcn/LocationAPI_Templates.ttcn \ - ttcn/LocationAPI_TypesAndValues.ttcn + ttcn/LocationAPI_TypesAndValues.ttcn \ + diff --git a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Functions.ttcn b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Functions.ttcn index 523d7a9..fac2cf4 100644 --- a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Functions.ttcn +++ b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Functions.ttcn @@ -20,11 +20,11 @@ module LocationAPI_Functions { 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 LibHttp_TypesAndValues all; + import from LibHttp_Functions all; + import from LibHttp_Templates all; + import from LibHttp_JsonTemplates all; + import from LibHttp_TestSystem all; // LibMec/LocationAPI import from LocationAPI_TypesAndValues all; diff --git a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn index 69321a2..2b0134c 100644 --- a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn @@ -739,4 +739,4 @@ REST_NetAPI_Common]. } } with { encode "JSON" -} +} // End of module LocationAPI_TypesAndValues diff --git a/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Functions.ttcn b/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Functions.ttcn index 1d86a9e..d0721d5 100644 --- a/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Functions.ttcn +++ b/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Functions.ttcn @@ -10,11 +10,11 @@ module TrafficManagementAPI_Functions { 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 LibHttp_TypesAndValues all; + import from LibHttp_Functions all; + import from LibHttp_Templates all; + import from LibHttp_JsonTemplates all; + import from LibHttp_TestSystem all; // LibMec/TrafficManagementAPI import from TrafficManagementAPI_TypesAndValues all; diff --git a/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Pixits.ttcn b/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Pixits.ttcn index 033dcfa..352ca84 100644 --- a/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Pixits.ttcn +++ b/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Pixits.ttcn @@ -3,8 +3,8 @@ module TrafficManagementAPI_Pixits { // LibCommon import from LibCommon_BasicTypesAndValues all; - // LibMec/BwManagementAPI - import from BwManagementAPI_TypesAndValues all; + // LibMec/TrafficManagementAPI + import from TrafficManagementAPI_TypesAndValues all; // LibMec/LocationAPI import from LocationAPI_TypesAndValues all; diff --git a/ttcn/LibMec/UEAppInterfaceAPI/ttcn/UEAppInterfaceAPI_Functions.ttcn b/ttcn/LibMec/UEAppInterfaceAPI/ttcn/UEAppInterfaceAPI_Functions.ttcn index 30bd457..651f082 100644 --- a/ttcn/LibMec/UEAppInterfaceAPI/ttcn/UEAppInterfaceAPI_Functions.ttcn +++ b/ttcn/LibMec/UEAppInterfaceAPI/ttcn/UEAppInterfaceAPI_Functions.ttcn @@ -1,11 +1,11 @@ module UEAppInterfaceAPI_Functions { // 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 LibHttp_TypesAndValues all; + import from LibHttp_Functions all; + import from LibHttp_Templates all; + import from LibHttp_JsonTemplates all; + import from LibHttp_TestSystem all; // LibMec/UEAppInterfaceAPI import from UEAppInterfaceAPI_Templates all; diff --git a/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Functions.ttcn b/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Functions.ttcn index a3ba215..a874c67 100644 --- a/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Functions.ttcn +++ b/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Functions.ttcn @@ -20,11 +20,11 @@ module V2XInformationServiceAPI_Functions { 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 LibHttp_TypesAndValues all; + import from LibHttp_Functions all; + import from LibHttp_Templates all; + import from LibHttp_JsonTemplates all; + import from LibHttp_TestSystem all; // LibMec/V2XInformationServiceAPI import from V2XInformationServiceAPI_TypesAndValues all; diff --git a/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Functions.ttcn b/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Functions.ttcn index edc53f6..eeadfd6 100644 --- a/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Functions.ttcn +++ b/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Functions.ttcn @@ -20,11 +20,11 @@ module WlanInformationAPI_Functions { 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 LibHttp_TypesAndValues all; + import from LibHttp_Functions all; + import from LibHttp_Templates all; + import from LibHttp_JsonTemplates all; + import from LibHttp_TestSystem all; // LibMec/WlanInformationAPI import from WlanInformationAPI_TypesAndValues all; diff --git a/ttcn/LibMec/ttcn/LibMec_Functions.ttcn b/ttcn/LibMec/ttcn/LibMec_Functions.ttcn index e45be26..043e12e 100644 --- a/ttcn/LibMec/ttcn/LibMec_Functions.ttcn +++ b/ttcn/LibMec/ttcn/LibMec_Functions.ttcn @@ -8,113 +8,14 @@ module LibMec_Functions { import from LibMec_Pixits all; import from LibMec_Pics all; - // LibMec_UEidentityAPI - import from UEidentityAPI_TypesAndValues all; - import from UEidentityAPI_Templates all; - import from UEidentityAPI_Pixits all; - // LibHttp - import from LibItsHttp_TypesAndValues all; - import from LibItsHttp_JsonMessageBodyTypes all; - import from LibItsHttp_Templates all; - import from LibItsHttp_TestSystem all; - import from LibItsHttp_Templates all; - import from LibItsHttp_JsonTemplates all; - import from LibItsHttp_Pics all; - - group preambles { - - /** - * @desc Setup HTTP pprotocol port - */ - function f_cf_01_http_up() runs on HttpComponent { - - // Map ports - map(self:httpPort, system:httpPort); - - // Connect - f_connect4SelfOrClientSync(); - - activate(a_cf_01_http_down()); - activate(a_default_requests()); - activate(a_default_responses()); - - } // End of function f_cf_01_http_up - - /** - * @desc Setup HTTP pprotocol port - */ - function f_cf_01_http_notif_up() runs on HttpComponent { - - // Map ports - map(self:httpPort, system:httpPort); - map(self:httpPort_notif, system:httpPort_notif); - - // Connect - f_connect4SelfOrClientSync(); - - activate(a_cf_01_http_notif_down()); - activate(a_default_requests()); - activate(a_default_responses()); - - } // End of function f_cf_01_http_notif_up - - } // End of group preambles - - group postambles { - - /** - * @desc Shutdown HTTP pprotocol port - */ - function f_cf_01_http_down() runs on HttpComponent { - - // Unmap ports - unmap(self:httpPort, system:httpPort); - - // Disconnect ports - f_disconnect4SelfOrClientSync(); - - deactivate; - } // End of function f_cf_01_http_down - - /** - * @desc Shutdown HTTP pprotocol port - */ - function f_cf_01_http_notif_down() runs on HttpComponent { - - // Unmap ports - unmap(self:httpPort, system:httpPort); - unmap(self:httpPort_notif, system:httpPort_notif); - - // Disconnect ports - f_disconnect4SelfOrClientSync(); - - deactivate; - } // End of function f_cf_01_http_notif_down - - /** - * @desc Default handling cf01 de-initialisation. - */ - altstep a_cf_01_http_down() runs on HttpComponent { - [] a_shutdown() { - f_cf_01_http_down(); - log("*** a_cf_01_http_down: INFO: TEST COMPONENT NOW STOPPING ITSELF! ***"); - stop; - } - } // End of altstep a_cf_01_http_down - - /** - * @desc Default handling cf01 de-initialisation. - */ - altstep a_cf_01_http_notif_down() runs on HttpComponent { - [] a_shutdown() { - f_cf_01_http_notif_down(); - log("*** a_cf_01_http_notif_down: INFO: TEST COMPONENT NOW STOPPING ITSELF! ***"); - stop; - } - } // End of altstep a_cf_01_http_notif_down - - } // End of group postambles + import from LibHttp_TypesAndValues all; + import from LibHttp_JsonMessageBodyTypes all; + import from LibHttp_Templates all; + import from LibHttp_TestSystem all; + import from LibHttp_Templates all; + import from LibHttp_JsonTemplates all; + import from LibHttp_Pics all; group external_functions { @@ -133,99 +34,15 @@ module LibMec_Functions { } // End of group external_functions group helpers { - - /** - * @desc Check HTTP response headers - * @param p_headers The HTTP headers - * @param p_value the expected va;ue - * @return true on success, false otherwise - */ - function f_check_headers( - in Headers p_headers, - in charstring p_header_name := "Location", - in template (present) charstring p_value := ? - ) return boolean { - // Local variables - var boolean v_header_matched := false; - - for (var integer v_idx := 0; v_idx < lengthof(p_headers); v_idx := v_idx + 1) { - if (p_headers[v_idx].header_name == p_header_name) { - if (match(p_headers[v_idx].header_value[0], p_value) == true) { - v_header_matched := true; - } // else, nothing to do - break; - } - } // End of 'for' statement - - return v_header_matched; - } - - /** - * @desc Check if the user is registered or not - * @param p_ue_identity_tag The UE identity tag - * @param p_headers The HTTP headers - * @return 0 if unregistered, 1 if registered, -1 otherwise - */ - function f_check_user_register_state( - in UeIdentityTag p_ue_identity_tag := PX_UE_IDENTITY_TAG, - in Headers p_headers - ) runs on HttpComponent return integer { - var HttpMessage v_response; - var integer v_result := -1; - - // Send request - httpPort.send( - m_http_request( - m_http_request_get( - "/" & PICS_ROOT_API & PX_ME_APP_Q_UE_IDENTITY_ID_URI & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/ue_identity_tag_info?ueIdentityTag=" & oct2char(unichar2oct(p_ue_identity_tag, "UTF-8")), - p_headers - ) - ) - ); - // Await for the response - tc_ac.start; - alt { - [] httpPort.receive( - mw_http_response( - mw_http_response_ok( - mw_http_message_body_json( - mw_body_json_ue_identity_tag_info( - mw_ue_identity_tag_info( - { *, mw_ue_identity_tag_item(PX_UE_IDENTITY_TAG), * } - )))))) -> value v_response { - tc_ac.stop; - - for (var integer v_i := 0; v_i < lengthof(v_response.response.body.json_body.ueIdentityTagInfo.ueIdentityTags); v_i := v_i + 1) { - if (v_response.response.body.json_body.ueIdentityTagInfo.ueIdentityTags[v_i].ueIdentityTag == p_ue_identity_tag) { - //log("Processing ", v_response.response.body.json_body.ueIdentityTagInfo.ueIdentityTags[v_i].ueIdentityTag); - //log("State ", v_response.response.body.json_body.ueIdentityTagInfo.ueIdentityTags[v_i].state); - if (v_response.response.body.json_body.ueIdentityTagInfo.ueIdentityTags[v_i].state == UNREGISTERED) { - v_result := 0; - } else if (v_response.response.body.json_body.ueIdentityTagInfo.ueIdentityTags[v_i].state == REGISTERED) { - v_result := 1; - } else if (v_response.response.body.json_body.ueIdentityTagInfo.ueIdentityTags[v_i].state == INVALID_STATE) { - v_result := 2; - } - break; - } - } - } - [] tc_ac.timeout { - } - } // End of 'alt' statement - - //log("<<< f_check_user_register_state: v_result: ", v_result); - return v_result; - } // End of function f_check_user_register_state - + function f_get_current_time_utc() return UInt64 { return fx_get_current_time_utc(); } // End of function f_get_current_time_utc - + function f_get_current_timestamp_utc() return UInt64 { return fx_get_current_time_utc(); } // End of function f_get_current_timestamp_utc - + } // End of group helpers group registration { @@ -307,90 +124,4 @@ module LibMec_Functions { } // End of group registration - group altsteps { - - altstep a_default_requests() runs on HttpComponent { - [] httpPort.receive(mw_http_request) { - tc_ac.stop; - log("*** " & testcasename() & ": FAIL: Server error: Receive request instead of response on httpPort ***"); - f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); - } - [] httpPort_notif.receive(mw_http_request) { - tc_ac.stop; - log("*** " & testcasename() & ": FAIL: Server error: Receive unsollicited request on httpPort_notif ***"); - f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); - } - } // End of altstep a_default_requests - - altstep a_default_responses() runs on HttpComponent { - var HttpMessage v_response; - - [] httpPort.receive( - mw_http_response( - mw_http_response_ok( - mw_http_message_body_xml - ))) { - tc_ac.stop; - log("*** " & testcasename() & ": FAIL: Unexpected XML response ***"); - f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); - } - [] httpPort.receive( - mw_http_response( - mw_http_response_ok( - mw_http_message_body_json - ))) { - tc_ac.stop; - log("*** " & testcasename() & ": FAIL: Unexpected JSON response ***"); - f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); - } - [] httpPort.receive( - mw_http_response( - mw_http_response_ok( - mw_http_message_body_binary - ))) { - tc_ac.stop; - log("*** " & testcasename() & ": FAIL: Unexpected binary response ***"); - f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); - } - [PICS_USE_TOKEN_HEADER == false] httpPort.receive( - mw_http_response( - mw_http_response_401_unauthorized - )) -> value v_response { - tc_ac.stop; - log("*** " & testcasename() & ": PASS: Received HTTP error message in case of non authenticated HTTP request ***"); - f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); - } - [] httpPort.receive( - mw_http_response( - mw_http_response_ko - )) -> value v_response { - tc_ac.stop; - log("*** " & testcasename() & ": FAIL: Server error: " & int2str(v_response.response.statuscode) & "/" & v_response.response.statustext & " ***"); - f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); - // Do not repeat! - } - [] httpPort.receive(mw_http_response) -> value v_response { - tc_ac.stop; - log("*** " & testcasename() & ": FAIL: Server error: " & int2str(v_response.response.statuscode) & "/" & v_response.response.statustext & " ***"); - f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); - } - [] httpPort.receive { - tc_ac.stop; - log("*** " & testcasename() & ": FAIL: Server error: Receive unsollicited message on httpPort ***"); - f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); - } - [] httpPort_notif.receive(mw_http_response) -> value v_response { - tc_ac.stop; - log("*** " & testcasename() & ": FAIL: Server error: " & int2str(v_response.response.statuscode) & "/" & v_response.response.statustext & " on httpPort_notif ***"); - f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); - } - [] httpPort_notif.receive { - tc_ac.stop; - log("*** " & testcasename() & ": FAIL: Server error: Receive unsollicited message on httpPort_notif ***"); - f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); - } - } // End of altstep a_default_responses - - } // end of group altsteps - } // End of module LibMec_Functions diff --git a/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn b/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn index 9c29009..c694216 100644 --- a/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn +++ b/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn @@ -88,14 +88,4 @@ module LibMec_Pixits { modulepar charstring PX_UE_ZONAL_TRAF_SUB_URI := "/fai/v1/optical_network_info"; - modulepar charstring PX_UE_LOC_QRY_URI := ""; - - modulepar charstring PX_UE_LOC_USERS_URI := ""; - - modulepar charstring PX_UE_DIST_SUB_URI := ""; - - modulepar charstring PX_UE_PERIODIC_SUB_URI := ""; - - modulepar charstring PX_UE_LOC_USERTRACK_SUB_URI := ""; - } // End of module LibMec_Pixits diff --git a/ttcn/patch_lib_http/LibItsHttp_BinaryMessageBodyTypes.ttcn b/ttcn/patch_lib_http/LibItsHttp_BinaryMessageBodyTypes.ttcn deleted file mode 100644 index 0e20b91..0000000 --- a/ttcn/patch_lib_http/LibItsHttp_BinaryMessageBodyTypes.ttcn +++ /dev/null @@ -1,26 +0,0 @@ -/** - * @author ETSI / STF545 - * @version $URL$ - * $ID:$ - * @desc This module provides the custom binary types 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 LibItsHttp_BinaryMessageBodyTypes { - - /** - * This file volontary contains a trivial declaration of the type BinaryBodu. - * In accordance with your TTCN-3 module LibItsHttp_XMLTypes, you have to change the BinaryBody typing. - */ - // TODO Add here your custom binary import - - type union BinaryBody { - // TODO Add here your custom variants - octetstring raw - } with { - variant "" - } - -} // End of LibItsHttp_BinaryMessageBodyTypes diff --git a/ttcn/patch_lib_http/LibItsHttp_BinaryTemplates.ttcn b/ttcn/patch_lib_http/LibItsHttp_BinaryTemplates.ttcn deleted file mode 100644 index a217088..0000000 --- a/ttcn/patch_lib_http/LibItsHttp_BinaryTemplates.ttcn +++ /dev/null @@ -1,32 +0,0 @@ -/** - * @author ETSI / STF545 - * @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 LibItsHttp_BinaryTemplates { - - // LibItsHttp - import from LibItsHttp_BinaryMessageBodyTypes all; - - // TODO Add here your custom binary import - - template (value) BinaryBody m_binary_body_raw( - in template (value) octetstring p_raw - ) := { - raw := p_raw - } // End of template m_binary_body_raw - - template (present) BinaryBody mw_binary_body_raw( - template (present) octetstring p_raw := ? - ) := { - raw := p_raw - } // End of template mw_binary_body_raw - - // TODO Add here your custom binary template - -} // End of module LibItsHttp_BinaryTemplates diff --git a/ttcn/patch_lib_http/LibItsHttp_BinaryTypes.ttcn b/ttcn/patch_lib_http/LibItsHttp_BinaryTypes.ttcn deleted file mode 100644 index da6d0f6..0000000 --- a/ttcn/patch_lib_http/LibItsHttp_BinaryTypes.ttcn +++ /dev/null @@ -1,9 +0,0 @@ -module LibItsHttp_BinaryTypes { // FIXME To be removed - - /** - * This file is volontary empry. You have to declare all XSD files required by your project - * In addition, the TTCN-3 module LibItsHttp_XmlMessageBodyTypes have to be updated too. - */ - // TODO Add here your custom binary import - -} // End of module LibItsHttp_BinaryTypes diff --git a/ttcn/patch_lib_http/LibItsHttp_TestSystem.ttcn b/ttcn/patch_lib_http/LibItsHttp_TestSystem.ttcn deleted file mode 100644 index d6f5c52..0000000 --- a/ttcn/patch_lib_http/LibItsHttp_TestSystem.ttcn +++ /dev/null @@ -1,39 +0,0 @@ -/** - * @author ETSI / STF545 - * @version $URL$ - * $ID:$ - * @desc This module provides the test system used by 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. - * @see ETSI TS 103 478 - */ -module LibItsHttp_TestSystem { - - // LibCommon - import from LibCommon_Sync all; - import from LibCommon_Time all; - - // LibItsHttp - import from LibItsHttp_TypesAndValues all; - - type port HttpPort message { - inout HttpMessage; - } - - type component HttpComponent extends SelfSyncComp { // FIXME To be rename into HttpTest - port HttpPort httpPort; - port HttpPort httpPort_notif; - timer tc_ac := PX_TAC; - timer tc_noac := PX_TNOAC; - timer tc_wait := PX_TWAIT; - - } // End of component HttpComponent - - type component HttpTestAdapter { // FIXME To be rename into HttpTestSystem - port HttpPort httpPort; - port HttpPort httpPort_notif; - } // End of component TestAdapter - -} // End of module LibItsHttp_TestSystem diff --git a/ttcn/patch_lib_http/module.mk b/ttcn/patch_lib_http/module.mk new file mode 100644 index 0000000..77b6b4c --- /dev/null +++ b/ttcn/patch_lib_http/module.mk @@ -0,0 +1,3 @@ +sources := \ + ttcn/LibHttp_JsonMessageBodyTypes.ttcn \ + ttcn/LibHttp_JsonTemplates.ttcn \ diff --git a/ttcn/patch_lib_http/LibItsHttp_JsonMessageBodyTypes.ttcn b/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn similarity index 98% rename from ttcn/patch_lib_http/LibItsHttp_JsonMessageBodyTypes.ttcn rename to ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn index 0841435..ab6a82c 100644 --- a/ttcn/patch_lib_http/LibItsHttp_JsonMessageBodyTypes.ttcn +++ b/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn @@ -1,4 +1,4 @@ -module LibItsHttp_JsonMessageBodyTypes { +module LibHttp_JsonMessageBodyTypes { // LibMec import from LibMec_TypesAndValues all; @@ -120,7 +120,7 @@ module LibItsHttp_JsonMessageBodyTypes { ServiceLivenessInfo serviceLivenessInfo, DnsRuleList dnsRuleList, DnsRule dnsRule, - SerAvailabilityNotificationSubscription_ serAvailabilityNotificationSubscription, + SerAvailabilityNotificationSubscription serAvailabilityNotificationSubscription, TimingCaps timingCaps, CurrentTime currentTime, DeviceApplicationInterfaceAPI_TypesAndValues.ApplicationList applicationList, @@ -156,4 +156,4 @@ module LibItsHttp_JsonMessageBodyTypes { } with { encode "JSON"; variant "" -} // End of module LibItsHttp_JsonMessageBodyTypes +} // End of module LibHttp_JsonMessageBodyTypes diff --git a/ttcn/patch_lib_http/LibItsHttp_JsonTemplates.ttcn b/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn similarity index 98% rename from ttcn/patch_lib_http/LibItsHttp_JsonTemplates.ttcn rename to ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn index 4a47edd..314242c 100644 --- a/ttcn/patch_lib_http/LibItsHttp_JsonTemplates.ttcn +++ b/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn @@ -1,15 +1,8 @@ -/** - * @author ETSI / STF569 - * @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 LibItsHttp_JsonTemplates { +module LibHttp_JsonTemplates { + // LibHttp + import from LibHttp_JsonMessageBodyTypes all; + // LibMec import from LibMec_TypesAndValues all; import from LibMec_Templates all; @@ -41,7 +34,7 @@ module LibItsHttp_JsonTemplates { // LibMec/UEAppInterfaceAPI import from UEAppInterfaceAPI_TypesAndValues all; // LibMec/module FixedAccessInformationServiceAPI - import from FixedAccessInformationServiceAPI_TypesAndValues all; + //import from FixedAccessInformationServiceAPI_TypesAndValues all; // LibMec/DeviceApplicationInterfaceAPI import from DeviceApplicationInterfaceAPI_TypesAndValues all; @@ -52,9 +45,6 @@ module LibItsHttp_JsonTemplates { // LibMec/V2XInformationServiceAPI import from V2XInformationServiceAPI_TypesAndValues all; - // LibItsHttp - import from LibItsHttp_JsonMessageBodyTypes all; - template (value) JsonBody m_json_body_raw( in template (value) charstring p_raw ) := { @@ -867,13 +857,13 @@ group ams_api { } // End of template mw_body_json_dns_rule_list template (value) JsonBody m_body_json_srv_avail_notif_subscription( - in template (value) SerAvailabilityNotificationSubscription_ p_serAvailabilityNotificationSubscription + in template (value) SerAvailabilityNotificationSubscription p_serAvailabilityNotificationSubscription ) := { serAvailabilityNotificationSubscription := p_serAvailabilityNotificationSubscription } // End of template m_body_json_srv_avail_notif_subscription template (present) JsonBody mw_body_json_srv_avail_notif_subscription( - template (present) SerAvailabilityNotificationSubscription_ p_serAvailabilityNotificationSubscription := ? + template (present) SerAvailabilityNotificationSubscription p_serAvailabilityNotificationSubscription := ? ) := { serAvailabilityNotificationSubscription := p_serAvailabilityNotificationSubscription } // End of template mw_body_json_srv_avail_notif_subscription @@ -1244,7 +1234,7 @@ group ams_api { } // End of group v2x_information_service - group fai { + /*group fai { template (value) JsonBody m_body_json_fai_fa_info( in template (value) FaInfo p_faInfo @@ -1319,5 +1309,5 @@ group ams_api { } // End of template mw_body_json_fai_onu_alarm_subscription_link_list } // End of group fai - -} // End of module LibItsHttp_JsonTemplates + */ +} // End of module LibHttp_JsonTemplates diff --git a/virtualization/docker/Dockerfile b/virtualization/docker/Dockerfile index e188289..82b376a 100644 --- a/virtualization/docker/Dockerfile +++ b/virtualization/docker/Dockerfile @@ -1,12 +1,11 @@ FROM stfubuntu:18.04 -MAINTAINER ETSI TTF T012 - -LABEL description="TTF_T012_Mec Docker Image" +LABEL ETSI mec_devel +LABEL description="mec_devel Docker Image" ENV TERM=linux \ HOME=/home/etsi \ - HOSTNAME=docker-titan-TTF_T012 + HOSTNAME=docker-titan-mec_devel COPY home /home/etsi diff --git a/virtualization/docker/README.md b/virtualization/docker/README.md index ad267e2..bc19714 100644 --- a/virtualization/docker/README.md +++ b/virtualization/docker/README.md @@ -52,7 +52,7 @@ inet6:localhost Execute ```run.cmd``` or launch a command line window and run the command -```docker run -it --net=host -e DISPLAY=192.168.99.1:0 ttf_t012_mec:latest``` +```docker run -it --net=host -e DISPLAY=192.168.99.1:0 mec_devel:latest``` NOTE: Modify the IP address in the command for the address of 'VirtualBox Hot-Only Network'. @@ -62,7 +62,7 @@ Execute ```run.sh``` or launch a command line window and run the command ```sh docker run -it --net=host -e DISPLAY=$DISPLAY \ --v /tmp/.X11-unix:/tmp/.X11-unix ttf_t012_mec:latest +-v /tmp/.X11-unix:/tmp/.X11-unix mec_devel:latest ``` ### Import eclipse project @@ -76,14 +76,14 @@ docker run -it --net=host -e DISPLAY=$DISPLAY \ - eclipse not found: check the PATH environment variable. It shall contain $HOME/bin path. Otherwise add it: ```export PATH=$HOME/bin:$PATH``` -2. Run "File -> Import" and import the ```~/dev/TTF_T012_Mec/TTF_T012_Mec.tpd``` file. +2. Run "File -> Import" and import the ```~/dev/mec_devel/mec_devel.tpd``` file. This can take a time, be patient. **Do not run build in eclipse**, we don't have enough time. ### Build the project -```cd ~/Workspace/TTF_T012_Mec/bin``` +```cd ~/Workspace/mec_devel/bin``` ```make``` diff --git a/virtualization/docker/build.sh b/virtualization/docker/build.sh index be9f6ab..a7859fb 100755 --- a/virtualization/docker/build.sh +++ b/virtualization/docker/build.sh @@ -16,10 +16,10 @@ if [ -z `docker images -q stfubuntu` ]; then 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 ) +docker build --no-cache --tag mec_devel --force-rm . || ( echo "Docker build failed: $?"; exit 1 ) docker images -docker inspect ttf_t012_mec:latest || ( echo "Docker inspect failed: $?"; exit 1 ) +docker inspect mec_devel:latest || ( echo "Docker inspect failed: $?"; exit 1 ) # That's all Floks exit 0 diff --git a/virtualization/docker/home/etc/init.d/40-ttf_t012.sh b/virtualization/docker/home/etc/init.d/40-ttf_t012.sh index e889786..5e11b27 100755 --- a/virtualization/docker/home/etc/init.d/40-ttf_t012.sh +++ b/virtualization/docker/home/etc/init.d/40-ttf_t012.sh @@ -3,24 +3,24 @@ #set -e set -vx -echo -e "*****************************\n* Checkout TTF T012 sources\n*****************************\n" +echo -e "*****************************\n* Checkout mec_devel sources\n*****************************\n" mkdir -p ${HOME}/dev && cd ${HOME}/dev || exit 1 -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/etsi/dev/TTF_T012_Mec/ttcn +git clone --recurse-submodules --branch devel --single-branch https://forge.etsi.org/rep/mec/gs032p3-ttcn-test-suite.git mec_devel +cd /home/etsi/dev/mec_devel/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/etsi/dev/TTF_T012_Mec/ttcn/LibIts +git clone --branch devel --single-branch https://forge.etsi.org/gitlab/LIBS/LibIts ./LibIts +cd /home/etsi/dev/mec_devel/ttcn/LibIts rm -fr t3q cd ttcn && rm -fr Common echo -e "*****************************\n* Set up environment\n*****************************\n" -cd /home/etsi/dev/TTF_T012_Mec/scripts -ln -sf /home/etsi/dev/TTF_T012_Mec/scripts/devenv.bash.ubuntu /home/etsi/devenv.bash +cd /home/etsi/dev/mec_devel/scripts +ln -sf /home/etsi/dev/mec_devel/scripts/devenv.bash.ubuntu /home/etsi/devenv.bash . /home/etsi/devenv.bash echo -e "*****************************\n* Apply patched \n*****************************\n" -cd /home/etsi/dev/TTF_T012_Mec +cd /home/etsi/dev/mec_devel 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/ @@ -34,8 +34,8 @@ cd ./etc/AtsMec ln -sf AtsMec_Sandbox.cf_ AtsMec.cfg echo -e "*****************************\n* Change sudo in command line\n*****************************\n" -cd /home/etsi/dev/TTF_T012_Mec/scripts +cd /home/etsi/dev/mec_devel/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 /home/etsi/dev/TTF_T012_Mec +cd /home/etsi/dev/mec_devel diff --git a/virtualization/docker/home/etc/init.d/50-doxygen.sh b/virtualization/docker/home/etc/init.d/50-doxygen.sh index 9772f21..19c9522 100755 --- a/virtualization/docker/home/etc/init.d/50-doxygen.sh +++ b/virtualization/docker/home/etc/init.d/50-doxygen.sh @@ -5,11 +5,11 @@ set -vx echo -e "*****************************\n* Build docs \n*****************************\n" . /home/etsi/devenv.bash -cd ${HOME}/dev/TTF_T012_Mec/docs || exit 1 +cd ${HOME}/dev/mec_devel/docs || exit 1 doxygen ./o2.cfg || exit 1 # Generate PDF file -cd ${HOME}/dev/TTF_T012_Mec/docs/AtsMecDocs/latex +cd ${HOME}/dev/mec_devel/docs/AtsMecDocs/latex make && mv refman.pdf ${HOME}/docs/etsi_mec_help.pdf cd ${HOME} diff --git a/virtualization/docker/run.sh b/virtualization/docker/run.sh index f3886ea..096c67d 100755 --- a/virtualization/docker/run.sh +++ b/virtualization/docker/run.sh @@ -5,8 +5,8 @@ #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 /bin/bash -c "export ATS=AtsMec && cd ~ && . ./devenv.bash && sed --in-place 's/sbxpl1eil4/sbxrsvoat/g' ~/dev/TTF_T012_Mec/etc/AtsMec/AtsMec.cfg && cd ~/dev/TTF_T012_Mec/scripts && ./run_all.bash" -#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 +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 mec_devel:latest /bin/bash -c "export ATS=AtsMec && cd ~ && . ./devenv.bash && sed --in-place 's/sbxpl1eil4/sbxrsvoat/g' ~/dev/mec_devel/etc/AtsMec/AtsMec.cfg && cd ~/dev/mec_devel/scripts && ./run_all.bash" +#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 mec_devel:latest # That's all Floks exit 0 diff --git a/virtualization/vagrant/provisioner.bash b/virtualization/vagrant/provisioner.bash index ee5f62b..06f9dea 100755 --- a/virtualization/vagrant/provisioner.bash +++ b/virtualization/vagrant/provisioner.bash @@ -82,32 +82,32 @@ 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 --recurse-submodules --branch devel --single-branch https://forge.etsi.org/rep/mec/gs032p3-ttcn-test-suite.git ./mec_devel +cd /home/vagrant/dev/mec_devel/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 +git clone --branch devel --single-branch https://forge.etsi.org/gitlab/LIBS/LibIts ./LibIts +cd /home/vagrant/dev/mec_devel/ttcn/LibIts rm -fr t3q cd ttcn && rm -fr Common -cd /home/vagrant/dev/TTF_T012_Mec/scripts +cd /home/vagrant/dev/mec_devel/scripts chmod 775 *.bash devenv.bash.* -cd /home/vagrant/dev/TTF_T012_Mec/virtualization/docker +cd /home/vagrant/dev/mec_devel/virtualization/docker chmod 775 *.sh -cd /home/vagrant/dev/TTF_T012_Mec +cd /home/vagrant/dev/mec_devel chmod 775 ./.jenkins.sh cd /home/vagrant -ln -sf /home/vagrant/dev/TTF_T012_Mec/scripts/devenv.bash.ubuntu /home/vagrant/devenv.bash +ln -sf /home/vagrant/dev/mec_devel/scripts/devenv.bash.ubuntu /home/vagrant/devenv.bash . /home/vagrant/devenv.bash # Apply patch -cd /home/vagrant/dev/TTF_T012_Mec +cd /home/vagrant/dev/mec_devel 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 +cd ${HOME}/dev/mec_devel/scripts || exit 1 ./update_user_name.sh || exit 1 # Install all frameworks @@ -160,26 +160,26 @@ rm -f ./eclipse-cpp-2021-12-R-linux-gtk-x86_64.tar.gz #fi # Build Titan -cd /home/vagrant/dev/TTF_T012_Mec/scripts +cd /home/vagrant/dev/mec_devel/scripts ./build_titan.bash . /home/vagrant/devenv.bash # Build ATSs -cd /home/vagrant/dev/TTF_T012_Mec +cd /home/vagrant/dev/mec_devel export ATS=AtsMec make # Change user in cfg files -cd /home/vagrant/dev/TTF_T012_Mec/scripts -./update_user_name.sh TTF_T012_Mec +cd /home/vagrant/dev/mec_devel/scripts +./update_user_name.sh mec_devel # Update configuration file -cd /home/vagrant/dev/TTF_T012_Mec/etc/AtsMec +cd /home/vagrant/dev/mec_devel/etc/AtsMec ln -sf AtsMec_Sandbox.cf_ AtsMec.cfg cd - # Change sudo in command line -cd /home/vagrant/dev/TTF_T012_Mec/scripts +cd /home/vagrant/dev/mec_devel/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 -- GitLab From ab2c2bd78bc4b54fa6bbf4a227342905c9eeff9b Mon Sep 17 00:00:00 2001 From: YannGarcia Date: Thu, 29 Sep 2022 11:27:34 +0200 Subject: [PATCH 02/99] Remove LibIts submodule --- .gitmodules | 3 --- ttcn/LibIts | 1 - .../docker/home/etc/init.d/40-ttf_t012.sh | 14 +++++--------- virtualization/vagrant/provisioner.bash | 16 +++++++--------- 4 files changed, 12 insertions(+), 22 deletions(-) delete mode 160000 ttcn/LibIts diff --git a/.gitmodules b/.gitmodules index ce684dc..d5daa64 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,9 +1,6 @@ [submodule "ttcn\\LibCommon"] path = ttcn\\LibCommon url = https://forge.etsi.org/rep/LIBS/LibCommon.git -[submodule "ttcn\\LibIts"] - path = ttcn\\LibIts - url = https://forge.etsi.org/rep/LIBS/LibIts [submodule "titan-test-system-framework"] path = titan-test-system-framework url = https://labs.etsi.org/rep/cti-tools/titan-test-system-framework.git diff --git a/ttcn/LibIts b/ttcn/LibIts deleted file mode 160000 index 289f34c..0000000 --- a/ttcn/LibIts +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 289f34c96c7b759615d5e9b56b385d74bb0d89cc diff --git a/virtualization/docker/home/etc/init.d/40-ttf_t012.sh b/virtualization/docker/home/etc/init.d/40-ttf_t012.sh index 5e11b27..2644264 100755 --- a/virtualization/docker/home/etc/init.d/40-ttf_t012.sh +++ b/virtualization/docker/home/etc/init.d/40-ttf_t012.sh @@ -7,12 +7,10 @@ echo -e "*****************************\n* Checkout mec_devel sources\n********** mkdir -p ${HOME}/dev && cd ${HOME}/dev || exit 1 git clone --recurse-submodules --branch devel --single-branch https://forge.etsi.org/rep/mec/gs032p3-ttcn-test-suite.git mec_devel +cd /home/etsi/dev/mec_devel/titan-test-system-framework +git checkout devel cd /home/etsi/dev/mec_devel/ttcn git clone https://forge.etsi.org/gitlab/LIBS/LibCommon.git ./LibCommon -git clone --branch devel --single-branch https://forge.etsi.org/gitlab/LIBS/LibIts ./LibIts -cd /home/etsi/dev/mec_devel/ttcn/LibIts -rm -fr t3q -cd ttcn && rm -fr Common echo -e "*****************************\n* Set up environment\n*****************************\n" cd /home/etsi/dev/mec_devel/scripts @@ -23,15 +21,13 @@ echo -e "*****************************\n* Apply patched \n********************** cd /home/etsi/dev/mec_devel 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/ echo -e "*****************************\n* Build Mec test suite\n*****************************\n" -export ATS=AtsMec +export ATS=AtsMec_Location make -cd ./etc/AtsMec -ln -sf AtsMec_Sandbox.cf_ AtsMec.cfg +cd ./etc/AtsMec_Location +ln -sf AtsMec_Sandbox.cf_ AtsMec_Location.cfg echo -e "*****************************\n* Change sudo in command line\n*****************************\n" cd /home/etsi/dev/mec_devel/scripts diff --git a/virtualization/vagrant/provisioner.bash b/virtualization/vagrant/provisioner.bash index 06f9dea..420a225 100755 --- a/virtualization/vagrant/provisioner.bash +++ b/virtualization/vagrant/provisioner.bash @@ -82,13 +82,13 @@ echo ". ~/devenv.bash" >> /home/vagrant/.bashrc # Clone project cd /home/vagrant/dev -git clone --recurse-submodules --branch devel --single-branch https://forge.etsi.org/rep/mec/gs032p3-ttcn-test-suite.git ./mec_devel +git clone --recurse-submodules --branch devel --single-branch https://forge.etsi.org/rep/mec/gs032p3-ttcn-test-suite.git mec_devel +cd /home/vagrant/dev/mec_devel/titan-test-system-framework +git checkout devel cd /home/vagrant/dev/mec_devel/ttcn git clone https://forge.etsi.org/gitlab/LIBS/LibCommon.git ./LibCommon -git clone --branch devel --single-branch https://forge.etsi.org/gitlab/LIBS/LibIts ./LibIts -cd /home/vagrant/dev/mec_devel/ttcn/LibIts -rm -fr t3q -cd ttcn && rm -fr Common + +# Set up environment cd /home/vagrant/dev/mec_devel/scripts chmod 775 *.bash devenv.bash.* cd /home/vagrant/dev/mec_devel/virtualization/docker @@ -103,8 +103,6 @@ ln -sf /home/vagrant/dev/mec_devel/scripts/devenv.bash.ubuntu /home/vagrant/deve cd /home/vagrant/dev/mec_devel 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/mec_devel/scripts || exit 1 @@ -166,7 +164,7 @@ cd /home/vagrant/dev/mec_devel/scripts # Build ATSs cd /home/vagrant/dev/mec_devel -export ATS=AtsMec +export ATS=AtsMec_Location make # Change user in cfg files @@ -175,7 +173,7 @@ cd /home/vagrant/dev/mec_devel/scripts # Update configuration file cd /home/vagrant/dev/mec_devel/etc/AtsMec -ln -sf AtsMec_Sandbox.cf_ AtsMec.cfg +ln -sf AtsMec_Sandbox.cf_ AtsMec_Location.cfg cd - # Change sudo in command line -- GitLab From b2da70418aaeca1724e350e0b28e94ea697cdaf8 Mon Sep 17 00:00:00 2001 From: Yann Garcia Date: Fri, 30 Sep 2022 08:22:21 +0000 Subject: [PATCH 03/99] Update README.md --- README.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index aa013af..4bc51e8 100644 --- a/README.md +++ b/README.md @@ -203,23 +203,23 @@ Procedure: - Clone the ETSI MEC Testing Framework project into $HOME/dev folder ```sh -$ 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 +$ git clone --recurse-submodules --branch gs032p3-ttcn-test-suite https://forge.etsi.org/rep/mec/gs032p3-ttcn-test-suite.git ./gs032p3-ttcn-test-suite +$ cd /home/etsi/dev/gs032p3-ttcn-test-suite/titan-test-system-framework +$ git checkout devel +$ cd /home/etsi/dev/gs032p3-ttcn-test-suite/titan-test-system-framework/ttcn/LibHttp +$ ln -sf module_mec.mk module.mk ``` - Apply patches ```sh -$ cd /home/etsi/dev/TTF012_Mec +$ cd /home/etsi/dev/gs032p3-ttcn-test-suite $ 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 +- Update your default environment with the content of the script $HOME/dev/gs032p3-ttcn-test-suite/scripts/devenv.bash.ubuntu - Switch to the next clause (Usage) @@ -237,16 +237,16 @@ 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. TTF012_Mec) +- Create a new TITAN project (e.g. gs032p3-ttcn-test-suite) Procedure in TITAN command line: - Open several SSH session (PuTTY...) -- Change to the directory ~/dev/TTF012_Mec/src/AtsMec/objs +- Change to the directory ~/dev/gs032p3-ttcn-test-suite/src/AtsMec/objs - Build the test suite AtsMec ```sh -$ cd ~/dev/TTF012_Mec/ && export ATS=AtsMec +$ cd ~/dev/gs032p3-ttcn-test-suite/ && export ATS=AtsMec $ make ... ``` @@ -258,7 +258,7 @@ $ make - To run the test suite, execute the following command: ```sh -$ cd ~/dev/TTF012_Mec/scripts/ +$ cd ~/dev/gs032p3-ttcn-test-suite/scripts/ $ ./run-all.bash ... ``` -- GitLab From 90078a7aaf0e5a2836bd87ef560e50c7b04d02da Mon Sep 17 00:00:00 2001 From: YannGarcia Date: Tue, 4 Oct 2022 15:24:25 +0200 Subject: [PATCH 04/99] Remove useless folder; Bug fixed in TITAN build from source --- scripts/build_titan.bash | 3 + simu/_Getch.py | 41 -- simu/data/access_point_list.csv | 7 - simu/data/associated.csv | 3 - simu/data/cells.csv | 3 - simu/data/location_info.csv | 4 - simu/data/security.csv | 2 - simu/data/subscribers.csv | 6 - simu/data/subscriptions.csv | 1 - simu/data/traffic_rules.csv | 1 - simu/data/transport_info.csv | 2 - simu/data/ue_information_list.csv | 6 - simu/data/zones.csv | 3 - simu/mec_database.py | 435 --------------- simu/mec_http_server.py | 528 ------------------ simu/mec_simulator.py | 39 -- titan-test-system-framework | 2 +- .../docker/home/etc/init.d/10-titan.sh | 3 + 18 files changed, 7 insertions(+), 1082 deletions(-) delete mode 100644 simu/_Getch.py delete mode 100644 simu/data/access_point_list.csv delete mode 100644 simu/data/associated.csv delete mode 100644 simu/data/cells.csv delete mode 100644 simu/data/location_info.csv delete mode 100644 simu/data/security.csv delete mode 100644 simu/data/subscribers.csv delete mode 100644 simu/data/subscriptions.csv delete mode 100644 simu/data/traffic_rules.csv delete mode 100644 simu/data/transport_info.csv delete mode 100644 simu/data/ue_information_list.csv delete mode 100644 simu/data/zones.csv delete mode 100644 simu/mec_database.py delete mode 100644 simu/mec_http_server.py delete mode 100644 simu/mec_simulator.py diff --git a/scripts/build_titan.bash b/scripts/build_titan.bash index 7305264..9d39632 100755 --- a/scripts/build_titan.bash +++ b/scripts/build_titan.bash @@ -87,6 +87,9 @@ DEBUG:=no GEN_PDF:=no EOF +# To prevent link error /usr/bin/ld: /lib/x86_64-linux-gnu/libpthread.so.0: error adding symbols: DSO missing from command lineema +sed --in-place 's/LINUX_LIBS := -lxml2/LINUX_LIBS := -lxml2 -lpthread/g' ./core/Makefile + echo "Starting build..." make clean if [ "${OSTYPE}" == "cygwin" ] diff --git a/simu/_Getch.py b/simu/_Getch.py deleted file mode 100644 index 6242638..0000000 --- a/simu/_Getch.py +++ /dev/null @@ -1,41 +0,0 @@ - - -class _Getch: - """Gets a single character from standard input. Does not echo to the -screen.""" - def __init__(self): - try: - self.impl = _GetchWindows() - except ImportError: - self.impl = _GetchUnix() - - def __call__(self): return self.impl() - -class _GetchUnix: - def __init__(self): - import tty, sys - - def __call__(self): - import sys, tty, termios - fd = sys.stdin.fileno() - old_settings = termios.tcgetattr(fd) - try: - tty.setraw(sys.stdin.fileno()) - ch = sys.stdin.read(1) - finally: - termios.tcsetattr(fd, termios.TCSADRAIN, old_settings) - return ch - -class _GetchWindows: - def __init__(self): - import msvcrt - - def __call__(self): - import msvcrt - while msvcrt.kbhit(): - msvcrt.getch() - ch = msvcrt.getch() - while ch in b'\x00\xe0': - msvcrt.getch() - ch = msvcrt.getch() - return ch.decode() diff --git a/simu/data/access_point_list.csv b/simu/data/access_point_list.csv deleted file mode 100644 index ce83101..0000000 --- a/simu/data/access_point_list.csv +++ /dev/null @@ -1,7 +0,0 @@ -accessPointId,zoneId,connectionType,operationStatus,numberOfUsers,interestRealm,resourceURL -001010000000000000000000000000001,zone01,Macro,Serviceable,5,LA,http://example.com/exampleAPI/location/v1/zones/zone01/accessPoints/ap001 -001010000000000000000000000000010,zone01,Macro,Unserviceable,0,DC,http://example.com/exampleAPI/location/v1/zones/zone01/accessPoints/ap002 -001010000000000000000000000000011,zone01,Macro,Serviceable,5,NJ,http://example.com/exampleAPI/location/v1/zones/zone01/accessPoints/ap003 -002010000000000000000000000000001,zone02,Macro,Serviceable,5,LA,http://example.com/exampleAPI/location/v1/zones/zone02/accessPoints/ap001 -002010000000000000000000000000010,zone02,Macro,Unserviceable,0,DC,http://example.com/exampleAPI/location/v1/zones/zone02/accessPoints/ap002 -002010000000000000000000000000011,zone02,Macro,Serviceable,5,NJ,http://example.com/exampleAPI/location/v1/zones/zone02/accessPoints/ap003 diff --git a/simu/data/associated.csv b/simu/data/associated.csv deleted file mode 100644 index f4f9131..0000000 --- a/simu/data/associated.csv +++ /dev/null @@ -1,3 +0,0 @@ -cellId,appInst,type,address -134217738,appInst01,1,192.0.0.1 -134217739,appInst02,1,192.0.0.2 diff --git a/simu/data/cells.csv b/simu/data/cells.csv deleted file mode 100644 index 2ba8452..0000000 --- a/simu/data/cells.csv +++ /dev/null @@ -1,3 +0,0 @@ -cellId,mcc,mnc,hoStatus,seconds,nanoseconds -134217738,1,1,COMPLETED,1577836800,0 -134217739,1,1,COMPLETED,1577836800,0 diff --git a/simu/data/location_info.csv b/simu/data/location_info.csv deleted file mode 100644 index 06afa5b..0000000 --- a/simu/data/location_info.csv +++ /dev/null @@ -1,4 +0,0 @@ -accessPointId,latitude,longitude,altitude,accuracy -001010000000000000000000000000001,90.123,80.123,10.0,0 -001010000000000000000000000000010,91.123,81.123,12.0,1 -001010000000000000000000000000011,93.123,83.123,16.0,3 diff --git a/simu/data/security.csv b/simu/data/security.csv deleted file mode 100644 index 0347ad3..0000000 --- a/simu/data/security.csv +++ /dev/null @@ -1,2 +0,0 @@ -id,grantTypes,tokenEndpoint -security0,OAUTH2_CLIENT_CREDENTIALS,/meMp1/security/TokenEndPoint diff --git a/simu/data/subscribers.csv b/simu/data/subscribers.csv deleted file mode 100644 index ab02692..0000000 --- a/simu/data/subscribers.csv +++ /dev/null @@ -1,6 +0,0 @@ -id,address,accessPointId,zoneId,resourceURL,seconds,nanoSeconds,ueTag -toto1,acr:192.0.0.1,001010000000000000000000000000001,zone01,http://example.com/exampleAPI/location/v2/users?address:acr:192.0.0.1,1483231138,0,UeTagA -toto2,acr:192.0.2.2,001010000000000000000000000000001,zone01,http://example.com/exampleAPI/location/v1/users?address:acr:192.0.2.2,1483231138,0,UeTagB -toto3,acr:192.0.2.3,001010000000000000000000000000010,zone01,http://example.com/exampleAPI/location/v1/users?address:acr:192.0.2.3,1483231138,0,UeTagC -toto4,acr:192.0.2.4,001010000000000000000000000000001,zone02,http://example.com/exampleAPI/location/v1/users?address:acr:192.0.2.4,1483231138,0,UeTagD -toto5,acr:192.0.2.5,001010000000000000000000000000010,zone02,http://example.com/exampleAPI/location/v1/users?address:acr:192.0.2.5,1483231138,0,UeTagE diff --git a/simu/data/subscriptions.csv b/simu/data/subscriptions.csv deleted file mode 100644 index b7cc6da..0000000 --- a/simu/data/subscriptions.csv +++ /dev/null @@ -1 +0,0 @@ -subscription_id,corr_id,address,callback,ue_event_criteria,resourceURL diff --git a/simu/data/traffic_rules.csv b/simu/data/traffic_rules.csv deleted file mode 100644 index 7bb9d8f..0000000 --- a/simu/data/traffic_rules.csv +++ /dev/null @@ -1 +0,0 @@ -trafficRuleId,filterType,priority,trafficFilter,action,dstInterface,state diff --git a/simu/data/transport_info.csv b/simu/data/transport_info.csv deleted file mode 100644 index e5f71de..0000000 --- a/simu/data/transport_info.csv +++ /dev/null @@ -1,2 +0,0 @@ -transportId,name,description,type,protocol,version,endpoint,security,implSpecificInfo -TransId12345,REST,REST API,REST_HTTP,HTTP,2.0,{},security0,{} diff --git a/simu/data/ue_information_list.csv b/simu/data/ue_information_list.csv deleted file mode 100644 index fae9142..0000000 --- a/simu/data/ue_information_list.csv +++ /dev/null @@ -1,6 +0,0 @@ -appInst,ueTag,address,state -appInst01,UeTagA,acr:192.0.0.1,UNREGISTERED -appInst01,UeTagC,acr:192.0.0.3,INVALID_STATE -appInst02,UeTagB,acr:192.0.0.2,UNREGISTERED -appInst03,UeTagD,acr:192.0.0.4,UNREGISTERED -appInst03,UeTagE,acr:192.0.0.5,UNREGISTERED diff --git a/simu/data/zones.csv b/simu/data/zones.csv deleted file mode 100644 index ebbbf68..0000000 --- a/simu/data/zones.csv +++ /dev/null @@ -1,3 +0,0 @@ -zoneId,numberOfAccessPoints,numberOfUnserviceableAccessPoints,numberOfUsers,resourceURL -zone01,3,1,10,http://example.com/exampleAPI/location/v1/zones/zone01 -zone02,12,0,36,http://example.com/exampleAPI/location/v1/zones/zone02 diff --git a/simu/mec_database.py b/simu/mec_database.py deleted file mode 100644 index 75df61f..0000000 --- a/simu/mec_database.py +++ /dev/null @@ -1,435 +0,0 @@ -# Simulate MEC devices using Pandas database - -import os -import pandas as pd -from datetime import datetime, time - -class mec_database: - """ - TODO - """ - # Private properties - __path__ = '' # To be updated according to the local settings - __subscribers__ = None - __registered_list__ = None - __zones__ = None - __ue_information_list__ = None - __access_point_list__ = None - __location_info__ = None - __cells__ = None - __associated__ = None - __subscribions__ = None - __transport_info__ = None - __security__ = None - __traffic_rules__ = None - - def __init__(self): - """ Default ctor: Open Pandas database. """ - self.__path__ = os.path.join(os.getcwd(), 'data') - print('==> self.__path__=', self.__path__) - self.__zones__ = pd.DataFrame(pd.read_csv(os.path.join(self.__path__, 'zones.csv'), index_col = 'zoneId')) - self.__subscribers__ = pd.DataFrame(pd.read_csv(os.path.join(self.__path__, 'subscribers.csv'), index_col = 'address')) - self.__ue_information_list__ = pd.DataFrame(pd.read_csv(os.path.join(self.__path__, 'ue_information_list.csv'), index_col = ['appInst', 'ueTag'])) - self.__access_point_list__ = pd.DataFrame(pd.read_csv(os.path.join(self.__path__, 'access_point_list.csv'), index_col = 'accessPointId')) - self.__location_info__ = pd.DataFrame(pd.read_csv(os.path.join(self.__path__, 'location_info.csv'), index_col = 'accessPointId')) - self.__cells__ = pd.DataFrame(pd.read_csv(os.path.join(self.__path__, 'cells.csv'), encoding = 'utf-8', index_col = 'cellId')) - self.__associated__ = pd.DataFrame(pd.read_csv(os.path.join(self.__path__, 'associated.csv'), encoding = 'utf-8', index_col = 'cellId')) - self.__subscriptions__ = pd.DataFrame(pd.read_csv(os.path.join(self.__path__, 'subscriptions.csv'), encoding = 'utf-8', index_col = 'subscription_id')) - self.__transport_info__ = pd.DataFrame(pd.read_csv(os.path.join(self.__path__, 'transport_info.csv'), encoding = 'utf-8', index_col = 'transportId')) - self.__security__ = pd.DataFrame(pd.read_csv(os.path.join(self.__path__, 'security.csv'), encoding = 'utf-8', index_col = 'id')) - self.__traffic_rules__ = pd.DataFrame(pd.read_csv(os.path.join(self.__path__, 'traffic_rules.csv'), encoding = 'utf-8', index_col = 'trafficRuleId')) -# self.dump() - # End of __init__ - - def dump(self): - """ Dump database contents. For debug purpose only. """ - print("Subscribers: ", self.__subscribers__.head()) - print("Zones: ", self.__zones__.head()) - print("UEinformation", self.__ue_information_list__.head()) - print("AccessPoint: ", self.__access_point_list__.head()) - print("LocationInfo: ", self.__location_info__.head()) - print("Cells: ", self.__cells__.head()) - print("Associated: ", self.__associated__.head()) - print("subscriptions: ", self.__subscriptions__.head()) - print("transport_info: ", self.__transport_info__.head()) - print("security: ", self.__security__.head()) - print("traffic_rules: ", self.__traffic_rules__.head()) - # End of dump - - def __to_accessPoint__(self, p_access_point, p_location): - """ - Build an AccessPointLocation Json message. - Keyword arguments: - -- p_access_point: Access point identifier - -- p_location : Access point geographical location - """ - print(">>> __to_accessPoint__: ", p_access_point) - print("__to_accessPoint__: location= ", p_location['latitude'][0]) - i = 0.0 - resp = "{\"accessPointId\": \"" + p_access_point[0] + \ - "\",\"locationInfo\": {\"latitude\": " + str(p_location['latitude'][0]) + ",\"longitude\": " + str(p_location['longitude'][0]) + ",\"altitude\": " + str(p_location['altitude'][0]) + ",\"accuracy\": " + str(p_location['accuracy'][0]) + "}," \ - "\"connectionType\": \"" + p_access_point[2] + "\"," \ - "\"operationStatus\": \"" + p_access_point[3] + "\"," \ - "\"numberOfUsers\": " + str(p_access_point[4]) + "," \ - "\"interestRealm\": \"" + p_access_point[5] + "\"," \ - "\"resourceURL\": \"" + p_access_point[6] + "\"" \ - "}" - print("__to_accessPoint__: ", resp) - return resp - # End of __to_accessPoint__ - - def __to_zone__(self, p_zone): - """ - Build a Zones Json message. - Keyword arguments: - -- p_zone: Zone description - """ - print(">>> __to_zone__: ", p_zone) - resp = "{\t\"zoneId\": \"" + p_zone[0] + "\",\t\"numberOfAccessPoints\": \"" + str(p_zone[1]) + "\",\t\"numberOfUnserviceableAccessPoints\": \"" + str(p_zone[2]) + "\",\t\"numberOfUsers\": \"" + str(p_zone[3]) + "\",\t\"resourceURL\": \"" + p_zone[4] + "\"}" - print("__to_zone__: ", resp) - return resp - # End of __to_zone__ - - def __to_userInfo__(self, p_subscriber, p_location = None, p_contextLocationInfo = None): - """ Build a UserInfo Json message. """ - print(">>> __to_userInfo__: ", p_subscriber) - resp = "{\t\"address\": \"" + p_subscriber[0] + "\",\t\"accessPointId\": \"" + p_subscriber[2] + "\",\t\"zoneId\": \"" + p_subscriber[3] + "\",\t\"resourceURL\": \"" + p_subscriber[4] + "\"}" - print("__to_userInfo__: ", resp) - return resp - # End of __to_userInfo__ - - def __to_ueIdentityTagInfo__(self, p_ue_identity_tag, p_ue): - """ Build a ueIdentityTagInfo Json message. """ - print(">>> __to_ueIdentityTagInfo__: ", p_ue_identity_tag, ", ", p_ue) - resp = "{\t\"ueIdentityTagInfo\": {\t\"ueIdentityTags\": [{\t\"ueIdentityTag\": \"" + p_ue_identity_tag + "\",\t\"state\": \"" + p_ue[1] + "\"}]}}" - print("__to_ueIdentityTagInfo__: ", resp) - return resp - # End of __to_ueIdentityTagInfo__ - - def __to_subscriptions__(self, p_subscription): - """ Build the userTrackingSubscription response """ - print(">>> __to_subscriptions__: ", p_subscription) - resp = "\t{\"userTrackingSubscription\": {\t\"clientCorrelator\": \"" + p_subscription[1] + "\",\t\"callbackReference\": {\"notifyURL\": \"" + p_subscription[3] + "\"},\t\"address\": \"" + p_subscription[2] + "\",\t\"userEventCriteria\" : [" - resp += "\"" + p_subscription[4][0] + "\"" - i = 1 - while i < len(p_subscription[4]): - resp += ",\"" + p_subscription[4][i] + "\"" - i += 1 - # End of 'while' statement - resp += "],\t\"resourceURL\":\"" + p_subscription[5] + "\"\t}}" - print("__to_subscriptions__: ", resp) - return resp - # End of __to_subscriptions__ - - def __to_transport_info__(self, p_transport_info): - """ - Build a TransportInfo Json message. - Keyword arguments: - -- p_transport_info: TransportInfo description - """ - print(">>> __to_transport_info__: ", p_transport_info) -# print("__to_transport_info__: security id: ", p_transport_info[7]) - resp = "{{\t\"id\": \"TransId12345\",\"name\": \"REST\",\"description\": \"REST API\",\"type\": \"REST_HTTP\",\"protocol\": \"HTTP\",\"version\": \"2.0\",\"endpoint\": {},\"security\": {\"oAuth2Info\": {\"grantTypes\": [\"OAUTH2_CLIENT_CREDENTIALS\"],\"tokenEndpoint\": \"/meMp1/security/TokenEndPoint\"}\"},\"implSpecificInfo\": {}}" -# resp = None -# try: -# security = self.__security__.loc[self.__security__['id'] == p_transport_info[7]] -# print("__to_transport_info__: security= ", security) -# -# resp = "{\t\"id\": \"" + p_transport_info[0] + "\",\t\"name\": \"" + p_transport_info[1] + "\",\t\"description\": \"" + p_transport_info[2] + "\",\t\"type\": \"" + p_transport_info[3] + "\",\t\"protocol\": \"" + p_transport_info[4] + "\",\t\"version\": \"" + str(p_transport_info[5]) + "\",\t\"endpoint\": \"" + p_transport_info[6] + "\",\t\"security\": \"" + security + "\",\t\"implSpecificInfo\": \"" + p_transport_info[8] + "\"}" -# print("__to_transport_info__: ", resp) -# except KeyError: -# print("__to_transport_info__: No security entry") - return resp - # End of method __to_transport_info__ - - def __to_traffic_rule__(self, p_traffic_rule): - """ - Build a TrafficRule Json message. - Keyword arguments: - -- p_traffic_rule: TrafficRule description - """ - print(">>> __to_traffic_rule__: ", p_traffic_rule) - resp = "{\"trafficRuleId\": \"TrafficRule1\",\"filterType\": \"FLOW\",\"priority\": 1,\"trafficFilter\": [{\"srcAddress\": [\"192.168.1.1\"],\"dstAddress\": [\"192.168.1.1\"],\"srcPort\": [\"8080\"],\"dstPort\": [\"8080\"],\"protocol\": [ \"?\"],\"token\": [\"?\"],\"srcTunnelAddress\": [\"?\"],\"tgtTunnelAddress\": [\"?\"],\"srcTunnelPort\": [\"?\"],\"dstTunnelPort\": [\"?\"],\"qCI\": 1,\"dSCP\": 0,\"tC\": 1}],\"action\": \"DROP\",\"dstInterface\": {\"interfaceType\": \"TUNNEL\",\"tunnelInfo\": {\"tunnelType\": \"GTP_U\",\"tunnelDstAddress\": \"?\",\"tunnelSrcAddress\": \"?\"},\"srcMacAddress\": \"02-00-00-00-00-00\",\"dstMacAddress\": \"02-00-00-00-00-00\",\"dstIpAddress\":\"192.0.2.0\"},\"state\":\"ACTIVE\"}" -# resp = None -# try: -# resp = "{\t\"id\": \"" + p_transport_info[0] + "\",\t\"name\": \"" + p_transport_info[1] + "\",\t\"description\": \"" + p_transport_info[2] + "\",\t\"type\": \"" + p_transport_info[3] + "\",\t\"protocol\": \"" + p_transport_info[4] + "\",\t\"version\": \"" + str(p_transport_info[5]) + "\",\t\"endpoint\": \"" + p_transport_info[6] + "\",\t\"security\": \"" + security + "\",\t\"implSpecificInfo\": \"" + p_transport_info[8] + "\"}" -# print("__to_transport_info__: ", resp) -# except KeyError: -# print("__to_transport_info__: No security entry") - return resp - # End of method __to_transport_info__ - - def __to_rni_subscriptions__(self, p_subscription, p_subscription_type): - """ Build a RNI subscription Json message. """ - print(">>> __to_rni_subscriptions__") - resp = "{\"CellChangeSubscription\": {\"subscriptionType\": \"" + p_subscription_type + "\",\"callbackReference\": \"http://meAppClient.example.com/rni/v2/notifications/cell_change/77777\", \"_links\": {\"self\": \"http://example.com/exampleAPI/rni/v2/subscriptions\"}, \"filterCriteria\": {\"appInsId\": \"01\", \"associateId\": [{\"type\": \"1\", \"value\": \"192.0.0.2\"}], \"plmn\": {\"mcc\": \"01\", \"mnc\": \"001\"}, \"cellId\": \"0x800000A\", \"hoStatus\": \"COMPLETED\"}, \"expiryDeadline\": {\"seconds\": 1577836800, \"nanoSeconds\": 0}}}" -# resp = "{\"CellChangeSubscription\": {\"callbackReference\": " + p_subscription['callbackReference'] + ", \"_links\": {\"self\": " + p_subscription['_links'] + "}, \"filterCriteria\": {\"appInsId\": " + p_subscription['filterCriteria']['appInsId'] + ", \"associateId\": [{\"type\": " + p_subscription['filterCriteria']['associateId']['type'] + ", \"value\": " + p_subscription['filterCriteria']['associateId']['value'] + "}], \"plmn\": {\"mcc\": " + p_subscription['filterCriteria']['plmn']['mcc'] + ", \"mnc\": " + p_subscription['filterCriteria']['plmn']['mnc'] + "}, \"cellId\": [" + p_subscription['filterCriteria']['cellId'] + "], 'hoStatus': " + p_subscription['filterCriteria']['hoStatus'] + "}, \"expiryDeadline\": {\"seconds\": " + p_subscription['expiryDeadline']['seconds'] + ", \"nanoSeconds\": \"" + p_subscription['expiryDeadline']['nanoSeconds'] + "}}" - print("__to_rni_subscriptions__: ", resp) - return resp - # end of __to_rni_subscriptions__ - - def getSubscriberList(self, p_uri): - """ Build a SubscriberList Json message. """ - print(">>> getSubscriberList") - resp = None - try: - resp = "{\"userList\": {\t\"user\": [\t" - for r in self.__subscribers__.itertuples(): - t = tuple(r) - resp += self.__to_userInfo__(t) + "," - # En of 'for' statement - resp = resp[: len(resp) - 1] - resp += "\t],\"resourceURL\": \"http://example.com" + p_uri + "\"}}" - print("getSubscriberList: ", resp) - except KeyError: - print("getSubscriberList: No subscriber list") - return resp - # End of getSubscriberList - - def getZoneList(self, p_uri): - print(">>> getZoneList") - resp = None - try: - resp = "{\"zoneList\": {\t\"zone\": [\t" - for r in self.__zones__.itertuples(): - t = tuple(r) - resp += self.__to_zone__(t) + "," - # En of 'for' statement - resp = resp[: len(resp) - 1] - resp += "\t],\"resourceURL\": \"http://example.com" + p_uri + "\"}}" - print("getZoneList: ", resp) - except KeyError: - print("getZoneList: No zones list") - return resp - # End of getZoneList - - def getAccessPointList(self, p_zone_id, p_uri): - print(">>> getAccessPointList") - resp = None - try: - r = self.__access_point_list__.loc[self.__access_point_list__['zoneId'] == p_zone_id] - print("getAccessPointList: r= ", r) - resp = "{\"accessPointList\": {\t\"zoneId\": \"" + p_zone_id + "\",\t\"accessPoint\": [\t" - for i in r.itertuples(): - t = tuple(i) - location = self.__location_info__.loc[[t[0]]] - resp += self.__to_accessPoint__(t, location) + "," - # En of 'for' statement - resp = resp[: len(resp) - 1] - resp += "\t],\"resourceURL\": \"http://example.com" + p_uri + "\"}}" - print("getAccessPointList: ", resp) - except KeyError: - print("getAccessPointList: No access point list") - return resp - # End of method getAccessPointList - - def getSubscriptionLinkList(self, p_uri): - s = p_uri.split('?') - return "{\"SubscriptionLinkList\": {\"_links\": {\"self\": \"http://example.com" + s[0] + "\"},\"subscription\": [{\"href\": \"http://meAppClient.example.com/rni/v1/notifications/cell_change/77777\",\"subscriptionType\": \"CELL_CHANGE\"},{\"href\": \"http://meAppClient.example.com/rni/v1/notifications/MeasTa/77777\",\"subscriptionType\": \"MEAS_TIMING_ADVANCE\"}]}}" - # End of method getSubscriptionLinkList - - def getMp1TransportInfoList(self): - print(">>> getMp1TransportInfoList") - resp = None - try: - resp = "{\"transportInfoList\": [\t" - for r in self.__transport_info__.itertuples(): - t = tuple(r) - resp += self.__to_transport_info__(t) + "," - # En of 'for' statement - resp = resp[: len(resp) - 1] - resp += "\t]}" - print("getMp1TransportInfoList: ", resp) - except KeyError: - print("getMp1TransportInfoList: No transportInfo list") - return resp - # End of method getMp1TransportInfo - - def getMp1TrafficRulesList(self): - print(">>> getMp1TrafficRulesList") - resp = None - try: - resp = "{\"TrafficRulesList\": [\t" - for r in self.__traffic_rules__.itertuples(): - t = tuple(r) - resp += self.__to_traffic_rule__(t) + "," - # En of 'for' statement - resp = resp[: len(resp) - 1] - resp += "\t]}" - print("getMp1TrafficRulesList: ", resp) - except KeyError: - print("getMp1TrafficRulesList: No TrafficRules list") - return resp - # End of method getMp1TrafficRules - - def getMp1TrafficRule(self): - print(">>> getMp1TrafficRule") - resp = None - try: - resp = "{\"TrafficRule\": [\t" - for r in self.__traffic_rule__.itertuples(): - t = tuple(r) - resp += self.__to_traffic_rule__(t) + "," - # En of 'for' statement - resp = resp[: len(resp) - 1] - resp += "\t]}" - print("getMp1TrafficRule: ", resp) - except KeyError: - print("getMp1TrafficRule: No TrafficRules list") - return resp - # End of method getMp1TrafficRules - - def getSubscriberFromAddress(self, p_ue_address): - print(">>> getSubscriberFromAddress: ", p_ue_address) - result = None - try: - r = tuple(self.__subscribers__.loc[[p_ue_address]].itertuples(index=True, name=''))[0] - print("getSubscriberFromAddress: Find subscriber with address ", p_ue_address, ": ", r) - result = "{\"userInfo\": " + self.__to_userInfo__(r) + "}" - except KeyError: - print("getSubscriberFromAddress: No subscriber with address ", p_ue_address) - return result - # End of method getSubscriberFromAddress - - def getSubscriberFromZoneId(self, p_zone_id, p_uri): - print(">>> getSubscriberFromZoneId: ", p_zone_id) - resp = None - try: - r = self.__subscribers__.loc[self.__subscribers__['zoneId'] == p_zone_id] - resp = "{\"userList\": {\t\"user\": [\t" - for i in r.itertuples(): - t = tuple(i) - resp += self.__to_userInfo__(t) + "," - # En of 'for' statement - resp = resp[: len(resp) - 1] - resp += "\t],\"resourceURL\": \"http://example.com" + p_uri + "\"}}" - print("getSubscriberFromZoneId: ", resp) - except KeyError: - print("getSubscriberFromZoneId: No subscriber in zone ", p_zone_id) - return resp - # End of method getSubscriberFromAddress - - def getUEidentityTagInfo(self, p_app_inst, p_ue_identity_tag): - print(">>> getUEidentityTagInfo: ", p_app_inst, ", ", p_ue_identity_tag) - resp = None - try: - r = tuple(self.__ue_information_list__.loc[p_app_inst, p_ue_identity_tag]) - print("getUEidentityTagInfo: Find zoneId for appInst: ", p_app_inst, ", r= ", r) - resp = self.__to_ueIdentityTagInfo__(p_ue_identity_tag, r) - print("getUEidentityTagInfo: ", resp) - except KeyError: - print("getUEidentityTagInfo: No UE for appInst ", p_app_inst) - return resp - # End of method getUEidentityTagInfo - - def getBwAllocationAppInst(self, p_app_inst, p_ue_identity_tag): - print(">>> getBwAllocationAppInst: ", p_app_inst, ", ", p_ue_identity_tag) - resp = None - resp = "{\"bwInfo\": {\"timeStamp\": {\"seconds\": 0,\"nanoSeconds\": 0},\"appInsId\": \"string\",\"requestType\": \"APPLICATION_SPECIFIC_BW_ALLOCATION\",\"sessionFilter\": [{\"sourceIp\": \"string\",\"sourcePort\": [\"string\"],\"dstAddress\": \"string\",\"dstPort\": [\"string\"],\"protocol\": \"string\"}],\"fixedBWPriority\": \"not defined in the present document\",\"fixedAllocation\": \"string\",\"allocationDirection\": \"00 = Downlink (towards the UE)\"}}" - print("getBwAllocationAppInst: ", resp) - return resp - # End of method getBwAllocationAppInst - - def registerUEidentity(self, p_app_inst, p_json_msg): - print(">>> registerUEidentity", p_json_msg) - if p_json_msg["state"] != "REGISTERED" and p_json_msg["state"] != "UNREGISTERED": - return '400 Bad Request' - resp = None - try: - # Check the record exists - r = tuple(self.__ue_information_list__.loc[p_app_inst, p_json_msg["ueIdentityTag"]]) - print("registerUEidentity: Find zoneId for appInst: ", p_app_inst, ", r= ", r) - if self.__ue_information_list__.loc[p_app_inst, p_json_msg["ueIdentityTag"]]['state'] == 'INVALID_STATE': - return '412 Precondition Failed' - self.__ue_information_list__.loc[p_app_inst, p_json_msg["ueIdentityTag"]]['state'] = p_json_msg["state"] - l = (p_json_msg["ueIdentityTag"], p_json_msg["state"]) - resp = self.__to_ueIdentityTagInfo__(p_json_msg["ueIdentityTag"], l) - except KeyError: - print("registerUEidentity: No appInst/UE ", p_app_inst, "/", p_ue_identity_tag) - return resp - # End of method registerUEidentity - - def registerSubscription(self, p_json_msg, p_uri): - print(">>> registerSubscription: ", p_json_msg, "/", p_uri) - resp = None - subscription_id = "subscription" + p_json_msg["clientCorrelator"] - try: - # Check the record does not exist - self.__subscriptions__.loc[self.__subscriptions__['subscription_id'] == subscription_id] - print("registerSubscription: There is a subscription for ", subscription_id) - except KeyError: - #print("registerSubscription: Add new row in subscription") - resource_url = "http://example.com" + p_uri + "/" + subscription_id - row = pd.Series({ 'subscription_id': subscription_id, 'corr_id': p_json_msg["clientCorrelator"], 'address': p_json_msg["address"], 'callback': p_json_msg["callbackReference"]["notifyURL"], 'ue_event_criteria': p_json_msg["userEventCriteria"], 'resourceURL': resource_url }) - #print("registerSubscription: row: ", row) - self.__subscriptions__ = self.__subscriptions__.append(row, ignore_index=True).reindex() - #print("registerSubscription: ", self.__subscriptions__.head()) - r = tuple(self.__subscriptions__.loc[self.__subscriptions__['subscription_id'] == subscription_id].to_records()) - #print("registerSubscription: New added row: ", r[0]) - resp = self.__to_subscriptions__(r[0]) - return resp - # End of registerSubscription - - def unregisterSubscription(self, p_subscription_id): - print(">>> unregisterSubscription: ", p_subscription_id) - resp = None - try: - # Check the record exists - r = self.__subscriptions__.loc[self.__subscriptions__['subscription_id'] == p_subscription_id] - t = tuple(r.to_records()) - print("unregisterSubscription: Find row: ", t) - resp = self.__to_subscriptions__(t[0]) - # Remove it - self.__subscriptions__.drop(r.index) - except KeyError: - print("unregisterSubscription: No subscription for ", p_subscription_id) - return resp - # End of unregisterSubscription - - def registerRniSubscription(self, p_json_msg): - print(">>> registerRniSubscription: ", p_json_msg) - resp = None - if p_json_msg['subscriptionType'] == 'CELL_CHANGE': - resp = self.__to_rni_subscriptions__(p_json_msg, 'CELL_CHANGE') - return resp - # End of registerRniSubscription - - def getRabInfo(self, p_cell_id): - print(">>> getRabInfo: ", p_cell_id) - resp = None - if p_cell_id == '0x8000099': - resp = "{\"problemDetails\": {\t\"type\": \"Not Found\",\t\"title\": \"RnisAPI\",\t\"status\": 404,\t\"detail\": \"Not Found\",\t\"instance\": \"string\"}}" - else: - resp = "{ \"RabInfo\": { \"timeStamp\": { \"seconds\": 1577836800, \"nanoSeconds\": 0 }, \"appInsId\": \"01\", \"requestId\": \"01\", \"cellUserInfo\": [ { \"ecgi\": { \"plmn\": { \"mcc\": \"001\", \"mnc\": \"01\" }, \"cellId\": \"" + p_cell_id + "\" }, \"ueInfo\": [ { \"associateId\": [ { \"type\": \"1\", \"value\": \"192.0.2.0\" } ], \"erabInfo\": [ { \"erabId\": 10 , \"erabQosParameters\": [ { \"qci\": 7, \"qosInformation\": [ { \"erabMbrDl\": 10, \"erabMbrUl\": 10, \"erabGbrDl\": 10, \"erabGbrUl\": 10 } ] } ] } ] } ] } ] } }" - return resp - # End of getRabInfo - - def getPlmnInfo(self, p_app_inst): - print(">>> getPlmnInfo: ", p_app_inst) - resp = None - if p_app_inst == '99': - resp = "{\"problemDetails\": {\t\"type\": \"Not Found\",\t\"title\": \"RnisAPI\",\t\"status\": 404,\t\"detail\": \"Not Found\",\t\"instance\": \"string\"}}" - else: - resp = "{ \"PlmnInfo\": { \"timeStamp\": { \"seconds\": 1577836800, \"nanoSeconds\": 0 }, \"appInsId\": \"" + p_app_inst + "\", \"plmn\": [ { \"mcc\": \"001\", \"mnc\": \"01\" } ] } }" - return resp - # End of getPlmnInfo - - def getS1BearerInfo(self, p_cell_id): - print(">>> getS1BearerInfo: ", p_cell_id) - resp = None - if p_cell_id == '0x8000099': - resp = "{\"problemDetails\": {\t\"type\": \"Not Found\",\t\"title\": \"RnisAPI\",\t\"status\": 404,\t\"detail\": \"Not Found\",\t\"instance\": \"string\"}}" - else: - resp = "{ \"S1BearerInfo\": { \"timeStamp\": { \"seconds\": 1577836800, \"nanoSeconds\": 0 }, \"s1UeInfo\": [ { \"tempUeId\": [ { \"mmec\": \"0\", \"mtmsi\": \"1234\" } ], \"associateId\": [ { \"type\": \"1\", \"value\": \"192.0.2.0\" }, { \"type\": \"3\", \"value\": \"198.51.100.0\" } ], \"ecgi\": [ { \"plmn\": { \"mcc\": \"001\", \"mnc\": \"01\" }, \"cellId\": \"0x800000A\" } ], \"s1BearerInfoDetailed\": [ { \"erabId\": 1, \"s1EnbInfo\": { \"ipAddress\": \"192.0.2.0\", \"tunnelId\": \"1111\" }, \"sGwInfo\": { \"ipAddress\": \"192.0.2.1\", \"tunnelId\": \"2222\" } } ] } ] } }" - return resp - # End of getS1BearerInfo - - def getL2MeasInfo(self, p_cell_id): - print(">>> getL2MeasInfo: ", p_cell_id) - resp = None - if p_cell_id == '0x8000099': - resp = "{\"problemDetails\": {\t\"type\": \"Not Found\",\t\"title\": \"RnisAPI\",\t\"status\": 404,\t\"detail\": \"Not Found\",\t\"instance\": \"string\"}}" - return resp - # End of getL2MeasInfo - -# End of class mec_database diff --git a/simu/mec_http_server.py b/simu/mec_http_server.py deleted file mode 100644 index 229dd28..0000000 --- a/simu/mec_http_server.py +++ /dev/null @@ -1,528 +0,0 @@ -import http.server -import json -from mec_database import mec_database - -# This class will handles any incoming request from the browser -class myHandler(http.server.BaseHTTPRequestHandler): - __db__ = mec_database() - - def __init__(self, p_request, p_client_address, p_server): - super(http.server.BaseHTTPRequestHandler, self).__init__(p_request, p_client_address, p_server) - self.wfile._wbufsize = -1; - - # Handler for the GET requests - def do_GET(self): - print('>>> do_GET: ', self.path) - self.protocol_version = self.request_version - # Check HTTP end_headers - if self.__check_http_headers__() == False: - resp = "{\"problemDetails\": {\t\"type\": \"Bad Request\",\t\"title\": \"N/A\",\t\"status\": 400,\t\"detail\": \"Wrong headers\",\t\"instance\": \"N/A\"}}" - self.send_response(400, 'Bad Request') - self.send_header('Host', self.headers.get('Host')) # send_header() shall be after send_response() - self.send_header('Authorization', self.headers.get('Authorization')) - self.send_header('Connection', 'keep-alive') - self.send_header('Content-Type', 'application/problem+json') - l = len(resp) - self.send_header('Content-Length', str(l)) - self.end_headers() - self.wfile.write(bytes(resp, 'utf-8')) - return - - resp, content_type = self.__process__() - print('do_GET: resp= ', resp, ', Content_Type= ', content_type) - if (resp == None): - self.send_response(404, 'Not Found') - self.send_header('Host', self.headers.get('Host')) # send_header() shall be after send_response() - self.send_header('Authorization', self.headers.get('Authorization')) - self.send_header('Connection', 'keep-alive') - self.send_header('Content-Type', content_type) - self.send_header('Content-Length', '0') - self.end_headers() - else: - if resp.find('Not Found') != -1: - self.send_response(404, 'Not Found') - elif resp.find('Forbidden') != -1: - self.send_response(403, 'Forbidden') - elif resp.find('Bad Request') != -1: - self.send_response(400, 'Bad Request') - else: - self.send_response(200, 'OK') - self.send_header('Host', self.headers.get('Host')) # send_header() shall be after send_response() - self.send_header('Authorization', self.headers.get('Authorization')) - self.send_header('Connection', 'keep-alive') - self.send_header('Content-Type', content_type) - l = len(resp) - self.send_header('Content-Length', str(l)) - #self.end_headers() # Unable to bufferize wfile, so calling end_headers() headers and body are sent in 2 different TCP packets - self._headers_buffer.append(b"\r\n") - self._headers_buffer.append(bytes(resp, 'utf-8')) - self.wfile.write(b"".join(self._headers_buffer)) - self._headers_buffer = [] - #self.wfile.write(bytes(resp, 'utf-8')) - #self.wfile.flush() - print("<<< do_GET") - return - # End of do_GET - - # Handler for the POST requests - def do_POST(self): - print(">>> do_POST: ", self.path) - self.protocol_version = self.request_version - # Check HTTP end_headers - if self.__check_http_headers__() == False: - resp = "{\"problemDetails\": {\t\"type\": \"Bad Request\",\t\"title\": \"N/A\",\t\"status\": 400,\t\"detail\": \"Wrong headers\",\t\"instance\": \"N/A\"}}" - self.protocol_version = self.request_version - self.send_response(400, 'Bad Request') - self.send_header('Host', self.headers.get('Host')) - self.send_header('Authorization', self.headers.get('Authorization')) - self.send_header('Connection', 'keep-alive') - self.send_header('Content-Type', 'application/problem+json') - l = len(resp) - self.send_header('Content-Length', str(l)) - self.end_headers() - self.wfile.write(bytes(resp, 'utf-8')) - return - - resp, content_type = self.__process__() - print('do_POST: resp= ', resp, ', Content_Type= ', content_type) - if (resp == None): - self.send_response(404, 'Not Found') - self.send_header('Host', self.headers.get('Host')) # send_header() shall be after send_response() - self.send_header('Authorization', self.headers.get('Authorization')) - self.send_header('Connection', 'keep-alive') - self.send_header('Content-Type', content_type) - self.send_header('Content-Length', '0') - self.end_headers() - else: - if resp.find('Not Found') != -1: - self.send_response(404, 'Not Found') - resp = "" - elif resp.find('Forbidden') != -1: - self.send_response(403, 'Forbidden') - resp = "" - elif resp.find('Bad Request') != -1 or resp.find('Wrong parameters') != -1: - self.send_response(400, 'Bad Request') - elif resp.find('Precondition Failed') != -1: - self.send_response(412, 'Precondition Failed') - resp = "{\"problemDetails\": {\t\"type\": \"Precondition Failed\",\t\"title\": \"N/A\",\t\"status\": 412,\t\"detail\": \"Wrong preconditions\",\t\"instance\": \"N/A\"}}" - content_type = 'application/problem+json' - elif resp.find('userTrackingSubscription') != -1: - self.send_response(201, 'Created') - resp = "" - elif resp.find('CellChangeSubscription') != -1: - self.send_response(201, 'Created') - else: - self.send_response(200, 'OK') - self.send_header('Host', self.headers.get('Host')) # send_header() shall be after send_response() - self.send_header('Authorization', self.headers.get('Authorization')) - self.send_header('Connection', 'keep-alive') - self.send_header('Content-Type', content_type) - l = len(resp) - self.send_header('Content-Length', str(l)) - #self.end_headers() # Unable to bufferize wfile, so calling end_headers() headers and body are sent in 2 different TCP packets - self._headers_buffer.append(b"\r\n") - self._headers_buffer.append(bytes(resp, 'utf-8')) - self.wfile.write(b"".join(self._headers_buffer)) - self._headers_buffer = [] - #self.wfile.write(bytes(resp, 'utf-8')) - #self.wfile.flush() - print("<<< do_POST") - return - # End of do_POST - - # Handler for the PUT requests - def do_PUT(self): - print(">>> do_PUT: ", self.path) - self.protocol_version = self.request_version - # Check HTTP end_headers - if self.__check_http_headers__() == False: - resp = "{\"problemDetails\": {\t\"type\": \"Bad Request\",\t\"title\": \"N/A\",\t\"status\": 400,\t\"detail\": \"Wrong headers\",\t\"instance\": \"N/A\"}}" - self.protocol_version = self.request_version - self.send_response(400, 'Bad Request') - self.send_header('Host', self.headers.get('Host')) - self.send_header('Authorization', self.headers.get('Authorization')) - self.send_header('Connection', 'keep-alive') - self.send_header('Content-Type', 'application/problem+json') - l = len(resp) - self.send_header('Content-Length', str(l)) - self.end_headers() - self.wfile.write(bytes(resp, 'utf-8')) - return - - resp, content_type = self.__process__() - print('do_PUT: resp= ', resp, ', Content_Type= ', content_type) - if (resp == None): - self.send_response(404, 'Not Found') - self.send_header('Host', self.headers.get('Host')) # send_header() shall be after send_response() - self.send_header('Authorization', self.headers.get('Authorization')) - self.send_header('Connection', 'keep-alive') - self.send_header('Content-Type', content_type) - self.send_header('Content-Length', '0') - self.end_headers() - else: - if resp.find('Not Found') != -1: - self.send_response(404, 'Not Found') - resp = "" - elif resp.find('Forbidden') != -1: - self.send_response(403, 'Forbidden') - resp = "" - elif resp.find('Bad Request') != -1: - self.send_response(400, 'Bad Request') - resp = "" - elif resp.find('Precondition Failed') != -1: - self.send_response(412, 'Precondition Failed') - resp = "{\"problemDetails\": {\t\"type\": \"Precondition Failed\",\t\"title\": \"N/A\",\t\"status\": 412,\t\"detail\": \"Wrong preconditions\",\t\"instance\": \"N/A\"}}" - content_type = 'application/problem+json' - else: - self.send_response(200, 'OK') - self.send_header('Host', self.headers.get('Host')) # send_header() shall be after send_response() - self.send_header('Authorization', self.headers.get('Authorization')) - self.send_header('Connection', 'keep-alive') - self.send_header('Content-Type', content_type) - l = len(resp) - self.send_header('Content-Length', str(l)) - #self.end_headers() # Unable to bufferize wfile, so calling end_headers() headers and body are sent in 2 different TCP packets - self._headers_buffer.append(b"\r\n") - self._headers_buffer.append(bytes(resp, 'utf-8')) - self.wfile.write(b"".join(self._headers_buffer)) - self._headers_buffer = [] - #self.wfile.write(bytes(resp, 'utf-8')) - #self.wfile.flush() - print("<<< do_PUT") - return - # End of do_POST - - # Handler for the DELETE requests - def do_DELETE(self): - print('>>> do_DELETE: ', self.path) - self.protocol_version = self.request_version - # Check HTTP end_headers - if self.__check_http_headers__() == False: - resp = "{\"problemDetails\": {\t\"type\": \"Bad Request\",\t\"title\": \"N/A\",\t\"status\": 400,\t\"detail\": \"Wrong headers\",\t\"instance\": \"N/A\"}}" - self.send_response(400, 'Bad Request') - self.send_header('Host', self.headers.get('Host')) - self.send_header('Authorization', self.headers.get('Authorization')) - self.send_header('Connection', 'keep-alive') - self.send_header('Content-Type', 'application/problem+json') - l = len(resp) - self.send_header('Content-Length', str(l)) - self.end_headers() - self.wfile.write(bytes(resp, 'utf-8')) - return - - resp, content_type = self.__process__() - print('do_DELETE: resp= ', resp, ', Content_Type= ', content_type) - if (resp == None): - self.send_response(404, 'Not Found') - self.send_header('Host', self.headers.get('Host')) # send_header() shall be after send_response() - self.send_header('Authorization', self.headers.get('Authorization')) - self.send_header('Connection', 'keep-alive') - self.send_header('Content-Type', content_type) - self.send_header('Content-Length', '0') - self.end_headers() - else: - if resp.find('Not Found') != -1: - self.send_response(404, 'Not Found') - elif resp.find('Forbidden') != -1: - self.send_response(403, 'Forbidden') - elif resp.find('Bad Request') != -1: - self.send_response(400, 'Bad Request') - else: - self.send_response(200, 'OK') - self.send_header('Host', self.headers.get('Host')) # send_header() shall be after send_response() - self.send_header('Authorization', self.headers.get('Authorization')) - self.send_header('Connection', 'keep-alive') - self.send_header('Content-Type', content_type) - l = len(resp) - self.send_header('Content-Length', str(l)) - #self.end_headers() - self._headers_buffer.append(b"\r\n") - self._headers_buffer.append(bytes(resp, 'utf-8')) - self.wfile.write(b"".join(self._headers_buffer)) - self._headers_buffer = [] - #self.wfile.write(bytes(resp, 'utf-8')) - #self.wfile.flush() - print("<<< do_DELETE") - return - # End of do_DELETE - - # Check HTTP headers - def __check_http_headers__(self): - print('>>> __check_http_headers__') - result = True - host = self.headers.get('Host') - if host == None: - print("__check_http_headers__: Failed to parse Host header") - result = False - content_type = self.headers.get('Content-Type') - if content_type != 'application/json': - print("__check_http_headers__: Failed to parse 'Content-Type' header") - result = False - auth = self.headers.get('Authorization') - if auth == None: - print("__check_http_headers__: Failed to parse 'Authorization' header") - result = False - return result - # End of __check_http_headers__ - - # Process the request - def __process__(self): - s = self.path.split('/') - print('>>> __process__: ', s) - if s[1] != 'exampleAPI': - return None, 'application/json' - # TODO Check HTTP headers - if s[2] == 'location' and ((s[3] == 'v1') or (s[3] == 'v2')): - return self.__process__location__api__(s) - elif s[2] == 'ui' and ((s[3] == 'v1') or (s[3] == 'v2')): - return self.__process__ue__identity__api__(s) - elif s[2] == 'rni' and ((s[3] == 'v1') or (s[3] == 'v2')): - return self.__process__rnis__api__(s) - elif s[2] == 'bwm' and ((s[3] == 'v1') or (s[3] == 'v2')): - return self.__process__bwm__api__(s) - elif s[2] == 'mec_app_support' and ((s[3] == 'v1') or (s[3] == 'v2')): - return self.__process__mp1__api__(s) - else: - return None, 'application/json' - # End of __process__ - - # Process the LocationAPI request - def __process__location__api__(self, p_split): - print (">>> __process__location__api__: ", p_split) - resp = None - content_type = 'application/json' - if p_split[4].startswith('users'): # E.g. users?zoneId=zone01 - s = p_split[4].split('?') - if s.__len__() == 1: # Users list requested - resp = self.__db__.getSubscriberList(self.path) - elif s.__len__() == 2: # E.g. zoneId=zone01 - s = s[1].split('=') - if s[0] == 'zoneId': # Users list into a specific zoneId requested - resp = self.__db__.getSubscriberFromZoneId(s[1], self.path) - elif s[0] == 'address': - resp = self.__db__.getSubscriberFromAddress(s[1]) - elif p_split[4] == 'zones': - if p_split.__len__() == 5: - s = p_split[4].split('?') - print("__process__location__api__: ", s) - if s.__len__() == 1: # A list requested - if s[0] == 'zones': - resp = self.__db__.getZoneList(self.path) - else: - resp = "{\"Unsupported zone request\"}" - elif s.__len__() == 2: # E.g. ? - resp = "{\"Unsupported zone request\"}" - else: - resp = "{\"Unsupported " + p_split[4] + " request\"}" - elif p_split.__len__() == 7: - if p_split[6] == 'accessPoints': - resp = self.__db__.getAccessPointList(p_split[5], self.path) - else: - resp = "{\"Unsupported " + p_split[5] + " request\"}" - else: - resp = "{\"Unsupported " + p_split[4] + " request\"}" - elif p_split[4] == 'subscriptions': - if p_split.__len__() == 6: - # Extract the body if any - body = None - content_len = int(self.headers.get('Content-Length')) - if (content_len != 0): - body = self.rfile.read(content_len) - json_msg = self.__decode__json__body__(body) - if (json_msg == None): - resp = "{\"problemDetails\": {\t\"type\": \"Body processing not supported\",\t\"title\": \"UElocationAPI\",\t\"status\": 400,\t\"detail\": \"Unknown request\",\t\"instance\": \"string\"}}" - else: - resp = self.__db__.registerSubscription(json_msg, self.path) - elif p_split.__len__() == 7: - resp = self.__db__.unregisterSubscription(p_split[6]) - else: - resp = "{\"Unsupported " + p_split[4] + " request\"}" - - print ("<<< __process__location__api__: ", resp, ", ", content_type) - return resp, content_type - # End of __process__location__api__ - - # Process the ue_identityAPI request - def __process__ue__identity__api__(self, p_split): - print (">>> __process__ue__identity__api__: ", p_split) - resp = None - content_type = 'application/json' - if p_split[4] == 'appInst98': # Used for unknown application, e.g. TC_MEC_PLAT_UETAG_003_BI - resp = "{\"problemDetails\": {\t\"type\": \"Not Authorized\",\t\"title\": \"UEidentityAPI\",\t\"status\": 403,\t\"detail\": \"Forbidden\",\t\"instance\": \"AppInst98\"}}" - else: - if p_split[5].startswith('ue_identity_tag_info'): # E.g. ue_identity_tag_info?ueIdentityTag=UeTagA - s = p_split[5].split('?') - if s[0] != 'ue_identity_tag_info': - resp = "{\"problemDetails\": {\t\"type\": \"Bad Request\",\t\"title\": \"UEidentityAPI\",\t\"status\": 400,\t\"detail\": \"Wrong parameters\",\t\"instance\": \"string\"}}" - elif s.__len__() == 1: # ue_identity_tag_info, POST - # Register/Unregister operation - body = None - # Extract the body if any - content_len = int(self.headers.get('Content-Length')) - if (content_len != 0): - body = self.rfile.read(content_len) - json_msg = self.__decode__json__body__(body) - if (json_msg == None): - resp = "{\"problemDetails\": {\t\"type\": \"Body processing not supported\",\t\"title\": \"UEidentityAPI\",\t\"status\": 400,\t\"detail\": \"Unknown request\",\t\"instance\": \"string\"}}" - else: - resp = self.__db__.registerUEidentity(p_split[4], json_msg) - elif s.__len__() == 2: # E.g. ueIdentityTag=UeTagA - s = s[1].split('=') - if s[0] == 'ueIdentityTag': # Users list into a specific zoneId requested - resp = self.__db__.getUEidentityTagInfo(p_split[4], s[1]) - if (resp == None): - resp = "{\"problemDetails\": {\t\"type\": \"Not Found\",\t\"title\": \"UEidentityAPI\",\t\"status\": 404,\t\"detail\": \"Wrong parameters\",\t\"instance\": \"string\"}}" - content_type = 'application/problem+json' - if (resp == None): - resp = "{\"problemDetails\": {\t\"type\": \"Bad Request\",\t\"title\": \"UEidentityAPI\",\t\"status\": 400,\t\"detail\": \"Wrong parameters\",\t\"instance\": \"string\"}}" - if resp.find('problemDetails') != -1: - content_type = 'application/problem+json' - - print ("<<< __process__ue__identity__api__: ", resp, ", ", content_type) - return resp, content_type - # End of __process__ue__identity__api__ - - # Process the RnisAPI request - def __process__rnis__api__(self, p_split): - print ('>>> __process__rnis__api__: ', p_split) - resp = None - content_type = 'application/json' - if p_split[4].startswith('subscriptions'): - if p_split.__len__() == 5: - s = p_split[4].split('?') - if s.__len__() == 1: # Chek message body - # Register/Unregister operation - body = None - # Extract the body if any - content_len = int(self.headers.get('Content-Length')) - if (content_len != 0): - body = self.rfile.read(content_len) - json_msg = self.__decode__json__body__(body) - if (json_msg == None): - resp = "{\"problemDetails\": {\t\"type\": \"Body processing not supported\",\t\"title\": \"UEidentityAPI\",\t\"status\": 400,\t\"detail\": \"Unknown request\",\t\"instance\": \"string\"}}" - else: - resp = self.__db__.registerRniSubscription(json_msg) - elif s[0] != 'subscriptions': - resp = "{\"problemDetails\": {\t\"type\": \"Bad Request\",\t\"title\": \"RnisAPI\",\t\"status\": 400,\t\"detail\": \"Wrong parameters\",\t\"instance\": \"string\"}}" - else: - s = s[1].split('=') - print('__process__rnis__api__: ', s) - if s[0] != 'subscription_type': - resp = "{\"problemDetails\": {\t\"type\": \"Bad Request\",\t\"title\": \"RnisAPI\",\t\"status\": 400,\t\"detail\": \"Wrong parameters\",\t\"instance\": \"string\"}}" - elif s[1] == 'wrongSubscriptionType': - resp = "{\"problemDetails\": {\t\"type\": \"Bad Request\",\t\"title\": \"RnisAPI\",\t\"status\": 400,\t\"detail\": \"Wrong parameters\",\t\"instance\": \"string\"}}" - else: - resp = self.__db__.getSubscriptionLinkList(self.path) - elif p_split.__len__() == 6: - if p_split[5] == '': - resp = self.__db__.getSubscriptionLinkList(self.path) - elif s[0] != 'subscriptions': - resp = "{\"problemDetails\": {\t\"type\": \"Bad Request\",\t\"title\": \"RnisAPI\",\t\"status\": 400,\t\"detail\": \"Wrong parameters\",\t\"instance\": \"string\"}}" - else: - s = s[1].split('=') - print('__process__rnis__api__: ', s) - if s[0] != 'subscription_type': - resp = "{\"problemDetails\": {\t\"type\": \"Bad Request\",\t\"title\": \"RnisAPI\",\t\"status\": 400,\t\"detail\": \"Wrong parameters\",\t\"instance\": \"string\"}}" - elif s[1] == 'wrongSubscriptionType': - resp = "{\"problemDetails\": {\t\"type\": \"Bad Request\",\t\"title\": \"RnisAPI\",\t\"status\": 400,\t\"detail\": \"Wrong parameters\",\t\"instance\": \"string\"}}" - else: - resp = self.__db__.getSubscriptionLinkList(self.path) - elif p_split[4].startswith('queries'): - if p_split.__len__() == 6: - s = p_split[5].split('?') - if s.__len__() == 1: # Chek message body - resp = "{\"problemDetails\": {\t\"type\": \"Bad Request\",\t\"title\": \"RnisAPI\",\t\"status\": 400,\t\"detail\": \"Wrong parameters\",\t\"instance\": \"string\"}}" - else: - query = s[0] - s = s[1].split('=') - print('__process__rnis__api__ (queries): ', s) - if query == 'rab_info' and s[0] == 'cell_id': - resp = self.__db__.getRabInfo(s[1]) - elif query == 'plmn_info' and s[0] == 'app_ins_id': - resp = self.__db__.getPlmnInfo(s[1]) - elif query == 's1_bearer_info' and s[0] == 'cell_id': - resp = self.__db__.getS1BearerInfo(s[1]) - elif query == 'layer2_meas' and s[0] == 'cell_id': - resp = self.__db__.getL2MeasInfo(s[1]) - else: - resp = "{\"problemDetails\": {\t\"type\": \"Bad Request\",\t\"title\": \"RnisAPI\",\t\"status\": 400,\t\"detail\": \"Wrong parameters\",\t\"instance\": \"string\"}}" - if (resp == None): - resp = "{\"problemDetails\": {\t\"type\": \"Not supported\",\t\"title\": \"RnisAPI\",\t\"status\": 400,\t\"detail\": \"Wrong parameters\",\t\"instance\": \"string\"}}" - if resp.find('problemDetails') != -1: - content_type = 'application/problem+json' - - print ("<<< __process__rnis__api__: ", resp, ", ", content_type) - return resp, content_type - # End of __process__rnis__api__ - - # Process the BwManagementAPI request - def __process__bwm__api__(self, p_split): - print (">>> __process__bwm__api__: ", p_split) - resp = None - content_type = 'application/json' - if p_split[4].startswith('bw_allocations'): # E.g. bw_allocation?app_instance_id=InstApp01 - s = p_split[4].split('?') - if s.__len__() == 1: # BW Allocation list requested - #resp = self.__db__.getBwAllocationList(self.path) - # Register/Unregister operation - body = None - # Extract the body if any - content_len = int(self.headers.get('Content-Length')) - if (content_len != 0): - body = self.rfile.read(content_len) - json_msg = self.__decode__json__body__(body) - if (json_msg == None): - resp = "{\"problemDetails\": {\t\"type\": \"Body processing not supported\",\t\"title\": \"BwManagementAPI\",\t\"status\": 400,\t\"detail\": \"Unknown request\",\t\"instance\": \"string\"}}" - content_type = 'application/problem+json' - else: - resp = self.__db__.bwAllocation(json_msg) - elif s.__len__() == 2: # E.g. app_instance_id=InstApp01 - s = s[1].split('=') - if s[0] == 'app_instance_id': - resp = self.__db__.getBwAllocationAppInst(p_split[4], s[1]) - if (resp == None): - resp = "{\"problemDetails\": {\t\"type\": \"Not supported\",\t\"title\": \"BwManagementAPI\",\t\"status\": 400,\t\"detail\": \"Wrong parameters\",\t\"instance\": \"string\"}}" - content_type = 'application/problem+json' - - print ("<<< __process__bwm__api__: ", resp, ", ", content_type) - return resp, content_type - # End of __process__bwm__api__ - - # Process the MP1 request - def __process__mp1__api__(self, p_split): - print (">>> __process__mp1__api__: ", p_split) - resp = None - content_type = 'application/json' - if p_split[4].startswith('transports'): # E.g. /mp1/v1/transports - resp = self.__db__.getMp1TransportInfoList() - elif p_split[4].startswith('applications'): - if p_split[6].startswith('dns_rules'): # E.g. /mp1/v1/applications/appInstId01/dns_rules - pass - elif p_split[6].startswith('traffic_rules'): # E.g. GET/PUT /mp1/v1/applications/appInstId01/traffic_rules... - if length(p_split) == 7: # E.g. GET /mp1/v1/applications/appInstId01/traffic_rules - resp = self.__db__.getMp1TrafficRulesList() - else: # E.g. GET/PUT /mp1/v1/applications/appInstId01/traffic_rules/{trafficRuleId} - resp = self.__db__.getMp1TrafficRule(p_split[7]) - if (resp == None): - resp = "{\"problemDetails\": {\t\"type\": \"Not supported\",\t\"title\": \"Mp1\",\t\"status\": 400,\t\"detail\": \"Wrong parameters\",\t\"instance\": \"string\"}}" - content_type = 'application/problem+json' - print ("<<< __process__mp1__api__: ", resp, ", ", content_type) - return resp, content_type - # End of __process__bwm__api__ - - # Decode a Json HTTP body message - def __decode__json__body__(self, p_body): - print(">>> __decode__json__body__: ", p_body) - json_msg = json.loads(p_body) - print("__decode__json__body__: ", type(json_msg)) - print("__decode__json__body__: ", json_msg.keys()) - if ("ueIdentityTags" in json_msg.keys()) == True: - return json_msg.get("ueIdentityTags")[0] - elif ("userTrackingSubscription" in json_msg.keys()) == True: - return json_msg.get("userTrackingSubscription") - elif ("CellChangeSubscription" in json_msg.keys()) == True: - return json_msg.get("CellChangeSubscription") - return None - # End of __decode__json__body__ - -# End of class SimpleHTTPRequestHandler diff --git a/simu/mec_simulator.py b/simu/mec_simulator.py deleted file mode 100644 index a0306e9..0000000 --- a/simu/mec_simulator.py +++ /dev/null @@ -1,39 +0,0 @@ -# Very basic MEC PLAT simulator - -import http.server -import socketserver -import mec_http_server -import threading -import sys, os, time -import _Getch as getc - -# MEC simulator IPv4 address -ADDRESS_BINDING = '127.0.0.1' -# MEC simulator IPv4 listening port -PORT_NUMBER = 8081 - -if __name__ == '__main__': - getch = getc._Getch() - exit = False - try: - # Create a web server and define the handler to manage the incoming request - server = http.server.HTTPServer((ADDRESS_BINDING, PORT_NUMBER), mec_http_server.myHandler) - server.wbufsize = -1 - print ('Started httpserver on port ', PORT_NUMBER) - # Wait forever for incoming http requests in background - #server.serve_forever(poll_interval=2) - threading.Thread(target=server.serve_forever).start() - # Use keybord entries to trigBger notifications - while exit == False: - ch = getch() - if ch == 'q': - exit = True - else: - print(">>> ch= ", ch) - server.shutdown() - server.socket.close() - except KeyboardInterrupt: - print ('^C received, shutting down the web server') - server.shutdown() - server.socket.close() -# End of __main__ diff --git a/titan-test-system-framework b/titan-test-system-framework index 13e13a5..1e363a4 160000 --- a/titan-test-system-framework +++ b/titan-test-system-framework @@ -1 +1 @@ -Subproject commit 13e13a5759ad795a8726bdcdad30232d454fafd2 +Subproject commit 1e363a445c9be2ea40578342d86bb1f777daf709 diff --git a/virtualization/docker/home/etc/init.d/10-titan.sh b/virtualization/docker/home/etc/init.d/10-titan.sh index 840bf28..c7d2c4c 100755 --- a/virtualization/docker/home/etc/init.d/10-titan.sh +++ b/virtualization/docker/home/etc/init.d/10-titan.sh @@ -27,6 +27,9 @@ GEN_PDF=no JDKDIR=$JAVA_HOME EOF +# To prevent link error /usr/bin/ld: /lib/x86_64-linux-gnu/libpthread.so.0: error adding symbols: DSO missing from command lineema +sed --in-place 's/LINUX_LIBS := -lxml2/LINUX_LIBS := -lxml2 -lpthread/g' ./core/Makefile + make && make install || exit 1 # To be compiant with build_ttcn3.bash -- GitLab From 1ab35db0708446b7618b0e501dbd5849f71bb1d5 Mon Sep 17 00:00:00 2001 From: YannGarcia Date: Wed, 5 Oct 2022 14:16:17 +0200 Subject: [PATCH 05/99] Add log viewer based on plantuml --- plantuml/AtsMec_Location.svg | 106 +++++++++++ plantuml/AtsMec_Location.txt | 28 +++ plantuml/README.md | 0 plantuml/__main__.py | 180 ++++++++++++++++++ plantuml/__pycache__/__main__.cpython-38.pyc | Bin 0 -> 4831 bytes .../__pycache__/regex_list.cpython-38.pyc | Bin 0 -> 4615 bytes plantuml/etsi-style.iuml | 46 +++++ plantuml/msgs/14_11_47_542719.txt | 1 + plantuml/msgs/14_11_47_607302.txt | 1 + plantuml/plantuml.jar | Bin 0 -> 8383820 bytes plantuml/regex_list.py | 124 ++++++++++++ scripts/generate_png.sh | 17 ++ scripts/run_all.bash | 5 +- scripts/run_mtc.bash | 1 - 14 files changed, 507 insertions(+), 2 deletions(-) create mode 100644 plantuml/AtsMec_Location.svg create mode 100644 plantuml/AtsMec_Location.txt create mode 100644 plantuml/README.md create mode 100644 plantuml/__main__.py create mode 100644 plantuml/__pycache__/__main__.cpython-38.pyc create mode 100644 plantuml/__pycache__/regex_list.cpython-38.pyc create mode 100644 plantuml/etsi-style.iuml create mode 100644 plantuml/msgs/14_11_47_542719.txt create mode 100644 plantuml/msgs/14_11_47_607302.txt create mode 100644 plantuml/plantuml.jar create mode 100644 plantuml/regex_list.py create mode 100755 scripts/generate_png.sh diff --git a/plantuml/AtsMec_Location.svg b/plantuml/AtsMec_Location.svg new file mode 100644 index 0000000..f78c839 --- /dev/null +++ b/plantuml/AtsMec_Location.svg @@ -0,0 +1,106 @@ +TTCN-3 EnvironmentTC_MEC_MEC013_SRV_UELOCSUB_001_OKsystemmtc:httpPort1map2@LibHttp_TypesAndValues.HttpMessagerequest := ...14:11:47.5427193Start, duration: 3014:11:47.5462674@LibHttp_TypesAndValues.HttpMessageresponse := ...14:11:47.6073025Stop, duration: 3014:11:47.60849714:11:47.60886214:11:47.6092836unmap14:11:47.610574fail \ No newline at end of file diff --git a/plantuml/AtsMec_Location.txt b/plantuml/AtsMec_Location.txt new file mode 100644 index 0000000..57d8d7f --- /dev/null +++ b/plantuml/AtsMec_Location.txt @@ -0,0 +1,28 @@ +@startuml +title TC_MEC_MEC013_SRV_UELOCSUB_001_OK +/'Editor: https://plantuml-editor.kkeisuke.com/ '/ +/'Syntax: http://plantuml.com/fr/sequence-diagram '/ +!include etsi-style.iuml +!pragma teoz true +autonumber +participant system +box "TTCN-3 Environment" #LightBlue +participant "mtc:httpPort" +endbox +"mtc:httpPort" --> system: map +"mtc:httpPort" -[#green]> system: @LibHttp_TypesAndValues.HttpMessage +note right: [[file:///home/yann/dev/gs032p3-ttcn-test-suite/plantuml/msgs/14_11_47_542719.txt request := ...]] +note left: 14:11:47.542719 +"mtc:httpPort" -> "mtc:httpPort": Start, duration: 30 +note left: 14:11:47.546267 +system -[#green]> "mtc:httpPort": @LibHttp_TypesAndValues.HttpMessage +note right: [[file:///home/yann/dev/gs032p3-ttcn-test-suite/plantuml/msgs/14_11_47_607302.txt response := ...]] +note left: 14:11:47.607302 +"mtc:httpPort" -> "mtc:httpPort": Stop, duration: 30 +note left: 14:11:47.608497 +note left: 14:11:47.608862 +note left: 14:11:47.609283 +"mtc:httpPort" --> system: unmap +hnote across #red: fail +note left: 14:11:47.610574 +@enduml diff --git a/plantuml/README.md b/plantuml/README.md new file mode 100644 index 0000000..e69de29 diff --git a/plantuml/__main__.py b/plantuml/__main__.py new file mode 100644 index 0000000..a3f73cf --- /dev/null +++ b/plantuml/__main__.py @@ -0,0 +1,180 @@ +# -*- Coding: utf-8 -*- + +from __future__ import division # Import floating-point division (1/4=0.25) instead of Euclidian division (1/4=0) + +import os +import glob +import sys +import logging + +from regex_list import * + +MSG_PATH = "" +IN_FILE_PATH = "" +OUT_FILE_PATH = "" +out_streams = object() +logger = object() +parser = object() +data_ctx = dict() + +def process_command_line_args(): + global IN_FILE_PATH + + print(f"Arguments count: {len(sys.argv)}") + for i, arg in enumerate(sys.argv): + print(f"Argument {i:>6}: {arg}") + IN_FILE_PATH = sys.argv[1] + # End of function process_command_line_args + +def process_line(line): + global MSG_PATH, out_streams, logger, parser, data_ctx + + match = parser.parse_line(line) + if match != None: + logger.info(f"Matching: {match}") + if 'testcase' in match: + logger.info('Got testcase') + out_streams.write('@startuml\n') + out_streams.write(f"title {match['testcase']}\n") + out_streams.write("/'Editor: https://plantuml-editor.kkeisuke.com/ '/\n") + out_streams.write("/'Syntax: http://plantuml.com/fr/sequence-diagram '/\n") + out_streams.write('!include etsi-style.iuml\n') + out_streams.write('!pragma teoz true\n') + out_streams.write('autonumber\n') + out_streams.write('participant system\n') + out_streams.write('box "TTCN-3 Environment" #LightBlue\n') + elif 'operation' in match: + logger.info('Got operation') + if match['operation'] == 'mapped': + out_streams.write(f"participant \"{match['comp']}:{match['protocol_port']}\"\n") + data_ctx['protocol_port'].append(f"{match['comp']}:{match['protocol_port']}") + else: + if match['protocol_port'] != 'syncPort': + out_streams.write(f"\"{match['comp']}:{match['protocol_port']}\" --> system: unmap\n") + elif 'request' in match: + logger.info('Got request') + if data_ctx['box_ended'] == False: + out_streams.write('endbox\n') + data_ctx['box_ended'] = True + for p in data_ctx['protocol_port']: + out_streams.write(f"\"{p}\" --> system: map\n") + out_streams.write(f"\"{match['comp']}:{match['port']}\" -[#green]> system: @{match['module']}.{match['message']}\n") + s = match['request'].replace(",", ",\\n").replace("\"", "").strip() + if len(s) > 128: + n = match['hours'] + "_" + match['minutes'] + "_" + match['seconds'] + "_" + match['milliseconds'] + ".txt" + n = os.path.join(MSG_PATH, n) + with open(n, "w") as msg: + msg.write(s) + s = f'[[file://{n} request := ...]]' #{Click to read the message} + out_streams.write(f"note right: {s}\n") + out_streams.write(f"note left: {match['hours']}:{match['minutes']}:{match['seconds']}.{match['milliseconds']}\n") + elif 'response' in match: + logger.info('Got response') + if data_ctx['box_ended'] == False: + out_streams.write('endbox\n') + data_ctx['box_ended'] = True + out_streams.write(f"system -[#green]> \"{match['comp']}:{match['port']}\": @{match['module']}.{match['message']}\n") + s = match['response'].replace(",", ",\\n").replace("\"", "").strip() + if len(s) > 128: + n = match['hours'] + "_" + match['minutes'] + "_" + match['seconds'] + "_" + match['milliseconds'] + ".txt" + n = os.path.join(MSG_PATH, n) + with open(n, "w") as msg: + msg.write(s) + s = f'[[file://{n} response := ...]]' #{Click to read the message} + out_streams.write(f"note right: {s}\n") + out_streams.write(f"note left: {match['hours']}:{match['minutes']}:{match['seconds']}.{match['milliseconds']}\n") + elif 'timer_name' in match: + logger.info('Got timer') + if match['timer_name'] == 'tc_sync': + pass + else: + for p in data_ctx['protocol_port']: + if p.startswith(match['comp']): + out_streams.write(f"\"{p}\" -> \"{p}\": {match['start_stop']}, duration: {match['duration']}\n") + break + out_streams.write(f"note left: {match['hours']}:{match['minutes']}:{match['seconds']}.{match['milliseconds']}\n") + elif 'verdict' in match: + logger.info('Got verdict') + if 'ptcid' in match and match['ptcid'] != None: + s = match['ptcid'].split('(') + s = s[1].split(')') + for p in data_ctx['protocol_port']: + if p.startswith(s[0]): + if match['verdict'] == 'fail': + out_streams.write(f"hnote over \"{p}\" #red: fail\n") + elif match['verdict'] == 'pass': + out_streams.write(f"hnote over \"{p}\" #green: pass\n") + elif match['verdict'] == 'inconc': + out_streams.write(f"hnote across #yellow: inconc\n") + else: + out_streams.write(f"hnote over \"{p}\" #gray: error\n") + out_streams.write(f"note left: {match['hours']}:{match['minutes']}:{match['seconds']}.{match['milliseconds']}\n") + break + elif 'final_verdict' in match: + logger.info('Got verdict') + if match['final_verdict'] == 'fail': + out_streams.write(f"hnote across #red: fail\n") + elif match['final_verdict'] == 'pass': + out_streams.write(f"hnote across #green: pass\n") + elif match['final_verdict'] == 'inconc': + out_streams.write(f"hnote across #yellow: inconc\n") + else: + out_streams.write(f"hnote across #gray: error\n") + out_streams.write(f"note left: {match['hours']}:{match['minutes']}:{match['seconds']}.{match['milliseconds']}\n") + out_streams.write('@enduml\n') + else: + logger.info('Got unsupported item') + # End of 'if' statement + out_streams.flush() + # End of function process_line + +def main(): + global MSG_PATH, OUT_FILE_PATH, out_streams, logger, parser, data_ctx + + process_command_line_args() + + # Initialize the logger + logger = logging.getLogger(__name__) + logger.setLevel(logging.DEBUG) + l = logging.StreamHandler() + l.setFormatter(logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')) + logger.addHandler(l) + + # Prepare outputs + OUT_FILE_PATH = sys.argv[2] + CURRENT_PATH = os.getcwd() + MSG_PATH = os.path.join(CURRENT_PATH, "msgs") + logger.info(f'CURRENT_PATH:{CURRENT_PATH} - MSG_PATH{MSG_PATH}') + if os.path.exists(MSG_PATH): + files = glob.glob(os.path.join(MSG_PATH, '*')) + for f in files: + os.remove(f) + else: + os.mkdir(MSG_PATH) + + # Setup the regex + parser = regex_list(logger) + parser.reset_state() + + data_ctx = dict() + data_ctx['protocol_port'] = [] + data_ctx['box_ended'] = False + + print(f"IN_FILE_PATH= {IN_FILE_PATH}") + with open(IN_FILE_PATH, "r") as in_stream: + with open(OUT_FILE_PATH, "w") as out_streams: + line = in_stream.readline() + while line != '': + process_line(line) + line = in_stream.readline() + # End of 'for' statement + # End of 'with' statement + # End of 'with' statement + + os.system('java -DPLANTUML_LIMIT_SIZE=8192 -jar ./plantuml.jar -svg {}'.format(OUT_FILE_PATH)) +# End of main function + +if __name__ == "__main__": + main() + +# End of file diff --git a/plantuml/__pycache__/__main__.cpython-38.pyc b/plantuml/__pycache__/__main__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..de40fb98efc4c82c6716c5aaa70ff4e71ed2479f GIT binary patch literal 4831 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 VmGqWw5cxN=zit(+6{}*A{{WZe=}7

Y}TbZ5P5Z~T#lq@T2aRpk)3#cdHtl@&tTG(e>`i4v28Wp#0PCXQ2k*PU6n z>DJ}a{(zo1aY$}d;)D?Dg@3>iA+#qXBm`0qoH_B{?6}@dlM*heSZn9wy*F>(oA)tq z{aK-q)!_Mk`9p`jscFCAB>osMnT1zef`)38w6zYY5rSjAt=Dwfr)nwL8#Ut-ji#va zSfd6rAEjz(s;_7z^G{ft9dG3OPkocp+WENhz6VqyhYQUWUXPu@VYc+!! z)P&xoX_|pPO)WYCeTHUf4tk5`VW&cv<*dmz?RHD}!3WtQJRf_!=riHB+-9-c<6TcM zQ7Nwbepgh^pO@qpFI+4;Ugx}|cTkkUgJV2|Ie5j-(DX@Pv*941CBD9qg4ejB!OZm2 zkFd}9`j$oYzP4d*W1FF=X-&e67|c|#bPSf6hV?+7IT7`iq8W+NWECtIgXI;h5QB{> z*r6C~Ou^oW!N#Y-lyGnp3pK;_To!zFbLyj|>2G)0`nUzWpE}Xmgur8|eE7iHnEAw?xJ_9qbPF*++!C(=r zL2Kb`rhe~isV;=y;69`E@?{fFk^e_ZD0^4x zqW%EMIJ?sWXPqg7A3vN7b4pj+>-oX+*P-r>NY1)oE=bmcsM<~U$eNM%b@AU67G2MU z(3Kk3MGH27D4q~ z6by(fXfGDV;<*Eyq`K1E$fo??y1G>||I- z0D~V6M1|G)<*V1`ssk%r_nbz%E|g&4dTVgbH>z{}rRrP>ZwySVzSE-UKG9vFG>Yqj zhR7&DX(XJmhgZIBx4mYQ@o+o=1k3v@)Hw^&R~M_7uU`){Ala40mHAqdaIM{FiqOEL z3=bz*$UV9u%;1IAYO|6a8iKXgYF1b6`BdXap+NZiP&q0pWDQd8-VZI?221(2ox>sm z$}CMIY50v2iyW4}G1VU?!NgFR@?f1qaE*F!{GuW`1ru3|V8uYTbXj+3$Fyx(qQSkM zTHr_=6qcD_eo-DorC3VwQGoISG@;RQ*Sx2MA3+Fe5H-gTm*cn$Vg}CdBme|5L+OK~ zF*##IiQ*{*v?jc=c)A3o6bPwp5fpe!-&SHOnBFIm*b$DVZtJ`TxD>p`32n>llWp=) z@9TUODAL;+(fayUW*dr^C&UfaDg#zM-*wgF0X1T&nc(>KPL7f$ouK(~R~jhQVv_wa z*aIZ`R7qsr)}Ijm#cnbI{PeC|6Vd_I?11mfasl>c0-KQNiO%02VBPPPL?cq7pZ1XG zn*qJtD;w8Oa@%qC?&peY7P*SQ)GP-x+#An&Cy&v@4!M8ZL6)cah2Yf8%uI3Ubd^fC z!3BdLb6KSr9N!Bg-JhcuatoUgZ1AIpXRt|Qlg9>wvt&gfVN!Oh*9?y)GC*?>2z&zR zF@Qp|)9{`3@MMAzBgSQ$Dr~}$Cii+>Oeqj{7-Y3Hqzn){B%Ph{mK`cp1WK_1jRwhK zOwW^XVnD*k!%vR%F*&yqeIAm^IE1G~5DtB;%?@x8jAY3v5~G1N!I9x9mWPtOlzuR- zWlTSV0oWK)5X9ZvFp?=qCLf4fTXVmZSd8Uqg*7DBl-Ny)HC3eJ+O))GBo?DzqZz;= z9bzqsh0h`2jQlhTzRYnC#AYQHK8yg1vS<{%kbkGJdBlQurZ96zpDL)-`0h~Yq*JX7 z5@yl&ii3Jpx>B&uHL9|et`@{@g;(q|tc;~^2IuxAow^OBCkOBCYe}LUklr7h-fLl% zargv;JAjsq;myHMfcZII3mh-C9ll%}v+ZOgG=NAQCNlF_Hx+G~gb`0@1d^tZjGX2LO!o zwtc79Xe&&{wyEdXHa`wLqq8}Uqj#`*3!C8$D@SxjgZ zGPvPd&+l>AoTH#&2J0O7M}r^2neK@&?cLg7jxSg2wn=DBM>5YK1A)mfuS1@I-#^-> B29f{( literal 0 HcmV?d00001 diff --git a/plantuml/etsi-style.iuml b/plantuml/etsi-style.iuml new file mode 100644 index 0000000..e26d257 --- /dev/null +++ b/plantuml/etsi-style.iuml @@ -0,0 +1,46 @@ +hide footbox +autonumber +skinparam { + dpi 300 + shadowing false + 'handwritten true + defaultFontSize 8 +} + +skinparam note { + FontSize 8 + FontStyle bold + FontColor White + borderColor Black + backgroundColor DimGray +} + +skinparam participant { + FontSize 8 + FontStyle bold + FontColor White + borderColor Navy + backgroundColor RoyalBlue +} + +skinparam actor { + FontSize 8 + FontStyle bold + FontColor Navy + borderColor Navy + backgroundColor RoyalBlue +} + +skinparam sequence { + ArrowFontColor Black + ArrowColor SlateGray + LifeLineBorderColor Navy + LifeLineBackgroundColor DimGray +} + +skinparam ParticipantPadding 5 +skinparam BoxPadding 5 + +!define sendrcvRTP(a,b,c) a <-[#LimeGreen]> b : c +!define sendRTP(a,b,c) a -[#LimeGreen]> b : c +!define setParticipant(a,b) participant a as b diff --git a/plantuml/msgs/14_11_47_542719.txt b/plantuml/msgs/14_11_47_542719.txt new file mode 100644 index 0000000..e8d93f6 --- /dev/null +++ b/plantuml/msgs/14_11_47_542719.txt @@ -0,0 +1 @@ +request := { method := POST,\n uri := /sbx8tunqyy/mep1/location/v2/subscriptions/userTracking,\n version_major := 1,\n version_minor := 1,\n header := { { header_name := Host,\n header_value := { try-mec.etsi.org } },\n { header_name := Content-Type,\n header_value := { application/json } },\n { header_name := Content-Length,\n header_value := { 0 } },\n { header_name := Connection,\n header_value := { keep-alive } },\n { header_name := Pragma,\n header_value := { no-cache } },\n { header_name := Cache-Control,\n header_value := { no-cache } },\n { header_name := Authorization,\n header_value := { Basic YWxhZGRpbjpvcGVuc2VzYW1l== } } },\n body := { json_body := { userTrackingSubscription := { clientCorrelator := 0123,\n callbackReference := { notifyURL := http://yanngarcia.ddns.net/location/v2/notif/1,\n callbackData := omit,\n notificationFormat := omit },\n address_ := 4005C0A640001,\n userEventCriteria := { Entering (0) },\n resourceURL := omit } } } } \ No newline at end of file diff --git a/plantuml/msgs/14_11_47_607302.txt b/plantuml/msgs/14_11_47_607302.txt new file mode 100644 index 0000000..e527d03 --- /dev/null +++ b/plantuml/msgs/14_11_47_607302.txt @@ -0,0 +1 @@ +response := { version_major := 1,\n version_minor := 1,\n statuscode := 401,\n statustext := Unauthorized,\n header := { { header_name := Date,\n header_value := { Wed,\n 05 Oct 2022 12:11:47 GMT } },\n { header_name := Content-Type,\n header_value := { text/html } },\n { header_name := Content-Length,\n header_value := { 172 } },\n { header_name := Connection,\n header_value := { keep-alive } },\n { header_name := Strict-Transport-Security,\n header_value := { max-age=15724800; includeSubDomains } } },\n body := { html_body := \r\n401 Authorization Required\r\n\r\n

401 Authorization Required

\r\n
nginx
\r\n\r\n\r\n },\n tls := omit,\n mutual_tls := omit } \ No newline at end of file diff --git a/plantuml/plantuml.jar b/plantuml/plantuml.jar new file mode 100644 index 0000000000000000000000000000000000000000..506b8c4b818bcb6f8ac254e898da44470cbad888 GIT binary patch literal 8383820 zcmbq*c|6o>`@enP_uZHY*(3WtjHR+ywnSr$W$bGRk)6TJNTLNpCCO5j7UjgGiLw-$ zD9a#{Vo)jMH_q}s%sJ20^ZdN}qu0xIz3=P3?rXpA4~Ika3~V$sEHpIp&~HvOJAPQn z|F^X`0#-R-XQ}2uCKI5cV_~6rPbM2^h##?}rJ>nNM?)j9lgt)ucfiu(@DWv8%jo>( z<*9uG19k{a&uY7VD4&+ zB`SljMeaTVgk^RaRMWeUtT&`LN_79Q_}+E6CAsT2(_Ymo<+SDDcwz9Vt028QOX8Xj z1DXO|-}jI#t|y+l%RNlfqE9Eu$8jg~_9n>|LDv#^6Zj^F>39Nc-@v2gpoWov+;=aG z<{_UNi}aa-k@rE3cu*df)U12D8>{?~ep~N<9M2%d@i36}4v&rc{bc@~g7Z&`upnqiRCI9A4$@Z? zV7!#1u+ZQg z;a4ESf};HbLL#ZasQ))G!O)06cmy>#XWnhSlsnk-bAZUuh@G0GL=gEm1i#QwzaaPy!6~_S@DOT3|Ep2|8w5fllG-+YL6p$o;9dSjsfmAe{N1Ab0TBU*`$UEYg;Iz6S2x=Q z=L3y`21BDF0%ED?_~%mXfboIDLa95-&-D}@v5m1qA_7JHQ2D9F{0Z?-Y5r#@cnIaj zMku7(PMLo2o$>QE1qJt?6wr{6&?qQHu%(0}*G#{|?e=;~DvljgFrS@vPD%OK;@fyI zzX)j9&SXfHn9^*i5tBphZXHk(?-bZC2DamrDJi*jY%K`t4c{3#DQUNhk?nQ2Hx~wl z1yX_CE=K+)jq=~FU#O6?|4IHw+NMG%w40Eu2(KV$Txc}4Ga(naG&_%Bl)_+`$-hUy zV1c{RASKbZM*k$*cElYbQc`Z4z@L=A8$iHL^-~h>fDH@Ul|U&edH#m|m*h`Ly{)G| zg@}rPhD7>?Mvz0$?!tqTXNN2lDU_0O+X+M9J9SP;u`TU3MPz7n1Po4I-EU{8nW8v> z?OK$Q`d=#Ew-jvKwdj9j`)4gm$-W)Asjx={!~{ge`2;}8r?|6_ri9r}ZNCb$e}~;r z;%NL=IOO6!7#iY31#jPfh388ynsy!$rF44#16mAONOGLmX(yDh#{WOCuu!TB_@6|E zM??j{pgW@=rO4Zv`d80e?dQj|U6}o6xR3y9rYA|Amzv_Kvxe<#z$g_!-R;P%!9F|V zBPBa^xBHVlG;BLqX;3lm{{n`Z*8!-iFv5?z5Y&DD4{m6XUuZ-?ls~nDl>Y@Oyn~>D zaB3R)6=C49F!=APrJ~vGChI?2HeN&QdWFFF_s8w zilOQ@un2hQE~lf^$ab&$A7jOz+|a09!%#|y?djCdApWTWN)+nn`^Pqd;C@h8+>Xdc z2||50(J<)GkCtj`gzbRXJ+h;eM475mcEFHFKjcbz$DX$D7s$;2_p?3p`j6`MAsZ`< zvNxfW-I#1$~OLn__?WU&k_GKR6qoIN=*H5s3u6C zfGFtB5{yz80II8phJ@}KbyIRv^>nzO-_9{PB`?*~3=i5lQlMm|s{Lf)VSlji9RE@B|77{!U!G9WI#sJ7i@xm&|1!>|l!EHeB{n4n zRj1sEv2(CX3Gz#V_(VWYQqjpTVUTY&sfAjqUB_RWAwM&S+4b<{f7(q{K=95f3nhjU z4V9krFG;pB$d7_{4O}RJs3yz^_^#WN|B5#f8nkmLOvy|2IDY4alWW7>4^jSm3}5n% zRcOS{Mv_QTVp83I**6E z0M+Ca8Ai67oz73mP2G3M?_~aEWK4-c{aAKl{M=%wmamayteqV_r6AOG`8zXo*A*ru zz)x0>+ZFyOnW-N{v`=VY^#5!_G4P!uFv^vw=90*5UUIb?0S~4gLa0`lzoP^MLwCK` zpp=7Zi4_^MGaXX0QrG;+-478dnW<|&E+h)N^XBBg;*Np`ZO>!>b4;S@`%$~Q49bWqgqo$|D2!d zA^jgeG-7A>LMa1PbNN3E%E1{W3e|(!ffBrPGC~RRYohqTy`y&qDoT`JQwn_7A4#;+S*hz!%1&y ztW+~0c{a1tH!1Z+HI|dJzfb5%iUx{u*VI=h-<<9^ElOUhn~n|M`8J1=m8!C1gM%We z1xKnf$3b_^^eGpnTJyw*hWYM#QbftkKtn@Aetb(sC;Wd>Y}efW0pxs6{;(i`+VO8| zVjGfz0lNLDOM|jApDu}sBPjGb}6QYJCVQSk2){N5VwR0gF}@@>QZ zNkz``{^Ud4)k{)toq3y{vgV>B+P1viseqDV8|L@o_Yc|r_%wCQ}Y}UOf^F0TofLF8b zuW|@K%@GhbN2qg4hHtR0C>{FJMymEKG`( zAsm~6^d1ob%!*8R1@<8t4)IoI+&K&Az+6!+bFe%su2@}^p@?X%$goA+t)Ale9K{)x z7iFvJMgE;Z>44d*gH56%C9f+)5F)-Jbs~?N(5fFrW?q~b$X6FRgq(6I(6Mo_(X`R9 zi4o0H$hodMrMIHVWaIKa;#-DjMoEsF>Py`pe$RZ%^r9j;SE^Sy*{j((bE|W+Wpl2m z<~GcCpB%57 zOq<$cCu(=QLo}pJ>mqxGu_BM>qy9tY=H`=Ebfr0L6*u%EecYJXJ@$EUWE^k5t%dC7 zuoozfjV&3f?>`QI9~kv2wIb9mQ_JAi{CHBgsH0Gn#NvY3${yKAE2nE+XJBu-dCORz zX6rorHW*qY{WRwMBjGzDA0kCx-D_@ByA@?WA^de~?@O4k@8129UL_@>e$LD9$7V*} z9RCh(*w=okL~aIE{GlfFaHykI#%yqslW)R$!wao# zZ{X2&7)Ol{OOTIO&^A#b64Dx%($su2UhH)OYh0NXpt~%a@0;PXPYsrKTsZTy(?_3| z?9VQjxcEnZgjlnr3R_w8f8;+2Ju;MHBhV8xC*O%%%1M^(y0~=Mo;mGq@0>!V_&~Us zfD+exQ+X>M?UCoHiS?$g+5*mk9V5Jw)s0d4&SjXF550>r>sGyFK+iw6MY?I+2q@`M z?TweYr6pe(sR+EKqL$%Nt`TXkyuX`BW;#5_gCU9DPeT(J! zclYbPuR8XYuo$L&)VsrViKKb`%7Jv$^u?0aJw7SN3P82`abrid#ySWcCtt{2X;uv0 z*Wq*_+vVG}qvd$1PL|1u$9nn4MUQmiuJ^YJ$VGb(KP(ev?l4`)`0atb{a_E79O{0K z4E7Rd`TX7v96+dk)?Jgs^L>=(iA}TyTZ~v4Bm4R9rl-2k4`)Z33Fn9uX=!tqxHupi z-qiPN13gIXG>JwZahlIXONp-;8n1GN8|F;Yb@aZ9X*0?wJRpb)Q$#3XAm4oa&^Z9@ z?}d}ixxtolalCd>G?uFiskS0F%MVRnG50&8_PK|l`T8S;o&#^4U0nFyU#@(h0e#eQ z(rqn-eH=D<@xbp2yj884B#(& zMzR2(&-UBfFR$x(P6b{xwQODtr0ZH)RqkK$jo)LWYBbosM|9#9pd;Qr9;4!0=PIsc z1b^YBGJUsRWnl5*Dn5To2Q#r6y`t9KnLN7D9430kBGygyP3YI?OPnr8J2WGP6rR%_ zo8ELG8MDO-8QaglXLI{4b&03M1Ip9YsC$GxmTZ^0FT#K8?Re!s?EUF7f2`41@;*Xb zuiPUo1@{L|F4=BvyrEc5EhE3PUwrw`Jh{MV$X39*CXwJdp|W%Ut3U+UO1m#bJLEMf zC8o3zgPVBYGCI+j>5c?5C|?&X`JOQ~8gO5qy;D!!tgkxfjq-lUIXgBcQ=TbJnN^_M zg`q)1g5)_`um7+RFz#WtTo-KO<7Uh6QdK z76n(nU|&VXH~>R5bS35QpoSKIRQUe)TH|K7GNydL|F8|3lYt|Q5< z=53@~#^R!;3Ht_1(vgWLOH;LxV_|&34g1;kW)5|HV;ECiDqK31Qr3}aT~*^zJy)a8 z8$J!FfTfgmG4r&@DVDyZRjRCl>2UB#R_VL(tcgmEi7ajScK2as0O=CMn=5o@q7R&X zqT1}vv&OiA{Y`DMm@$d5J^p%@<+@jAJ^KdJL%`C7Am8zhQ1%V3B$tV=OY1ClnMZ4X zlb+ya{K0Y>*$|PjaJ~CAp`(mtL*WPVJ5f`FbM~kqbh3}}2i*^d@o!`I&L@;uX^;-v zC@vK*oninpJ}Gka3};!B{HmfebSBwEeeFaNUS zu-||=VQQUuwMRkEzZ(#~ifQQD4+zN{PIlbDJk&S?Yd!6&R{V`;M7$?XOYq#?VX$jQ z^M^ynl3U-+mcRYzhA#G$EY$p5lPiJOmbf|j3A^e&e)PcOJ#RC%Twa<4R0>>8Xzh2G zkxjGJ+!B0#prlx_gg@38(Mxy#V{cCqliP*VhS`?DRF7*q1R}uN4b4sEc!jkP7MRDhzwvNt3TsM5- z;VLq>dE6^Rv$06>!>R0>*ycx{0>fo2^P}E;&HZp8;X{H+tLeLquvcF$=oJ*DePc|q z6>IOea9>5=^Pc)~%-v}^WI$xV+1JYJmZSC-vCQ`Vpa%l5Q2y!qa5|I9!Bm)GYY9Ts zOIj@RQ&abO4Eoyn74KsjqpzR)zKID_`6L@ZWqH;pMi}ty8Iwlx)e-v1thbw=E#ZZLJ9vY`KdY@S*Jt3x{E>}+``*6pdTd9LSSV!|(w=90G%!V+Aat)}^77bNK7| zl9I(q^~i~v&WeT+Cw`=^zgo!ONHi!bm6+Vi19+yM54uRhVW+q`2>%|yu}-v{GE-K` z%?fmTrl-Px@s-nC;#`jRIPS#K-UhCEGoCyF88kyzKhQ8eR&Z5eP7Q~=_}GR=q|^oC zr2dpC)t**LiavrwduU0cDC*qdY{BWmHQ-V@iz;CZZzKN5Rit6A@`ZC10q{x2VW+(4L2n~o zZ4XO@zKW`W+_tnOjR}ib#zwUQ3AVAD3WZ0`4b z%+(^M{1*;NyjD+N9(-5{Q4w>~Y$=ixvJHOy3>&w4>x>GvSTIO5?`1c(xjS%5Dw(eS z%M)d`kgI-YTFkdjDQVs@yLshNQ8#8n(csfOuug$ELgz*B8&F+nwpjPpuijr}ZZKbC z%O52+&+{pv!d>`5=kYBU-!maOt|w=fC#Bqh+~yXSJj1JoxZv!)KwqF&YX8Z3E16=vpMo^51i{l4X&yoK>hXQD(|Z-j87-0y|1$A z6oys?bbxHsSTa&`W|3k2p3l6m(h1$}0O!7D?)JK?8;!9%bz(o$v87vrCZl*?gQEoS z@fbchckt^Q*e?UAn;a9CT@n0;@0P^9>Cg!A6FgasG$@);m6{0Y4dX5dQ|k+puHV~} zDKWv$wQQ96tps*9+ykR0b5u{^qps{FJr(-BX9rw0%7AWm9>WgG26}2b%jFUiGJ3tB zhpYGU`?bN9ofE#Gt7#i_>+*}`iLr-8>u`H&x$Gu*10RK4P?L^x{?R!k= za*tnYs`S1yE0qLv#ywLJ$~&7BeozF$wZy29V6Hm;GP%tEQD4*4$?r?dpl^lm&o*Q^ zX*+Z!b>Fp`sAiePO&lPtkQ25XZIaWiBbXt3wgP$uyV18RtLZI!W_>f1GHZ@-G}}FD zSj1km#i}tep{AA>(X+`ng+`a{JU4m|cG6?aO(U)YDtaE)N4$a4RW0++@^Gxj^cd0G z?>)shQP>m`pzam_toGs2udw^`R@w$v;kN@vYJPi`JrszGou+93E?3Hkyf23(OEmjoI4+!uF3H+UC)+jUOEs=_W~8q zC!-kGgi5GG?=`C8O{`Miydn#$5-hx;b-RkQXHS=$!igJA@M|7DDlhWyUom37LhpA4 zRA4PHRorW+ay-tXzKA1%xR7kw?kyvdfD66&B(>n{x8pL>v}2Rp={ED>`6hw~f!(49 z1=wDksXVKAwp;6sMTyz_?=v2C4suV=oH~J$VPK)VzcKs#Q^0XUm!qG@%|BWX>7Mk9 zEEsvRe)Wp|yo-rb^Y!nSwCj4}3ncb#RVRJVYb|a+YI1=&^l^L%+FG>n1@zH6oc)MwETTfHPCj;X#7nE$^_7P7b zn&rYY=@NAqzV|3xm6InJswKm>0HokQ>L(e~2nQjgW z^3rpE#7CfugNeLq6MngCx&`~vhKa8@r4JpkdAoF7QKwwo*yUzfmG}=v2VO6Qq{A2^ z*{lulCB9ol_#+1$oZd7BApyyK#?!@I#nQATrvkc3cQ2@6*hDa2ejgM5J%@SLs&(MHKf} zdMo8Pxh)4OE#-^ex7Uz6*|w?m{a|Ngy;f=s;h;Fr<&{%h9+%eF$HzBlPB1Jg5YhrQ z>XcX}-5JEgE17h{bEQLi?o^s)D8lT(4B?`zj9UFZ&y=cDRbgPT0F#dUw9v_Kfragd zmW9um86LAd*tO+TB^Wi~uBEZDa0HfJRxH>Av*@ZpZtcgf6d#E^(6bL>uUykJ{~HE& zo?d=vP%5M5K?YoRU9_sV?hwZ$D8_6mCgaK__k+Cw@7d=s9B1yGxt+R75x6@Us~ALl-X}8zlBhN!>lGum7}v4S)jM%`Avm zN@w))JoUHB?`r5&^IhcUbv%0T>?N?w*Upw;M9t&=`Ki-+7j6emo1L>#c``m<-JoB} z?)SnIE3_tV$JTj(sf6QN?G>NL)w%P8wF#KhAUh-BQ|kP((tWJ(mAAy%$NPuhA`?0D zBi<+6`k{T+507WCLu&@I#w|w~H+3cr0@!8y%6$SEUf$&8GBVWgdYA=xH*#`fGESml zw*BJu7o~Mqq!s*%(S5IjdqL9+z^pr99#P-a+lq}&kc^_DaC>(WAk23L?^|jN{>xvwj$JXTLZ&sg+()7jca8* zPyZyXWozs5+&myr;ksMzAj0DiNn5=st{6Wl+i9~j^fqeXUf^q`;VxaRn9522r+Eel z64w~~L{xYIb6Zhs#py(GVe{0J<@*MUg03fk+_BdT45Tj_8NbAb5)R&bx1=sUXjpku z%lKQySe(j9{Za$l7um>7ztfS|76HZj_v^B!9K$cJGG_(UU3DrgIx)xIbl?srC>!yl z*Qi4-sOogG49-N0Chx>XAj1&DZ%NiCXvFR4EimGcI5p281P07_vQ&Af+p4H z`Mxx$a1yNybbRlGSEXWF8Q`n0%SGRqL59G8j$ zf$#Ktk?iTL3(D6V%-Nbf(`B4QxXK$2?Oo`)+;%3d!KI>Ze{Otzhlm1_*@2)W@CADM zt^{^4lc~N#)rlZ!I+^UCn`K_tAz;>F;{4*hvUk}uV@=wMF>UB`(b-9L;odM2t8N*P zn`Y7kSgI!ZBJPNukFAic=kyWAX-(g5nGd)8e-Kg)-D&l5D^-`DxxYn_GU7DCuH{eO zIW#`YB=P>!Q*4pq{Kx*+SW{4({~qZ%R?KIsr=Ek4*{TogK44Ouw>W+?S>HT-y%Nz@ zeL>J+HY|zr$R*(`&ZYxj7O|gXlt(n(-wd`CK4?GD)9T;;T}9tN%Vc;hR>*#}|MXO0 z6rOl}J@)$(&pJicAxkWc*t~jy<(x>D_W+;BbE|#xmJaqK#W>f89OYsQ_8dL_^qqp} zr$eV{x9o(Tk* zJ%0ZHIhMH&?Ua1i30;c^PGU&>KR)p#uBInz+NsRk;j}&1ddFf#`Yq7iVpRI}@hI0@ z?*)!ykF92T4#+3vCaD9MIL*BY%d7<=>PUTbjwQ{-jjfCsahUg;Y|S>`AL8C-HaQBN zO|to->Pqi$ZO}*I$4xdF8~t51V#n`#8Xn>^o)o5)U$lBh`c{u+;Eh^7PxblDSHV?{CX;i^_TP@@mHL7vpDkkUpUa7A?3vk=lnom#bs+zhY zk{Q~N@GPOYWwykjBwyfI^p`x~jL+RAgMyMtzc+P-V%>3%-+sn8znE>%U&s7Nu$X_f zCvkuG!)U_CW#Wr<@uJUt-Ja2nE$@Z`xgrfSi;M>qZ+X17RfVbJ!_v6KjfC z+mHNp@`e?wVqSTtkJO+J+!NO`3O^4pKPsJ7J=u`{L2%tPP~lGeZQ;Zh^LrEmW-dfX zj(F!@=;ix*Q+v9N!3qdiX+9L!o#P;)tfktjO9*LD`f!!CMTTQ8`3u0&C_N?Tt5PAfj$Usv&u>yYDy2wZE*l+0Gh@L8JsYu{bflDuuCrMU z^G0r#Qsc!@dlfu>gC=b~&C>o%Pch9jo^ zQdV~*)a*Z(oe5cUmA55zywp_BXMcZL^=ze$)W?g~s_|8R;zQNtc2UdSrTKYk=aT)G z*9@(d4JVo3!0!k3L0`V=qF24Gh_qiP-dZGlC0IxnzVBbMV^1*5k(N5-kV2bQ+LL6; z9i(i5?n&}7(F@YOD=U&K*(Wa3SWlnwZW=k|=rN<%?;2QL6ObD!IdLM_MyxJCIrpt{ zwS|?0_a=S669>^kjluSpL+OOQ0vj@6r=R|yGhCE4&6>)f(H9T3AiN7M~$6l0}AyE znvQ+v7_ju=_E$3*I>qh6p~q!sCY1_uEI4zen&nZWZ})GL4Y{T|$~;Rk=jrw}=RsJv z?9wDx^>q)KBoNZaKTasGf2vvO|Jv^fG5%Uk^KkY%9NClPces=H`c6 zTZD10V{@Tnx)3Rb3m$Zv+3B61?2q2+bO?PBZC|dNh3sgb`?ybS@#VU5*iDxz=M&Am zVAaLV$Ov?zPmPCa;Xcjg(IKNgP|Dnh!Pi;l;_!8KT~@R4X*y0jbev(gne;{eQXJ9= z=`3?9<6(@}MIV*;Owb9R1+U*fb^gbhXHvcoo;{8nb0w@WKAwmP zRXfz%R18;B@^pSsYw^i!{#2&S*RPF}HtW`E;$sze`wW^q8#e_ny$pc41Qf*A*Qivd zzpg)Ta!Flv@BZmr73HsS!*^;HnojrLx%#H5{l=ZTwpsD|7ha8V_fEWVg6f+O+__1N z%D@a9VQYKGacaFO=uQ2tYs{WkoD5e5GwofFR!3MH&;;?Yq1Yos=PS}-GFH!H&6Q*?ulIU7gxJsbRPR~ zlzUO6zIwmdn3m^JojXIfD{T5=Z68<%rgX<1FLix}BxU%@P1KUE`pOF%__bZRJ21b} zHCkE_9b;b1-eusAnD@Xdc{Si#c#x;DzGnrUM2aHOw-V%MTB~lpTGKhOKt% zeV^w0J|o67qn$BrY&p$pIm6gB9o#jOC^vKH>a^9>p(4il9s zKw+h*Ge!5(hVG%Y^gG>+y7i5E;vb+m<7F?b`f7i88#G`=sOf94^@87j*u%An6y3}} z&c(G5vvh*{C7^Tb;(p~5G86Ar4TJcU!|_>g%n4B?PZzWf(R zn9sfex#(7j{h`NHhOAW83rCR&GukCS_lIWX?XCF@2*~y}mDkTi81cn?PwftI9&rix zDK28s$naO$;9bxGT$L`&$qW#AX_^b60YB=+U(E4!fU-wY`o zV3fFZ%kf=PUgtTnU}ttcZvmJmOcx;#==)aJSC+_gV}_w)k3-&VUIt_9zVnxgzxD@S zt4v(Hve>fa{JA~u%YM$-AB9`vZoGC8^W*ovhe1*RH=fvS{x~Jla1Y6p_hTFwJ4GYW zbqT}}aW(+3)~7!^PjiBYiEi(uD`OTPLZ*n*AGlskrx(andp$=umfTdTY`HuFou|1j zj%_jf$P(Q+IF#|4CAwfR)sfv^Mg4QyAipDf#ksWa?(=?~8)@+t^B=d2nEo!Cw*S^D zN}x3^^$jgeQ!c}=UH#ia!yx3p$M;9G$?=$8L}Xeld0^&b&*#(KA)-Ak$5+k;Zd>;6 z|2)55X7-yL%09f`2al3nS+!9()_wZ0B1)mNS>bfoSuMdmg59fI?1ed~983;6r|=-^ zAm$+YU|~0^8`F*ME>uJ*VieJeg*B)eObxoG5P?Eq5NJf5$9zYB zFJwY7VVKZNg&C*}Oa?lm&=O^du|!)IcA>g3UFfbtIg}hm4lP%B6?GMJ6@9hP7v+ob zMf(=ML%qYiL%%B&LJ47n&_adhQ0Fk`(B}%BQO+1=v~%GwY8W$&9xl{IX=Aj}+J!Bs z7EBAer7#8+gNZ@M6n;T{!F)k~Dda+NVYtv-h54v_Og=il&<~mN=0(hB$#ZjyQ=px;Vb4NW*l)Ji}DOT*FMmg0|$g zthTf^qz~8=>}la??rAkv@CVdEjT%cWe48nHMYpNKJ4l@Hy(8HG7rp3$}o~Ch!RGBkGGaa~0?X>w9Dr z_#W^r>XS8hmHZ3#_j#+}@4!ve4?K+zK!ZgT$pOv)cA_TnEIxZQ*hKS?;4a`4iiBtI z0cx<8AZ@@`fiF?-@f<#K8tf%`&%p11E2wXHIv<%^EN)0;@Ht=)Y6j2dBYTU@Ew2_l z4E%uljA!xz-C})>3<9?RM^PW~Tt4!**k9)@fWH9OQJZ+$X+Q*v9#R6F4}5}}!n02A ziD1*qy9n+D&Z1WEjMKmf*1Jd#a2;@~LbN}yKXBkf|Aztbe(`||4*f`fxmDj)p;hNq z?bVo7u2s8L)zuKqiZhCc>dKU{)Un*L%&`LFWaBL3G-IUk8RHz|4C8#`6yt1P%QCYv z%QA48MVWb-m6xd(#LLXf@^*QBc|EqiqP{Y;JQN#R5n8!ezKC6{Sge#Tm&Qt0NLQAX zmto5)$|}9ey|7*tUX|nJBmMi6P16~8; z{o?~B{U!tL{p|y%`%e!f_$M{dxbvu_30dZrTMT&nhc_{}^Qoktv+OB{4@CIKHPN~A z-b{10yitC10O23q#N^I@Gkw_dLwWQ-ynkX7?FdhBnzrSIa@zr4|HvlB5x(H`7R%A{ z;DH$bQ%&?EydTqIEbo^e9|-Y3*~C1;|1tfG<$8JIK$8FIC>nhp$uus@%yRPq=v-J7 zgFc^RdcNh8a@aulTx=AbKJTS8JIib3hX(@YqN14e`7fpSTF#b74#dqRMA6>kIi99! zSzLZ-06rHH#dweJczT`XtMb5s=(+eP`g^=@(?Tp;%a08N&&5PB-{XIq{>k!d`Kf`# zxujK^cpjrPDa(R#s{zVbxA#vdMwo`_2lwzmvI^}d#F9E??j(>AG8mqc0$ct4XOrnYjA0BX?)f2s!^vw zr?Iu6wee)b$;Ph@UmLj_xEl)^3L5Pj>>K+U`Wn?5)Ees>>Kj8FLK_zw78|7-q#Mf` z${M{IYF)LJ4bIW`WY2U&z~UO(2=#wffHVH?oI15U}Wmd#*;c#=|s$ zSy~-pFx!T!uKR2ChUo&cn>*ZL!3{002DL`Rv>&pfJM>}48|qwjY7K_zKV*OIh=(OM zJajdwHPNOK&*JQ0f|)l|5cUP>YSW2l=XF@ZU=57~-5^74+6!5>9dfY44c7^pLHgSC z7qXvs_`)I^?h*`xj9X}qWvO%s!45TCA!r2Ywa^{QzS-dn3v6g6=m#0K(2iyWcWA?o zHQXd<2N|@`k7j@Dh=HAIct9`?GKrxv$dc^ff>||G64V!TW9SUBFLl_#{2Fc(^cD5|--zE}+OXV^lQ0BbW^EU3XKWX2=WLg3r*G$PXKxp` zzcY~|{wa3i>%>>$*U7I_+!NeH?n&;cf{6lR!DPXd{e(TSgmi7`8p&_Tk2Je9OA=lZ zCKWFgla$w#)^4l?u68!P`om~66#=TasX1~_ArWWgLD1KS8FJ%@NIeC|480)#=vZ1qaa)W!renV{| zbVGW>%TW5Vv|6$-j(swn1dMfT6Y-Q#ODV>YAM=njV%^##Jf-TBU2sa1MI^=8qitfI zlJzOCaDkJ}B>mXqZBm}np~*Tp@yR@rT;-OPv(+j*PIeWA4+(o)Z<(x zZ;-Us+!G`pN{uIn;&di2kW|*36T}}%j;Ac*PEOt@8LfFHNI#S|NtVWOPiB%pYmOTt zNfIV0WjOoEYoz^aZW|IwQtioJIP&8WlG57I4HF=JIA^#@xMa9dIDI%MoSznr#zWrN zyfJ%o@QvjgyEouB2i{n`vE5_FB8v#7H7L@eomo7)TT+9wQnMPZ61kRz!KCA5j>ngwDg;k&_VL-K;kdDWDoj zi6l-kATg8VNx~!@5;sW=U4XY20I>0;XLUe$v3nhnd+p8w4)R^edI1r|Dm&)ywLbz- zvq- zfqZ}aD1biSrL10vFji?GZ_aKN5YP7@YYZZdRU0Unv*!RX@ug-x!tr?TRY!{0Apw?r zm01Hg5pQMnd=YyafE-_8)>E8-x1xI9dAnx-U%uN}uW=IIs_F&j?UeySe7RYVaeUqi zjYwC!T7Wa(jjSP@n72w}zN>u@K%4JE)^nVYw^Cys!EON%!*@UHEl$c?t+9Y$F9G1< z%gpM;@e=ojBX#XA0_^y%Wxd3S5|zXAb?rR>s(i&+Jvc$4BFW^;1T75@9a}kJrub%k z(1)NuE8Oim7u~vrV!$89zr^py-^NGcSMcmC_+0!Ud=Fj;e*+(g|9}_AU%(&3kKzsR z_wlFj>v(2-W)>hvglG+rmXQXP0m^`7GG!nyfEUn9#tSqK7zd8ajDt)7CO{Jz6Hq(g zuPTZa4YBs#!-^3&kg>nN0T|I{*3c>zCjo^F0jq-mS+tXNKoy6RkV58JD@A}H`k*zuip@#zdd3ke z1V9VzZXI031!Oi^=>sIucGiAX z>@Ni0XGB@W1B}p~)}dA0FNEJ`u39kx=+R*O2_F^>0nrQ&D@yQ!Y08(fKhJvyUcr9r-|(j;`y7i3QV5)jecVs0kC|Yy!Ho z-b6ZsZ(xV|=lwaGXK#`nVGGV{0gqxo z_J8qbZUT+4eniHA?_=NgfAZ&Uk{@CJnD+&|j@|74F-JpoZWc)-7dR8!**`hQ617L4 zO)@VZ`~*AIPnu(h0_w9~LfV0^VPE#YpW}#<(`Ubw*9)G-uJnJKql=Qc$8sF03NFU> z^v}$(MakY{JDyhueue$e|9Orn3UrV4Eiwe$iXH9$IL8$we~?b9D|3viz4|xXsfoFXnTZ9P$(vc5X`9H+ zGn+Y^8Jqc=DY7^|Xm;ZsS0`oBa}tMAuHc-Y*Bdom-IXQJN%bVdaT?H)MrBuLW$|;8 zJt;G|22uOb$$~gGXnG^i)v;E@SwbnL2zL;ArBTDxtyaQW>PGTWoFcTS zQPK5it(ddqjg%oA0@~cD?|Qse%2_%vSqmoy&1;l%JzOg~ED@N}jB|(HY}9r=Rx3Fy z^&vSLrw_f}hJ9{Qls*ww36dRSUKnG?qZO>LARI0T7kONgiB;Vhw* zjp_u~APH@$3(2-PIcQ;{0^vxIn6~7Fl;=2K=w^5eh6eQXr zaV+H~&KY{6QH$UnB-tW0njDPNhF)k?Avgz#w@8kre8j~-?>8C|JcFcLqz#fKaa_>M zMi9YqK_o`PAmtLy4tlL|Kf!H5B1Yn)KqBl4~rKh3#Sy8&c-SlYF%cs&%M_9a!Paw87pVF|1x7= zj$h~PDZQnOv8skTmzn!=XFFG>7?;k(%CznCWKhcy?#!K%UBbjFv}t-WspS@T_Dl&b z<;2RiX?QZ$=eTs5MTi=6>y5pQ2w%Spy{OGiH#^;qJ_w z0xhA}_9kc=GfC$bbUvBlU&>zFlb~VDSe9eod2MR{QpuWfg0?YpS#DqF>=gS_`Wi4n z{UL)_j#_8&l+sesnqq?1Lng1>`p#EV;!AmJatZq%GLGkjcD7C#EL~btP0)GBJf6GQ zNq!)_l)5Ifu`h|iBuBclU`l?ea7|%DGl|J0x2&^oN_Z)EO?E?r{75&4{6Kd~XX(P4 z%7%6lb9?T1=i(IiQsx?HL;VNC7XKFemiQL)mhe`AwW*Cii zNSjTYS=+%j%Qm|)+;^VD>?Fu(ZyI%!2!ul}gU37@ ziVO2*P{)W^AmzGvVA9HUzKXyNs9jk;D#~NUnvGQ19tPYkNtA>@vnt0OyMb&xKS=2?; z8Po;TIn*W4XGBs&vPIHG@LB0TAps$QC z=pEo4@SV&%kPtu!C?q2UItMrhJSTGwnqP9$k;R?YmJ4ZPUOd3 z%j)AP13ffN$X;V3X%WS7tyzmaouorF)}SrP zvdOe5c$WMu>si_}Btr>fiC_t5iDU_V34aNDiFgTfiEs&biL@Jy8;=`{n}{2On}8dK zn}i#k8=nG-?>b5>044MuB_)dDbz^fAb7OK7a^rH7DoLwNuFa}Vt3}qHsm-a)sLiiU zsm-oUug$AXt<9~?tStyi4$2Bj3ql5+3Can|2+9vi3Ca#i56TNl4ayD53@TViUdUQV zTR<+HS;$$)Sjb;US;$^UU&vcXUC3R?Tqux8wz1@baG7yga)G%lxXih%t^%w8RzNEm zE6@|b6W|k>C!oVsB8o)Mppx4=Kf z%i^!#;rJQ6AifBH6hDO5!Z+ii@t^UW_&mJrKj+AJBm4t=B7PH3k59#$<2&&nd?g-+ zpThIw3wJj=|I+I)qqu?6X2!?_hHrb9)u*TM@+f;?nVE530@F9;WxeSYyf8`)=wnwTXaHyFMtEbpJ5 z#jBybfbC{Uc^gdMRF(~FxCPuCZZ%^%1DP?Kv77o z5Z1F0g|n8TXD#&3S}`7h6qyxS7J-W_ip-0wWGfWQ6|ssHij_6xHQ1Vpno2}D0*k0X zRL+;rW9KX8E5*viuwoTrm8IpS*wTv9O80Vitb2ufI z>hNk(^^rk_BVq_3f)AmAU_&S(#1Q%jCWIV92%(MOLZ~975XJ~vgbacgp^jihC?G@; zdI&~@EJ6^Wh2TV}AS4k+2zmqv!H?LFU`Hq+#1RGvW`sOK7@>pUMyMgA5hn9A^MHAt z`F-;&^Lyt-=5^;8=J(7C%xlhb%q!1J%p1(E8<~8Qo<`w6~=Jn^9=H=#T2UDvv z9k?r{z(zUo9G`XPSqBTNuQ}LPUIrWG#&dl(oM#-&tuA&@s|=|Ksr*#_3HzzS6Z{}2 zp7XQ*Jm=tr>Q;x)$}#YR+<5NK#`E-png5TkuL^2|3Dm`*xEFVKEACP(NTH=zaVZpn z{jvMzn8tU_Si1MZE)5zg=L zl?}S)rTq$l@elYnGDn!dlPimKJXTJW9sUAUjWUqGKnUx=KKTu_-;Ss0xkU0|JOT|nVo zz^+@sa9+SaT|lN?D4#E1u${ME*qh&5P={f|;$RxEDHs>58s-Q)f>FV8VaBi(m?W$l z<_CL#VZfqb?_pywHW(OY2iu2{!?Iuoutk_CtR3bByM^Jyl3?1fIT#FyxCJXC_1;Jim$S|90`D=!2i)+Gb-D`nsS5Is|G(Q$UQa=$tTt6N^8b4`CG8yE8 zsKS`Sh{A-zu)?^)sKTVe(8Acl$il?J@WS}Q=)z>P5VIJw2(tvUFta$bD6=H9P_tOG zNV7zISCUH#LV0F+;Jp3?v!DM_Qluo8 z9EAML^uT&O4KsnQ!lYn5Fn`$R`Gyj6rGca%)MvH_-s@GE_xxGOhSEUt3(_;=1M~Gb zOlQ8RL{2F<=>_GP^@00(3Fb1tQ8J(uocx0P%>2N9{R3t`KTr~^^qTa7`po{of4u>F z%tiw+vC*>0u%WUsvyrd~V*tnj1^`ij7XTli4d4R+0dxQ}fGi*gfDBLoFaj(AM1T(f zL4X_J4M06%P%UBjYr>FW!iW!GP#M4pZ~#yOi~te^G+|On-Z7>MiT7ffhh3 zx~Vo)>%u|lSYPZbk$uXUmh1z8AJ%4ry)nLTu7vi<_eJ;d_xbke z_Q_^yvX=xJtk(y7V|{V1ME7ZDda~~X&a7nz17hy6t_1fom4jO!lxqovdy#IElA$vn$!1`tIDfS-cN^D>Df3<*Ut>oE|*_hdg*#z`F z^gOaWygb@G)I5?roIL70%)GaG1bOr(NG60PSSA!EXeOj4xF$3vC?>?*jl?yLRNorO zj~nTz8;MM?O{h#TOvp{}P3ZC>>O$&b>LThA>cZ;c>i#9T>q6^d>mutC>%!~e>!RzD zokN^soFkkQoWq>soTHqRoI{;sog)P9shePQy;)PNPnfPD4*) zPa{tgPs2~+PoqzhX+yNe@FDoa_+$7(_@nqE_~T#;RSQ)sRZCUtaf@-Qam#UQ{U(w| z2WTu*9Xbi+gjPWvpodUOXb#i}x(tyH^b_>Y z|E)nmXQ8~%I;b=B6iN#%fPR7gg~~wtpn=e5C@M4@sstT@GDAzD*3ca&2{aw55B&ud zhPFUGpjS{FXgpLCIt}H9)b z~%8W;{re8za>y_Gt-gVHz3Sp^TjBs`-(a^H%boI&Lp zgRNeNUlRM0H3wO@e{TKU5!w{m7TOZp8MGa;9km^?9p4+=gX|6OjqMHXjqZ)?jgt+M zLCA*5#>j@qM#)CV#xn;qA#d^_ocUvv`J)o~h0>S>K(^T$8E0haHT~w11*PxNEqZlB<&2 zi0g;5#55kQYb`lmVgwnSmrgVIU5W8%Pb50%8K$ zfp39gKms5?kRB)pM}jlJ3E={8EI0?80xk|mgR{U%;UaKcI1ii#E)7S4Gr@`BLU3$2 z7n}+%3CDo5!I9U(JEL6*cIbv=;{0*%#Nlt&(mN|$b#@AeWa9nt@1)`AYw?}mUHNx_ zTfiOoCVU&dWj53o=Z|+M3CCN@>+EoK*;yazi}xqElZB(MMRz8<((lL)1;#z%-bui5 z*1mT(xSH?u4+X|Q;@`=@G1rnii(KV)f`*>s9`Wv^-~?+$odd4HJMjOdFFX;~2wX%0 z0)UwDIX5~tx>!D6zK}SVxad0Xy6`>sy|_QWzd%1nzlc1Kyihq;xfneky=us(jbu_+#sGHnjmReGCAa; zsG^vnh@ym|u%fts=cJ<0qS&IyqQs)`qWGfdqGa>h+I-I$}7tY=hH8Q{rQjWq7k{|VB}Y(7uKig|3kU_eBQ8aJ~EILjQYyq8YxOB z`YIBGP(Vx|VvrCB8^i^o0!e}}Kx`m#kSGWr#0R1S$%2qUj36SAAm|N<6GRD;0HK3e zL1dtJAUqH+h!!LRLIp8{NI=3M91u5%8YBh61hIqOg2X@sAbt=%NX`<8F-IUpAVwft zAVMHRAVDBMMUg^*LY+c|LW@F)LX$$3LPw1iz)(iSM$AUUMgk`M_aGqxlh_g35!(^j zk?a%h6Ymr4laLdV6O$8>lVlNQ5oZx)kr)sf5E~E~kSr1|5-$=hl86$D5{nXvlC%@H z6Sot!lXww&5qlANk=zpA65kTtlHe2K6XO%%lOz!)5hoEPk!TZY6KfM`lgts$5zi6L zk?;}n5%Ur8k<=5`6W0^flK=^U#B>bOYCbXN0$W7Gr4i#;$s~mg(&|2O=OSB_!z~d9 zSU*V27<$!wV$X%P$hSnd@VEH3=(fm)Ya*7g8c5a|dewd6&qcRrhkGLKu+B(i83NQ0 zG3SC?B*PUEKd_2O`WXV$5pn15wy1|YBF?ZjNP-xi)DW@f!dq{L8zMHa21s5Qp41WX z=VDv3f}z=J09Am_jQot+jPeX1B0DlWGdnT6AUixeJ^Np%Iy*Z1dv$p@if>j3CPp2}l>j7jh3l zheSeDAfpggNIAq7vIil9WI{ec{y^SA+93ZyZXkG&M2Hq-7QzdugE&J@A+(SJ$QQ_8 zhzz6;5(s&QphChSN{|r<|E_Ln<}vm0I1RAXQ%Yc z#_Xz3s+0WEd(YaYo|9rACCI2>kRizFa6?S;b6oE)F^P}}os^H7m14apr*%|op19v; z%5T0&RMqFJ^p07m!enVTYX$h}@#X9XuEU5v8w*@QPT9GoNse!)cS8vn%;2+HgXE_6(trYuTc^$HI zbER+0zuZ3kz4~XQV47u_q%;*9K0EEZ>b-L^$U}OA-_djy{Dym=tedHunIjf83N1zc zIrw>6E_qcop4_@_p@d6y8fx7-aNqO#-1GW)Z2oe^KIY)xF1Xsw>+)#S@|^H%yB&6V zkd)Oj`<34MDI)3H-NA2Xi51BcMAb6MGDlbnQ{%{Qmapc(LZ9>$>qONK|>9+}T?u*V&f3;8ZXxYZSG{w*6gePe;?L_)6pI ziSt~CjLCn8lLTERk=kB|Tbd<_PFDf#uK~9SqBm3;uL;Ze$5oGdj-TT*=FA)-arCZl|_%(J}xNZPT`*Bh2 zRd({)c)$)cS-Gy|yL$f`(Bvg$>rwOzcrMQylxc1gzxK03R5NEQ;`v?2uKl#*V-Uf* z*Y0OuV7o`_U5nWt?Y9&`=todfaGdQ1{BHpL&)10Edl%6+NCvdud^r<%djdB9JL6lX zJpS<)skUR&%#_I_;RhT+G+cs{9`@**D)cHC)N)<0+X;KS#7`===W$dU#eK4WY_Cf7 zID5Iq{8Plg?FV!WkzjdKv`JgmJB6{-VlpBdtdxNs>9r!}fEFfXuU~mS(I+{{Wvwrk< zaGuAy+f}UeCcrSw;{RS6_4k%j+t+yJRA&Hxr%g?ub1{6NF&V%;(XH8$8iu`dlD1gE zOM8Uzr``Ej93ALh=>exB7$u^SICScaV{W&^L@M@;o)z^}73T&-Ya_@^?x>Kx%9;jiABs(JRq7dqh&e6t^vq z-Y^ZgO87^;!P)9rqYUy2i@IT&}9-*raVvW=7QTjVG{U28N!isl~Jd}t<; z97X)W#jsI%(0eY(ZG}H**tv8*Qd0AV32zXmqVe^N2*KeZ#WMW2+9~-zhWNC^u=b(? zv6Gncm~jpk)IX2q5BxWpDDUDEn?RJl&QrrGYI>ULzgemC(nQ&Q+WBf-kM^uj)hE7< znWOb`lT`cSBKBVXB6ZGnZ6CJFj`NMb>>{9ja<^^C51JWj%Q+CSCXk-T`#z;Ls}S)c zFfnXf?$@%@W}xOz)U(7lAH-_qw^yaA3(zCfK&7C1Q6&{kB&=t8XK7Tn+F_Afx7Y|w z&?(NkJ>xHD@hnq!9IK~^Up1HE=U+_)*Q6%0mspq^lnGrS6Y@kkg2`(t8q~aV%tk5{ z){LmM_S@x?R8^_OEHHmRiosxleKM__ZA|<&(Q`@~T<6#DtYQ`(jIK_%v#jQ?nWBVc3x6$wmd%}{; zy72W%et+$H3kxOGR2ul_%yO8o92rGd@8Z?n5Yu)2;zNPmqz}NjLuC%xp-{4K!jkA9W+mxEy1p%lNb{ zY2MT!6+s}*P)=U?=6Oz;J*#H2F`?!-Ny;q3@hXcl11Bh_Hvev7HBiyULpsNe_Kwl- zM_L)2{rgxu*YaK;$((_{w~#?hh#CFLy)eM!XBScR2bWGu!eQLNq5K9Kde4Bf&hBZB z-g$%ZZA;Ownmz7%hU8QBXF^GsB5QMg(oF^2;B?}t`c-^pED~k!07Cl*{yTAM(ZZNx zrW7bzS7)v9^DP!mX>Z2PjW{XC=>cP3_SqY!?vGAiplyD?CHI%wTN5ZqR@$7Kw)a&7 zc5c)HNkDn4;n6_q*=9WRB0HZ84(uvS<7WKiC`?&`ibwfrLz4h9rzjkwe#<^QQR&fkEgRjajh&?r6y1YS!NubQV(N)vWZZpk-hWksLvlnz?9k z4F^Y)WcZCw^h2vcaS$pQoO!Tt<*NE`l7O<9n4##vq%-A44gR-;EqQiVf+-Q+zs-<(5H#TI$KH3y$Y9ArA!i4)cdRbzi40APZ5> z#1a}pGruS(eXNAybho!|)_#*T<2`16{3V)x0{%VX zny7DL`?qDq%eBfP=huRY>@rOC zy@o9+Dp%Fx_XV*v-NHd+3alY&J7z_<>D+HAgM$8#POZnk9-PJnHE{B{2e;aNlvFKVCw zl3%5rD300497&y1gn#05PG7L7h#)=a_LsdB;*gyCRmfkrJhz=(;}5liYdL;k5k|V) zOS(~6Q#o3+-eTkQB_tqDk>fKf(MOp3kzFX;mQT9P0&zy88!tR_kzO*N9V89X0Vwy|~V^Fqv7qU$HeP4Q5uczc$ z(US+JHgN?0;j5pc7rR6La#cu&jFH?@@B(VE_}`D}@5Mj52uS$k04n44sf4UGZ)*?B z#Ua1WBL+_Y<#;PoeD|a%2L*AA6*900ocP&ABbD)bEL~89Ef>)|3su8*W#|hF?fsrq zz+?e2|8=1G*ejxU2F~3P21kgtWeK00ND%H*hXX;R0fJEpp|#Uo9j96PS@5Zt(GaveNzzx$9s(! z&m1N({^&WqN*?y6>1zVw@ttD+0QDLOFd6rynuXEJNMh;#16@-HlGCP=7Fn! zl+7`Lv7ku)(89<2VlLFJrrRWv1Z?o__kFR1Y(@Ekh87{XWipC;{fs!!?#Y`S$6;w^)MD zms+adBmuZ>!}r09(|DHUQ(vW`PaZgUV_CU&)31i5vd(TPW_WF!#DoGF`(H!ou>Pcm zNjh>_(DF-ceCdF{i6RgV*5@N@B1AwlQUE}Tzspii0QQeHzM`lh{1r^vq~YVigvko_ zDP@depsmo~=xXUrXc}{f8#<=9A>A$^5dz+iBP=rCR*$jrAE+O!`6MgOz!6t!>mi3J zkXZ!WJ*n|uzw4Fom;o(8{k?GEhC1PRQ25gB5i~yF)10O#v%WUM4l+G6a>%COHa#Z z5EOZ<9KJdkKqi3u5Fn)YA2-!n|F88Q#Z>zy^`g52UB;waWmz)U?7p-4UeoQBF>1Rb^|Mg(M_m3Oo^RU-4>`Ov4>pL%O`6Up z_FzE48xy?y&eCvzkJa#KlpH{#-X9qJSS%LkgIE78P3_b#+{{GP-1vLZco5u{vY`I7 zds}7;(-89G{5jy>KfRbEXWHm4;DBa8=64B6A-G_5=)8Pm2<|axb^5vcdu;9M#vI&q zmgDghc0JN$BDyiB{I!)X)DHbl#>g{ru7^B8@W1n%`XT-T}k+K8sz!6YZ>M z-CN)0RoJ5dy;xzr&1h;%IgxE!FY=l6Zh+L|j+^wKUE-~~3RD0SAS6`zU$t;C<}7xh zP+wdUx%`9&&iC!B>?@yZGK#3bcoFhe-WICt(YU=$(mIJ|gMtpc1@V0K#wPHVEK`a@ zGcDgpPQi{@K8Tk?aq598w17>Tu&R?%w>7dBRo%mm7lTU6LxPqNRvppxTDsu?3fXv%FL^H>-{Oh_1MER zNyUsNc}l0$Fk||kdJH++@dv}7d?q_QMmOgcnqm9S@Ox4|P(?mY;$7ihqa=$}!u7@K z3Tc=PU4kQcK26vs8sC~hofB6^g^LfSw$vO`x#rkq$ZRw<6)0jP@8*o0%p)}$F99}* zG|410a#zRyRv9%K7CAmlS;&KPH`={BNDa z_bsE#l!YehRw7U6(m?%tmUy>f(W+AonUoVt2OK5WEyP5x<-UpqeL}{NsAzNTjory9 z3Fq4}g7E38wrTA&VQGAQ<#W9fh}QsjlwkTG-D1L|W)-ibu#>ufG8gPTjMzOko*;%i zB&J6_DCw3x@vh}y(cG#6YcJVG0JKntiM~CqzSrqdo03YOp6bN#uD*nU7}<*0k{R|KlQOoyk(7%u=^z%-+k$) z|6oe*J@tcfc5l$XI3$!x?NG5>J4mMz7Q>}o*mfLid=@n@ImLpLxP>*_J{oLxDW|A- zzT@yi`ef26tD7_tcu?1B^rYPvGti-6cHCUz6T35}?fWjQSjiimmZ-*~6Rk5NRh-p; zn8f*eOu|2N-o&hhfAGwYI)$UzEvZtc7c@vOJ1e@DX#0QZ8(2Rdj~eG|-{E}^#uBnH zzFN{;+F4;^rvdSEgeT13wzBN#>hY6;39-1*lz#RsjHl2ztD=shqA0Te2bH7{z4y3m z{-mKL(ttQp$B)=)H>fHbS(Vk|<#$Of;RfMVdC?rX;jN9iRWT$aH3J)9zdq0%@O>d@ zd!UX^kED{StGC5ouKE?aClG7!RIa?B);=U;kIgM zgvYkgm9|xDqvxqQ1I{wFG&cmE2aJrNx4@gkXh#C z1=-M+D9Iu+&&lS;NuaED-f+*4X(1*xkkkt9v0+1+uE8!}91|`3XIWi5Kc`G|TX6%0 zJf6HIiB;!H^bpVIHPY=JY56;fSh;=2f>Sx!oi%#rL`0=z(UH|Y!I}DrgEXWswc|$E zh7M~AjM9D6t|I#qWuwln|KHxzugixP^W(l`jY<-LFNFii*sX17&5Y+Ct;k~*CoZ%- zVqdnUf&VT`$MPj@-K|TFxzB`n19Sho9ZPcD`1CF4MQ5M=yceSS zR(GQ8k5bts#6~H9gUajP^HVtI+uDud14ovMpY6538;)(JyYELhHRtvC0CWqK^KqKBWfc{xTw*^hO!k2NLTtvpTQDx$qRbXISyD-373 zOpF%hg|i++*@CE5^Cg)DR%}ehRyFm^s)pY{i_dT=i`C30mA(gaNlPhFy3qX; z93r=R1#FcOA|hDW9ESncX?QT(ix8S&p(G{D+%|u@>O4tG{bCfu@05;q@LRDxQPr9E z!T>ei&Bb2>tS7mDb-w6U{FiKf^(lrJ5u#S82-TQp7RlRLO&9z8=U6)+X;7DZ2q`b8 zR~+k?!mZkxwp7EkEc9(avAwNE@=%ghYoOmAbtG?&~r>+YT+KjjM9= zki)Ul)~Uq$^2LQFa#cu2SPHDPLue;7Ta2q2N(G-$P@M2{cm6X>`e>KiX;>Ts z${K1cElAV?Y4kh%498aeN@>BL`*mN;r|iGV^KRScYJp1WSrOx9c*Svys6;E4(EC+R za=X=!*t}m;2q`&{<(Q7oAx-oAK$KXfMF&ia$Lj+PO@Ir3?NP_!b;5!idv6RD z4>LP*E6;ythjQ96O-gAUULrw3T-Iz2}?rrjV4&Hhg2<2h~!Vi zeq~CguTL&8kvdMim1D+RJSkG;9sHx&Dz>3|q`Y~~bE>`zV}m=3Y9igPBBX#xJA(PD@C?P4?>1FLbJW zD49f8w(0~(NgJu_f?l(h+Esn7H}GxRS3e+|uq1-!$S~y78xhq1hR?n+E8P#g6kLqU z$d#-#BtV&vB|fWUrfB~L1i9vTiY9*I@XRG!t>)AR3yVTrKjZ(Y%h#JNxK>w0Yxf1(#c=g~L1HapW|>%$ry}DkdZ;c*_Jg zBJ{UepWrlaKR0F*XD~%8Y{=8^o8|VFNiBC4^Sg*Hq99Uux z4~;bg8Mg__`thYpEL-@>e^%!wXS}Fly=@ZNHMwMl*ZL9u`i&kr5b>b4*6!|MdS)nT2 zp?&2Lj^wRB>2dNuH0_$5V&(TFQ@!yrby))mEBBxx>C|?j4R5GBO}Z|kW;tJZv=&z* zzKm3oIaJ|4lFi69u8C{acva5|j(850nXsbvxRkLL#p-;R9mg@W#IS85WT3}lmol(S zHh99S5pI9)&B*E}UG;FAQ!j0%;!=76yI znCGpylsTa)A-m<9Qiozy3040F97H5*b9ywNhWPg9$Z`rK9tlYgY9RDGoP}9$E=1Ls z`@Pe%vtgE}v~yvNbu;pYarq_Mo`mT4@8!I)@qgE>o3UaAo%l_iyAD3En`gYQ;30UICPZ0N z{+_aA-E3HAz8((M{CJ!yo{c|QG5u?@x~9IEQZ>y|H%bOr??SS;lTxDl8JDKii%92D*%z`{4=F-gIVto|J>$lx}YNOV|w4|wZO>h!4@L&B+NVwYnaimi zls>?jIlywR`1mXv+Z*IQ$2I$->U&qi#Yncc@l6^tsNp;woqoARNBX9xq>?Y$^xFb; z%1F!8FxB68p=6kDh4H$^sw!{;{hJcsVr|xOd3L(jT z{_f=PvD0UBC)R$C-!9k~*;Ny-82^ds>tCjd_{92(Hs^G(*8EquIMa#Rz>|?2%{r;N zPQUi=>sRn;zH3IDC_ng@sfCaGd>sqE0Fc3|^ybgnef&yqq4H+21x4G%=kvsVBtr&v zLJ1eMfLe2tIeu+Llhb9@2J_b6>8CQED7gj0m9)YLc|(B#`i`Wl)_7Zq&guNY*Vi z7WFP`jkiK+>pxGmLgASTA3bnWxOm-4D%kVf=B7rKYPm;m$UZHzapm1FFtttYs-ekK za6I*sNa9f{XD=PT1 zvpHqZO+1*>izVZ&O%$b&!4r8@ibvPV{%7Ecx>3Db&WLvx}(Cbgu2YklbtqHu@9PLw@> z{j6@)O=S1}%|)9u$k31Ar3OoW<4L^8kf9(vMX5Xrzm>Z!$ z2!-4!YHgOW!v)I}4nM?{Y0-Clzj>nqixpCzW)xdGTVNf|$1h{=n;}8gkzdf-!M?*T zeJ7PxDI;JU68z-%wP05sa@y*kicI@8bZ?%R``qPRx#n5AjAHI<0}D7+!zU>k4S9lX z;P|$CC!^PLjBnufY90qnUGCYtuQ1UfGx^?6RBor0%HHR-^vqFixfmyXc?Yl*+PJHVeNkj5?(arQ- zQP44_oOcb&C#HjKZ0(p>OicTy-y8rGC@WMmM|JujT;V;wbf`RU+8 zudd*ysW22W5bBUiF5G&ckhdEF*8cWgMQSgfCaUv0Ijft~VKb^YUA0M-sXdEn^QE;E z>D+jAa;|2?7xgG7n$CfYb~L`QEh|yi+PlhZ3v|Jw`d_W)N$CI+40Y1#)I$vZv_b{u zO0C~Mw_JLqsoXYL74v}1)ALG|bwp@PggyD}i1P*fLdwS-un~1tlM9LM@qFILL zIVAS-zN7H%{jSjX%hCe*Z?v~VfPLH1*ZuM{0x0|(w|lWvIC1a$zW<%cF=Bi2d|0W& z0i)4ftbc$vDp-{dLr%oYaORkzBUIZTn=ebFR-4DaQ?;jzdggzpDPXYZ?HEeCeU^5M5xfNj-{CT-2+v(!T zV{<{lOFLWJFP)%52*<{_D4(CRi&<7+cEM|L#FXR@m_!B9p&4naE*l?8ma&e*d9l{i z86#@3YOV>OqiFr*3;LXfy~y9%OnEnwrA?-vM62@PPRkuUC3=kXfQavu?!f+tY_UVQ z$#YeH*hvy;ftcK(;mZk?J$J#onu$pk(dP*k?+q~0JBy|miy;UtNpY$*GDDsZ#LC-Vb0`%p2sat)A5 zDO_9gd_t`kG}g6~GJcnW2#EVqXBQ$y2F+L~?@>}+BCYUCBdiRpcINI_yadASHx<8Q zJ$W`!T~8{n%lW3}Fl5ulVDqHtIqKnBE}a@;Spxbar>-( zdbG^&QL!yW75}bFmo|uh!(x)$+8tJ>qE1jyMl_K$nc>M8TK#7#j^&h-7v$C_u1 zhAU5MC^Dd3<%Hj(l;#ea_ro5oVy?nBXrttvIVIGtUx4aDlQ*s%?hXhEG=m|cc^+Ei?2%2 zgpD6=UnqwjSV+!Ib4^2#3+L!g{>dLq-6hRYvTJwCsy+*~`u#TkZ*)%^+w2d^0EjDn z_kLV}P;sOs8J_{z>xX3!16jFVRBT5(eQ%UB_s3U8eLdrSCbkHbpD zd!BHbu&BbGZDT0R%#R}7@||d`O@A$Y8F`M+d`-myK}CwA3yk#`M*fkdfasuu#FQv- zD$^xO*rPAX(!!2XHZhFD|BYD*LVG50w{X3)p5xDhAwGTzO z7-=iBMHnkaTqIQ*Z)%}Hp|y>pdtk~BEvK^B?8M9jBU_5R4bO_ho+wGo1~$QrynVvo zv!jkON!R8V0(0q~?Ub=dJ=#PtoRh&d8%nHhtDem17mSsY13cy0Z-p%9kUbQxxom~~ zj4A9YZmpY)H?x&d`e*XPtnfs|WjMBJoxjcZvYoo}skB&p802X`jRE+4Ov`vM4_)}0 zs`}dP@wul$deyy`s_IR`x2dmZ^Cmj74nhzGf_)nk({)OopKpz_x?CDM4v2B*)TUZX zj|$kcm3vDP#o)!{XZg3dQXW<)maK9|M%d18B2fdTj+#kq@`l36kT4A(I1X7NH2I~2 z3#0@v#p&-1_6(Z!??bWt7pro|J$Ws~M622o^)Spbw*4KV7_^HN78NYgzJ)f+kTXWR zF)v8XdGX+MqY(``i%+FpeHL945Z1L!>vFhr!Xmv#=zaYw>wcg&3tGVjy#YcDPQ{2vw9&5m=2;whFb_6;xZF`X4#$usY&JqwW~>e+(t2KY zT9i1)3(ZeJ*IkV%msO@JH#$QcV=(!LQf{kLb$8R3yI~+B`d*Y)^R)r~CZ_q)%3YZuyfRZL9MEH(xeLaibm!Cgu2kVZQ-$a@i(Rw}+iqiZ%JTM%>af%De>0O8IL3lc*viTK zyC88owg`&ly^CZFop-k!)Blc2RLxu5i!AhonW{0pSOmyfudr6$GVyp211gG#E9^+= z7J#4+UAdh5=_ZQyMqD4!w3;lj2p(|IK@s*=L(ESi6CU zz!v9D>a$-1(?84Od=^KJQKuG_2_6@4b(qUG^+ycjMyVY>&wc;XLQUz@&Gup6V}sOM z)?^2XLlf74|!oj`f-Zzv-;{S25P#94nx?et}0CN=7}q`7yog-*3Nhw`V0B;G^=?8 zstuDoOC>ZG2-@JDl(2NU6T6W&ViZdBRbgo4H;6yPgK+Y`9&mZ9!pXJ_b+8u~%=^7m zMZ!|Qd%V|dl^n?emuiK-(zuiZE#us>`pTW>?usd&z@W&=>2T1iy&QWl6?siuT`tkjg5#2f+e5=zdlRY>h$nu{KS_YA`uTfENV(x?PU`Q;K%NYUc8+`|Ra$Zf%5Bz_11ezOBNbn3WNDv+&rQU?}4;Jrr{P$jEU# zIO3}SxHIxG<7l!)Ugms622MJ@?8yUJrZh(3vFFQmo0oNF^2v~C*33r(56-os+YG;a zQ_an6jY)SR;qhORpU?LL#{NZT`Zw>K?9mbA5=kMTo{ZM2$?C8Q{3@*=yG=HSfF?vj zF1adS=u*FOX%ZM0WkaCYM0pGkfW*-PAuuL-2;!R@l^>UXD&?a?B0C{G^OdpH`k2SJ ztE{9~*G8NU=s=bv6JP=n)EbrB%MdZg=}v}}y_FLdm@_BH$~-{la#XLh8vvf((KjmA z)0+kp({-qyfl8w(+yI;m#5fNT7jf|H5!69_9}YR+ZeKG|Db6Mz0HEs7}6f? z;5m_Z*x(s*qR4j{Qf69S=1UzxkV{U^m!CNw(!DWGFt1y7CeclMEd-^M=DX%?4&$CGsP!KCR|I2F+ ziiJxbaewO-R7I({rc!C+Z+;5dQ7*4^zZQ}uVqR4FP*4@ZEo4QgT)B-3LM}&WHYMK% z#etJydEUlbn!;zBN$Vv@Ou5)e)%)JleCHTLz5~b#B zIvr_D1ZYloxjc&Tz$}X})Z0~o-if_vvfQtt>CT8`?Anw2!B?&{9fN;0XdQ-u=~ZJ| z-70iCspJ;IU@X8Efo6820`!}>Q231CMd{p4nb0K^2fU&|%PBSPb*O%TN`7@sI&BaYI;cDnIcpE4Fowqi4h(Rb;& zUMAvX*|p;w9YBC0-a*8^&=@<-%M{WyAH^-nk4Bc@0^0*6Z4Itv(`cY~OTTV;L(ST3 zE> zRFEyOfFt+v9`k%<^4R~IJ~{{{Wj(=?WF>r}(oG0t5UkyKK1xh76*xR5GALsv><;q7 zg*JPJyNsIw+WFK&8wIVcHT%JS6S;7dGZOGYp zl~&nxba!kXVbh;oY~KueYOPJ6sPbXXH}YF40u$Sj%g6RHUk^6d zt-t2!3`A-cWy2I8Ha$0OCH`Na`qv zN6FPX^Ki*!3Jpvv^=RIeuTV=eCyv4Wu@OA3+NtMggW1Y>(Mi`;@LGVLyDlw1 z*8~czN zCaHtVy-ZF`<7Y6>f-1l4R%bh>$+GMt91=jU;_W1vg_BMwS&Rz&S(Lg%#=lvOE8Z#qex z8)ymvCEWUAelu;^+}3%@O93de-{U$!FXz|7=h3L z1tTDWgJw$doTUkkBr4&z3iZqNPksf&fUUm7B-GJK9SCY0ke(BAMnv6i>bU?8IMeS# zg#;01r3ss)1RtPfmZ?&Y;uLFEf_er=McVz?!Y+$sX4_3AX@F&GAc@T1erX)CI zNqW2KRy1c3_~mZ8|8w!98;f-2px#~2{mg{{v+%SM`oZym-IQxHG*zeBlYN+n3kGfN zu?9+9DQ)GVk|S|#(=^P{ih@Aopvd^zW$3d=wT8+I=@lI=OnQU3wW_zmGB=d6*RWu%^HMmC{XZaRqHaM=C8? ze*8u^+)60UldXYkxlU^QR^TK%0*kBU;hhmtm2l+JA4W%p>79NFwow#~&oQ!>n*Y?P zIi&4AbHKf}GMaART@iyzKaiF%Z58EONNZ)=AqJ$cy2DKSq3h3tpUks>WsQ7JaR5|K zAb)|Dp{GPcU}un-e9rcU)Ac9`(D?*~-{b@V9Hh!c-DT27CJBKJP`ITJ8F8we+d%Lg zdnR?%)5qge1iJbuzgY=uO7IPlCXt1QSUYb11I4Zb3y%YZJz3&X`wAELy8Z`XmkbCh z$6IXLFc|6EEOOX?p9#Y(THVF8Cf@@YKbGoE>{eSyZvKv%2<)(&SE>?S0m`&<`}k}D z$IE#pCT@0Gf;{`-*)}tG`pz9jXlsJW3I*0)hf07`G9ltJ><&7!^n-{xBAvGf;Yt&= zvpbt9|1ETE`I%gu-0*$@-=cO?=VJ2B2a0Ma0W!IU#2PE{99_YFOB z82PLGh-!t>FlkeT_TK&mmBD03#N?KF2q%NLroTK8S%VVJ`hFpcmW07}ehCX(ezFp~ zjRGXeXDTi(;%7?ya5#Xv+q7BI*m8l*F781^O4aDBj0zk~rN{K{9**_e><|0KX45Zdp zFe0-ORQTQPN-{qIMGKxi2cXq>hStXB zXW*eC%8N3D;8MZzO}0tu(Fz+uP9`dj`;)VPD=njzvzF051gw{2h4gS^dKo>qQmYKo zX^7!YC!F)uB~zxN$7-ZUy^mr}Ilc~X*Vn#{Se2DQbp@V4X9ZFqXu-VvIudyKEwqcg zdlVIjQZzd*)`IpC$1?619C>~BN+_5H+f)|{X7C>=>OB@xnj6x$xfc+(^0xjP*fOrm zE(Y@PMk8E^f*yk)XHCilMX8{McbK-TAlFh8gH5K_ewHML;{4h1S3mufH9Hd=6G4W1 zH*G>qBw-}rWBz({GK^tKCHi(S(=|bufYxCw2V4Z%m{ASN;=4}a5{aSB#Cr$~&zc5e94&#K0nIMDjLEUtq*Woy>N9cvzR|<~YS=ddaU2ri7#_ z`e(|{9+@?pcYY0A3^v(2%EYG&>tjOPQf`#VKH{b~Q;W3-&1ldCHPh(l{kP~5?!aJG z>JFgmKl%UsC;wC1edkw<_7j!uXA_xT)^x%SA5T|K;o`V8yEvI+Eiwt#2m(h+U6{gC zt|mn)en*&uI^zNC;FuyGW&^1h{-yx|z{DO-opdEF-l@+}E@T%t-?5Q}GyLHKHxA+V zrFA|?v_?{Ld9P}RGAb=JADRPWJEFOlf(wl4YV?7 z)X?6-+Kzv^v%)qCiSknqNrWPXRIAkWbXP$yoWeWj{GWjFvNLZ%v~Jpmc_zPRunQQ= zDuffoq#x|;$#F}+XXI@AgVfp|Rx{iBn-*_L9;$F1M!77B+b~93tbCXqrINnHLhy1q zL+GKP(UomI*&N)_x$WV|tb*&HBHpr{(fu6pDJR)COOK?dvGQ3XltFnFTD3q0Xyx<2 zq%GHfFmGUlG}xF3uaSdeZ7)XCseP@*?WwoWC3Y#amW{wA-!f)w ziK8?hX;u_?WB3iWJw-2K7_1F+xpQKHk)}%0LxC1@^bBceL!($9aGm>Le~@j)*-xob z0(Nd~lFr9}ApR)Auhj#)QuGnLDm03{45C%p&%pgMo36ahqylV`TLKriR3O|!S<;86 z5PfKvQgb4*48@ACYipm66bOnT6OA-B%suwv*+aI@cv*V+#~;mEkRMkz5>@Vz7w3Xl zy{qy=66($cRmIX3z10Y6I4p1h$!X~0qpYqfVjcJ{h~gL~AXqvpJ$!baEC!Oq z<7KNZS|!0avwJZ)N0}xQ1`54}Jps4|F4J||qClcQh;@FN$4&x)VRMOj>kMv%WmHTg zoxZmHu4xKUj3bM1$Lv`Yl~Uk$RIdI9d%=Ay1!7XP3>~Iqo%d6t*E5;g1Um(A0`wHI(Lpk69RYrs_AyXIdcaM_c6l9{Y}?#HZZAI~u+LRv!8um(7n^Y?9vwu*}Kl^K@i8p`>sLNJ>-f>+-Rg+v+*J;j$`M z?FOXF)@cwHXo}dmh(3po5-l0}*6OucH2;0OQygz&~ao zVqsPsW{5x~tul17JU|&QjSP)FF%5~k8THm zk_0q51DO7FVgmt`<84#~cXrz7Aw4?YI()JhBATlUKwiA<`ziY5d?c0(vfIH#oCU6z zJY;N~c9=?u+h&@(f%@P;&!mPKP4k*E#iWJFOO^<>b^IZiG4L&2s>>uuZ`(Eey_|RX zVjyVfU=jKAr4P=MFn+tazljLh6SBz)!PMOcxt8MFtGJvkN%N$#jp{_8Rbx#=YE9R5-2p z5LmE`ZR~e`pxuY#&W?dX9efD-DaalT2`-(N$Y)~0MJKhmFP~IA>BslQX8HLjpL>*n z=w-0wA&SWew*?rG9?gD=Pg~MFuAg$lb$myr+XwF{9pgs6#FG+q%z)lr{I1im^qnHL z0<@Wd2D*2gmp5OwG3e5RX)um#_HZ_{De`I#0A}A_B|E}}{J__iMg>=MI&Jx2o!$6S zGb=`SOkm7|$i~SGNmp35#0)O)JD4GXkt>rC?QCnXi>L#7Plf;dgNWyiQ*ANwqeg?E z(|UNOzZT~vP3jEza1h^MoCr6`O(Np%#~R9|!`ujTuMcwPrimP8*B9V8c)~=H@0+P?_d~v_ z%eZC1H0LNB_hbmAdd~ODmY`iphYq-ZPXm~@WiaXc9wgMLHMqp|&1X6q3=HMc)9EMk z2TA`~UaT5Nau&B>s zq!fx$_93H4pOe2bZr?nectbZ72-o`H=xhjP2Wf)S|7uWXYm+@1$OV?$B|u1U)B$Ej zJA#aK^KgU|(pAYs$*LQd2ec>+givCP)3Ity>PGQCxnkg{&`cZs8@8~8lq+&h7oWAU zb-&Y72DNEWshiwdkZDTkQO=1EKO4Vx8a-w90u>PR{j6u!;gn(kxCok6K-VPO!THnA zOkFy`m0avvS2-|q`cRbC!#a~7ZWY)Pw92IE?zM+Oo9RFvLfIsPZUcuI)Lxt`#Kbk>RtCsf7&sYZ15--^W%dqcMJpGQ6wX1*?aMlS3+srX}%U>E2X*8vbC*a zC!hZCA?BB{J{!4;)S#Z)cg~-|JHyVP2|O6i62p|Wq(xt@`b@u(%A(5W)zfkGd%otg z_Yg#s-(HC9HY))a^K84JD&c;HxgXN=lSQRt$VG*@FW)R74h*0C(#(WlU3WrEJM;mnse|hX#|GFUTp& z{n+TmKtCzADaw1u`BI5CinufmKMMQKa+)QeRcKIth_X*fK~#{_Lx-#In7Hr*F%>1K zP~F|w#DyM7w517riYli>Pj#_x5|xbE?Mc%a$l#m0)Jc`^7F;q|oi?r07&GxatldD7 zUQo*VkBhEUQ{`mlsl+rKLt-iGuIoPMEDt?x_KmD!$F@+!D19*Z3I0DWR{5tq|9aL1 z1|POgz(%9weL?l(%T1dcxQAn;P*)=#bsXak)sh^-FPh@8L5sZm?@WJ!39%Uv8aRVG z@x{fc$baT7JC{V6c*;v)EZo|g1UXG@puAIeMAoDuSGc$&kXb$f%!+vIHFl|HJ1bSt zaaY^pvunH`y=L1KETSwCD*E7Vmt5{e_xlPbvu^<3lJR3^K$Eu8{IX+1$j%w^D$}H< z75rtsGn2Uv8fj+Ez812_sp$P{%H8co)lj@_n>!FGYJBoH8_>vO6Dtc`)D{uMR-}|K zYN{2C6>(a4I%R2cMG7#P6>M|n055kGaGUXo&Uijq_Ptt(^UY1T>4ed?K=Hek)>wN+ z7|(9&Gr z5$h#e%RHCGXH*G;z|<8mn_E9aTtmK6Xfl?6p(yBE~|`Es*qQQYkcxnTB&{h zMTlO1p=OzolUzKy20A3>y-MktX6K?$wMlKKq(K(y$lv+tc`pyJQ+mg2YJ)^OjjpvY^vr4BC9;GCD)S_77}U?(3A z>W$H5mkR0O_|B12eV~^{%6C#a$(Eo3k2F1o@l+IM`8F#XnZ750(v1FFNO_6 zK{q)TM7C75N`zdRG8fx4xtlPVQ6}Is$ac7>VI~^DNij;@er}EcM>WcRXwk|oIajb4 zA#0YWdJ-+bSG2-KVqoDOue>1oF3AzJySt2i;XYu5Kq*15S|)nm>9a+LZD7=MNbOeLlb}xta}W z$Mx{&CPIY3M|%RSYS@C~$rDC4p;Ck?eHdqNg|HE6U_c8`^1~pD_eH$Vb*24lS1O;h zGxKB+nxx+g?{g5)gU|q`D36@e>orCoW9h@PEEhb^S_M{ zkmH3N5K=goNo*7#Bray|&zog05PN7M9!9)uypqa6K@wCNO_cyZxd*7A5$81Bo*@Y~ zHz*N?v?0jc-hf%4x48Ut!Akef=d{l7m$jOOZkiyZop8`FzsRXY{NYFvp!Em6wiu6) zr)kzDEYNYa#DrN*_4Y&-wuNyv7M7C%$YQaX=4|`R(NTyNT*#~g%1B}5ns9-e+|KxW z$z&8#89>1e&vp7rP(R)|Oe5|1rS+9Dh{j1UHZHtKv$*ZX=z6=exv@-!C~`%&rNkEx@0s?c@tKej+m?TA1QC%z=`u=JKX_oiyNm% zhQgOPDeA}#zz$u5reokQ`2v>xZZ$*{P-n{L_LZclqeppjnGprLiwnwJnt&CNxY&47 z6|O0fmX0=;B7TNA2qA>3#zFN zaNHSEzew31lN+?@Tjb3W$T&Dw*|wl5gnmoZ(n2pw7pyU3TY1xK&n(}7J~`^|lN{ZL z%!6bE3$+rlVHP`odE(8!Zl5(tEK72WHdSgwpLz9wj z87akPuRC4uk^2CxW342`JNcw@$+3XWzqoh)%W8^(tj%B7Z(X0q1p3G<_~*R2%G(7N zCYM9^6@=0cK9&zhw>aO4;IbCkLcAXanO%O(7w8g=bIU3rF2Hi6n6yV)@g*rK|CSA zX)A1~OzVS8%0gZMi&c!sk1N5EWrvxL(j|rI0wL`-^FMLI=hG6w#u!LFtsN&kSLEoO z8fr;UrQ0Ub-*g>j2h?NWXUNI@4Odrkb7JAt7ut_YNwTyQY}EZqVek9&Z)Pye2a6WB znvw>*f{BUT7BtWbNzF|H#D1?4oSugoT;v~wZV3NvUU&50(a+<{vo_W4ClCbDO30@9c%^4S7PJY>q74u> z%_&lDQYl96d>cqe=#f(4CKwM31*u233X{FW1Gv-Eu`nG(=_m>aW0?yY%d z)F{A2GrP#UsBrcLkI4vRaO2QTCzLP0k+LptL4MHLw4cs>H25rB<%n34L6Rn=OS`iv z13unp9IxS0eIWGm=!1UO#6BwO(1Q@a7;U^=vD z5OmtxBok4hm|-RB>1$f@9@S~%hsBD&dbm|X-3jjJCrOz93{sl_=#NRc+_z^#HVRFc zqk$SuS_LNrR+`tQi-6&|YRhE}d+Y+yuF?Neaz7Uh#_o~yb7dkkl3-`r`fQHx1AZvq zi_SkGJIlXiX^Sk^2v&kV*8o0%Gogh;MMGai6@n$1u?QTQ(9yK!^pw}6i zs@`3M`H2*nL_-sEZbCx`Sg1Y!aXyftJ3w`1@>L*_GJyt#;2$7?h#uR(fot6)njAG8 zr(@Nf{m7VN=cKxk1_DfQmMJ`;yMhYPZ>Bb{_QRb}D(n%bULBChsoCIpOawU`9k#vr zD05AIIp>}#v5gNSQafIsKsz7e%O$SDW^{n{B`}wrL}2zRsrk;=X+k;3c`}dVKlA%Q z{N)tj?_lMx_SL!3M^@^zw2=l;po-B2@IN7L% zDlMw7Z1^kB(oTZ?-t^XFtAyi1{a8|s`a=6sm1RG#WJcTZ!Y6bklgtP(w9JO;TD+re z7~yJ7Yw4fAlYVc8R}{!C1xH|noq+}pY;j|ye(a_1`7mSb0Jtgha}tk-=0(K(RXja}&>yAWv*3r&&nXw~NVTQaoBC!e4OWLiq7$q9D5^x{cW28=w) zrGKUWGyHQho$?H9P!MB+mn+VA>JX0uvrOS(PZ&hlj$=(E+8y$Oe=0t58oRm`j;y3m z0Wxr&6xAbwZQ{h|lYh-Kef-8Y9fg(2^r@vMl(|k;(x4h(0!eF&=eE>ex#`J47?pRi z*c5%9y5#3+QGt`)@Y5xkFhwzwL!S#80pUY@wwdWjN_Duq{M)Jf*sQIK230XQAI2X_ z`^xPO$)zyftzLFj3!L(Cm@Jn*sQ?M`1U}>sKMn}3`1Gb@ULoOPanLvh6_{U0$80Xl zoPMP`D}gjBB2Z_Ebbz`vosJrYF`(3h5Q?QAH5hJK%5sN6k$2IlNTLGJMEmCE++3kH z75{y1>k2*Lmo<_r0v5DJh!OZBuRIwMGZ%Y#x-Xuzx~~$>z6mDX{Z$^j><%5fz30fc zL^lpvB+Kd={_?zxmnp0^O;EM_wF;#1JD0c)#>0<5oZ#`pGTG~|MspzJw4j1B4dG4u z$)jy&A(_=?7CdMNXSh)<;=@y4n%@Y_wnV?}HS`<4cs)|JJ7@lvi6>J})pEa9S^x=c zB_7P*^T5Anm=p{>J>9DuYs7G|e8MD7r{5?JR<`hPZfwr8boFsLI_bLSS2*wF7EY20 z2Qh1_5r!a`p5oEEK=w!Y6@!@6aKy5C%SmqF7RB&z+Ezsba9ndKOw?!%ab{)j5zUDC zi#Zq&wb6*f_fyF4>V>tMTr0e0J)oX%M{y489Nv(zd)umGYZ6ZIpO?`rzJ}cTiVMq@ z*`xs}mpMIvEE8apS(|-R()Jt)C$pQGuGG$u13B-^ai%Td077fKvW1Z`em32HPTIy< z!5(U41B+{)*wk;%jf`@?v24#Q6IIr;R1;TuWRKj)#%QLe%E_QAp=|&T_$8p5FEKQM zUm3q=mm!+^$j74wXitt}+M%?$%ZbtU%bVIwCVH#zve;y!GiI?3G!#qiC>?Q?AM@st z*yb@Ecd4;lC17sLmV`PNy^2aFq%{5Q111Logh$u?kd!@KS15l< zP$U!NyEdgpjm6Do8@*#XtxW+@HV4j}#7lhF$!j@8)dPHTFy5^429<5Zh&mj;e=HZr zN+0BXBO=7o**thLAzemPD$0CmhD%C~EUR?v9p>UW3{vshd-*HH^s1GH^TA&lM|r}g z;u^oNj*Y+^ zjYVU1j)aXO;b@`*S3%#R7tgmqh2~$<{)(4Ma_?|W2LO?cvPj=KxC}E)15>gcCfqxP zS*}j*+zD>xgvSH51{LpwfW=voyinhWxuVv$iD7()0ESyi`rntlGZ*9bzXr3X6-H#H zWIKYROwQYqYMY`VVLhF=oUboe?41Z)3~(^P%Vf?z&8#pXK&h57;Xl(|XQO60;F;Ud zd0sswR6^4K9SP*zHatrBx$N}t89@)1S`yaiSa>JmJ}}K}|C^V?J|b7qQ;#>mzg7!H z=oJur4?496iC4hvg1m3!ubC|oD3a2hct@=a$~u*mrd^adhrVUF7Z{%gSVxh!ppd0B zbYP0iI;HMpZB=;#2o0%P+WmB_`l~=`MUgk8?Kll?_7aE~AW&@7Y=XmW&swC7{R8l$ zBw|Y%r4LRI=Lj$!Z8ck<#|9?zJ0}m#@OEAR2DCr7ZRe|77r_-#Kl5P|zh9x##l z?*9P3gAVX{k`7Kd&^ys@Jfx)mcDLM+OhyHh;dRj>IF}iIPZU5gX#MhrsMk#>{*`yXf&GSFH-{YpM3NnP>vvj(+f?=98Mnk$&mT{1tL13C}~N8{9+$R z@cRYlOa`9i(gHV5{7Ap{VNEBzPQs~xj6i1&F=nQjqeb(-DW#B$<}unZCr_xko$KCN zk27(YKKT@w$pubn=Tw#81ur4%TNV{K&8GhfC5-|O|4$@tNSvvII5tay)Pa!5bz0sy z*ZEIO;yMEr^d6zc(Nt98gVrI;JF%SIp>ftBwg;e$urH$3Og}OW5}YjXVHy`Gs|Ltg zJr%qx`x#AL7Fg>Vw~icanUe(`kbtiiXaiq=b1)x(oQ!{h`0i@RqfkY24#89m__~Li zCVJ2wk$2LBoB%|wLIKl4#c-f5>lvsX2|P;7WRWDZGWI~f$R9<1(Z=)2>d{G?pNXDN zOhZUFlQAZh9QaMu-AwZksD9C}f6XJU_dTijzt+SCymWsc`VwaBqJDClJ z`qj#${D2PLxBRbKk<6hZOG0}OkFx+7+#scx#|iAb4t_U2D`vmxaInOkHPAx$xZyv< zrF#J3QR)IO-QB?*-U59XHWKlj%Gi51_?y{2iWfL5Ap6Cbm^Un`wb_3^IZ%b%&MEL# zzHlVslA`Ofgd1g6=wTygO{y9V=HEmljE0zK3BLnz)C1z=ozoM*TY&)iPni!OMnkd* z!2q|Q>;6erd%%)3j>8L@hp_-D1u%+uqNWwitUn!vC(r5(kPc(keEctO0i2P-2~0dt zN0@k-K;=DWid{@EFI^0V(wR1=8-5=S)Q~2L<~S1UzziYhW#F5$FUZG6`4KcAt(aW> zl=;z3&G)>y#P36Ske)DLz`QHU4Y%>8sZ$iRABc*K>;Z5op;75j4xZE;t_36+Ex1&# z2lLxeZc%%FRLTT!6lxd~Uwh-7EtC@&Cl6TvyHH+41kMc1ItS_ySt_K7Y_Gg~abXE= zTCFmaMWo%#jp2ZM>=wX&;yCX5>>TwvV{a+qq>0K=i`;F^ay=ZV1?<@lEMZ{>uO$|x zZ2{LgFZ)gIImr)RlHdGh&uB+wvKp&hT}Hp-^HD{Mb|lfrzFuCqIcT(i-#+Ef`i&jC1%m$ z90R7|&J!j_Vltw%#VG?4DyWFwtjQ>h%~(3XU13(2xD?)n_`AjYrUjfjVOB1Ev(r(` zmeJdV`h91o`WbtmR$0hUBm^0^o2)Q;!W*g^{ZCohiI0G_ORW$LB{>H>gsXs;A%}39 zV+Dh#DbcP0z+2_V;(ks~gGr$-l;#q%D3TaxlmP=rK&Kv|X+wF??5f`Y`=Lhs9&zhS zm$WnBp>ornqnh>_(L7=b5JN~f?(GArJx=whUWR`1N3v-ubTCnz6FL1`YW}~1svFa= z9OhI)d_Jv}q14*|%OX6xK$x){(IkJE6Hyg_5U$COqvBxX7wO_k>p{!L1z)c?&>$jL z5@cl7>)PBuns;Surza7)k%K>aUQXax| zX*5b0Hy}%xGX>`r2PEpwiwzRJ=*R5MiCJ0BLoAEj(I=0Q$32gA1K;FR?L%hOj$jtX zd*cAZ4F!0_tp5rF3Bd6C%^-^zb(vawe^w@CTss>xk2185{#VzQ2Bh}r9${prfJn>- zx#NIf2zQqj;#370H1*+o^PSrCy+7yQZI2eWBxc0C?I>>jC+O@ET3DZpEDKWFbnTWT zv`_|F80aA&H^5jrsn|ySCyScp41(SUzSi0LVn4+IH41(WdzZxr>xuYrSRMbGS1#V};b@K?!E4hi!dTn-MP;kTvaWXes=4W0 z`Tlttwo41q*~Q6{vc;)1qeMlT@Tp}5%v>e#MpzZox!5S1h(j%Y;CoYkIx8*>n*m3r zRRt5EW+5rFTuOF%{J%iph{5FRr=LNR-GJX(+U@Nz4(N+f7CaQHsIf32OfgBVuZkp? zI#6EBb{TMUvcA>qfTY!_Z7h>>_8h(oz_3O}ni&|?cJ*d<1Brr&1}D*4=qPs@CRFqZ zN}~jo=+!6RqbD{tTjyWiCqn|r+_|`yAD209(!W$xtE*m{WaI@7$#z>I^7c`b^2m`- zRtsLeGxL|S8A#HTfm*sgJ&D`}OPn#MBgKmIeN*ey^ z2cS4mJM_JV8o}}ah?ToW@zc`Liw;YxQDW}SPNbl^p(bDa`zsXNpkr%fjg0vQ^?Hg&L;1 z&&ZM#&6*BYOta~Kpg67kb>I03v!$2lz?{wiM0Oexpa_C}G!r~z0a;>`$@(e-l+1;T z0!x@4S%Sck)5}c=N>m&vw+BF;TLCj`5RI^D9aJt>s36J$!h?yFV#u%?{3p#x{*8n8 z+LO^gKrHfc!ZpeDJ``<3V@S^^(iIENZSxFnCDaO>eVYrBs(&!UpPf9KZgbkjT~48N zH6-&kV8`(Z{k)_Qkk486N_vBVA080AZ4I)@p}*es`piI}4~*Um zQ?&)#I>UjLa&x@(5EDOrHug#&>@YiQZZ0#Hhf2)So)0grpT>BZE&#X#GxZ_%tB_-@ z=;PD>hJ6+|XOgIn)Q*e+$K1J5^3&*QXtjT$_?BxZp6h0y)}*|YT;KegqAUG<%iPbB ziMC2#*?qLS5^aOCDOC>+{-gs_H2e~aQv|NZuOhl>+E0+LKxCwn^VA$!V}Tah&dxP~ z-E@J>Ak@l|rOUjV&!KW+G>c+OJI+Ceru6>2k}oRcpZ`K7$z7sL{ad_Tb0Xy!PI2F3 z+K+Ak6bm7Q@SGfk+%g`T>dsX_PzGf}!PxbzM-=!Tlr;e2vyaGtPX1tzprIZ;jQR0`@Zm%msPKn`ZYQ1Cqh*mj8b zA-#qZEKj<_np!lCp-^0^4myI7_}bPmh<#FY`{Jg4yMWwEXyJ!kk*mnbmm|Z1e^;mb z|F4tq+NpGMs4S{Y5LVJAmeSG+K4CmKtoyo;hGs!ogU^ezP$1KkSzHv}V8CEnAT}S4 z?9vybB*tT}*g)dOIA5uzW$!-4(NTGi$sKyM=8oyLI9Q=uiGH4 z0b{;V>lnH%5jh2Jx3j4TI;@Lf8%ORFby_=g=AC7JSbuoB4P@PDy`nv(< zux-{0>&A4Ac8OjPH5b#Xn&yW8LUPlK2x1!vHUW(#v807*4`-G54+vde$}*?087Be= zrLC5ZsD~`h1wbW!K_KaAp_%d9=lx@1XTVQhg%Ye44BKIZJJuLlgLpe>$M#@85(pJR z+ByY>0DG!K{9cAZuaMNTi@>#B*g3ZxGYe`&zbYzM%o0WJ0}?{07kVI#anX90i8rWP zr==Rq(7T?DxP{y+ISoq)Y*nDNPzl+k0hepSkB%D?)9%g4uQ!W*%J6(*fYV5;q}0hh zzkEe0(%cii4+a*C$H6?nN82*BZcf03sx40{_QC=|irn{k2$_5@8lkmbXzX!i0Kt;n z&*@T!7OH_8+9vKM(5?K3EGpl)YS#ePmk9WWZiMC<>{xO;e)!&A6pYWj%MZm6v#M3Y z7;=TzlV|}PMqc3Xak50~J!`nALV;3CJc0J9Bm7dirg?){YEG+U-+<-_8~2UbxCSzQ zLKU5t+mjy!%8q#sLrId+lKzKgNE?hIs1Ed9R!&xONYmhL7E?9um|$mA3|$+|&kfxI zbC7tn4<1jfD;Bol%n@jvNypc=UHw-jcYdpsVz9wn#N z80BUSJegV~_+{p6D?b)LuEG1DL?QDKY-mVCZ}$ys!vz&Z zhVKYsEtV)eK_yE?);SZ!TA{`GqQ#zL6U9r?B}Zeb&(j&J_%}WYpuKIkNX)R^BEI$A zFaXjTe;ICuCyE+|w#YJ;7|2-%2MiLf#o-pda5R~=UR*TOi0pqQ)90L6X=+SatKG$S z%0J6em9P|naW>dM#ptFj)6I3%sIGS7w8Z(C+n#Q9U{5Do0N zzbHq)SarMN5prPofnY@~|L*0soiwPirUT0bxU_@$&tG95s|{}HpEJdSp0rzrAh{`J z5SBkQ1qMK)YJc&b)s;cW!;_h2{f3=1uEubV_e0N$N@J8h9ixNg${4E2oOTVJGNTPR zIX@VY14~@MdpU405ob~YGC|cv2wyiXsMVR=7-gN3Gq?OOaQVt4kAt-2)+*Q(xow+#Q{W9jw*NlMpZpHko3n@N^vn;n6f_R=Zo{t65w?LS<$ z{;&QM$0aEYMtrUU8dQhto|`SK>PUFsTJN5c;VSI5E)5L3?cK8LrC?@BPv525rJMw< zPEGq?d*_$roSF$#QSL)ec9B`HO1E5|X;viW1i&lwBu7v?WLc_S$=gRv-A_E|qyP6O zf*B!VOvA~C#;eg`Ad zAX1A|q;kRy_`uo^mOC0#9PeR|Idf$0oImGq_n}m!MK!xhkRMe*W%>|(Ccldy0nkSt z_MWdY26$7U*~$*m1+yg2rzaolEeK~y03OESlQ!i|YSvn%O#LDGP{=*m$k=?==)7Do zN)LnJ(g2eD3zAvge;TSH*I!nvs3a~P1ELyGQp>CSzXkD7({fl=E#Am(8j#ye?ZC|P zDFem#=@SVygea7x{YcCYD^rkgHc(sT126`5Hb~4NtTWY7yGtQ*lbXI2QQ}P7j$dd& zs!U~9=@wROdGewc(u5Wb*B2&iHoh!`IX*~jrst3))1`IfQ4D#6^OO>fN~(2N6C$3d z0*1{Fj%d+krE=`((r$DVKnN4B(ewt**$_q5Y9dVmdV>tlX!(@EWeF5*!_`FWkjpF9 zmt*tVAmj*TuH!Au*+7njrUo|~I95q3G&-5SKqP~v!j3S>z8WuP#CPlQWOJApb)5-V zazPDe8bwVO#gS_!|3-oX7*v~RbL$_laN?P=gL51FO4L8LkUo#Qu;;RfLdNG8)R|`j z*hTh}+oi~-X&q=*b}Z%|>3JrZco}<0PT@UB9?|5Un`qtP(2yrOS9E?@RDquAkOB+8R|BYFe|1tdx2;1CkQb5WJPIGkk zYYN?IpIS-LO49K34=;_}np4t^f(|kNGQJT0$s5uNWE#$|FOVL}n&4#&rNq8gb7JgN zoW7_^*+i~>rt8eQgOmos2Szv}9{De+VIv8Uf)&&jzyU+lCWG-;?C%TBnYFq6r_r!$ z5%J)hu2!D6hSp%S=KgH2%z^7Fzy8Cnkz#f6F+SkJq3- zeEiz%MmZ%CQ$6r8yc5|06G!e|wjr59%3cNo6dDYkefyp+UupZi;2;aqkxd0?g~$0I znjX9)#|`MLr()3us|{LMP6vW+x|3FreE~r*<-@D9HjgN)p;0{&DZ&pSbueY8H;1f2 ziDiMS)0u2;`Xs3QP_xh?LA5wRo-NJKj*^e+88j-ci@p_BOApi@0Nd|RKo2`((tRNt zW70Y^)U@xKzq$OMeB;9*&u7+5najucM)fxWB|YB3=nQh$5Z#(GVmDHc zK-$c)IRw%@%3EUv0c`D4>gZsk_IHDkFJk$A;T;nVVqgb-nVUs$mtPrvE1|b@CA)_n zBwr}i5%nE`8R8ZdgyN@iodP45{l3W$u{kD3UwI}C(JW>FK~%U^F)1uJ|2#A*McjwC z&h+Gz$|-=j%b7n8a0fM%5|BIUl9eP(06i#&Gsm1Sjmxx<!nlVdTvpm(PG93jMpzrp$wB)3i(d_xk>bXe(reMrVFaXCaR0 z)Qoa3)gv0ba*6MNaiHi))p7jBvx3=01e2!+80IqZ)!n>$VQ`yrx_R0px{zxILQkHt zD%#^G0x;ZjaVYzf9P^eoJ`P7ok)jt=+FPwW9L1rVjl(U>+v+0(c>-GvmKXk2TN^`Y zx)~jSJ8usRkqe?EnC&3EBc`mT1WTApg76?C#;jUC~cOfGonag?A*S-3~~$_}*_ zO4Etra3HvdTLq)wR4a|(l=Fvd7xvJeH1;+$LoU>;-J6naGAKFUJ-RbSXP8=5zJ~O= zh3RL19<87zUC04BKb0QbS64TnG?<8Ic)%EvtpJV;$6=?(>w2WHY#}b0IBQgRxuDDt z=;bPk^P;krLx$=t ztc9H$4Egc`I>BP}ZDFtDE6_hJ%6enMG(HwA#4`d5xKX~8QM*zZ08|7tOWaS>-Ndu9 zEqm*^cdRq_mqLd1cb~s2DFX?p7OPk@PQmv$y7v>7wc?gLX)HGhx*wa0T=;RYmh?P5 zCohvu1P6VJatxpn04GeFf!=Egh;wOI34b1XsKgC$;a0Wan;9F)zhfR5;Y&+v1X9K) zG*8EkES?WRW0wm$$eSa)7|1ymdUkBu^9v6tap3Y3cr10c(mh1h~ zd#&DGD-Kt@Fe$LCzr@=DoUl=C~nU&;7mT}A| z5ZDFIqU*m(Y!|mfRo+4HQZ2(^zJzTQqER{B#7!oOwH#gu)J*$${+%Dwby*o?;wVZ} zI#q6T;;$F45|dl}!%G{wvO8Hob5Xj7csqHO4qFU1&Kq71;9LS^t1(lTn5(xh_vn zoS@;Ct<>qfNayleH>U!h@T(Ri5HOaPQ~OAT9_&2~5>P2u2D4U@$W&SC&s8gMjjxS9 zxu2aQ{%j%=uijRW6ktX~=Wyjbn*ho->;vK*(21CUK2%t-+im{j?I(Z*XZfs&*8j4L;e?NTfFfenP z=dHoJTxgK((X!mL^ozOWDgG2f<&LR)bRBMP12qw>27Lp&_PZAU5Ex}^-fbm)1Omlw~|AXi%=>}QxNuq zvshw}`6@eGmoDu4bz#G<^RQ2X-ovu(AM-|_k2Uv}wEGSfo+UDG0yfBk{1`3|Y6_?{ z73*u!f$l-TG-wJ!>D3oqsMY3r_Ml*L1=PTf;L`8hK5}!?7|$ig86q7NAC7^AWWj+Q zi@Za{7ClWle=$l=f`qCCk{U@Gvp+_d^`JJ}6mv-&z=WZ-GWpi-8~DzQJR04|RAyP? ze@_$Sjv`nBdFsLjMMcb#g8^Ym9#fJ%IT97N{3p6*DqG|NAfxq7uX4L01Q)fqx4do7MPvfv0<&o;r>Yd6822h-iZyn!w`u1=b3vo{~yag)iDaL42ZCfC7_Z z(Nk1{^mlc$AW}O$N_9=&j@8zL3UlwRyHJSDZ=~^0{toppxeG~rnp>#-Fd&?|t&-(; zND!AXA}WRSzKPDSAByQEPZFoZY!?qyS}M|!gIW_E%~WFp4*TzzN-uKlON0(d>3^KP z=Z6f90K<|SPdi#HM;1A_Hm-e6Y-$!R_zFxh3S%c*rm<#biHxrf0Gjja?Wix#L}=zB zH~{MumOz>xhgkJSp%J~{GBRJQz(F?b0MikabyUPpm!#x0vb0e^)*LJZporOWpD`Bxd|xKW zi(HCfHJfj$ z#C=YhU7aMmZ@XL58<*-1Rte0pk>)qWVDZ8N(qmGUslzT$d4wcrOktnHHiE8Vo0jem zN__P7`Ewz;@U3Qui~3vUVLX2>zpw`!|1RPY+|>(eRNXlG0ouChU&C<*3_lr1b8@|N zAL;2l_I0kI^IsK4JewWV@m$Y~R@^DFc$jDE)87y>K?IJ8=;6`G8)Z|)zavwkY>!0c z$kF9%5E6TRfw{Q3Et5)^DCjlagE;-P=&($5kpiFIN#JOe0uC?RL8Z--S~nw^ zS&%tNzmYV+l^w*#AJ5=dhCM3jbWeg>Wqkr;q`P+@KL|=j?siNyOkOs{&XJAni^kC7 z>lQA=i^zpYc7EDD+X%08^oQa1o@6Cw5D}w)cBCOiw;^=>sfKm% z?A$y&TXUbXgL5-8SUb$oXk$bUm0=th4AP#>kBo--FXI75NL#kk5N)36yHKo14~peZ zO`9*x&}8RMDa?D2<;o8MmujARFK%}HteFc=TRPXIsK^(!*@rp;gX*mHCwKNTEzZ^A z5d9QY8@#U!v8gXnL`4;Z61Q)Umr7J&PW#0EbKWrlKO*%7lTIs2f$`MQR6f zkbn(Q6c5;nHJQ{fy@U{pxs8V{jVni}4_PcUE035%ft7d*vsF>yO}iWkJ}R|*gUEX% zUB>%jupe$hw)~CG(4fFso2IWQ%<>km5q;t<(~R8fOTn7x+`vyzJfirt6wpZ34?|2b z#xoOMP*HbeOwR(y8iz=c^@9#6%gs%Tf{Ousi1$L3H~&s|*`xG`1m%r3S}E+m#x_vs zl+GXh1S~!wK{2598`<~;GP4TMA4gqWwH9Oq#*%k?0_7C;z1Oif>uia3XH+F-Woio2b~^(=9*WMR~cW#HUoc%aSf^O`6)|8X)5x|Iy!I zqD{l!vvwxec@Lod2H5K`Ql+B^V6{n0L6nA-Iw`5hLzyF+#e8~ztL$mmuIZ!ex;GVkFK{m`iA>YE-%1C{Cr@(YyjwjgV%@; z=rs97IdIQuV1vA3@(L@reWZ&ta3041Qs@MBY=*@gkXHp$OZvkHX0lz^ZV*(^Nz zZi7)*@qdI%*56UuuuUhv_Z?`2r>B>$(?sKy@b}L>Jv)2&dfIVv!ca%UH=Uto&J* z9^$rw)R4FXm=Kp6<3CiGLAiN%N~bGgy17~jM^sFn2yS*!4+bW<9GAnn*y<5&QZ8Fs zqU-3EPWSYV*wgPtUn7G7mzVs6R)cBL!@In)YsodjMw~Xb!4l=U1ueVm2_j=!B}Yf znvN!=l1?59RNwq^Rv4GXaVj!a9y2BN!@zQsl3Ow9Ykyx|k%$^(5o9q!B_MgFw}D>y z;~b6q&w&IEf}YY-Mu&MWa}mNUN9^Ig^DzmI%ZF?_Dg#A^(_mMP8vu3Y5f6(JYCAX> z$_v6}SG637;{M_t2^KT17cuOj=>fbt)p@Eo!r1yCcE5opQ9Cz-0aFl@siE!NX2hAV z7Z~XB)M*Opa(K7$SqH`E=!$P7)`oD?(jm;z;pp@L3V)hio0sknKb2`G7Z-jpp&;45 zae*`P(o~sJm_3H?@d7Fdm6VPJGQo7E(m?-!`pQ57jD%l4Y!x>WJ%yo9Zef|MbRHcM zAOL?3@IQqD)Jm~{fo{k>+ddsNBR)s@V+y@-d3(qO+Yi$`g(4%Fx0-cDg~VK4=O^W6 zID2i6qaWLCIIMK8@8H&#P~oY$PG)p80dwxt(jhJf??Q)CW{QKeW&559qK-S*^oN3mUeq1K>s3stt2&nGl>tsl9)1*viBJ!j1EYFxwYxDZVM8$|S@P4lmH(HPGgY&0loVBWB?Kmq3bOcWmAJ=4GT z*mFM1Fjn0Y)w>5Qrqi5igE(zU@$6a=(SHuzxKjGe_f z*>aa;nN)$dSG;@z>Dp{+p{|`17b_0-haye6?llD`PX_IGr{56}X}LbIN31iGqD)rr z){U$*2nL-Kl9b-)Mh!qAi1dptq`MwMn=@CTqc=r7-7tBBKn`;0!8_7=H%@>tTx!tz%beqMEJGs$r%{hi3jE=LXjl+ zgI6AMLIQcFO)QPvl2^FVk1gq4X26DrO$r-{|tv76gsHv%RS_RjBh=x~p#Hiax&nHd6{dj4IP5WJFh~c%#c{ z{Y4&HA)#RXFP@#DUT#@M&4-Wx?5nZ0pg{sWWVG5XGf~W@(Yo0pcR+2>aFk@o_@R?61qmT#YF@%g z(|fJ0L$9I@QE_1Uh{K4ujlN?zTludavQx}XAqKZlP8dhjycSxmPEuPOt()e*XLG}{ zxRH>{ass(9NPOv+f9u(a0lLh?zFZg(0H!Arv62{7>QD{ou_sw;POy?vJv+D6=#%XB!kS+++McK=;U*15+)4EqTo2(bE7$E4{SHu_dtBI zF*j*F;5WEzQ_Wv)Ee&rn-9)m*D2`8{XzET2s9+8QU#u2CQOTshun?DRPuApL23xdWUwb1~#ax&x}QmSOf z-a#$Mu^fe~6c~-9CqyKT-=;HHq{F!o2zk3OIzyWB^gvS>qYW~Ol0MuzThLtPD=BW% zH#KCTG8>`?-ko5VWZ3u{E^BC2-s(IOKNs|axi8>muk%f)0)QT&l53^=NfTH;Rs-8^ zDk2Qr%0%M}Sx1g=3of{$G>?jDE*(IfY2D4n&MG-LXyuH??rjn_>y6xsAbX6fb|(00R^siraJ%}PFN7{H|u zIo*{#yYBXk&*|M*18H@Uqm}YWK3fFwnO5N5$yH(Q)I2aGP||AjPKiF60AI@fivc8HTuAo0P!L@`7QHrU;ffvxUQfC!UX?rNvKh}$l@?hcI@2PhEW zbQ@8;#YJP^*uMrANg7(_2aBHnIP_tGM)e=_f|Zt_!u278s3xi-;``x>R?6#0rUbjk z0!UK;>ZIcaE;rt5S!*h)&hqF?R}sQdkkCPPcEz&~g3Dm-D2;yvshMaToEMr$Qrkt@(C#2Dapy!^Ptr+hBhMCGWGDJIhZ{!0lvf=LJ{IAS2VeRid|uE>Vs zAo*b2cmAe(yATV8r_oX-c3L%X9nd9;&WiGzhJFW<7l6v9-4@|bcT3<0m}YYMP6A!K)!d-MyU7Gc5(BfxK}2Ma;NO%gCjQZAdOsQnBcdtz7oj}ELl zEnDsQe(M!h(wPkL(rLHXkR{xbH?u}gVyZdBzYPi@*%-?1-n7JWD^0mXNOrxr>2)WO z%Y-3Tq3Op2-W_cRSv}0i#!DgB#n%@4i?rMGQRlTPw7U3$k<`A0fHcJ~(D-D%D&)#r zb&(oG!M;F^CcTJm1yeq_c4JxZ?E*6tuExM&o3=#@3_UR%tEpqss7v`VykAh-en+EL zjBgo>F>6Oss=Oq_ode~EKM4NEpR`W8Qp4W#uwjtV?%+%zivy06djiKPtDWHYBV<$I z01hu?NUK2`mYS0Z-yuqjiG+w}0-kS)68m80!FuEjOg}Rb&suxyCG^i0)wjq+o1!%k zy~v`ovT(Yt)k@Nbh>el63jQ*9d>7k>7|2wG65^)dqHXo2WV~fSLp8&OVt{39iR-~2 zi~#|8_`$7^-u1`=&LhBF8HI(5hMEs{a1)>Yg5-TVFrWB09WaoHCBtaH86X*PF^x8} z&i(;V8is;-ceR}$rFzg81Yl%hjGT`sgOVIQd|;jv68+$m-Fx{VX2k2UU zLiLRvEcXFjZ2ADJGcK0MQ09Is=iJpZe1}7gTTq-$GwagULY_A*3INPIqZL6Vts&e4 z#uYRe9T1R09R1l-Tg8+J!;*ay-!Y%ar3{jZrGG6j3&h=Pj~C)f`SN9rP-tQalcV56y2ER7k zxIr}Yfr&Gh$3nXX6&+(qu@}e&XO)+Vv%vlYbOz~zhWp%f4~U%b1!-5S#k}kOlD+-i zsihRnHV`*{Y+jY$jtd)PbZm0FJu`uL)uvYb!Vy@QVdchwG!qjFEd^+~Adl8NS5x21 zNK^W2!Fw7Zj$m8I!La(RdwXcB;IY4$Co7!i7<_h6R}FS7`Lh zmC3VXtg5)a-Nk`PgTyeDmQd+u!Pw$ts;6b z>^3`Blb?iiD4%En(f}qf{h}?+yC5BU{g0fYtkR%H7KFo)^&@87BOz4jI z7xHW>H6A-G^gw~sBuoqyUzne^+#pQUSdn?QCcT;&_3-;!p1T}h1v$dJl8uGjib@0p zvq={-Xf5)RT*y_Y8S3C1?Y>r%=f{w>!&017Rb!F!of4T^PE!{riw&)WS@;0eUZ~+t5PerRaq*?dOj0r-A=&hMYT79h$KU&Qh)OqZ3{bw{0bCX#u zllnR&I*Jd~W&gQD!Uyp7!+%4nyvqL#q?OVL4E7$jmaC`da1 z4p7jNW_W;fW$6_9eAjVRa0#@qD@?0u0W0x1^!F?VToTw_ORQrdp(Da0ALI%XA4mo( z%03mrWI^q8;;}K3T7;o@V-V3nBT)hV53NT*;LMv?ifsIYCaDtVUzW)|D&7e502egZ z!C@aJ+I;`&kKU|3-su6gcH!&8XwSS{5}>B(Aotj&XH?CX12~%;u|qPBUYEO(hB0dZ zpxSGC_=jz)(iOZ^C0{;I4X%6=|G>j#`jVJ<^aaL@_&=9>W74U8yhjtJNSv*^n7iGC z9gHhQ5T_+eO+P|`*~Jx|deiw^kG|`Fb1eNN^feDIcZ%`3U}~3DHgzcW|K0bKqmu)E z>y(-g;%H#{St7Q?9Y*wD4$j(?2}Pq&f=}nW(mW-{EO7DIKFJh>xA0Y+STcZv{F$gs zs1p=7$wLDIUBGTctXY6N5se2mo!Z`@X)?V3;hXD&3@dt zX`~Ao)#)G``){Hl&`ki&(~M@>a5y3iu|fOwXaFP`S+Sw|C9D@Kd>lF+p4dnn9{Txr zI)g6Z?^45$Xo~y{G#SX>Hnj5w`pWa>+>$aZOY7?HY*{)woV4lR8`9E-N1I<1%T)@| z7?l9o{cm9kQ=BetSKrj3@1mDSnODj0(dYwbT706Xi`Yh4717S%CHHYsXffETT3;-Z*_a@P zUyy}&6anj^)z!RaQdBo_6rn{B#Gey$=C_V1#54AEZq@Mn4Qi~^DVd1fsezq zr+Rf)ZgO{}SK_vIRWYt0JF1U&SOrloW#+&l;yLb3stKF1mrOnMS6k!P?+kj@k?)F>^c26@w2*Ku|{$o9OsjX#W@J}Q^Wx#cSF zn2jL(kz*eceqy|Bz}J~A(k)#6tee1Rs<%k9Og(~fdeDx$45EhZ&?*PI$cWRc+^dGI zU9I_X-R)amw=HmJ%smyZ%^MYl2S=*{T+>q!t4|QCW-uRyQ#CJ|l;R8(n8dT_Sj^4^ zrWnJ%xD5SoXYbDAF|4u{l{g=SbS6yv7xT*1jKjCy`*8%0)EQ_?-^F)B#!mviVj^I#oNLle(U!aVqXtn>bO>_tB1{BH3A|M+Oh(2=9bN2bOV#$Qg8V5eDegE(&HafM(vq8pW|g zeE~hQD*px1?c68*UlBMAa_VH;rBly6qMw{~am!+uF-4zT9%Q8WWnc!%HjLztl*O{V zvfl@If7-&a15Os(iIJ0XBG8myt;kuCZ_`kcbQ};ONTSnDG|-6lq}OwE-{5yr@fhwC zkO+rVm+iP($>25Gzn8k@KWnMALJ<9L-<9LN?_XHD`&R}vW%ZHdKI!)qmYSRZ@EjyL zy=OC8QbZQO zmc2Rzsd>T*B9yesv;Rp4DbUS>gzh3^%kIQ@puHt(4#NF<)D(D>v{we=KM#{ zJwIu4wtZ?|=EyX*qMBx(teM2XCcEC+c_7LZ(H)o&*quv-#%jTKuKkh1zkakWGWoRL zZ`M$dW-GTe30#I1^lDl+XrdJ)u>MfG6-7zNKmUQyr!!}|+nM0Qy5~#q?dA~WP=mGXcUTK^0Z7E9iyk$NKoOUuPpngh-)0S$dryHH+ZaI3(1=Jj z(_?x6G_FwMFenF1W+|(>YD?|847d)$>UKAlIhe)yhD!KG z{wh+Oy;0?ILP9Ic{$C0Nl{BCvN%58Q7mQEKH)R(CXu-NSUpNsL&G*jA`laBt_Tp6bX1(V;Ah@xZB+UZu=Kch7GS9RPqe+e>^7Y1vVeAGr|w9~7fP!6%0 zDSe0Ph>mtIUG;Z_^MIt149Cch=4dU+>J+Q#(EYxq)33BA(59qMk&J!e)0xcx4M`=z z$}wYbl#D%A`;NLhuoZ^|k~K(g86X1ag^4Pw;Z|>;!l@LB{u|C@$7NP~LID^%4)t`4 z1L+bgahchxoF->y6ID7A%EVWYPW<0E4MnLH!NRAmRI-_sGPmOMQdDgC^#^l{ z=D>guI6ROrq>zwbeJQyvt0rHXcy?1mEfhn1JI$M@zMwwPj+B2$JNG7a3OrZZH6O{n z(bhQ7ss|VlXI{BeE)9S^M9@n@QsrV6(Igwh~^NK|pZ{m_9G&4p0}fFWTYdDbCoCIo-NOZ49$>6n`q_+#)Ej z;KzDO#B55|8RYO+VLzUEt`ts%`3jQZAe`24{-d0$Yf{HslzL6BPJWn!Q>Sr&q^Oy8 zTso8+?&x5p=L^uIJTNI5(_W z#=@>V6YA87MryIozBj?w}BgU$-Mnk5-uA(VpxcqkVt zWlHvJ=<6PymFs~!1&Y0s@&F|L5G99_{p6QX-Cg?kG+A z<;^z`7|1Dqf|Y>&iVRH&AnfXp2q$ey`7c_%YD&#CBMs*Gfse; zfax_d38pwW+23GF7rYjro}<&WyzqRSP5wVe2ciaefp%OTx-M;CA`L)!RdVJK54rR< zU;>aOG;T&O)H4N<)WcpCv}D5!?M|6q;?)6H^+dUxzRs>sgB3QWwNDzJC}|12f})`I z-OiZ^3@?h)JMHeb@juXZR;Q_++%@G!S}?)JB?%(6`EYtd)?k_g25I>@+xEw{0|yq* z_2SJI8_%^&x8K5U1LboLqg;q0UaLy6meYrwWxt_LpiOH)a7QhC4S)!2>V{cRFfapl zCbbxV3vvQnNW@&^e*x@buz;-ho8vXuBdv8G3E?j}_(0@y#aAG@+5s4c8C`nyx(WsM z-ngn8PaF;HIxToG7h^(9y__^T9~w+n%q-+4>;|DMsnB>?^luP zDhJ_oU%rovM;|PKUFA-li8M*e+ANt;F=)7}`vCDDUd4#Xj)gyN6=t|&VT()|%kH8X z^e;|#^F*58n~|odGfn6IyWbB=1Mvq-J3$O@{MN2L7V2&eho*&wrqqokUjZIHCo%m4)vjHZ{5(a~X%luPnR7O_6S0q(JWtjT1VTZ-+vd_h!#IN^v6 ztrV7vZEV9+OAY3;lP}Du{2SXG;tdu~qtp5TZk!&lAwQ!Cjtc(~3dN ze=s5;V-#;sEnKhTqJ-Hb8;Ad>SyG<{&f=&!lh5~*GsJCW&Ry?Jsj3FLv7=sCy6WX( zCuYpDcnNr@p5#=F#E#vm?w*`pm#m!!xD`8rFpXR~d6!2isd#w4M;RwN>7W)ujOL(@ zxEVPKsGhaii|^1=)@PWIHe6!yWmX&v-sp60!oF0TSnrW$6 zlc(e*X+Hb|>LQ8!&c%r-KPq|<23mSb{l!zL*{O$fj8+N73o$LRHAw{PK&xQ911<+t z53h+`3zigk`CzouRCK6rd~cdmi$VkO6zXeoyznt2Q>aj)#EE}BNCE_bPnHsUgay;8 zf!XQFheT`xk&KQe?VD*&qjm{5Z?XnNq#ww ztU0Ap%iG_`X}>26Y~@9C3~_>6DZ`Q({+53l>#}Cw`l2=rZOkBo2CV;O`9n-G5j!i?44+cQ8 zkHd2il`da(q#(!RPdL`m2Z5wg*fSF+p|7urRWtA%j-WroJR2=<1~P$k>-^1X1ONt- z45E5_E0r9bs@kj-NHG96?6Do#Ls(Tl8qWoV^WOeVhpzJ8MXj@Q4>RH-FPynY9?oWe z3VnfmD=%X`MDlW6J6)8;vxT{jnGn+^s)wqV@IWA39w(6cXThY;7bdKXR|6Q-ZXLr0QqV zieDh;`$k#$Wk--SQsZebpyc|l5jxc?$|C0V5z{I!3;hY4THRaZ*l+d20YC(hJcEW4 z2WHb;yFFH@rUUvr>n?)4^SXQ|gh=Q1%vY9Z!CU5-MWA6Fhm$a*MY4B+2+~^=MzU6A zoGINp4bw$lVmu`>v=U{p4<4PhZV7+bX3JgL79ZCfM+W9gZpW<*oXf4u6#8ylyYud8 z%Xa~g(#;TaWy9ziwLlry1mCRXTDd(5<8(h)P#qvsdfxs^5}nlM^U)}$8A0M4G6`Dy zgkhpcr-kjWUdoiahPlQ0DMj#h=Q39s>0o15m)!!zFYnN$bRs8;So zsRlKcNmujXufO6wlnBbQnRyF6%YRJJ7T}w}ZSq6%%A9|LGwkXxr_7hVx7Sfo!ZAE@ zV4qKsM$t3J7zHKx__62PV&d44Ax8NI1k~SUxLYz;Rci@USu#8V%H>q&#hQD0XaVoH z5thlo8V2u&CLn#`Qo#6IN4~^a7i~wX*lSgYEhU0XY4h>~R^#j?_J{md-Uyr6&v)nu z)Y-&3Bsw`#A`Tp3T@J3vw;P3CY8fN|i;`sdaI&EK0o{4#m(myl;36rDP8su7hnT7J zucz7pzsCeXXSkOiafkf|VB8Fmq59oIb{80P+kFrl$r-!;=F)`|`lwlR3DtpYvWKEp zuSABgp!S&NM^mo%Fu0Lu;AtEANlkgUvEW4bRQeHl37vD;T9pU_pBHt0BKVm-ekGJ*Bh`lB0|}n{auBI{#YYZzSxH`|q?85uAbv1D^PbC@Jy7WP0GM zneRZ?k!ueG103q7hu?{^i(a5~cKKwB>2n_Y0foqTZE8RPg^)o!==?QHqilmCBb8!Q zB~7QAg)x`}?EO)T}us=6Z|KxHShh^TnCk`#+SU!nkqCI-t7uRj@}ZYZ z6PF0uk%*dr+Xob>*LKI!U5Y+nLdQ$ic>tj!Q3HH+v02?zsigXLjc z&a@)YegbEvcHu;z0pLW_vM`iO&M@aXbXU1~iG+dwPQ0_?cQgZbAeYa5jUPg<)kqez zLAJw7wG3 zfbV3J|NOD98g#ONwlG#$IndLB>*=5USfG)GNDhU^2&o=Of(&5NZf*}M8=tIhwL_R@ z5f6&T=(O$w@s(`Yr{}wY$rjY-G!qX`%CRB5BmzzdgrXVf1uAU823*Q>aN-RdRfgI* zSRMGr-fL9#bC~vp0_Ow1Vj^p`=uOELIAmVB)-m2qrAX~QhyR=WDCwXlyWTvUz4!Uh z(y%&LP_m}7oa~`^GYm$UF}je)a{ci=HkW-STAm}5kgKG6d!W8_ENBviV^1cGj^&5H z*@%g-q*K>n(udp4Mf8Renv~%1LkQw%rK9kJYRjS!XNxkR&WBYd!Z;C=1E_FJpau!8 zQ~QrYy3zPX#!(-Di|iozHLf=dQb4AIN>opKhUZMY$uHer%>`@4%LyCYlRJG6gX2WK z)=6|O1M&KTV{Zv|QLfRLBEpixPe4m?-0HSCuLZAFnl&C9}SCNST(Lk=YU>e8Byn#csK1wWzqFTc;+ z;>kJ?Gqkw}=klc!0=Hm_lO*z5@f`$yK+rLU;M!l#%PZ$m!Bq88z{z0fMaO2deAfY; zse!#-#85&(*=Mwv^9X2pGSu}1QrKjV=T-+OI$M${rkgqxToh$5jp@OvPjJ}*t&4$5 zV#~gA*3xg9T0wJWcnD;9v^*nyB+OlC9!p#O!BMGu{vkyt`#+4Hv(1ScO$b? z%?R6Apg{7emIxF4kp)ZVN(b8oXJZI#g?E7J1{2U8qa~3#a6=lg3~2z{`i=_OfxRUp z>PNr>l8=CmgVzDPjPXC$U&YCci*DI_{g3FCZy-9n)%TD8-AN2=dnYf?IX}+L4Y&$u z#9WR@7@?ae$}iA!ZyJ2A>|oi&JuCzTTXQbdQ}QlIIw56^Pm8lO>PC3-gVmLAoWw%9HRxfsB^;iybjKht-O8PN zr@N1q6m_Oegfu2$D`U6T6<*v`@E+=f>g!!jy6q^ClBVQ6<4StfEd|1wj4Gl;T<^=W z@1>ZXm{=5isQfDphCT8>#l}!_ZTB?APv;U|^_dbIKY!o3h_$HF=P~KaV(vJX8Uhrn zRACGrZ0Fagq&VtWrhh`_j7`~oG)Qwxbu1OH#NKSy-m(!P5ToNu)te%cM~vtfr7&bG zkaRR^A$zZwTTOj?TW21~hH_%BC|U9lC0-eEF0;}PPIY+?*rsa{z#Zk-zJ9?Q5t_JypN?1aSq{DcDD#{^7!;Q?{+W#crT_0Qywy2= z*;gMogjhooC`V1AfrfGx!?H3C9yL=d>pi12j$Vunr^>;qZxcze5h~c z?Xd1x#8@d^d)q`IS5`MXB}Z~$-~wGCk(Vn-`>lm`e50qn)0}Agr5G=myshxZq(}vU$%r+R=FV3 zzJFmF=qo;C=+Gh1$4sJhpM!#VV7Xm}GM!7y0JQMm111ET6KuI;H`xTAYmf;MT7~J9 zU6o+bW_%LYWtvUy(Moqn-|wY3w*kBH&eQ0H_*-d>JQi^^NIpP2+aU@qWz(+T<&-H5 z++iYUF)9F(^LPbiOna3YjuF_41X?361O~YE)vrcm;Dx3lS90%!6bz34`=Awz4C8ndO={F`L~3DE=UT!tTDjc1r-7Ij(Y?tHKf=71OdKehM zjXGE_d;M^X0wyH_ERW~)&B2|SS4@YsJ>9$c>hSD4ZrDiRi-wHHycw$sK^KqZsAn-{ zYe2*4XozcGtE}{9paEl1`E8_x5dkKru+xx47_G64NKXDb&5}gQ3+b`a%2zedV9L2U z;qg-<9rjGRh&%5HxKWO?6LNQjFc29tbxB%H-XD}s&L_yu6yYW(V%^iP%6=Kh@{}H9*S0@imbCyZt-u+j#abJA9BESR)7wASX1sCK!MN>jxpsLUjH+ zgQUO(!6}uI%E)AFN!)+4DyEZQsOMnN9Z_g9!zCZIY1Q@7&NB59Gy2*Us^Y3zR`dJXj(lZRu{d>BentTcI4 z^0ihvG4V1+LXf*1Xf$xboz z{#O4e&ET8Wz)*%034=Ny;(FvPx&}*O9p;q)V3488`0w}b|3zFf zuno@<9HvW8qxD|!1HB_+dkQcdo+yWCf<+&u(+4yJF&Xs)kWv~kUrkBVFv7l zE);#9o6c>*7~ByU*JWbt@K6vQNiJ<(C;%Mzg=Dcy1cr?^w1b{~HNuwpPCZETrr?Jw zAgM#~y&FA&)bCwAQ=ZcWQbnsSw`=ACSQM;-t^wVIi);%P7CHUzJH_r1FM>_opId3eWatpV4~&wF6!NS2xhsv?m!E!Ju-W z(KtVu%`1e|s-b!yhrmHAvJ+v5X{M*T#MdlbFg!_2CSM_6aa#Hlf;rlU?)WoOr3CMwQRY@Fc=8Q_#jsyu9 zHtP57g=S}GB!6=sIP8TR_*YA@H9oL1>b#g%-h%v7LxhH3utz5w{~hW>qb4|Hr1!Vc z_xx@2eG$NJ;584;gy|?9L+L92o4ypKFG)Z2c4=E=k+rDaXnkl%`O8e8d z6ly|Wf;cJ+*(W``=u<7{A36K=)fD-~wE$BRf&MqNm^Yap#+YffhM=(EcM$0&+$Q`U z^wW-xJF|(^{&x82urQQ!X{mJ^F+Ma^s6-(+E90JbjoMDyz#SkWLfS7dqH(FR(0vpF zCCQHblZDIsHYAHX;5|4foxfdbzWNH|Vt$zBh>8pfL#~v8H_Fs`>hBS7fiN|*lX9UL zszmSl#doKvRSqmu&$Z-P^syaJ(3|7d(i)%>MXi=1SZTcH6K`bzW{Jg$I^PMI@ zBJ`w#$r^AOc`k3o9>3SuFLEhSI$QY3nq|g7Js+=%;FAei#WvhM`zB@N^=0M(1xL)c3U|}Yptt3s! z;|$YwjYZzc(q;9hN(ELp>7U)QEXkrpAzqU=zBsi;DKlJhtUSFOFLE~B?kg`(=d0a- z*b##9EpZt?5@vRmZN!mC+NI$zqa!0W5IJoPh6x?I4VEWI`Tpy2g?od#xIl@KkX8T~ zx8!)Yb?h)TD)?*sf>US|vGl)Nmag}gXr+_2i7r7nR6BZp@q&gxT()l~gKFu_Ty>0< zQ-;0bA-Wwlbkk0WUP%S2qg}J8EzlW9_MR0ry&N5YTj*9n?}%sf5FDZQA3#3uOQO(& z!o!>45~5WpYJBoz@= zNGgg$C}LWGByFNI+1!);VWANcUXCyatcM&XigL;iAC5;@{I6|sX9B#L?R(`h+FTWI7H;37e2rN7S6-b2VMyyjrX0PBe;ZW^-x^9)4so?u*N zd_oq+5Q80r{^|auwF8J>D^Xv5bbb|jwDz~cHKAc}DQdqFIu)5TIy1&aLQ3R`&Q+ew#uzMKL z_8CTQdSsk{$z}k)cFORHUKS!5n&=*)75U|xX6eRyj~Nhr+I-w*fv{f~jka|%MEU)^ zv-Zn!F1cuXn5&wK3XK5mwdgrI?Gd*khDf@d?rOdtJ!cz?&f@_Xq%LtKw)saCoor55 zD@E8q-z%#CD1*07td1?M z9EA@`onSU|My8X&ZAN$~(gH}3((1o~QU$Jz;1qQrf>YU4h$E#RCt~`!2`wa3r32;H zMc$Rr!*@L5sownZz?eZwroP9_-N?CXj)`9gnHa?jU}Pq9RF;2CQZjAQ6Nu9S_$lK9{PMAlvT8{0 zOGZypsT?9%Ry3#yRSZ_?@Fy9nQsp$6LUK`57bOSp1nBhm6!Mo9oAkb?nX$n?Zs?i3 zy~apt;A5O;Pag4lfijCU8U!c_?gj@}mS@gKWdf7WC_BTD_|y6UBMjOqj}yJcnb5?8 zebT{+em)0ZIc8*8X%GXSX4E#L)5SNhb~;(aBNMaHRi_~jCMEzaiatZno6WIlX}lUz zZT!=d@Gd+|aNpF_dzU@w|N5rLcpGtleRf=rPx$Y~{VTcU{kcjo1lmEs|E{53HGtd1 zy_(?AG_JId%(s2038Qpk4T_dFJF0cDyn%1?`c%u$p$RfY?n0pc*?I~mv=WZyxW%IpxW5c|dE zj^9n!hwS*5d3XRP^(Awgpu^;wd~%5z%QFrbzzJ zgA?Ht{8rZ)H!1S^^;Opm@A$VRZZb+XR~x3g$-AcFfmvc{`%0l4(_ABdN!;QPHU@Q( z#Q(AUhijt%2b4UV)C5@Nnf8pYulrh-7fo>_>FyRqGbMb3J4p)|Zi!Tx^2s6Ikf+R- zvzy&Vxr6Y}{bRcZaf_(|I~IQ#>=Q*mzu@x7YyG{$-M+|q7vK330Qp|{lIHn=D7itg z9=Q05D7Zw%%d`?PD+lb<$ze0SP`29z{qVbwjl}OJsCI<|ghjOS%v|=4u}Rea;j-{> z{0E6>M2{q*aMAxFADSX3L*Icu;CfE>+-$!S7G?6)Ku`%8|R3*hShetOJMKVFlzIdKW*Sh3)OtO)t`FzMq}?bES%rnb7#0(S#B&yrJ74+<}K}? zKd2$0U1^%}FE%sY?JCpo@d3Wb%#OqZSl0A2NDK9qCl5tv!t$E|c(!!P94Ebjf>Q}y zkZZZFfI9%>{4WtQc{_3~9Xa`M8+2#Rh0caea6;-r5nFyso=NT1GtvHSeLB-g1t3IX zkD^xcgy|}oy{C6FyEF2Zay_9g&Ou}ov2LKK&)taK+eC$x!e6}0w$cd_lS{LBc1V5= z)$_AsbmsrmS^xL_PTiv8J#QT^i6>^}aRbj{q8d3kYH_ zX~VukP(nja*Qs<(dq~m^{mYXT-lD>jLX~8h@dJh>7YO#^eVKmiOn?-QO$=N_R;V~L z?cV#sOYJ4CGjL9Z|Ga|zs8&H&Y)Qiat|?K)yHQ$T9@ph0rB1_CLu~*YW8HN%bjai( zt(bb}`-hEg`Kanp>m|tht@sE0c-j;H&48)$n`GP(#1>g#7Tr@=n|1^p+NcL)gspa{ zzBe)NJee$f4i4HRX4=nB%>h71G-W>DKfPF{Y}D@%a2Nv)mJ|hju=Iw+tX^^702;Ll z0cSS1CUUOkWT<<}tuZfNoVSB4AREwlH5*v#jK0Js_|Vii-2ODO=|ZGh zE??bt=^6b|u27)p|Kus0#n4(fZCCe6$%V>0A~B~uznlJMqeDF7xx_WrZ&Tjr{VcVJ z@3R#b&?`!nX^)Be)LCu`=J0jlo|5-cl#=f_z9@8VI5qmC(Es{>)#@~Qhivj*EwijI zOJNu-1%u+;2sBj8lVjom{^YUXUFlrI@u0TaU`nVliqTgIBU#Yus&%RO5bpw-Whd2t z7YUmqzjEEi{H&{AMoSl80O_dtS;>+k;+ijr+9zO8bTw%AYtfjDAwT~%#5@1bECOuf zMJH{dlw{z)uZ?+AVC@WzR$98Ka>5|26c4{$Dt7?Qm?pq~2RLDlrNDkY3=EFZ5TnJ{ zB11^Jei3x}(nx_|eP~)RpSftrP61YnQSYeU z5c`3e38@GgA%!Kt(?!)0M&b9)@k%Y{}1Q`R(CCBGg!R(^r{ORftFd9~xWU5$4!E(`68>Y*2 zEwJ_!V(2ghL6ATSm+0uMz zyD7d_maNHcmQ(IB^)uh~=DBp9I3!lH?uTifE4NAHQH9jor~Rqvnd>nqV;riPYWF@K z`&_IPnqmnC^f0F?W}^uowjlaH9K<6L6;JTYg(^oIDT*3J(KFZY1ZvsBI+5Ddg*Tg_ zFSNk4ITLC}m_?1r-rSjmL6y_$rNH4i{9!XURCoS)gE_!}DIUrc@C#Zz?n)$Utb^Q| z#QwlbF`>{*r)3%LbQ|e+mn0mUNL%jbqt0+)A$mu%1t4>w_#b&Rh^dTED>PTVu~xK< z%n0p%l^S0@Yc~Xz{`!heQ;LqfgqD0Nc?Zb{_!1lWttWGrJk;a#aagXd zXE0o#{&8y`-S%Mi9Z`ukQk4u;GF4>lrn_cB_e=C<4JyfhLA7Fz3uTKiukNfuWS>6g zVrU*91RJBcyCpcoB@Z-#LkAKsaSxF(M&={QjLaeXE3^yksKqPfhFQ_CM5TZ`tL^vP zU&r&tVPPgJbBG;~xt8l)G}T7vqcGSRlY%h?M5B9Gex#-z(hpsl*;BqRaS=lP24x4F zZ5<$pmn)ypUOL|-C0T0-H)cN-*i$03ga{-|xxs|pL&`O=O_3bCR+z_1~fP9tfm!QNxmA#S}I>Fr4u8PccJ)6j$CD8OC+^l!!892hckpLBYZK z4b}`EOcaqfnD&qpuO}b?Kl(-I?~v6~ZtrFrS$6*DGJS7$+Z~DUVA{6=K}xqN@5M`) zLZDpK@Ov?qa{GgH+vw8qHeCJ{`q zkIvyrR=l)G?k^jK3!1XgA~|vRN>ZOJHD!-z@rZ;^TIC%1fMHaFjxwalc5yu>j)=nUa@gh=I6n-uoW zE}&b+Jii`}?~LIR?rW=6pjh*H#lvXKLrLe6sW6u5%;>7#j`u7hGH#nl~q z${C8-(ztdJPNS@79W%OrWUkj3oJZQ|&4W~C4H0n#dl0kAgz<%*c*r$CA`HfwSAHXG z7uz0>wIytp@cR(>%9EK5#33nPAtxX6jMd81fVB4in=NutvZyY`(kw#|_8y-R}Qv+G$Lq$z?Ka`~a+ay~(9Jq|o-!x8O zl>B!+t=pZ9;+&Puo+KY@qe@^&PbR1ZCK`ybS7qEkajo@t4ekAn2TJjymu@QDx?K}s zMtR&(G8hX6dO5O#V5GfRRqjtEg%gt}paIG72_lDplh5<<>x=f#a4Gxpwe=uW=A{9i zi4}LKafokCrqsxrzQ`P+IGuS^kTB_I%D_%QO6E^vAHX>r$DXqWsjP^DC2J~3!2j_M z+6{E%zx1KT3fw_Db8Y?Z*M4`{dPDi#D4V36=u~ z6vwej%mbK$VvAG!ATQ?rev)z3{9TOay{y70lcubCBs5q5L*@ z1Pi5=V7Oz#qmi=_9D%K_%u?3dE3J}&urH|9~G6wgXP*z>){Rmd9aXYg*OMF z>*Ls{YnVHXR&)n8GsP5-ruozOBlNdd!9fL%0r0 zC;7gPbLem#B5_}d*_%YPMLY>X1n8wcW?cu>6+4(!Pe9QNE4h}X_{U;TI+<8kasYlt zg@deaN^a&K$m(#0uJS{nivwabFScDNW?9am4$rMDje7ooP7_8?E&KS=s@4pO=Q8eP zhWW^bS77_GGQ|M~Ttde3O>r@@6$*E%)s^dS1LVkkz~(c1guL9{GkOlfnFRIT_jls1 zUku$(MA#JYyUZI-`q6Ga@FJ`_xEw_O@T*&yrVdqPmti8dsyniJf zm~T1)(Git=>|A?P&8Jd%v(ZL!XvbMw2=EMQLpu$V6vjB6Ej4ncWOPvK9R)dRo*scr zOs9GyKPk^&RvNsd10SQ`>CjiO&k_d14IZoKfeO_05L2X--vcwYYue*d+tEcu!y%Mejw0YvAoHnQvXLS`ka9H(P&=>fe?*Z zU%3e#;hi*aSD5R;*&Uuc4#}ZCaR%*>F>`%GGTbaNakuoCwEzX8Viei%~)KSc&KGAZ7N}F9m7N!En zq$RU#bR-p{W@QAe;_;C-t|eR97CMiit($&tqUiTu*&U?GK{02^r^Wun8FBocBNS=L zs>&=$jy2zcvyDA+i5Srs{KvUD%)%szv~omM4=gms5dk#LT)Hb=%e>_iY91v)OX~xN zksX0oqE4^_<$HO^w>7<^k(D}c!)kj+2E%|xCd1vHGA>r0Bffp{xxTr286n3pY7q<2 zKSCw&roivv5eb`LpWqVRPBl`9Sr^zbT}pCdwaXxYkYlRzd@=)_qonLQJBl7@e}3oa z?I~`0CNK>w?KR_w`*oHO7}C#<^Wb|iosPGzuzoje+2rdzsE#4ylysg?k5 zCK@I!yb2J1n=sRQLg``se27@AL;|Wo0alglV%JWRKRbW$NKz;1)q z!;cI^i~L5n;g<0&J`yrW4~?)BIay4pur#)&I3!wxX&iP__O6lr6eTRg*yQ(&HwTzF z&F9y^>5VqVtbyG1b1_$7$JUgGVZVv?23TydU=Ep!0ai1VyP^`T(-A^vM_vpk<0o3EDl#5>(?jvTn{8>I6_ z$3^>A@#@Q{S3er%8TzCAeh7z*o-qNY`d%~?$dS=z5%c%nQ3RbvSUQlkgVO>Rjqo*d zYEG^HEsAy-OQT;fg5p(1Jrv9qYH!~w3G?~^k56{O|22LmEd@0y0$64C9G{VS&EcYE zTY?SyUKxqP$cmdPv}@Yl3;J?f!oD{`=?n={4pvK;^owJXdNQk&{~fwIk;75zEzdM9 zusCc(?I6t zeXDfbG@9Y|6)BkwZZ4V$pYU!S`On!JUa}qF5J3&6cC;3;qqTGJWgR@<@0KpE3x0*((^NlCCoBUF26dmF32AuBpogd2GteCwuMmd)|kK zXk@laEWf`3s7-hY4%?M6Eg_o2i3O;tRy`-!=V3Bo5+#hkjN4INQ?xXIOnym`9eY`p zm3Z3AyF!yBlS#grlP_*=C6zlk$gqa$!wR{9hF_`o85KjQ%SAs2dO;wkRd^l1NA1(@ z2glwQ=`;4>%`B(q1n}s&sNO1;y9eV`cAW^1&x zuL5Vw4Yd&cJIw^;&BMVm-d;u!Rw(=;6#rmK&_1{QnHqb!+fIaFG09?_J`sZ<>m*Y| z$>ur|XL+n9CV$aV0_#R=q8v`m%?H^HYH56!|M`Ylh!=SiD9iSG9f(@+<>BY~&%?%7!*@rmwKQ${gPqN>b)QCAt zz@GIXr4dX67IqX(<%2-;%~IU}1YFGOyS+T6(Gj~@x4GmHq}dq=;9=d6PIZ3od|m9j zgr52qQIRyN+?5#-GV{1H2@$g5YH^!_SU_tvH{$HSfK>B@;1nm221?(?u&nibl0&AQ zR7^*TbqyjpT#iZXOe>DR;w?J=JZB07Bl{@5xy49Ut8v2wY!V_dWdPo%i{Kv0y!(m# z-&m<;BD?~9DD|{E&`$KW%S*tt`I4yQFB(oPq;S0epokDgQ#er=}rK(M>U>T72x@CfF3lWq5Ws}!_o90dc?U&cyY&TSKg_fbSsrYhkT zJa^Ab`;(o7JutW9#3$%s-z}~oo!)2vUj5v_-qN&h^oX+E{8@}4%Tz3*v2+7y z^eBCl6pCG6d?)G&>{^NHc@Y?rL6_mP)_Cf3ykID@a*x>;WHedrcux-&ML(4N)DpN~ zjUZh??S??WZUwy95+Z#jx}7Ib#*kF9FE(-~U?)>lpB%Mm8$AzL<(u3K563pj0qVWy zUgbH!MAO`E{2&Ib*T>FE)pvf4o@Mm`*Mk?uy^}>}g|8+PyqzsrPEI$3Z@v++*StW= zRHtyj2*HT4P)6LTaYqufl|Fv^DNi-}n@P8Emt;T{1W6fsh0vd@Fx~c0U^?C+Z>gQf z@9@7)iy)F?<%-m@E@uw;IjPp8{UXIfJ#I`rbJi;M6gaK@%|09+b}FD#8rec&%C>22 zH+?ETa$FWa@P|`=S6YAZm!rPyRR&CWC#ftPVQlY|;+{{=WuO+J<=)Iiq7!uKuQAM$ zFr2AFfFe05eH(3;dgBG)t{Zb@CWhaYn+uU$S%Ygr?xH)4qOr;sf(WvOME4gyv>}mI z_Us>aP(?iOB)gh5Wo$#=i`q1)Og)R7`eW}>%LCQh)E8aDuR}S7KWHj9jqX7>Pj2-4 zgu6=<6JT`4I)cUYp5Z#S2;xulTMx{+{$~5uRsL^t`4C zZeikW{ghn+(v4uICS>G^mG2}sPLdUUNv|Oa78gc_FS1-R<0r#Ld|}?kk%BZW zm#0kS2qQ}zc4)7i*xvCm+>KKX#PzUHD>GInAAtRrZJI{=l!4`9*)pfuup+h7Oph@z zd9A3~x+DCN^%9f=*MA`Z0p(^DDs%^A-8&12#4Ncc2_wG@R_h-LW?xo8FHvsQ9BFfi z%WdFDaosYr0FvFvV8Ui6S;-1zMQ4;6Pv$Gvkbu9BYANBv<%$AH%mvBR7~vDdN|8oL(u}9Dr=`;6 zJ>9)Bq@;o5oK0U-@L2odxX6V_znl%*bKU02X%Y#q(O0_mk1{M6o@CpCiy^(#+YS`% z!>lU`Hvs2ZHuNx6VsZpzJ@Rsqs&B2b9_jB+ULXkog}cqELX(TkXEN>-Fa}XalpO+u z2>2dm8X{yy%pcIINk0|u0j}JCy-F=5Q=Ej)oC%%Id}NSMPQFE3>TY61E5I9F*dh{B z=N@ktYXv<}K#TrF<`CT1QVUr6icz{P8d5NP#zi;*HEm>mUN%IEqW1aZKLQB~fj9UWnvDl-H#yOh2)Of8%T)2RPjOEf>NXf5mE`FiHlIb?fLzv4J2N-<0@C*XpddSf4fo3qe_HWr;XND%^ELop~eaB`|b=HoiHSJ9_;4Z@PyrH~^~@f;&X310j?_c&^F2*ZMVE z4yu#`IOohSzv;aXAkSdy)Ah@yf$hn9pDRp)Lr%Q^qN1G>1bu5p8(<_-z`F=sD10@dJNw%sk0Cn3nI=V zglMs5gXbk#I4#W@ss5ystrcr&sMsmV9w}Q@qDbMu(gBf9W1GZpb)fbkCuG&wlns;eT9LZHcOQLUMCh>il|{_2~!adauaGD!mb0Qc|>zE8I5{p!NtO8d8s}ca8PM$_-Vaw-sbX7Y3WA^FW)OH>uG73L!I@}o+pA?@7=%0i^Qp6 z1wKmr>C_DGv6@SlTpb;Ty-oLyEPW@!^RU)^7km|nzr=?ZGP?$-7}cLL13KX$3eH)e z_~8O%>n-|7!u>v1;YGhQGdWT*JfgUnTNg%qB^cnm`}{80d*dI)<$3W$%9sjl&JCRZbxWNG_17;JATDIo=`am8{c4jShp&G;DpW_1UX zmuH|g7BT@LBLzDH{#8s`9ep%7j4%PaWs}P;s;8he)2K>2+siFgP^hDVVa)mek95R? zfJQLl6&H$>BAk-AgEX?} z)0|FC1{AbW!1AFc#tw1TDt<`E?hfaPqWJ%Oi+)MdR~i#T#f0V@eve~~7DCqvr0Iwb z*qjg~FakpV90XTmHMcso#^tC+uTsS`wt6aI=N-Xf4p>@hSwe5(+Gy+u6MPIxvh;z| z@jW2}o`p|`!_%c!K=$STaWm2Zg`wx+1F8hOE_nr>Vj20f`SMU=za z?%DbE>OC_^<4f3xfp_s=M}ObEpfgAOlaZXe5(NZ+)w*1_%L>4zn$NM97k5iB<~IB}u&yno(38VqA72Hi?J) zL3DF$>N9#mhZ^+%p1%roJikTo9&|Gy#nN6>+J~_gi?$(Pt?nQYD>u8IOVY0OBO$*( zb{tu!5Q8VnI*;inT%7UqyptuH(nUPTlovvju=1%Lza@hH`Ek4LUqUc)m)c9c*Xd)T z7hT%EU|^tL(CiPu8f6v62|_;Bg1oulJ!WV*c1b0Y?~-eRDku(CVA#sPLfj?tJyP$a7=+(m-Q zCHX|I6u3J*?oR-_p@gywz!#qB)z?33<#GZ6R3nuXtb1=I9GUG8>hqC0;iaL|$8Srt zy;sny*DIWL9+qT+156D8pF*FG)ig+7ZfaMkXcDb33gxB0hnU_vg6cOz%i~D`8=7J_ zbLfu1EUH3-G>!s9-`}!;>rE+${K|xLhH|XZ9Jaq&bdP&e5W)-9)O)JOJQXxlX9pbE z+ufmfNz<$jM$`G}ka|E*HoGs_<_5EZjyYdF|3lXo<#|W(ook>J zf=+P!I9NSDam(4r&hu3tuYV(a6fctw{wY5H5cQk07COK-$(0@cb)kW@`Z}Q0#BWkA zLf|`xx~ZY~d3#+pZi;W#P6HOT;8v_;u-WOXiiG6Bf69|mg<)=yY~n{#8cgARVs z*!HynIXIb(Wnx2UeA;ok4ZVZs>y~@;_Qeqk9EB{YKoV;}mF%9k^qO-e-E9pEn^)GCW+eNs~G7lj6UAj2?`AN;mx4n@wH6IGgEVoV2Sc zBT#>&`+b@zlZ2!<9DmP09qoq*g(1ShY4n0vxm@}6*$KEGzF3l*D@IRu=mgF8YB zz$%6!e>LI+%jC0?lw#trf9U?(f346>ZHKfGXBhD!9d}S|DWE4jy>)YkSJwIM>;v{`2EnC^ z3R6z(8LSN*$>3>8oDk)1;hRn-FQfQnHz>c^@b<{$o#qIo9;Eyh@ZCtN)b$_-Yej$*rqyN{TBZXq(C0h6iQa$))~>|*M~ z<;Ey0!WWT;I$XWNk^=}mNQ8kk*o8fzKwv{U0kSjMjeDjwsIK1t1Tu_= z7eM(+JCv<*wNFLR~~@|M9Oeni}a(L-hCz%Z^{!f17#CY!6d}SnvO0^J%TE%o?)K?bEj^GeY{| zhT-O^0Gam0zv0AS+uVIl+;5O*Wj3~34~Oxg1}TQQJ0ZADT*+c&JDa@3DFOD zIS#R*9jfFS6O{7u)0h2W7W;?tW}0%x@iABqc0BG>%z2kfSjKNzptO;;Y%==Nd6YlX z{12Oq71{Fcf_U5o9g?tD4E42z^wF==ew26DvyZ8ll$?iqrI%*}v1I?*Hh9Sj2&MT3 z2`4lK5nbjUOQo9nB3LVwKvs)ASK?A4-AL89xa($b=Z(twOaN{BNv8O_H)2zJ7d7c& z$@lDtmJ_A!ur)C#%ym5QUul zn<_hmV7;2H&=nJoT*DhpnHca^RUj|yp%sw#PYTl0=*=4`l#C}e#5JR}q%?2jy#Qz5 z1W4da=|^9H{S~Kr3++75mT8qclLggh2>H|SyitJmC(>MNKCfm?pB|Q;jYoob>3INQQ5eMRh7nE1MWfLApM4G;bNO>;0|73<` zLAe|MYn)>ISvtITE^eF`mT+?#~Bz4w{xw z5Hh`LGat&!B((;ZHP`nRw!*A$4@CWEw&%XIGOgLKVxiVpF2;e3Ou9%mGSNjT7t$d5 z!|lEjXDK#!WL^VAeF5q?Luz3G7ta)vrCG z3bI1SlE`A^zpL~(rA>SLT+vb4lGERhj$B>%u~&luq^o%R^$Oe7i~) zlkRG)O>l1sAgwy0h%Qt5!aZXY=PV&#gvj68S)5NYs^+6=p21B1?Ak@8wO?dHg4Z2YNmWs zO=)GFpQj{Y2bq6M_;^9ws>3a5C{fA5oN$L={1>@LR{EplO5KwnWwp-O{jr(p1ZF{+ z!rO&`3|goVf4#+Og6z5h?liR-O2|Y#gHc2Z&mSM3*9cQ@1P)v6X)$Zj`A}!>%&Ft5 z1?PbGaIfhA(Q=`6S!0dQ{n~wlnE>M2X2il2oe2UrGi=s*JK@2`MBue3&wyP~v#);k z5!>V$FT0*8*z|r-M8yH;BTq1&02kbBPJ(TfNirAHmXnLyVkA!LEh?{Dw$<3}Ntl@t z!0_ZoUHH9QS%2+z(oDzkA^|fK*pW4SI%5&>|hg-MDe52P4&g1a_@6XmYKiG zs_8O~W0D;8U?Iw$pu$P!34I;=gO-f?$1RNNjn1{YQVD)_Mr+RNSmRIPY0jG856ekK zak&yU<{m|ci$!>`kJW8cgr5=Hm&n_18AMCNQ{?M1rd!6l6=?o7+aeytg`c@+29AO= z*sAcK%d_(Jms4Ez{p>Tn%u>=#x4V4M@uAY$f39>nLA|sLluDor18Qh>5^L>VceZ$O zRCYhkT~CV=45}7d&dA%(>T8z4h*Ia{GVPJBzG>(W`p0MgHZE`Y>KiqE6+U29qBBu} zo9L5lH6qzKK}a~7+WK?yz!n21+$6CO-+mb}pOW>DpLsK3Z7lJpmeLIu869>#@v(8EaX| zggpLsRIMa7ORFe;ND*~pO^0{!;K<+l-InD5*E2%Dg@N%Pe=Y~5E4MQOtY^7axqNj> zqpY!bb#$NTDmxIV;eyfnRmXc>HjF#RiG+O@=sF|2NCE0bCu7KX!IZ_DRRnlv)Y%lc z;p2uGzzl&MLsf$}_8HM9>Lw`D|1M`USfEv8lvCmhT@5vEF|NFMa| zhuY~7mh={5-Ka+9Q(T0@c?7xTILy$j5uVEqKi%YO+!_tt@?E0}b*ZUE?y-MVRpmeNep~0&4{hUmT)~5^ELmU3 zW*+T2tj*^7QXX%;XwN`avK5{!^T?>Br8$>0q+1Lhoc<-y%;-4gNWwnTssj0Gv zw#Qt7sZyC^%IDepf`&fYCfSl3>J_bzaN7*zHvws1dddYNzmE~6sEQA~9{PBFqwXC5 zOo%q4g+O(Cut~CB?M#psa>mM(k^{e!8+nvsS2FwR&a}nJXV!Jghi;+VYOwn(({R&= zp%DSo$8t~;%qoei6^7Bdy3eya74T*>Kb|bV`EKKbrdVLEtS~C%qs7{(PcNxhn|J9x zqc2mQeRiDTX8oJ80g9aX#|Se=Yjhc(Gma?d(3GvAL?-ehmZaAoAfux4_fFF?Q+>y&b)`^K@$dThQzrRbir930%(U6oOKF-INH&6$_PK>@W zd1)12rafw*)?_>}M+w9}R{u^9uY_16_M=4l1$TsZwcd=8T1F9ev^^5sdbAWL9{&l7 z3_(Q-8ebrfClJ>Pb8V@wEHG*OkZFhm4LFL3tJjtz!%-n_dcxyi*Im=8;U1Q_x9xFn ztu&~0aI!ofXd_v;*7;l~gt3dM5^*KpLUicXwNGEB|_P-)!|q3O<%=m zOQ^8`J*qkZrerb8o}ag$6u##v5H^pr3eL(N^*fbpS-Gd*&ffZN5--bS$N9{l@C+1X zbV?O{?bZFupm-*p7Dzzp)SM$U7Hv~NTAhd(3D=*n-3r63+y1Jv1tm}4E9>=4raLu4 zkOe&ctsvfOokbd300;2EchR4z)(cfqiHJsKEoFG-x3y z>vCJ=z0ShpHP!{-HoBnkVHB(Y1J0ux;k(CbE*?+n15dr2d33L@V=O4P6V2q=Clp3>dT%HzKce|Ae$%KDklMp3}a4jC2?T+eKJ=bKs zSqjwLyO}cQ%B!S~1ZtbgkWL?ypnP?PlR_jYKhld?UIr-lTfGItiMsEu^amtieHvZ6 zl%{G-7)qEszsW+V((*e{uwv#PFBYXutqzPN(;=>0MO0=hxaWH1I&9Z_=19*sM)bH< zGE1M*qos!0RLU3%JNjz+ul&c|1OM1K7E42$RD$F7t9;z<8qZ@nd5&az=)N;>9knq| z&RK|%*LW!ItLJuEJS8rlUgQ0K?TOi6Om84%mHY6zl!Z`Twgfs)_^vbJz?LzQcKcqt z@$fNQ@24CW`D$WF#aC7i(>bh07|B4P6b(u89e`zJUob?7rfCX4rtK`R{?$dxjl!?( z$1LVUi(a1=HXda^%;4ogR*XaMusa9z@=5bSKfbK)C5^#db*LfzHsHF-IV<~3y z7o3SS909f>(bW$$OF8#;Fb=OPXQV&62L*^%t_#nVOW|WFl_;6`nx-gN>KM>EP-(n6 zeav?P@QwN{=WBTTpa;*#_##Tn+t;Fv_`3UygHQ&z!M$d^Zd2|!JYJWfdv(jxK?cm^ zrAIElHWZ1cW0m2h6Cm5hc?JbGM7S+wi4}JvGRswJpli>ci;1R2BYv8cB1Ce~tYI~1 zBQ$FS!8tAc{dmyLCx1~sfnYCPsTpLh=b4dv6ZzxDEZfkp`oxubwH!}hFE2J>zFe4d zYbh`>l`PVZ{}fRYCet*s-)B?@qs{f4`eI2jr*kkambfL>6-?BnFUV2Y-RdiBM#Q^eYj1Ht6e~O zN;xS)_$2rAuPgF^4NNbl1-2iAeuq8YQWAZ3r-g}T)M?iX`vZGT|CW8x_@Jy`4m~ea z16esUNLGLwVtzv!`&G)Ey1sqEY|zBVqadh4SEYWGi$dB{V(}u&%eH*rlROT!X{dsU znEts?`$MZDx#}D1neqCMCtbiTLhz{N5WM?6Xv64nFy=Fh71pE~pvM7XUSYHk8MDpM z*nGEFyt>@DDJ~+q75|Bls`Aiqyu5O3k~}tvf6UV%PsUJ$A*Kz8+Yki>Puh^NA{kej zGwi7%>(`DZfib+g-m@FD0C}&{bYTVU2brzRlPEg%OjG?dlhByWrifM)(AO8uix?NB zg$ob2KpOYOyq(QcU=GTU8)iPia3rkwAC}k@H~6J0k*6((G_q)=dY46Wl*D0TiQLQyHQy-DO%e2936RFUL!xW+q zF+0KTdaVpjZpRmO(Zy;RhAmzbZq0h4jRd=_#rgzYdOE-&Z&an|d}oJiR$XzKAv?+v z9?FsoZ-d3ArktBO`rIznX8n2 z!8jwnO`SY2SyT>t`m$mn@2={R3CjeU^epXuOp;B8M0XfKchdjcGlSd=GGv-m*iZrJSOH z^Cdq7$x2!TGa2&BNtvOSnGeT$|vQ(a@JjKS_Y}Qc(ME$uMk%c zfc>PNvioSp!wlvXi@9Z78qj5Z5bU6mVgwLA<;AJWc+TEe;YQL7?q=mmqS2otbv5d8 zE=^l9*K&_Pp*p5is_esFUTi=AFPctn5ufe0Cc0bE{JaKsR(Bwc#r()e} z;~p`SYbe!=XkY(@a{3s~%BZaZKGja9@0R_xUW13{;xxNVlhN zPV(+f;z<&cSzJ?RK8OHNlmwIubeI9lXL8(0NRe~qUB4Usn+8#2R%*;nOmu4F5e?Up zf4Z|?h0U{Rovas;v1ED?oeZFnOo`@QvNq-&B;0+buAOP^`-(5BCqloEnLE&ZTQ=gC zrL5aRh0`LX5EE=CT=!9YdTDHw$@NfqF9WUki17ytnYO?!^<2uA$F$ldKo6I$jOWR zh$BO)tVRXmcgCsdNQ!c;hYB4onjA+<>reTlifLXlBWs>Rju+vT(UNI?LlxN|{Ybr> zsr!p>EUlf+ClvP{Pn+1mX0>#&MKYv%P%YJMh7X!ewIjQ@Vz{ecv@>h)YZ+9pidpUe zhEJd?>3>qUdtO9%-0CjmxC~$LFF7a65u}=GBIMs{nJZek+;2MuyP&bT9YykxT>YK- z;liyX9x6`$FGVxn_H8(EdgRoF;QKHUq~t*$`6jDUd9(dt2DTXW^*qcz;!fyST2UY< z9fZ}m<8%VmBsdVj>etr0`Gu9VNN7*Q8UwkTT|_|k9@ym*^@h8~M_bd>xwrSFT*t}m zgB>7W52dZ-P+5>c=5XERtF`OqZ{f(!Y3&&krl`GCwFH%fcmYA_O0(%ln?@8JPg=X8tF1Bv$w?Ys z&zXMCz0ZBtC+`YMHtPGUw;w-ikknH-SG^Hw$HgP<^Dk}T!f4Xdx3AdOLcfA=5NDSq z8*pIn^&~dTTfy0t`%xGd{L86RIOJ;L;W2HKbBIYKIx34Xm}u7s3+toCu>=G&{2C)e zwmZANxPYzMY!feGJCe*C9+^@B zb#@p!<8j>CFR5_Cy=0N%<9hj0OkH0GL;qQNlS=bqNCNw7^QSoFf8x~a4)$mPMhTh7 z3>OYVE!0<@IO{(N8m5ntd9hRK{QSkcx*|q{UnWVe6;jv1mJCH}Zbd>ViGO?JA!p2O2{c%}+uW6;%zUC~qlsz!EJXhuC_pFtr?iA*gX*obM zjRfWl(qjgQK@rq2OVPM>;~}sM=WG2SXIO+;_J4QdDJ&U3wZeZsUjeRa$&l7;TL?AR zV{i|Xw2W$686!nD_hGYM@uwczO?_j|_U+kADG%-tujFnf30&st?ODGMRH^*5JwPUgpt6-#X);asz& zF?h6%B8g9#hhwu;<`Z)39uF@#+|@2s#GZ9zpBq*CorxA2)3SYRcbrdBw9LVi$KfyqeSAA^-^$DUl z7qWS~B>8y5T8ZRVHZ56M0&h#6wt|H%+1qK}V*4DxkjwZyP9v#DjV_GuJ{wQ8xV?Ab zWH1}Vgg$~#f|Ex~!q-#^F#4-G-tI%a*`6`Zy2kW^Zlv)0azE?GMgDGw;@lf)j=CFc zw205jt(GP1(;cyhn3LP^&hU_cb~|92;j57-4&0hGQl-+^>-!osNg8@V$? z94%vu+Y?X(Y1bDp&%X>!;TybT>FI*rq+$Rnaz@q>ktj=OPzQG7?rs7l);4`#{b#-H zY-wRlNU{6Yy+c;w$3~}oYOPt&Vi+QLEPpHnt`b1nGIND1b&HG80-HOJudMhKWqcvhp!;jqw~bn@qIGsw zbs}Wfyo&vbj^@ZM)umV1I2D-)KudkFNqG~BquefaPgSYu?y7^OHC~g^ULjuTFh-2) zzY5$nO0BMR!wF4% z9x>M8k9lNoVfs3^Zz=kmw^4clTDeA3KS+RYYq2Upe6=gz9Un8M*YeCJZ`+VrgS}AO zSTTg$dZue@Qzp$b@)@dTS$Myh8h#D6YIj&AZcIW7PX;lO6>b(uVLabo(dok1q{dgN z*}P`YMV#o@?GDv+;k~b~(ZtykZp1z6!=0}oh~iMGAnTVlT3(A-M2>)X+v40-y>8o6 z)NR@9t8&HcQJul!Z8Wm90T}#cJXwrg)qJeBZ&);Uc2`cpk46=q2Ygg2NDoLjAMba( z)L(kL<~-4}^*=-3T&@SR73ao9$sukKyt#ivcFFJQC647`E^etmjxic>^9*k1yoM_Z zZ`S3>B5Xi$Ow0wCbFq$p-e3tCaaoyEcwZ`-L%3X?Tr%$(5_SX_*Lt3p+? z5`pfmtP^;ZS_-o%Ju7&ZQe`0?xOH{j0-3U)GIc{JzbPB0rcyWbGNPD9my_EWfwXDp2Qu%rDr$VXJQMoplroviQ zb=C==56-fd`LbKsNldNG;FWSK z)osx@x2<#Y84~h7)VB4kb#8iJds5IaDnQ9Ly1RovH@5DDMiR=2?;KoHnDcHJod{(&eIkOhRfIu6j zy){O?>c#7*UZnpzBWEq`7zXje`Ucxg^E+5a<@oX^a@0AigXUzyi# z*l~Ue#c0`k9=oiV?mbu_YiNv}a(cZumb;e|i4JSEKK4)!4O+QCb1HQ2HJ!>L ziS2%!<|lvs=Qq3?tC~)MFoytR>#uqlIl5>DtEPV)>YURHc0AbhYd)v!=q*iWmkGjPbdW^P076q9&M;NrbAE7cRj8y3R z#dVJLsR^G4=xrT*!ly20HB-mstcJfpx+W|?U_EG)Of;tUwO~A~2|lU`ejO#Io^`$y zHPL!@xFcO_Dz7R($I+YE17>}*C%8!@P}Zk^XioPRjF^{ps1-$`0RR;@^bAySt#P_$ zB2Oh(AvOk+L5;}{H@-vcuHE#{Xt~GunjY6B>^ptWElr+KUb7LwS^6u zhv#qIWro>=R|G)u20%RC1lOG9GYQPe?p#z8b{(DOZ!pN)NTE2@v4aemafv|Lab}8e zjC6)dOwc;x@sFk5Ugl^zHfqTh2dX@|Xi&7P2>z#Jr za!jMnnq>-8{A;sAg*)TH^EM_x!&1ZB+xF@Ff=md2y~b-erE5TgHAI#Rtkc7Ez`p@7 zzv-?9Y`Z-A(jSugu#|{OJ&~J%aYRbu4H%x!l?RCX;f)rBx_gB5%-wE%o*`T`HLo%C zBN{BuGtOvU1L>uy!z{qjFOG6P3J zF9YhG4}Y#ackiWtn~f{^&Ok%%VA*{1Bw0It(9b6jUPWp{aJgB3HW2Uie2!jrNn3q= zoqTabHWjW(EzYq=#tpw_^X-t}zQnp1|8N3V2}V~{6@FR6hjDyX_aA0q z-{DYu<4hv3=;jqlniYHHcwt2RajmGbYa>A${i|IG^cyjT;gQ~NIY+w7)O=XHQA!0} zNoKfPwwAIjTFvbSj$cN#X60h@MGfnLUCg}^M@pg6~Hf{_4~;3BXphqrsm48jpdpX}_TC&h~pqvfo!H#l9sOD#lftY|b>y*gl@Si~WAuw+n1OrEc$PfpCeS zcVTz)tA|0WRaqh#dMFOD=*Lrhr~B+4WUu6REe ztIUBsCrtJl8SLvabPHoO4eKDbbWv9v2;yST%|N97{LnT|#jsCTD{I@(<11@ zEm4#!I|m?2%WoB|kD1806UYAJ4!nc7akjiE5&qjr>UWQnm3J%jzJW(G%igkmZ?Nd? zn;Gk_aI?}128S`tTuOG@GkX*$aOC0u=z1;*(rz~Awd`_+!eD{sC@NfmC&eOe=wyu? zRA{h~44r<`I)i^1gzQcp7!L(iJ0byN0_qU>&%3y^f`P>KgZd7VwOzmJ+x;zJWtyn3} zTh;Qw@+1+_`hLf{&+$4MU_A=)k)6cX&k1L#VAP9(+O5QwgfHn+FRh;;&Uo;(d!1N; zdq`9F835}Nl_#F3R^QL#Do?GFK-OvT%Ikmv79yUna00hyJ1CKN-@OcXea3#gvk5x^ zpp}!u#;P3n!4!~rd<+6c^~#j{zzFROZaV+^f@*h4!>(Fwhr$qG($({0%LPQvZ<|s) zXM8MriFu+;#9X!5adF?H));yCkwjHRvs4vl zb}l64TMs|yUXKzN?MI#jqOZQU>@YjK=uEL^f9xx(BGMeWGfO$HZ_{^0vFb`YwU3b!X+~= z5eY0n90VC&+)+tEys5Zbk225~PFxA4Z|H4b!rNVx$pl1nj5gdGJpFEFU{_VA3+V6T zIp59DGL{^(e7A(D_`>`@uFeA6cAiJtLugp|&EW+L44VJMdbu8ZJGXymJo_dw2uh{W zZW8%fg0+NUntGcIEto``1$U0i>ZH_ms&b*u`~29tRZE?AOHvgVi?TX_8rw7TD0ZGE zOFWHb-PcJA)#j%zRPUl1zy*{W0Pz^?5d?S2^chGJ&*v0uM&AKd->z=vIvqUJl@GBL zlvQM^7`Sa_H2l^%CzGB8EcGfZ)70JnX(=Du7)NQi&kJ>%+1q|8C0CFOb@Kj~dcb1< zKo?}=4Q31EKL5I?m0CVgn0k?f$(OX>aOhaT5^~6G1{LJ_4YK&P*-^s$c11bc_ zJW?lD^vx0X+j~S^l%+20j`!FvF^Tu!XQzg>ir_eHGcRM0E!7}poYZ!V;BjmD%6>eqpI$L`wCA(_|gw`;dL7_p(( zjEw~5hmHo|R|n25J?M7~+nj6H8f;f4mfZK5`gGe7&aD8QpJKVHLt^~yS6^)d-yxgV z!%uGHhum%iONvJ)uwPyv1$NQB?#<_R|4p-VCNS=CS^9ueLq)VtFBkN~PrmUkbS$Zf zm|XK(D}E;0L%*hxKAZyTkK-;N$G?t$L~6oi+p+h+j3vFx(6UG&43$;BW)i!Z-bW5P z)HrV|3r%9tZFR5kPspepVxk|q2b%=kxBcf_W@4d&b4{k7V2kd61Q}B^!kTpjZS&_` z5v4I-M)ezAm!ICglO(-H|1hqDcF-F`LixAM+dw9GmU3eB1fNuxz&g^cP9odaQw_&OtH^PW5fFRNhoBI6A)qOK%Q-LA37lfC4=g3KW%#B_|@>&Q||`U zu^*ry`FEaIn{$Vs-0g%=hZF>Lo;ZN|qD}({ZgB#MXMo03l$h4HX|{FCS0|`EdaUgG zscO>%was_jfFp9=uCPchg|I!XWH!vlSeUT}n8k8gtalcbE?6#>IrW~8?H0cY@%$3pHiP$_s}OP|`pW~CdM>PGfEw2{oL zibpbxDSku3=I=bOS=z}&aP*GYpofS0p>ngUt{Xa++6H-yYnxZmLp>PW6)FScY?;wW z3gcqOHDdixwZ_*wI&&0cVc>8^+hvg0aC>+PP$3Tp zm&aOhhoK>U+6nbIjpLIhK=x?cU}igb56#1VnTXT&Kj%&*gT2x>|Gvs?32I&qEX$14 z?nlZYjvf~TQgt?@C5&X-v+!0UB_6hR1KxSSVvX<$`Q{`0@PAXsjYOuS12(M#1rJKkO{$+v~@>A&t($7$itY* zK|>HjvD|qi%YtGkl?9Cp-rikbNN?CTrW5fQjAdw4jPoJ`3)P2^W9P%%_A5@`^d-zy}oeE*w=d+ zy`fZ_0tce+G9rv11?_*yu=o7&m&mWxBhxEGJeOo8{Nft2o3LDTthAiUzEyerMD3+y zdQ4fPI2!mry*pW~O)GK|tgio;uJY!)i7`bE*a`7yj4?_n_zVOz-1a}wRK-5gH``<% zKbKu_)tuO+Whj@kB5OPmJxd4XQU7YvQ|a#?@|-1>xmI;H7N=7#1#Rkwp+ecyDVlf_ zLOypSkkSbo!j7oZ>5%Ar{5a2!*wa909ya5>z~Mt1B&2qDCrTg8&m*Xfr{Y1@itLCs z2>46e;A?N^rc=y5)NoZK_x6)4P3(#@>f{SHHcI-brjCi$){=Lp5k*l2*Dtii9HO1s zyjNIrd)=iG<{qbC8ZS#c6pbo5ifr~)p{oM2dg&kyM0m0GvM+=*cn-?vr}iunWKtZI42@px!l>U&6lG2hQ9WpS6;YgNJ3CFN%*RK+wOt?h4g)H$Egew{> zZiMKyF}IvDnI7kuPIVStV#DGe);1FafD5g6Y5LNLE(u)qVdBWDMyf3fKEdYxV?~I5 z`rbYWaBG|L@1dz_?U(KNG3ukP?r?ByAyAyz5gxxCPC7t#e@V?Qg9b?xQuYwRyr--R z*VgYPao-?n#o9PmYml8A21qNUuo5aD048yTo~wtMMXFW1wUj9}r86W%739+DcvgM0 z-M97%H8Sf<+Y(xVewy4^-1ae!y5gJ{Ii`x`(^pp#-5NC%F?KafU=W_k`W+blj=}t; zzHUmzeVJ0g%5{l0zTLC);)eNK7h^JP|i7{>ryZAC8%ynT?J0zmCgD2o@^1KBTDL{ z4*mcZcn!P+qx95Ul)|^Ke4#+gmOG;z`)seHDl@JHkgI7LSem8aG=Zx0s0|c&Pq3q5 zFzRd`7(GC`ncj8k;5qKPN0@4o`zuD}*bf%QLbW?4lS&lsGxFmDY$|^7{hBqVU(fPH z3nEWxv>)&*u*jnb@4(tT-2@I8eLI%AIB?hic`vhaB|?%gYq|MjKi}K-Ox|j#y%l9( z5^Q;AmL0@oLc-Ev`9(q9)uaTMf0=Nb&Z|$7CtQoJvFZBGUlEd;?pP-jJs|kGwSj!m zo8~nS9XVW!QF+bBDz)qNeXrWtMqjk&CfT{4F*7Jm`?DTaV58nQsO@WFd?HU<4CI}p zd_E^8_+23%$#|T(0nHJRi-U;gOpEn9RKlK=BflQCy?@5iloUXTCT3;{IM^5LY7YrTF49EoYy^^k{hwNwW!&o#~=kTQ!Lk>@S+qA)g7L&=( zI_bei?<43l8Rx6uj>~xpj5FZc%=@wC)Ffu0o6%FYef@=YNSQvB$b{$s_$>q{H=XWQ z+r2J5EEoQJbwV;B-0$n858+u96x>W-mn60I8w4S7JcJth&j&{d6c6PuEths>S7r_p zg+La(;=%UDy@;vvP#TysW9X@&J|bvHCa_7@Pp-MyI}Iz*k=KNPH7K?8)8~fY4r-dc zPIEA)fzmHS(YK3jqq$7L2yL8tRH)X%g`~hf@)xwU2u&DW3+O{RxU4i};N!{id;w8Z8s{n58C|SMn}ki zEg|mKJ#?&&*4dJs4H#&ZkbnB`6#M8K7M`-@lm7+MN3i9RH7iBeaq3~F>QUe2xJi@f zB$8LdAi`ib8eMS$vK>P+>ohe-aNr2`-WyZVarn20?K@c0zE=N z4H7~O`NmrCYEpNe!eesj*hB&y;K0v7`(H3N*4T+?cTK|dVoMPo>j?>OK-kpgmJoxZ zi7!u9;Zw%pSb6BaFuo97tY9q=VUJTC@HAfVj2%)D;HLIu1A5=VI;5N) z1gKCsuK$?Za75kH?6u+FnD|%*>k#!hW8OUH=NUjxb!~Y^mX_tL9Zh~ZR00r zoUjtikZ?2F14j8pc$dD}<99Sis~sed7(1FDi%S+z)?KV>4Yy^>b!#XE`T$|Iv$S}! zVLL^{a=jDTm><4#VoVX7Zu82hI8}O$3Y{ZTLm|$vK&3s~xhd4lfp}lrrvQPNT_@rh4$FMSC zm^LC&lGS6+5+~opFdrP6y~jjsc1mvR>-yJrk0WX)-q#yXnHdZ4G-dGqd$F~Iz^BU? zasYihLZl8nDTm};Jk80rCBI-*rN#3zU#D0H4OoC3N%pKKd8o;E?&Lm;y7nUTH6vE;xa_*Xd=pJ0Pc)-*I`}Zaqg^EEl`dARKHzr$F5xX)qi@`_jp)p# zkr18BkaoTLS_~oleNb+k!kAq%XwTv*B#rVSrF^ejNEFXi^{$$63{&d6dt87&dBh!$ zy6v#k6>u~}{CHkN?=XLVKZb^`=-(<12D;6iU_LP- z?i3cNb_%`x7mv)j_CsxF#5OSnbtHL4Cy>vJ5%JAkI-{+C0>U3^G`aCvn(OgmU zU3JZ^U7@Vh`NcQ}HUO4_l=m9DnN)@sY%=+$NdiGisM_M z7LNBF;ccm?Qq3AdJEsG%)@j8pduK3P$Q|Wh)7$B2P{z>35_XyN-=DA8i0f=~%S{ga zlQbYGodh4<-v{)iM!`~0&`#SMeVRyH47jOpyDgfYyUVa)#?cwrzW|AlFrfb~Yo+IY zU-`mOWP_!@=TzM>O1LE6DmFqlj2h%vU;n&W3Y`{_$tuzT8jLR+!J^l0z^fdv~S zVk+L^^k=>;$$dMcv}vOy4%C2>$Pkqu<$8N!LnDAxI~~ZiT;Wo|s|EFB?S8p{u#!@{ z@S5BiQfrSrdvYnHeO|_w>yX4g6rIj&;5D$zQ836qal>*i9rnFa2FX|MQc{W(PDcMe z#8%(#bE)mbvRx;Dk`1Y_j?42KsTmzjan4MlO|!vD>0Hs#6YX<)#}1B$X_^}`$ZZa# z9m<#)`ohPt?SXqN5(K_Q-#pr3{SFb!(%$#aCD)`pASaRH?F*mkRHPc|Jm;v1Pro%t zw=vk3cFQNS8nk2F17F=>SZ{SF3l^DnU5-5w36IA>G-k_J?v#3vmyD(0Tn!VPuxW2w zw!-~tn!nR}>ZPVc7XN2iHN`0O`1|MkY!F(tth8At_YasvklIKNjF!BLyDu>2B$}SBnJ553*loZ zFWVLvvT}fvb3Xdv_Pi7>wg#8Rl9NpI%J`T9%2Xs5?(kMV4ROHs;(00PJgFC>QjhTQO94 z`TK>p*%h(~pgU6{(6^$-cyy5Z$IXWNc2&Z)I95R(2{tK&B!BBF<+~O7h=AhAuFae1 zr6P*Y^`4fYwn<@q9T-9M$2TozFIdhOCv{C(Pls)OlH)G+q0k_N;6A}v-v-AkWJ89X zc$<9w1Y^~q{{$Jn!P z?^dJZ1L^P4NhhX^-#M>TIOIadg6>e}zqbok#UB=-&!Q<8{$g-t=E3M-7;=|BzF!YU zmtYvb5R2yYtU%kC^96gO#SW>Fhi}1Red?WQS61dZ=Dz0s&AzYwT2E0BRP4Cp`@UX4 zQGOOxrG~eOUsa{JU1E6up3?dzB8uqXlimF#+mp7zy)Mu44Bvq%`|d@Vlh)GHET_5a z528~NC>UxJa{AV%Fs}GMRW)>QpO4-5O!=J6Y?B}t9jYZg3&s||%QW_Sr;3ht*7Y`x zL?hG#U4GY30m)L9O#Yn7Gy~ZiN?X^vp2D%~N+^^F{w;0v85%aYBl%fX7r-V_lJK*t zZQK^oxj&LvkC&RlZdVS0P5Pg&li^=6N!7RRE=0xx{*rhLelHO-f|`Sj+4um`Q}xWX zIZS;e-uvF6rRsUc%Q1D5;jT@IxM2_AA1#enb)iAe0Z@E9+z!(oA!N)fR07HmZ0SQm zW)ns@`0A@q-nvX+`vV^ukjI)nu9K7g=Ha4@q!Q`_6z0&W3(+!%4&NTEg1j?i^Zo-x zh3%}pO;rOKgsUWedhJEEe}P&l9CSzlF+X7^9qXg%b>{C0Fc7Tg#_R`>4o_%Dc~&%v z-xJE!;piDV6kgcyI!9V=LRvoc99{rq?B{fAT+XQiYln1=9_CB1I!)CG)CAb^pcQ=_ zPEYDr?} zj;kLgGQIPK2RTDMT5$Qtaz*OWhh;~aGLaI0tF674}4WBA1 z`7YsHM7UkPw5;F8RDX^#Joj}UJ3<%>a;i!W^9T?bv{wJ@`>AC5+I4bnhOIjk=1P*S z_lRyyGC6BMVyJSH6RRoQA}D}flRQ?sdU;EGCF_Ka#eT-^r1-8Jb z6{<3)EA{Nzoco4_{Ec%AvlxNMz-8C(-U(^Jkqw=Y6$J9}v|-XTiTefeqalbLaEjI` z6oW6GIyvQr7eOxl^^oNnRpeIaiQM6?^W%nzs~zMR(SJy+ z0COtkTpMbVXP=#-ci7%>0iWubBl(H-jm|aFz*9h6@KSX9B`0cbG-W=7D*EJ>7s!rw zoK#xySqKowc*Za)WegSXuJG&myhCpuOsIQlNuN7SAFTt%YH7(Bx(-&?{MYyZ0#T~2 z?ohlh3qC?uLXp%g6>rxk?}t?X|BGU<2d5$k24?=yYZ990aC!!P^eXquQyX zjUNVdzd2-ZU)qz=)lS_*ZKFaRg)v1N-8ZU=g?m~90 z^mB?D@f7H29gPo0k;-vRDbXCs5uvr_jP9#H0%{nZR=Feb2w?6^;eWHDIWMcSxeI%+(`PXTe`=*=eOaD z50^thg13-0=zkpR*7rY;{j=&_$F%$$<_%?cD#h0jw+%pr>=N|`Ms;aIkn}ikZ!D*0 zXr?2xhaD?TApLU_jBqqw zN?sZ!tRkUzk^|%k=>sP+{T3~xpd|{94{x$8L$aGzY?>{7$g@SQmb{5HMOi)SS-)A_ zir}ATu)cQ%G2gWYt8}1o!sdVsc|C65tI$?W(aZG%#(D$jg^c!hS-n7^T?W*(&9WCm z{Y#W5fB$?7IrODoumFywXL=P_h`7T zdi*`>d4`~UX-;?%|% zp{A;YaV-lIA$4_%zz>5AX*3kW5&BdnLtClPP3ls=fMTwFibVR%90MbSRtfoPeE=!9 zq1LihvRT!*^ruZq4pFDmzu-nQF^xvwMMDb$ypX^_2i<^}_dJ33U~SsoFlw$)x0?ZsosnNeV{8LnwZV)2KDi$j!ge|NwOgt1b8nJI*Pm+-T;e=(-rgQA6RE;&i9=VX zpy|MB@J@kW=f_+dBJ5ea1Z8@*1XDuWc6v<4vq;m6B&Khl)OZE~2yJ#D-Svk951Ts! z?X~}7`7zfEAI@l%h(EpHWPfIB_l_%@Flk`ZKl?>-x(U)4gKGRxM+Nv3K{HARpR_Qi z4y#W6GB{t5A_fpG>PKI~TwUO@8;2w%O3@i0qU6q?D7( zYhJe4BLVfc6nZz=*52X?5vPB=Ngq^fvNl29I`{On#!e<2VGAGVmD9KL^o2X& zH(k{~jtODU_yV2AO|nqpc2I>R%2O2tz4}+d=wW+fU8Xg=U%w95Eg>WLvw=2O+bcX7 z(?I$m{|0U7$dCKOGgd7Hv4avKO|Hl!D@i?~}9bjq{q?IBE;V;YLWN5d@8Q2v@r78qH(Xun1_xbuE(5 z57Y;isAiH*fjdsHuE3k3klfyLlFNHn)Cbd)wOxKwb2@(eV-gHn&6^C_@;t>T~D9**el_iCOgJ) zVI|?ia8`7h91+nHZq#XfK61-BTp)9o4Na^`w1 zdHNN0(1Th)c8tLK(yPlRLTmy*d|iK(M?i+f?DG*o_E8F#o^fmVFJNEqr@GDht~Af(jaB_I0b>!LeGLDcVv>&4cZiRd9}3Wgf3r;Q zFj==!I7~l#uiyBlwFrW)(9IXW-*MuYnz*#C|6g_rRgI86?D6r}lb~Cti7>Do`pctG z`X%a3V(^+vH4i_#4Gt<}uLh)7x=2?A0Z1Yid4&HgMU>};h8>Q7aK_APrsruS`Kmu+9O z`T?T`;@`rrk@NUawfX4Tbizs6sV@fq-({tKRjS#R60X#M4f;{(pbD5ZztO3DZlv6d zj+9v~Y%7DZcC05O;Q7T_nu-Z??&4!jd6oF%4fZ;cX5i4k&dMwFv~)nekhLE z`$1Gpm4TE4d5;4kq_YEF;JJ@=?K|N0Oz|J=RE|j$XHi$3-~7g=meV>DCcRix;sM5ZICE_BUaJFgq2>(`$gv+EM*5DXE zS#$apz#JZKJ+o3&ZZ!=XfErT`f0+UA|DW@O>OrkmsVMG2V8Us$ZrbMlNitzw`rIyL z6)rIqhV_!A&#%$5=*;O5rZsHzA1Zr>-h86A zuDNQb+J@A#smGu6P2SJsEcUN^F&?Z;8|VVc5jiVq`zs0{^sK9PIW_Vla?HFa) zbV%BaxBmhAi*|1hjeLUuB9f`|MzMV$Z2HGo@+(i8B}5;Pf7i|zf4dR%@mdAD5rNhB zhfLvgg!Z*cGRDStoD!c1PLWsqpru21gzSvdn$*2*43MO)Ucbmbb6d9fF|Ue4$?qZcz1|ecZQ{j!z%eCPM;kdunL7bg@YijUdQ-K`S)A zw8^pctt;$=EjV*W$I(SV9<300xlcnruQr(PW&NQCC@l1xpC9pD1z1Nc%9 zhQEx}9kHkGVI+=Xewv>6;mMH~ZOoNf1tN^LUdf6>s4TIG-k6A%yFR(ex6Zbt-e{)Y zHgmM;7Swz){4IwWC2#-ey}6n-6JT-55+Sp(Q;(NJLuPbXPA*l0z_Nyco1cY-MORbZ zQP#~a|0vI-iQ!9>*N_Rde&Tc)VvUx(Qx=1kcpB#5kb-RLaGF_omyqu?k?&BK z?{fLpF8{65=39r}w=N&1b}{160>>9|J&ru2v}+PsA#H0WSwU)!go=FxJXq%IHd(>W zj-(@fu#M<=>qdG(a*hNneK?JnTI*JN!Pbr>RedOp7|{+`cD>AvI1TG=OM(23ct3gt z8}Y8!{R9HwPtkFW5rIYoKx0@58Tmp&z1nZ zQ_Oe0j2<{2*IiozxleIddig!@j@NyC0?+aydwhj9m{>MQ74gDML$Ka<8|I0@u4M7NdY(_-VmHkCG+7F3c@l2VdX0xU@^Ni9h(0huS5 zr{%)ZOG=5MBaa3SJT(5HArg6)zbN1WEv(uMyYY`tb(w2JnVJ{h&e60BA_7Uu#fnKx=5We|B(oV0MVRpL>vdfP1K+ zzhSUppkc_p-+j=1zIztsrbkw3q?{wuKtKl2YC#@6*W|9^zg zO-M)Bzdcvv_%{Dij_{xPhuz*`(D!eP(2Ycw;=h=k1$$##q|A71u9}55fXW&ub zQKY106B!hmUZmHU3?<50@cjG2#`7OYLlYWz82k5zjm#%#BjCS@2Ra?d;RU-`2q^S9iWfM>-1_6e_D zepFA2WqoJkPk`F_zvH#=yyY*A|1bEt{hz!$yTZ0(`7cw&-MEaEi~J8nXZ|w|1?^^g zc02#C{QT4J<`#!fzWmo{J#piRV)@Vbu>1*C_HAzy@}vI?9G2K?1?}hW{TW{9f7o1c zAnfG-8Nm2YF0UKp+Fd&SDP1mIuiqMl|M3V9rkLoNd*S6c(*v{rBYyddo)*i0hWxUU zKR@ILqW=T;p7!tZMB%0Hkm_nU{}1}u?g(LZH%-wn#1 z`|ntA|BdVWRmHXMJAcCC-lEl!-I3kOf8>YMil(vqpW#1l%jw4bCtS}iYfifVM}Gba z|5;m3U+(|Jb^MB(n1}e^_^b7))0Q@b`wv_Pi~K5jy0Ybr=8pbj*U$EK?y_5r$LIfm zxX06`E$z?pf8g4`jamFm@)x3KqGyOQ^qm{EM}IpvD|&W|)?jKPWFjQ}55)WGO74jN zf#9v+t@Fa)r9aF64tF}*pD^mY>;`oQ@l3+)-)ZT$C3uhaN1m;tL(4$OU!_0G|H@K; z(0|6>MYngq>lx_1zjMyjV45ZLcYfNAy%sxv75*&#&ADF#bK@V%vV_Roi25!&{=)jj zPi}7(arMalKrYcN{6DaJZnrrl^qWSZpXj?0m0ach1GjgJxK?C;AlJSvw(GwA8RfqL zZns5lLHjFpXmz7XOTFv9Yk$DbgX|x1rVn5L4gAVacCYO>UkLvl?k==HFuJ<3qwMz^ zd_R1@$8E0gv*15)E^N0+C;UvCvR@t;Nz^l=`7b93Tr(G)wlMScC7yd8N*0O7S%0=8 z{4gF~-d$=p@P7K60$dy-+B+MxwfhA=K-~i_qW5OimUezC*em2Cyt$7=&kwAh^#59O zY16>ls_)Zw^L&L8)IIFgp{Kp`Z?$pXbA1?U51sa_@284Bo|RkPVe>b9>;#A2J}bs0 zxW6jo^Vy1JI1B&rUwzN&aOs!Ie*oM^U(G5!Kj3|5UC^&>vv|IFf-S@y-UaKP{@72o z{CD-<|Lc%#z{6kqp4IG6bgU5iRu+ z0vh5oiOS8#FCg9D-;4b9@%|uZPr{vpgJ?4t0v?JO!9ghFoLxsO02&e%h6jDkCm$%i zCh|AcBt#w<41+eH?F;QiC+RCW4c?{MALW40!jx7;!QGY8+CgM*H z?VXUw@Jv~4W0)Mo-+rlG`?~HI@IMt>*DWnGdsoMA_4rn9&*A-FRJ#*2AB+pa9{Lys zsjA%1@LpUb+=GW1Lqa4x0M+p|qM}pOWY)M7FDRHCO0>Jc0+9+z6eb7(1|z^m_z7mU4^V}OHOve`C5C-I;?JN> z`AM>$Fpv}KFWD06tzX#{8LWPc1WIzLmQ0$TK_t$DRUzRy1Q4J4Wst{|h!BVnm=IJ#GFU$YgtSiv4bO9cNVs8AaFAY0 zXs0;!%=j4s#i7Ex@vI}C0}Lu6FV$Z1VUh@S;B#j; zt99qEgx^~%2h24pWf^ci%^Fp^OhEFDufop&K}(SZ!-M#<^HC2g<~g*>fa_@Rso7+o zYrGZMWDQc<=}t#8euh95F-gQ2%%7cL5REc5yR1=4H=R6Jo~&4EH{I=6hDd4%1ER*+ zI%nX|;2@T~gu11_ z6RM{971H_Eo^`G&iG$2qQag37Cf3goD2McX0V`(X*5}eL)=2&5hOeqVd`ER9?CS z$8E;Jn0$VEiW%lGRmQ-q7Q7Ya@D@=SG$*3fnZk5n1`Ovd?!hO8pbQ^t*EyPMg+Z=J zTg=5R{_n!fhMwFIVMPD4!>PRYA;Pz@2g=I%@4>jPbaX1p zvZ9een6TUKWzgc0L1*66fq5|Ex6lXe%0YS9VVEzd@dwG&!Xtk*awlN0o^`Iqv&PzH zE$xzsj8vtORW!;6bGnYvv8y~5^I4>f(fLb}yq2{{$yX682$8&%IzU$yD*&sxBG6-~ zK8Eszq#)2!7fMJ+CY&8lK^93!-^L#Vs6rKi@mxjd167e^5mPYfw*AYydpnka#i7smGV23gUQ` z_bG?xAPJ^ksPC1HsR`!rp=<1wV{_G$x z&k-d7J~u`yQRSX1%+K z*M#y<>R)U5q&2k5-zkz5GDvHDEJantDJ<7gfiFW+ovx?|R);M+sGAZk4^qEudbWv{ zdqF?j$ThxJKid+@SLA=$?8|=H8h+arf7`Nu+p2!s(0QcNv+|@wX z(|K<#GRsz_N#&iKXYAQsDo)T> zKaEg>kD*`TydN@<*!A1$#lFqH(l>7P^9>#QxT;KXVLkpaPrt293}(*03LUZ@W)9)g zstyJEQG*5oj4rwj`P^|SI@%RKV|Oq!8W-u2yA}fSy&z6!CoVD(?$temMEJua(zu~q zcr5CDFiueSqjD&Db!azScb_Him6;`EW>>!PSDV!X6RZ?=nx#}AsdO^%)db_X8x6#@wZ36Q0345$`n&JDxdSr zo=U~K=Y^}#9qYU2BR>1J_179Kl{I-DDl^LPU~wS2Jtj!0R zLyzJL5P8(E&9{GkQl@x364s0mzE{H87=3gOz4`p4`kZQePU$|{falN5H%EcOME>>Q z`J2z%qrJJz{#=hXx1UeVhjL?ur5=gFyl1;>qlv=s{&8U58|SUjj$BHA)JNi5XH;5j zni6a-b8MDfhVH*6Pj>rrga5hje@p&+JpV_=#rzLD@L#z>tw%lZm$TiC(NtkP|0?j8 z8|UrOo?J$MmPfr?XS9F#Px(vobayZ}TKJ#({J^+YZ9sujal+;;#DEp2Z_5$LKBD&Qg9PACg`>RxJgtK zgzu7J6GA5VBobkh7$z_zQj!z&CfL~k$w^p~7jGqdCpb-rmnC{9Nlc)YrD!H7O)v!k zG?U0CNM9w3C-_YWeI<$~@l4=+rOYN+O>iFoW*o9RY>4SY>L#Qd3Af)QaoNz`^oyBb z$R+eJ#WESr_p1WKnT$jGoiu|g4YvDbpFczy)%9D=1XLOh_v_4rRT^jad(8yf7(Db# za)sC!74(~N1=<)+_G@y5+ZadpyVVCB865U2)`uP$HTT=O1soan^}llqJ2D3K`?&=Z z8(jB`UWE`Fee5^93M4jM?N_-9C*I5=-hJg1WZf@g_p+ohIBQ49DNL&WP0q_*4;rVO zU2;4RA*Vz<3XliAQ@R$pmItR(>MX^q2c=VX139+`zf-b1MS};cQzja@`wg2DD4yc_ zhRP{-lpO6w;4FcaBL0TqEX|%=>4xhp<(OjhhT<$Mmz?#6_bf@D;^PhTS%xsV{SC(% zu#MvQhW0GyiJa_4_zWY#2MYG~1>YGg(-vc6KQ}_cF*>C%x!^70n|{`QfS)+z8GKY? zn{pU9ST;ojMK+JrbS%Wl0szUU9Ac*~LdFm%s*Xfi`l45bS3VCZ4UqaNpxl5!ql>US zP(dA;zZCUKMUXfTjt3Cy5SXz>$k|0=6(}`@#9E57qQdW!hk66ZmM%l4o{D8S5QVBM7 z2yqJ{afb%9~27LT@i$~Z_m)vXN zmG`hGq|6aY78E`JSpfMvcv1nvYW(xV*LWc>}mm+e}Jj|367H<->fmpW| zo+>Gt=%y9`m2^$aIt$bB1WgQP3ytv{O{`@L*KyDcy10b`d&UfAvV|>s@(c#D#oOwv z8LUGK-|AE@bZ-lB$22a?5({I;L@o?&3pK}FF04@t=Tl%ky1s?nX=Z(r!-CGs5?d<1 z1x=%(?^L7~0jCfY|IK;=`f$wf^jF6g2*-$xk0 z;Zt?Wj7t*8FQ8`K#~*;_(>%+LO9mHg76mCLlssawMFDP+Vd zf_92H3ITiamX>^SI*}v5nL_76ls!F5XFjEcxDk+B5ptpLp4h%YlQdrx3sA98u8?C- zb>F8+zA1(UR8_=SsJkb-Z`UO26;TDuDYP!c+tb;1ZBq1#uL21b5f$3+N$#6B$=pTT z0oj`XGzGe*I!y{@d5flYP2#xu{H8KZa=^$R!0keB6WG0XZycMHG~<4NG>YI&T=zuZ z7<)<2M3Dkr3#Cj1_f+2ad&zUfkb+{1Xie1iWae$WWa}exfFBCYO^Ej1%)5Ch*2m|7 zNQ&@G%=ZBErd~2`(eHqQg<2-8dm8iJUJ6&S??4Yl+*{K2gQ*w5B@z3f?-y}PQpbY@ z7dZlgUs*?G$@NnI}5Bhl+#=eH?-Un9VQM54C-# zHD^TX!a3DR%wp9`w2h|$GZL=BoEppK!|J2j&eOUxVwa(H>JMfgrn2fZhu#p?#nox( zzTvM6uhR;D1MeE;s%~zUJ@rM~+*Nc2@HWU*17yBDHLdOL`gTTqIpk8k!R+f)_VcPA zN;6V|0hbzR<_}Yw+Wwd7Tq1(uDC(?c!BZ7;2A5Cre#;dOG^JvRh zS8CT84->vdZLY%eWP+ytm#SAvAJ--9chrwJS9FtHmO-H?0`vzz$1X7=D^H*UYF z`S8wel5E}W!SctL{)Xa%!jB2zHMX3@ZwzLk567NaT z#rV8dMj{?NcnuI6g2y52;aHFXV$1N5DM$vrg7dI6&H}L)pVssqwPdlAvDz~YGU5-N zMD-4~Bvs>nw6W>0z}Gz~@4afts3!VocQj;;AAXY2JKh3x#QbQRHE@WJchc0m-IC)- z^3i^2kO=?!B&@fqCGiy7-lnBL6W{)%xc9y#{glAo&Syv$zwHFryV{Z(c|JqKYi~Sp zT2I4hZ+>=iRm^s5AbT2D{H-OK9`D$Op}#pz_N1!#tR=II@Yt?=$U80LB&T?$1yqK0 zYx=Wc9K{8;FGqGPiDtAB$ZZm zl32Xxld_LNX6rT3mnL*lU3~15wNFN7kLwfkriV5o)+cGcgEsTQCyKYXB!lC`a>vG} ziI+9kkfqZ+L+<>|j;v4p7n)pSyY}6T%yZ8jH=ouojQR#Yy6`gK&jC9sKGmKt^^I~m zKpDH|raPuSUp$%h4Ocp~GThHKcEo+^ZmFKnVYSa@d^~sE@%H(8OTTL1*TtP7e6Fyg z@AEnIlo^*`)oT3A78iNd&heZCh`wqmbM_V}@6$j{yJ}3|eytOA?hADCX)9t7HYn>t z(;++;2Wo;p6;TQs?RUiM+?^W(4Z)43Ou~lgok}`p=W0LzxYm?f*m%BuRHy#j8R!dc z*`{kV;O%17VL6ur>Vj*wDcX!YJ3i{HoLd9!!A;w&ZH559$?~m+N;tnot6ld>A-`F| z?d!_@TVHF<$M%eH;ac3C_{yRiV{5=;w@$Ed-OTQ2BnBaz_vQY-Q&vh8}CEa$Bw2j|6049+{)$~^Fz_c9_si(l$LJR*cB6ba4_E zt%5se5K`)a?`vEk>OSyW*gS|>6Cv>};*TxT1b1*D$JB=!)O>*WY%8d3v)FF6h|IN! z@o7;pxXTSuuRe3FUJxSwJFkcBal83FlHVd3!W?9f8*Ipt7s8?~dbKx&RlLZz9Mp{~ zri4$sVTE7O3y-KNvcEzVHfV*vxbjLcvqvKMZcCp0mBXa|I*92iFkxB;wytv;zFP%Xf66|;P_X!W|*!68eFR$X2ryilB zcoDGOrQe5$qfnF3&}}=2SxP|+@@y#2B*JYI&*!yJlBqjjhepM{QXWttVBohB#gP&( zJ+OeBCjOq+R6sQ4a1ojjN1;5#PH4qXBTCXIUwWtwaY;Os*J@1i+QB9?EKYE&-w~gX zUr`jR4`6Z72suoAo%dyvpw^)!6d1=kHh4;;!_QmmIGFcA4gPzUrp57v2)sEyAD`OT zKso^*zq2Twx#->j6XbH%c3$&m!V8C)(3}yPv7vcFFMfVeGIOQ9Lt==BtggH^XW|zQ zilKocylnkn@ZtEiI?#6|@eh_DyRz;L8_)4$9CAVvM;O@#J&7dw$vW_N`@Ukj=d1upr{VE%_u2ej;rl@u%Ez7j;vxZ}G9uD8GGX2z9hpX9C-_9^=r~RD| z##)co@WUZgrSseH%PQ|r9hcZ#O)Kp*v*vS0cd)ukFY232KMj8f{ceYR`WJ zaTS|N+Uc)tc)q`bF<)X_uk?n_a<&gY|KaP<;fu}EG}=ymZQ6L$3ahn*wqAY@tLNMn ze)z-Qq3Z$9&I{enGsR)iIDns&f9djOEr%BAT5x|okd{&4Vk=N8r}Jb^4JpTip;Ju> z#bc)oZB%f0EwqHW<-#RUD`(|ofdgU1L$XtM6vksW9ral7d@b0V-shq+P$_5lWd1X9 zs|RYQ)+pl54lmlO;OtuXE(`cVAW%PN_GIxK@zKMtQ=c`|{~bN%N4T=tm~V$-KTuwJ zU`4FN(6#U?Zw$w)+Owy44&^WD!s4tflwNR&r8ZEPem2qt2ZM^0&SFPuD{<1d=$;#y3#XB+3HBHl3w6RU!xOd0=7oKhTtM~BG zLhbLB0x5DyyM%}&ecr{~y~IB+>S|;~rt$g0zRws!uP-CNTM@ADJIx;ak+k?W!$?w} z=-bv|OuFw^wrG2Dv&-0ao7U5`Wo{Jbn;j#?Rm^YOy0Kq;Guh(pX?HG3+I?C#(^lP4 zk#DMuL{~|ew!C9PeLsGRIHttCd}ufF3+j2mWLnoUmT5zjyUo^KAZvg1$OF7AG351k zV>%uU#{mPX^V?o%o@wq$>xZL&b*uCI(YVgYdV3$$=DPhcGVkmSIG%iMe)xwmgYBz}o{;O$o_c2> z<7}avY>37Tn*(qb;RWU>(0k(ovE7hNdPf5F=BSm?o8e>)8bmygNK3;6pcj z)%LCgD$dc4Vco;QJx^wFI3mLjhlWyfG%!F#MPlmh2-M)A`h*b<=eG8#-H(`*CyWxx z+|gtWDGq6=cRWyvhvo#c4^C*UvE7}R>?Ry52#OX?gNNRtdq5Ok5%JE^iY;t1h`_;% zjc5d6rzgGRB@d%Ep*cL`dX|Ag7LiTBdC;(<-zO3l1h<~h4xvUm9(+7_sr95a2|dEB zz@eaXM^6WWDuk+@)DGrGhDIVSc(nD5H5omkmVm>cSx4U!Qac2pp4blVM*159Zg~H7 zAbQsa3IaQ1OGoeiAbv5sB?6@NDrHRf@K@_O%8E-w3<39IJ&yjR#H0usJ;8Z=9&}Uq zXyH2RiONy}ga?6rVh^Vt7Wg>`u|3Io^d1baiIl=|*VD&j1&9^`cEuJ?eJse{A&~S$ z=W%$@yAZI3+pVXLiMJ4X1Ptsp$~WEyts8d9&I5}hc{#kqG0wcy2VJUDpy zppQhMb$OnsG_nbyf;wr}qi$a7LFa}ZZk{`E_+Z#Yvv$2b(P-puMMdl6UQfK?5`bI{ zE!n(35dfpViz4f?K2h`F@IyWBWL*!w;q-xO3mx6OKH&sov_=beDV=EDa6Y2?cM7lP z-f)YZ>Ps+4OHf*LGii5Idr;AlC!ymH&`D5*CrF$jTNb7z00xmf3!{`JtdLC$6O{ov zNUnv!V-iiswuQN4fG{LqlNdG$8f0S=AR7P|$=M|Ilf(?NwMphDz!j4BR)m9uBC`2b zk^{gF$$cyEL?Q>-ek=O~(2C^06^|ex3R8fD5p@9IvBF9$)siT{z=$r!I<>$}jM%{) zu%Jkc0%Gsy<4D|DxF%BQC=~)SqhiLnUaHl8?kE0ET_XV>RXL9FQrD%WpER4sNn$rD zYn=L}mP=hf$uiZMgnLxWIP^>Xi^hI3L0TkSagLg(4xqz|j;^VGt-=C)n-af`g<}K&^k@^P&}+U?kDJESFhT)L zYa^>L&%9HQcg5l~@&ydfp{p=*=}g5bV7eM{0G8*VR9Nfvrs6+fp&02tuh>I6PUoim zI_`NvS0g;Y?BYVKm9Nsv?m2PdE^EeF)p6w>zIEx+5_f67q3Q}B> zP5N>AoHs6UyO?h`U;(oph~v!f-nqnUVF_-y0!BTs#u-<1F5=uVeK!OFt2YqitU`Jh z@$p#D8)`l6H^l68t=cc*K4OY*5cQ1Rpt3Wy>c5C5!=l_U@9Dq6VQ28ujfoS+G~QtC znY)2!XL)=Z6aR#Tg()U4U)o(5q9U)z)14BcFR#$uT`K{{E|{qBO?nH50}IeyDPhUZ zuOjnJW(wOG3#Ge7!kJxoT#-rI1qT_+w>!VvpqhtWmPtk)TMmn(yQbTxTA*6KQo0g{ z5lgqbyxXpt&r!NkCJWmd3$MGW+qGKAQOQPH0EY<6zPq^Fyqfn^&PL`{H77mRVvl3g_i0cLZOOf`SH%#q9vws$gYcdLnGweTB7Vrfkr_+;1aJQHI_o_Sef88>XH zWWnxg6MshmUimEPI2_t!weI~b8%LTi(pd^s*tFPM1?;6|q}(w*e?m_ei&5d{@*IFp6e~k$oVOrnU!<5ELF=z^r0860@KqwoEKtkB)UZ&U*t=7ld{B`!7?c#UE zJV@mnNQB&2jVzdL0ojfOr4exh+mH{-Fpu>SRDJjgbieDO>o%D z!4ze6dS&@^#3)8*F+@{Hx-urzqUWh5AEv|!ickg_zP?wM6e(juV=(1ZW;_g%oQJ6$ zoO!S22KBXu7C!~Ly_6W0W}AnNu_Oq<3tu_dW1v#1ihD)7CJs7@2A6BCIDv^pgY!CeVte{nfCGc2zn& z<7+v?A~TfA37fF#jJKa8ozZ8k6x;cRJ+(i6fg^hDZdkB`Xfx3gHk_gK32=^8Z}k*v zs}uBn;l(HMOcFP%^9~kUmAMbh(B8E=a}{;%LLZ2(ti>HfGDCtF7#yT^iBPSHIxuYI zc*?&+^wln}H`bG7jiH7nFR(kv@)Iapn|Ba=7vrgT3%Of+xZdJMq&M~>Gb70J?=Uufonu!9^3$?kBXo#d@qW5p2cwF~TeYZZ*Z82x(Q z2t>S#n@8n&2i9BcoCAh-j<>EJRTc28E(+^KRVXbJu3@uH?@lDS(N_*6+xeG0JU(W^ zk-0dp7uX^COne9%ZBjS^G+?zJptf@_JKj|B!wb7;t(W{j1y2Zutu|?$NL^z*9{3p` zJqX{#lb-7PdV!U4QPd93jTn3}+zMmyO7?$?Js}YLGS27^c!R8`XkVl*G0(#5_KMuExrgP*GQC!k7lU0DPv>S5-=P) zTOE2zTK`(8N3)lEZsCSt5#QfXchY}uqi9C8D^AyLzhct4)hROgw6JxNNo``2jG$nJ&yEq6 z7^s{dx($m_c$R8Oq|&a|r6*O0P5FWg6hMwK`?ztOg58eAcswf?q_kk^atStg3H z$-|b8QM|~CoV&f2J7PS`dYI;E8a$IW-EYj`N4V}C<9NfIhjAQpzQB!e&-TIYm^F?q z;o_w?uNgVp>lu-T$PH6Erh7uMa4YrU?07a#v|wwc&#qaWo9P*^gjx^7J7(X)*sj$0h_WQDWbsqxZJ-W__?R8exnTNDmY;S|z zE6Yx*I8jzUoAut$=-ssIpp)sytx;BBlIfz{bX)b6Xp#wimOTAZ2i5vXvkx@mbu+kt zt*^VdMr3X7WBon!xDxvGt1FD(r?|fO8OxgiK0IMv&>G&M71(MyWVMq2wD}U^@e^rZ z?u_%zkQa`>?(rJgp)uIn7eHT0woi75b~k&4_Fyh9YbvKyW;>5y$?2$|P5^ z(>$)S-J;W=v96S-tuB48E!uViNikHtn);YqBGSB_vf-jHgORr+z}CJj?K?6~!$UFV zRf_rqi~3+rr0k-zDuFj7gEgxnQgcv>n_$@ym+Ioz!fGjLYgQ#bZ_bIu!=#RtkeI6( zlN$GzpTE++IfCxDB2(nL=c!pNN$L^`&${Z_s`>ab-j~wzJAc3Vs*>M5JJQ^!>htTK z*wrF-y>NcS12y0~8J*daqN5a&EKfjEoQwKMV(K9OnKG=DVfh{%AeGpv{D@5jCp@{F z4@!L)qvRk?R=rCl*@}-)nOVxY{JVveEAiX1ssglW=NH9yaVk^o?1_YYX3CU(K2}HC zk_yDuWo5?5oX$tZJ8|MuosLO5ye!JreXdrUjZ(HGN@dxbD0S{W#i()mQ{%T}u1>F9 z-OLJEMu?}T({r16qgC9^-yEz@sVJ4CdhrTQEfN$9jW|uszDd2~JyiBLHzr)O0YGPy zSSEaiM{&CiUh|kTo6$1G89LU@u7rKW_w|ftN-yu|n8&VZ z####iD;v!+=^R$Ut+j-H#Qyd0EvUFzb@GLlPR9PA*k`>jmh~0r!;YziUs!O4oe3;k zheVO}{B-uB#$RdybdJhJ<@7Es%PI(%o$HFWt5|9~r!zI1;KmtdrFFh%h*;}QT7Ix5 z{ou@8bXmn&+fkR!)#Nr#Gb_4q#3!n&w`*B(NNDT4T=cz)wzlgs!>vhZoMl#NVe=7m z)f9R4g=5Um-HmT;L<)Wxu%FQUg2c^wKVnf#YT1r&2X)-hJxQ^#Vob)}mT%imqGXwQ zKc*Qv+tt0q`G=p&ieL&$W8WCy+N5bK2LM_|-jDKzee3$M#QKM=%ko!{U1R*1!nI}7 zcB@3gGWUMmJ>;^haEbR1_lx$2RMMuWF-j!{uOk_8C4uz)GFm*rbL_(19L$T(fi)?hXh&Y0?v6KKQ+YERaLuo|wuo17 zvnCgFoIRTz?d(YGN>QO*%SwGGCM$S>8EyMa&L2vPRi|-L)_OkCwP8;Uz_3RehBiz#1Y8KJ$qNB0D zmfgm2m%>Bvmvnz@?rWtj+(&|?3E^Dbdypg1laAftYUg)w^Ovtr=cu#6S4*a{8!MR_WpYW~`zZvchu1lc5RoD!*y|{Odhm2Hz>i0X*>()17Z760q=msf z?QWON!JcbRhFOtOaNH>SEJN?!!p7Z=>@frHqQ*n)G6a~EP*)b&` zoCd^$`Fzr8VD}E2sXIED+EYfkM=n_M9j?pC+522A7~_^#+KF25)+ZSTzVC=^dJlta zJ$*kR+ap}<#CC|b(DNj5!_%Gs*IZTzv-%c;vDocCtI(wlI1mxWg-*7zSSuu(?>(uCdy;?;dq^HA8K~` zeN3zsOQ+*n?C{plf=C$Q`*wI9C78}7gDjloGwTbbBPeI-PY$X$xgMxpr`U#Hi{M?oznb zYD9TLb>9(Qe+T9kP*x3*>K9%=J+t@70ORE_(s#*GX?WBXqS|939Am#ALq{URL(RoP z)K7iA&Y#2r)}9F0mkB$O8o+;~NPqbxy@MbNl=d1R9H5zh=}GNf7_k+R0?fjQ-HJ-1 zcJHS4d?`9WBqQA_Z8|_!Mh*KCrO2Q#6g#RG)R}0fN;RPs1qhQq?YE%ENT;HvWC1JZ*0UcbmL4%^IKslO);)mNcfDOZNzIPi_})Z6ev((+cK|P&_+sl z%f99lF&baTjE_r}a4DxMa4z(5saB7uN{SkfRi$qdXOOynQaTE{hY2Gbg~lrw-nH8c5(78uO4O zz#XON+PpP2X-SKT0;P^SX2(S8n%XQ;Zf+P7kg?KYZD^PpwZzFsaRUcVHD6J$s1)~l z_t$#(r<0P=aBLWxYWhTdiyH;+aQB06+}@zC(mqdMGF1V`FvaNusZVul zUOy@Wd-VIyZoJl(~ql6=+m=x$pL?<@(x2V)R1MA(Y zyh+-WQdpVW+D0H^CE}FiNGvA?$9IafRRihWZ+SC4UhZOk-1gZ>){_ROL=X6Ht0rwZ zy$aToF#}Z$_&71YQMaQS>K}f-{W~?Y6aPMte;{E=foA(%P1KUo3=n=m@{Da>m6V#l zf78U>GwFy{DOr5m(+gkhlRIOEFYQ8 zrO)+wy)#m_eJoW|ql*Kd5QE?$7=q{^0@Cj_=bzVoytZBJHT}y;7Pnyp)fDlu_gO&% z+n9QE4d@cm(&Xq~luR$gB=93k*&x{s`8GNQQlzw_&JeAY{R}x6$dANeLxW2b9H4M; zM+#nca;mF0Mn@qkDLbxnGEn%4QHSQ1rchBbP!0qR$|5k(4#W@2MdcwS)s*HJB9&8> z#WKhd<}oAzOUnzP%W3xG%H^<2!zALZWNb?7yQ2@JUzS!;#U9Aq<=rLal?Ix;u%b(k zA(S!8>rDzRjWmI^Vt5muAyc1+oAkA`XbZuLnm1NQjwO#PDYNv$7NixeXWW9^N*-#` z$I^l=v;(T)AU-+g0v6S{CK=?s9}`KX;k8hhh0}==I%qOQ3W@Rya05lziDC?*vSoy2 zg*1ggzC=wz5k5=e{i3f4qI~ECMU)9Le5C0`lL-Jmyf;O12?|Yw^F^5n;!Rjz3gHuU zy@)*vcN4U{aBd6T6ZG%!VGBPhE8k&+778nC10ew>^Ur6kROEqZ)FuEGRZX}elT;NQ zP2|X$u+oxB*aK?oc(0+RJfT;-2aJ<>eynv_v|2>iAP_PT#fA;g zRZo;6tnwjk=z*~j7z@aOe7K{6*+ zjJ^7T!3^RbL;6DYA*FAO!BeSLM+o9WBAS%-_U0Jht$OV{A$Z#aR>{n*iZQcW$yz`w zv~B9K)Z$j(nA`1}T5&(v?o)>rLD@e%ujKs`W^6C9K5_i*kguLh|s;0ud zU=~KW0>&tny$qw5O;u@uc62)hnNg;DKqKa+4|733=-djLqr~@eHmI6DHU^N=RTYFs zdGA$k(0k>31m`da6_`iq?|pfN<(2m>@*M-cR}oXdJI3e&?m?%$4>b&4&)>=m(GeBI z4{Giu*HGS79tF12rS4Ts1hmqB-)o)-_oFM=D^ZnbOMMt8+h)7a;>CSXQw)4DIG>>M z1>qIFmYCT#Tz~!&>YLPi^2{^3E#;iRtihoKIZtFKMlvYXRtV)*_)0LG#4TPa10x#_ zRMjA~=kv+F+;Z$KEsYSUazbTg4Kk#%3{gW3UAp`OD1e44UGap7V=94cxt_8tPRK+# zOp3~7SWUU8vLYwuU3q^dhjVEE6_GL%tx=8c9RbF4VfhP{q&{)w)bc zL~+rx>~{xDv!;7N>?zzI&F;|G3gtPG2MqiQb}@2SWXme5If)#S%!(*cc2`}?ni>ek z#pZ&P4zwn%)?ltvYGhA>O2%_ zMTEG)0s?wwK>VNRU&-bI#heQwf2KlmGb!if8}YqtxI~Som5xh!!9F-g0ly9j5&sy3 zh-UJ$=-lCkS{n7MOiSaIynvH8;r%G);*SQI;8st=nl?!Ss#*}E7qmie*7R6J*HNjg z^!t9=d8Zd%z^FGnr-w3!)*#@Z$ znO3Sy>m;>NTTbQrxC}j4YARv)U0nfbHE`!k&7p!FN_E=QeL^|#k7v=2B1gZ(`Gg6V zhIhhis0kO5ewlXcIvQ{zD;<{%$ZityRO=&J04sN@?8&niE`Hs0d^n1_BQl-N3{Y-j zwN-T@X}iYlWL{DlEc^Z<=(uuJe?qZ8Y3#QX>?86uYAa=iczXD~8_TJ9=z`4zQmo_e>s2c>HPB^2dV^;%UJP3Xj;&*H=9 zxzHHK_`zm3%MZb4`6@K;Rs34sAKmYaxsT+-^|`Va_Um5R3FdlfJ zO??fvR}i^5T83ky4INF3Fu7T+9o38QxY;`#T})A1Ij9`zO&vDYc)qo=#tzxVU^w#c z12?vKP~16~hI68A94+?EH-_5~+&PJdHlwK>-S<5iaBBe(H%zJcc|S64I8zCP0UED(zZ%uQ`ahI|tOoGbcxiYOy8_UsJ()CO#%OP7bI!rrd1Bj>u-7;-g z>~2lsXal=TI36=z0lii<$mt_H`BrSmS?0UpR^MYYwRY021Y@&Wc7v^$l`>;@noc;d z71JD*7Zf)p@4=q91V?=pt{jaQv^TczVNqBt`XQ&=Z%ElkgQi2SQC(yO{uqFxaBGi} zPd!}AxTp(EY{0~ExsRAmp$jZkjqFcT3G|;2VN8Pyj1!I~O?O{o-iZiI3qUAy$BnX2 zEnF+y83;^vLCtd2j<`%`T?^bP32gg-F|&}2B1|7$lig`{t@yw)a|(}4PSsvJ-${23 zyhGMD{p_n`SiSi-;lYOS<(f}kwQEZa#-UDQgn+U6no3^0YZwIK(A+e-&aipy7Daef zcYLiBg>}{9aZN0bd(~WgEhKN;wao@aQWrfE#*lOkm{jl?Y5*f?W*8l1IJPWcr--!0>6`9q6y)uy4F1 z{oMLM`Dyy`>r1b9-+#%UB8ZV-{3m4MYHHfgdaUodcE4r0^eGcJwUYieagw&%PRrWs z^9R}*!ma#-T5k$oV+dZ|2woSXh+~w!U3-o9Y3VQiWrs;?nI!|iY92q(@=_dbhevCz zFCV$y5|7@pSzLU9N^8b1E4R)R&(?BQoP9w|>)PBg0%NKO2Z2a8TU6c z(4b$`x5qFE6Mxa-$0rH%FDcB&UWt=2ISpiqKd}N5`!otov1$@mWip7d_(R8K$_laO zL+6(A46#f@hw`r_JLkHi`` z*iVa01*b=H^&IhW;1Mp{AaBMLaE7cg8)4k`2%ha9Ycl0xPkxu3~6 zCZEkcu66|3F!hqn;NC+{pKUx&cSO>#mJ(9sbUNB|>g|kRW|zA%8Oa9wxbzdm?Ra;#k5etV@uvPb_Y?8$ zrf>SYV;))W2F|#{6VmOdZ{EABF!|SpgO$`1PUiSWmign)5?z6IOD&Y5RY7PgWM#O_ z1@+v+TaBW2L04LjOqFvh#fVaj-^2lIagm2NxK>7SL5FwGR({IS*w^>PAp($=fLTYq zA@*482Zi6m0xp(tvnG0=#>muL+v4AX{FZpLetJtT(Wy__zp(_gEhT5|^v3VPwH~{Q zH3dm5IcMGVHt*t=uFZ=$yG3lg??8N8WKA`#9MwnF5@+5vpwKOtri4~ryK_6~ERRl5 zi4mUN;DUn8~CSp{q(nMeB+02cSM5M3}!jy}_a>Ob*;*}XzUR}NCtuj?S$PbOf4 zv0UjhC$M5$q4doV7%D7d@rnUV?d8t7AdxtFl?Hi!!U22y`3!gRq;X!;K*OJ$zzBbK z!_#fav=MJ$$YxfJ2b@ zSXvn>6qFRedav<=O^_&Eaux;~iB%ItEBT_vp_ig zT=$xF?7l?FbKIhwz62cePomTxsEBiM{X8F-=aRy(u%Oz0w0nI=fe+$rDSxOVP+mXf zy}Kjl2gZiP7mPc|zaNsp^qOZ9Q(%-0wzh$xpP#|znst)cXV@7^xFNfrgh87IQoP_C zQ7nB|MMz3a5)UZ_AfSwXiaY3b&*3bQ-e++lTA0TSwCn7%m?{oJ>oz*VEeROpHhkcqyaJ~nu4sK_VzsK>C zucp&OOks>qb|sKa;m}UMC&)42mXC`iz%US6&5$LyF<_re?4jYwOEfXy)z<-sriWz0 zAEGIAYh_55sM*pVVxmnx$S`!j#t^w!*z%Af8BBx7ZC2yQu(=o-vXJ5kO~}cpSI5Sn zx%ixOVj?z7P05v4+r|jEzTajjM!%aR6=tmbwN&Eblv{1G1m_ae%bpHTHEk@^Ts^lW z;-X$lpN?rUxho=C4YWjQVX62TRS45UVQnE_B-FxyZ#G#(rjK_qt0fs$zc^oSs|bYG z$H|#qlE$e=noqGc1wyV9ZqBqwJk?jv7uo9HBd()$Pq|4s)Emx+*}C6DuVeVmK1%l1 zf6Vuui!jjh(tH?l?QBw3##9&xLe zt`9nQI*0N`=bz0TuBkt&?>v`0hx5kso;Dg4s^_lHJGT=c_r{s+7aD?l!=0TK8jh-; zy=gd??}C5BuAS}~C8#I4Nj1XL7YX)n{pYkxY@V~Asp6r46i-n>4{l*Hk#R!=84NY^xRAH=y_Jm75@B%6E1uN zy?^Dg`>bt5@fn7r_;Ys{z1=ec>WC5}#G_n7)`(9vAWc!@=m7n}<3&Q<==*%AwjA&< z1q0oPvfxk?gUU#7_b(?pxDh+rQ8RkCN6wIl5jSh#vV8Q>1IB{K;E=%E!LYLcRBN&oTOFHWs1Yi z#21gJpQ>Brx}oxkDeWA(QIm;C?E1r2blAjF4;s&euq18|3eP<0 zq*)JvmsILRV-L2MtWvd%_VkHi?-Jar6uL3*Qn~A%^4l)s3jC|Qib>ew%xlr|B_GEM z43b3j=egua6lJ`Z@Z_L4g_oByjp#Vphrg!kkk4&@9EF59W0e&Y50cbep8x(a5u$94 zRF=2|b&}`8Kkhv|4{^+j7WT2TdWf@AI%O97WAlFnO2E4=N*rQ2#NgzZ$fyNeUl z?F^+`!xJGNcQ2OhB;w(x-_*AsCwT87UP8j@Mk6St%eUkwjPI6S+`_3sL(0XLl z*&e4dsnwP5d&6A7X2e(bEfcBA+qc&Kk+o8De?}CA*IP9Io3Pz{10Gd79Zvb5lZ=sr zkt+6ycH|3;(U-y8!kq>}1XAVa=X26f97Dk)cm);)g6F6I;Gto{g_Zk81xAyO9RGv3 z4+4!8g7OCh{E{8=GR9}{({D+lh5#WIWgScoRFgRs9efUSEr^&9PEmCLf)vw;|u7*+YK>dyDw*0$4;m;1My6pn^iU`%rg%Su~yz5ixq8$%BpiWOf}`THE@c;4-q;(n4g7> zBHue8k_*>GD7~Qm6sC#Lzk&e^uSA%YAYhz~exT!ko3lb-JJJ5Y(uQ(#LfS!HhE;N6 z-$8GMCU(Nv!Fqxbx*^@ciGvb#qWTs=9Z=^%6(0Tt!CDVBG;AG@n$;&(kHLTq+lTH% z$biKRIXP_84}XJQr`APKg-rrsGeq65cLQB#xg{1z@PVAA@DDly0k6gMaJv%4uJ!cLyArg(u8J4? zy{!bVMb|KW5?jFYe&_V#STSEK@}c^q#exYJ=HQ#Xvf%#|38FGRvU=MYFa zUd~^PNz`@THfTu2_j_4AqR$}w76tfEemM*uB;u4Nl8d3n~ z&msV$E>{&}7R1?@`Jh(=bX|`E48d4aUBVOu!Q@6=1OrsoIQGC{16Ey#t)MOCI*k70 z;{aC!d0oyqhb?m_6#tn0fKmf&UE?|LIhi+X=XlS+WrJ{Cm;lmaB2HlU0oY@L%ZjoQ z@nf2H5aeIiT~bdB9-S?G1JU*N;exN22FfMG3M z)$;(>VF0dnb|BoaWSfi=B$L)gm^|j}4%@JPo52lqjmmpyWpcS=a|5YC5d-)#EuKLw z11vX9<$&S@pJQVK>qen1bSo|Yz{LcyV_1Xm#&1Fxclyx*!3n}PWnQF9?U@kRWHAq! z@?T*oULF!wL8Hk=9tL;;)X7o1v}x3Dj6ym8mxT#i54>vTBy8Z6*y`icwfYWwXH{i*kc*uv#YXbR%%Kd?HJG{N`+< zOdj`$erx4G*82z!Z<$vV|40OH(_0w+h!S}MQZdl}MhOIC1UWV7XcIHeYl=?-UFV$* zF`C4d@vA|uVwJ9f^Z1)!O-kH^)ypyB1VD^As!d>%E;owZe8e1A4!Yek-W+lc(FN#b z&fXC7VxCd-4Oltvw@C#QX~iG{5s8Gkj?SZP@&Xmyv51y8MX7;t^R%1vK)ollocRxt zqx@jsS6KgP}P{9QOOsVWdGvxIrC6Bwk#+5`b-bRJmw)hG;;$Xq-Hr zZCg`+)FduhTQ-1|$w4QC9+zuRE|jRP0U%ss!V_AFH?wydO5YZ`%T;6M5o|+Xw8s~U z(w4i+U*n)KfE4ZNL~e?}*<0x!O_{7aL2pMg2L%NSG z@K1M(!b&_a7)^cSxDPEb;6W6}wl!E3qkMzAParV!jAw!CzpJ25oNY(+ScUU)lFYzF^+TRVjwLdscYH?)qy*&kALduhUt#8YuyLuidDG(ZL0Rh?~dB1?;V4rp?GI7_5C^gH?ENR z_vg0Xh(dt!Xk}gN-G$W9=jh+iLKaqWv-%yo2&p~KiDut=Z1G}hbsBCsCoz3C*$B4l z82VZn*nHLthus;leP;JYo*2Ks_cfpjH&pe-F`nIEOme+XHQ)%h681Cy)85igQogS_ zWAxSw^j$H`-gr;)zxUr_`8T}x=T%!hM>V57>EICo+xk8LP_l;9(ZWY1f}KlYZKX)_=~e2SZN)6CFyj86XljjiW?X+H0lq? z7i}eFT?wc-ZGX!$>Qkz%YbE`u=OlgjN51>&^Mm@9QaBnOzQ@=F$zrV2fTmIJCQy9~lT4ZGjvO=30Gi1H9qJVYKvef#4z!pYoL)$YM?sYBDW=q(89T8QxZK;gI zx+G}SE$F^+llsGMb_{G?pKa_h1hM6VO8mV1XL>g&o;|au)CwM+8MCz1dSxQ(Bj3;L zZr1U-R(npy<{oYTie{&q7~@jGwdLlP(st+8<+n2Kd6Ftvq2QeBh$3&!R_sz$dIaV6=arsje8Kr+h%FuJ>ZZ zkVhO7dPZ!i2ICTjrxX4TUsX-eA><67R?S->nhqbFPi-SK3}2tm@*oTfpJh#aCd&B7 zwo8b`W>B0zM@bN(qq~&JZUD&O!jc%Ap~g(4vl*Ni$R`PH#+^s88wTpLs+W}I@W+&9Px2$jdFMhO~LZ!&D1-pSUpJ;&TEz#9g2v(KH?8rF4F&z-cszhyU% z`&p1X_pK%pI=hjEL&-)NCqF{CU3tkB zaPlLc&Gt_^ssY{(Xr^~Li{7qjCU!Y#l3p1sj(ckh-u5ph`#3j$&oj&!$I)iKo#u@9 zagQMtHo*IvW<&OJktzDwcDO*1mQK~F!7*%BT+Rfm=<;IKK`(XJo(g*ZC&>L}!_N43 zO%kCK8AMit(Ug8BzWowLdowuIDXrjO zBgM+ool&oUGhWNNH9uwZ!V1fsTW@+ZP0JmnfODhBiqV~``XX2Ctj%J<>k_)DM_-Dd zt+^>-U5ub}vnhgKBC8z-ba;u?6yhytcd#X;-}waMx+HJPdE>CV>XG1Ya{wt_!ZtO& z@m}otNq4sQf-WzGo5HAL9&a%Vy9Iwe-Z-w!s^>mFX%s;UxSo(IWALpkWFp@H3kL-R zPaJ2#_y*XsV{fC2iUcu^ac6;iGwgBZ9ugc2Ma8SckVIGY3xsiTO7{{c6tn1jtBsjT z54MF10{kbyS#Z7um+YC_?4m|N?GuApBEH$X^qHrw!uH%aV89V9mPb@nMwe#gdJNX_+UNu^IYu(_7haGzdu`32YTie8%gxdNov!v}1vW!>Dfk!*e816}kG z1H)>CHxCG;+}}n(f<1&Cv)nP4Pt(6)eZ;)RO7p{fy}X7jibj2myf$zOsC}YNXt(LS z)>;#CZ!YqWeBMqxw^_aV-BXQj4GYqITTigI$-SnZ5{;gG^SOPtPZ<5tyDw(tub!jk zy!|Au-sIXaSSJS#UP&0=NC!?-iCx!l3XW2V_N`Gb zK(fm12W2J3O5Z7TOXF*RZ-5xyX(!{!NYM;%iHefvW-R2WII?IpRzr68~K7 z$FTLe7MO%HGQ|jTUoGCj;NpGGR7CPKSqKzfy;p(H!kd^i4~eW_{XTFQI#K6YFk$Og zhCPYI`4d5mG5sI;9wD}w&hsZtR!lsdfg^KVd{qH0b3mhDRe?yakK;SuLP(PWNdt@c z*t9|cDtj0gP3;8);V(5j@F{ zu))#Qglk?m2A>onlx+a@K-_BiHN6|(dqNJ}*N-Ez@pB&vl1^0G2_{LFPD0x08VS03 zn}p1BuVU~{G^-hV$+i0Rgqm}uVw6rCys1lRse0H1hDRE<48hnb6J@gYb6tsvTxpJT z$)PDDNrQ7&im@#T^mD_Xyxt_bqe2ob4ay0E=PrL)-q3l6dnB0}t`Z2&rT+@OVR?@D zNpCd>Col`p-eyrtt9!~dkt)Ze?pUdgEEFAh^jK=<3hRa8gmWE+6jpoeT1p#HtOemj zJsu4g4SGZz>mV2L5=xdj5#~%M)&-+B=UPmCZ3)}I%r!wp&m&( zv|9{X3EXjuJB%g|o|QW6TYO8Ytr4!f7be}FZ!4r*-?Sep+ZKAEBSFnY6TCz|gi1r3es9&yEpoPfXa^fO4 z_lr!GU(#0ygqR*PEQb7UraXvqiJ1FFN2Bhtc@8l4&0dN#+cyWeZ4G3GEWj6-RZdlSrahxQ5 zD7A;V9bJ9+mxrF54Bu&%M`s$`!k~7qUE2 zkUmk$Ir|s>%*Mk< zOIxm@=B%b>LPZEU`pNC@OE@JX7fSx+dzqYkd-ds1I8svlCv$x_Ke@QzYt~Yk?mADn zhpn8{_`w+EljJS#NVrrX{lUSVZ7OvCi*@N^_G8<7%|H6=vsUhFmfZO5%lQ-Oy+}5c z_v<&+JA#TlBornX#J6u?i+~rkIUkvsRA?|TTLdsL4lpnw z*L5!nwp&2bmDOsfLIV5>i2oZ>aLH6VySaIKdHK=&QNJZzP;egIw%cMTN z)%vB?>Q8G{m-zhLqTjt(q2RjT_l5b~Q;o9V!k!`x!ke5ze-LeSN2H_izzxyx)Svu2 zDr%uq?+}j(f}1Cr)7RKkc!vudPsw6t-E-G%GF(~S^M}aXUSm}Z8-a2bKDq8d4)O!6 z&HH1=IQ?-xLFnBnrIcHx-D35dd(S|tXUJSIdxds~oBe}84>mr7@FV%bn=WG~N#4u9 zhNXKbL!H?Tj~8uc_Z?U_)OrbW2vDVg>78KHD!;Z?0&=a zkFc#6vKcO`b`8g!9|8ZgandxZIBdGZiIeDDv8W>64hTQRb8FMRGh{&S^s&bHqiDFY zqP`>Ux8mq3@pwt@nO*V#*B;8NR9|I~{jGh7VNLSw<(SN<<$iX#`^n0zp34dxQJJb_WSxnPb5px zdp^bE+=H+-=Snba8Y8A7SEjiVr@cLDF`v{_*XXg1syo*0^eme_Nv>L7z(|^2P)SlV z+B&3*Yi_8r;;vPP3vE)3i}kdukA%$coRHk8^HioPtZ5mY)225!OczR~M^`PA4uTcc zV3)k)Pnz1(-ikk4g)pmIHC!aus}*aI@BFf0J?0L-D-vUqbxGS2AFyVPdhSJPkeuKF z?|KS%Ctzju^1U*tDo;}O#>v%#*tayxZ)mfKY^wa$th;G{y*LYBq-R3T$moe7<+iiK z7vT~fM!ql3SX(J`UnB?(cj-K=7ruE7a=cqnDASz|J8PHk!4Oe?|6?`T|DDCSnxk74 zNpt`H@pRof%~htv7+y*QEy`7yoDE4CErJp~VrMgrA`iJC30L^<2oCrbzWmlHKc)x$ z+S>ZxCfb^Zk{&%1_HnvY3`j)m1sRM;bJ8Jr2EiFpoAn{OA}krY5A$!E5CiHoq#O5| ze~us*t3@b&)Bp&6#39t>5Qz}+uS&|$R}v#81XK6Q(mZKe_XIjUX9b%PypWkMESGB* zXZ9-P?5Tnp>M^&;*B05w+!-d8oKj@?mg4?JWLAd%_Mwo z_->c#>YHTNKG{x^I~fUz!810~?D$>6X==-Th!>SNXqRDONuwLRHEj%VO_B1uwVrOS zUD7g+D42pp{I~o4?VnEevXk1nt?Tg+Ol%{QA1~#5cBRBTRQEhl;|+lr#k}KqN-nvC z9}V8w_I@;Pc?d_^20QKs*>uT+zmo0ALrLEg2OGp4{lw(lZ-UQy~3Bd93CMU)pJf}8>jRZ2e}c{N9G63mX01^TX639KQgz?u0AdYCtF35 zzeLs9^v%9dY_#w z$A!%8^=XPd)?ZfI^*(uC&oy+)(FhRpXg#gqpE18YnT&aOku`mO{JuClEnLjgOCtFS zK6YHjuk1mye-~Ex&L%Kla|5OO14y}-ZV+L8X z>|+^JlUsh-s`%aKA}ZhDy9g?n=r=T}a4=XXIPiIbBW3~dTrluLkw7pN3b6=W$NhC& zC-iGhxkRxZDJwRp9;ww?Rn+fK4@#dH|9^uc;K>rXLV|&9!GM8r{cjDfV&!3G`yZ?S z$K1*4A2m$w z|3=QhJPlFns!&2$DLpV*$jQ_eBl6CWYc_P127515`XsUU{7&a!;7Y`dB14C+oRcp* zP3qBr44&W`wfd4N!$pD*RN-dyWzDj!3b)Ltt+G+t2kzWH#0eyZZkcM8B}T(3mkzg> z?D9QnHq_5-{0M5NLtjgG(oPRfPm|$dZXJH5dE)l86$|q=D<1ebw-G3yA}3BQCJ-hf zZ)#~K!FHsX8#&RTIg5?Aayd6`U`7xoxE}rmfW$^h=lBskSH+3)5d(83`p2fKLM#g7 zR9Vhlop0^#w#6+>rE_+3RsiQtv7S(ec-MTrh8(Z1T_Pkx545>M(9JbWO4XFjNd0rP z)ewyi@7W3dilZBoB7vT&_{8la0p<}GcF}V9&6wIpF6uVvpYfxB6 zsvMEglhyc zP_$$e!<~$KcKo(O7Q6c#4Lb(^a7#C3nX4;%%E~s5*n~_~nVh$7HsQQXS6I`VSp5oD zJMJ-QnAPxrB3Zdxx?L{2blC=|iIm5VdUoQcr-#-;7}i<8-1eEE1JO0AYZ+_-_<5{JDW*O6dpdQzP+}~*HnsV_ILpPFL$*?D8tSmsWfpA z#5Eia0#9cSU?cStu$B4+*sQ6eZuMt9uvul#_HXM2OCpOO23M-*CGX=^W%|2KNtu7S zs#*dOS%L0AQvsJT;Hm`lQ7!?0rX0=LduyL@Wc@{OfcNOuRQg@lLhmaBOo-G)pRV>= znayovye$PUfVSTi5Xe>_o0-b?z7w%T$)0_dh{qJHAeknXT1fw0f4(`s=vZn@)6CvA zBW}f-{`CtWcW{_ImwfFP#f0WnF(Owh~BAS#sV|7-?br#gnFWQis z7GV3TA{QMyJNx$d%*s5m{$qlfgHiP}m~Uy|0b7u0mBUWnvO``sL>-QIW*Ojj03&Xv z`Cg{xvVsjN=XnKyy8wG5F|?Vo%3wbP%Zj3TdSB*Qmchqn#gx2w7PQjNJ6#Lo3p47ZB@_>PBlD7T@85IZAh zI93&G%UjaaK>dwCdJ^SZ)(jOp)qM@^H23X_3y|4l;975Q@;HEFVp^EVzQH90&FxDP zQI(i3Cqlo*edg&W)(9h)sEJ7~nppjXdIv`fYhPUq_L?1V&aNoTj{u1SZjXeL@}3?rK~T_k z(!PP(@}*H}L)Tcf+Eweq129@l1Mm3Vq^7o&W8LBHi5CRkKb zwO3Mg{jUMSfdPNQm9;JaMjJn1x5&atgP60`a>}G_MuFCR8lcg`;Q$Vp2W2_u;_b0- zATU@s8X5IK!%b>Qz*R1l-E~+6BV{@KZKhKHn7=7{v?%}A@|fA}3-HtujR07m`Kr2I zSX<_O9$e$hSQ7UBYV62cikLYeS?bwsLS}P$hWH;R{IBw@Xz3`R1q%j7hXw{F_I+DdaD@7-rF_5Mq~@7Q&`q6DqEYPs9H^`FLj8aR_Gwu zW-Wx7_S%-!$&EjI>fhegFYsRYq%2Pi)B8~(NB5qvQ_M9Blsd1ee7L~=5j{w9pYJ7i z6V*|ulI1fA4PptGhPHpun+4(WX0_|*n@(VJ#8@zWdl36Afp)3EThxx3rG03B0FkORX6mH^t!s0@Qjk*Bbn9_AF+CK{^-F==*q@~$v3BL8E2k!m%P92vzoj_S(K~j21BP>t| z+4h*(u1?(NWAlI`ysu>mc6Fac-j|4o2Z*}qZ-}=n?A3NQUSFx{185!5NOr{WZ_S8Z zNao|&xD8643(h;EIZ5O#)+!5P1VSRlgF|&FwXl;4Il%E6J=wB?YBrcrGjp_T*!GUWRq>iTY zW4{YpUuU4)?CiLz7h7Vi`5VW@Q7xZ5G;R6Yb!ZV&lcSpUFD9b-asXKWyD| zv~Fb>&%bCQ_pLE$GA(qJoNzf*yhP#d-60tgJ-tgBJ$f7p;V;2d*gvvW*Q!|T|D}H~ zTP}1sYv(Ilc}s#*tM8^YfOGzGzx=uV!~k2s1{I*yXtyrMb$P#)yg|((QvAx8b7q$5 zX9pTitSGIjk2OC42KW<|FS-aP#4gWdpDbqK)e1tFA~Od-^vDF|F@Na?8$R9RSJ1rAM#0%&Q-F24VLI!8C6_ivLI95R+N>%v zFuI87jAxX85N^gfQU2e(U}@(n-lbcrca9D9d967P!P+DjRl_3i)l- z*mfxenTEEx#f8X{p#35HfbAL zUZw|SJZ8lJP83yBT8G~;Qzzaig?XBy?>T=6i$qdRRXRJIKQ%N<4U}pTEw%EU=+;*m zSw;tQa_eS}Vk)4wTwY~EP+NA5K3+&fD5z1NCOXPXg7%t)PQ3xoYn!TvAQh~BlleDV)94*fg+N&Mdw?Ej$0|CDW) z|J3d3q{U1EY1EJ}5Dh&HJ3HfDW=6(K4dbl!I`%m?KUAY^mYMaKHtJOvpnYit z$3>Kq;M-mL!%RHOkQOe-6{V1@;MnOFz+m-2^vqj`p+(5wnnN>V8lo1YFUv~5aTKL2 zc~0L9zcyXg=0>WzOJZTFLAXkmb(A;mfq?N$tKe!cyL?a;ipD^n_CC1!jUuX2S)FEc zOnHD;)>_}qF)@awUbznGR1ePa;ZMYog12XTKesAYr@NEj^;4?azIlpSum z3X19Fz81)YI9)R}QDV|N+)Qr)ol<*x`uZ!^8zQHbZlsvzTaq6l$FNkke1KgIOFHei z^l=(b+9iaOI!`)8+oB4o978*H=o;iE<3$?pidA^JPa^`X_gwS`{s#fG)W5W96O92e zv|Ig;_y2%y<>mjbQc*?m%=TnVQo1WN>(&?S1+WtT5ILzz*;61K});$b&DB^nP z!PXbBeDqUvimt1|U2uN2k?Q^3>lQ3__SScGvsfNH`^$Gw20}|j+Pq|*u9w$-mpeY? z^<%RxSfDCAk9J5t_q-sj{!SbM=1V>5!JYya*s2Sm1O{9ffBxz$-MdmHWS=O(>dk;2oU^kbzNMiuuc4Nq7g8ptQKV08ErOvp7m5u0u#zQgAif8HiQ{IBu3)A@+KXVQYalC} zOotm3@fw%5~)mUttFZp^h;nh&rT6$*kvEJnx-*7KJx3ta{wFW4~#$%3@~2}3GVH*;i(`- z2_rkzq&?REuPlZa^{^D<_99UjwxZU|+N99dJUP=bi2kh0252fglj8bdbBM@S?4qWC zU2UPJVEAZP((MIHv_XKJzJbx5fxp_e-(Fd&zj=dtuji8%gVkfp;*> z`AcZnw`R{@Of0lE%cgrzM&B!DvsOy2{*pLURKm1EGeOXrDeat()Y`+u8t&*c?o9isQO1T%L^c$i+bOByny z*-LY!hhsvnw_;7n=O{Sz!P&sqER&37-Zy^71gNKZ{Q1axK%IzzHg=3VAfp_)@pF<_ zck#&5%mnbSXhY!bH)m#Z=Nf0txm4@afg!u+)ReX<^y-R{>CZ>BGxi@kC0!$9sxkYs z9bMgf;df7ZJTs=q0vxo%yX+O6HQ5w3{^-nsZ!&LX||28jYK|5Uwut#o@vyo!^wp7Uo=n__cQ zxVVeBzJZXTL3(#*GWS}pShL?B41`xMOI84COXz??^{RH>{Yc)9bjx2Jef1U)KPWO zS~D^+KFm?QGC5Gku2y=zf}(~$1&DsFX0OF+{REgr&s@U;r-#Mv^T&V5n>eVAR2j9I zI{r(jP_k>?W?T3(+cXqM9p4aQungR5ScfZP0e(S0SeX%3tYX>2DprDz?|GSlNc1PE zk@QJkNvdb6>dn9Lms#XU@cZLghOLgA5={1+ zTo{ewt&FN)qsbVxZi4CITImm%ab+59;wen%R1Fm*_)Lj^=R3=T(iw2wpnUNR%t5@pr|tohNqaU zq|O?ep&P8j8n^0TT8dMwHDEF$4Km9!H}brK**9=D^tEi(REJhCwoRAKJoT}xsAx7Q zRk2vJj3nYgujZ5R^4nvyr@am!>hX#XHjrNpEL3ezLUpf0$icn)Df%r5>7Zla!Dicv zmuQ?UKZMIUMQdK5*>X-H^Rf;i~{sAc;9Rf zj6M$|uwZnsPHY^EXA_poi2L=8_fTyp3M8YM#HulwR%If@Hz84{HK3h#1*0_(CCrXY zAt{^0qCg5=_&{y%5UnJd-LNc?ltpeCM2ajX*QJ_Sha8TaK{1ZmBaK3lzJ;-b0oDnqt+H#>wu@XZ{9P5 zIcMr!a^Z5pccih$Fz|-*6e|(>&h-HE`Hoyuu^OaPGG#2T#$o)kd^+xvo!M!09 zEnFHm_6Xtr4 z)CZJO&TN1;+d*!B<)PF$cLr$qrLz(R;X1mvg6kE!WpzAs0l#;~ z!{6YezC`OKMPfd^MJsD~EyYm}ab$9GmLk6F?seo%ZTDRZCe^GRIa{c6moxP~%rTlK zKHBk9s_m;Are^p6X65y<{VB|z!=W&Hh_x+6vj%E4;IP5|p4mnqYZ9sEfVGXb>9(Wn zt0!Y$TV?>oD)8K}vsUWN@o-NYV;8d?rbdcp#l&>x@EiC)$i+W+`jRIBSJF?LhV+ME z@coa;g^;_|Klw$rl87gf*v}!s7HUmXQVG!fpPaB}F#w`?yFDn3EOUoFri_i-9JPET7HU&Ou?+Uc z)(O8ELOyN16W9FyZ(jS|(%Ywo{ed|up!cDL>)&rrt$%&q^AGLCq+SP~f&KO)aVFIk z2(iJ27*B@ckOrY+JaTqDhyq#AGmPt+%_}Jbdvnc}`m3i=SlDW+ipCx4^rR?GB}hhx zH88E;Kxdhj9xGcP#aXM3AF8LFh>NX76+L8&cft}Ble2md#*doLEhLXMNg1sMTDVR* zLkM$n58Q3wM*_cPnv3t9jMeusc;VQl6Oclr(7@tpCjmp^rzse*eKAv8#o-Qct>GYBPQ_>S$NiU^DN0CUJ3?CKHX2r zu%xPm%AjeUgQ>7|$wKE*>O_h9fI4IrjP|q+3 zLsbt4A}D*%Q>HLzhM8^#LP&ei2b+_ba;FVvf!&L{)%huc=EgBj={T zKkIA2lN)LXkO)op)M5!8ei>o_HF#$$>t_5_8O}q|dCjEb0?sVTIPn?ZV6CV+!Z7TY z?@wLITy#1+DYGb}r$&1dhfJlWBKK1);&e5ejf1{A$HCFgJUFWcG~pRsd6}uC);(WS zUj9STQ(;TbzI4Js|~WV=F&%^4GON;uY#d1(J3;ts{5{Vz(90&@}!1AF~wzcoERBFy1t3f0$3*Nr0}o}pD9+$7DGzCy z$0&$;_mGE;pgzuI;ga{uW$;{{{eyP%LGPy=Hh5!k-QT+b$95^WhaZ3SbP%_eh`yIl zgTqP)g1sV$M|g9T`-X@%e_)1!iXjuGj-(GNiP(Tx!(VJ%xC*3YX2gFUAj15nuAulPd6ZgNX9ork#D%Qcxt+?71r$@ zyKYiWDxaROYHe)t=*}eq$Wr3aP2DGQ(b8L`g`Ds3@UX#Cm7nv z?gYAkYVPH+ICo?nQueO!irQ^%Fh4cbTjOMupEO?pR>;3ZX`{Id(=-GDw$OjX*7yCg z6)yu1iW!a92@e2-_wTsZsd1ZK)F69kI6i4$8Y1`-hW(%g{7uLJ5>St-qX;DS3Dcf~ zzNMoE>1fj-x(V!adIxIeTmooqcG0XRlOm9__Z_R0%urKXb2EmLv!l|V>Y^f3mBr$e zrsXB!1?|)hlQethvEWa}@)by9%yI}Klhr7a{O_anhNv`7V@&(XrfODhAtvIBWWNm4 zMt&D%O>PWZu{^@1Eu61h?CO$qZHB!JlJJp4d@2#PK=TF?)`Bg`#*0u2B9dwa2TepL zX(9{XvTB-5QABHM0U|v5z1A^fN!WIh9(c7jnWpG01*t{0x8@*6O`BLP0voh3OqSM! zjtly>gE2g~Qahba5hXj66_AJp9MOK}Gvq0|G?8q6+Q#xBc$Ie+OPPM`votT=ejrp7 zY5^!i4gVOFUxGCw{}IKtk8(9oO{}j1;lF_j)*OzgwcRpQx`1B#uOJ5xbxM z9J>PX$|(MvzRxDg!bdw9;dr(c){=lg4jnMp+sG<1j~^ylP(@Ied~cS}YQV1sT_>Dw z_rw615PbJ&gsqiDzgza9!DLg7&VFY0Z1z-&oRBaY)~bG)O{2iy z*u`G|;d9Pu;)=E9bLPZA$(ut}RyeTZ_Je)_K=y&2eNb>CGQ;zR`+|di0q8Fri?R`( zktcljCI^lWc#gZrb@)5z&!*Eo=<>{Ayvsea0~GB(z8quK$hjUBp#Wr1s3?eAp)4Qb z;8xx+z*2#=eqY6Fy=eGZvAnKhd~rJpTAqm zk<5!V+GC$wmirc(F?MeWs!gzxNsf24(vfZlT|zsLiQyFg0nY9gSldwG8h2kSE>bm1 z1Pc=4I-;_sEkaSNtAD$Qjm<3W*xZS2VO+x{Hpu3Jn89&juUb}mPy-x28v=OlYk9TRQlFcIIAQ(k`C1!N}>khZ3O=tplJZamBQzFuEl0m$h0jc83l4K4y-328g5pb{i0D#PoMi9;aea%h2;g~6pa5}zWBE(D``=p%+xAz7gA4fI=|(#fnoK-TUJQ?!B+j46H4 zF0?3pMnC$KDSgd22q{zAfIoDJz2EKt6gH&w{%e7`N7ItK;~w*1^7u}NxtjB9NSe32 z$l%l|f&IkK2~YnDc+vMmbq2SlQrXWE<9+e@n$h5JW4F_ExaT$78$74BEDUlS zA4Lvpx)*lNS10=hdD1>Yb+r?Ym*d58=F(bA`o_jw$A8_qP@O~IC_6;l9a8MWPPnBl zoMd=NNKqtYFt>tv_CvSEvPWKs)#HKbD_H^l+S3+X4I{Lt7`Rm+>;qAI+udz-;{18t0KS@B+>u<7-V zAd5O4|Nc+q_kYw3gLfG@M}JTY@nd=WmuiL%CN@8Q<{zK4;=lc)Y~WyK;`C48%Exx-$=rKLgWWiRNJV_j08cf)4W0GEW@HvE?yhzMrVx)6#WJNrx2>TT2|X1`2U_`??qVCuo^I z>VLbMrhL3#x9S005s2si!ejB0%!kHH{5@j!$gprCqKBz-qLvE?6KGD%kW|pR%PdM? z;bL^gR1<@A=B(&0TTCB~;mlS^f5bdxsjffgVDu|K8F28@ryb#}hi0?xV723vqXPq! zkqB5PO%cREfKIf;v$TO+ zM4#eu^<+eyetg#Zv1wG|!L^*Ciq(+(c1e+4CeUBj(zY3)20o)%@CDYed~><&D0xuA z2SNg)e0nvoAiUsWgLncIBLw*2)Rxd{7;`Fd&g5x~B9(Bg2lO<7FJj+X5tGb$T#VQF zc+hNuc3|;m>ya!00>lZfSygg#-&(%d*OO_e6LmhcN!0Uv+%2BPn<)55#!Z`fPwV4L z1(Dj}(7Ny50@7RcxeN;^hOjoEU zQt+XYGnW{wwsCuy6_%ed#=s~hdX5JCG%_^Rv3Q}M`7ceD0}jYK_NzVIQ6cU<_3+rH z&VWixRSqk5Y+7zuJU#TQ9AEI?3573X6t!?Bszv3DzHMR{7Ef^8LIdmWmgbgx9ktB? z>n#$To zurAGo1K-SP&X0dmz(s2hF$nEe40b|R1mf96R`e^?UYh7Oa&9dsF&?U_ z!mjDUylo6>g?Vu}E9dXhjgOR*D11!?=JLv!k|9jhOyj(g%{cc{CuuJ zLBLCkWfs3>B*=iu5x8fB;ck)@U*Rr7}e+o5OI#%ztlC6-`zSW`=Gl1}- zV1bYy|9@0+pZIOIsqxR!m^3hQYJEn+eC-?VRV?w%@xZPb+!B`XS`1? zEw9YHK4jR%CVHW84JGp!dsMw_fWHptvY3rV zW>AUurH9Dc!h?T7W1UH^_=^AGWvQ{w#y+8ZG}u_S(LdiMQ?{hFFuLBTe!3zZ#npb= zs~?@akV}hnVl)?Jrq7~>8=W$+q%@qFpJZmjN{=)*jXuW#KT3;DKaLm2M+xa+gy7*I zwu6rp!Wzhtq%2X-gZ0;sKgw>Zs@4>%XK!g#b+AuSk7-slsuoNGxQ1X!Fw#PiOE_Kv z9TqH5*ALznw?~Pq`uz1@Lm*V38cO9)j#&Qr`TlgsxI0KW%3$JH~UNvfW45qn^YfE+bY9ET;kX7zaV0`K*VA4#oqYSW9Q=);B@P#8V zNiFFhpekzhlu)*sq%_bnE-#A{ha{&QoednR?eqc;jLFz7^4yb33Tx%^|L)KKL+bV$ z7{+x67#~Dd?D@Zq04X$6dvN_QU7ep+wdlXXbpOBJLCMI#M$r8KX3gTnKR#Gy@WbD^ z^a;beV?TIfRDw1zHC3m=G9yy|T&{HROg1CmO4`_9Y=xWa)P4T-26;HsnvyRa;$N7~ zWM-E@O!aRCYSZo0CWI41Ot+(D(o+h8cT*J z&9nG@%xjq-j)L$}y~c1~^Zrqxja;P-^Oj5Dwo)?|kID)|sZ8l;Sw_hI_IY~pnfc`9 zsZ%tSBJQC3d(&f?2H&^(r1DD*gyZi43(c#ffm}LmWss*eS80*Ewm-~rEm#BY+i5jW z2^=z*js{$d{j<0x=Ym>_Az~c=L<1E_WjSI*m2TIm~z*8#a`COeLN8 zDxyJmVl_DPK*=OV=kFIC`ZNSw=2DiH=H?$+mdci7QL19b&rxg4ID;&{jsVw2JS$FU zv0Pc-a4Ua02&+XBPB=O*m8Sz!j%L4ZN0Q%121TP#s-ofz+@nCo(Y2g12ysk_N63vB zTr8Msra_D%=6$JUO|dhyHeC+TBeuSu2`Cgbonqyu9erRtpZ_M)S7)@#_4oTthu&InlA9Hlwoe@!@1rbB9&Eb!}cd_sc2rEo&79 zd37u;Z*(X(KQ$BDA=O}gFIQjrnp8pl?5>I|Ja@ymSWc`#$xIK&8d=(Xo-}3Oh$)U> z2=3sI>qXe7A7U>oo)&7&N7b{j!5Ck>43%zvg13L0F8(>+Bk6fV`Bts-o!@~19b}G2 zo^g3CYU=tFqkaIm($E^ws;&dJKA2b;IPaLfZM@3MLF->F;nRAYS51qk9k`dJ2;&p3 z0P>cGY9fb;^8oq!2j2d_J<_ER4yOJ(6`Wa|>#~@^hM_Bo-~TO4Im>OLX8brwtbY8* z|7&;(+x|N|6aEAciTuoQoV^IIZ1LE%ah*3_Eu2!AdJ^JzaQ^H$Li7ZVoP@c$0q8=I zRk4O{l~r_@u{|#8eLcOe^#`5CK)eu#H!Ib3nXU`p@>nZO^@39d>ze*(@RVN~_zX|v%EPv{Hp-X?_LK(AC&F)X9wNSen)AYF`X`&!9>n>oD z=A4P|(YfIm$n`6K%TpF|;Mv_#F^*^F=^$S~?GU$B3n!SGXNSY(xahL;jTdCFA4Sc% z=lL4zT@mJzYNzb^<(BOI?&O9SgSZ{NY)t6xwlFXUpNB3`;~8RYzQ01m>3Q4HbJ`CF zg|_UQtorA$XI!brW2vRq@l!>}DA0yEUemj%W>iFuI4F{*?dB)m#~&oJw?smw(Jue% zF)*FW?GC=Df-ZeN)6%g7sd(aKLK#w#WX*^UUCbpAw(mj(O&j_46&TzEp3@EgV=DK6 z&hP77lCe_+s)`}6Lpw_WPRNc!J~b5O@9NrsIuE{?v{aW`{1V!ZJ?9r@t*}IX`oQ2~ z9uR74B6!i?mI%~m0H+hXhYfyiSO!BwB1D zBVx;BWfY{WOuF&nnX-d8T(VlE*zNK>~PpHGu{WOd_XLheZ--%AXmwqhmdmHR%lv* zGzh=?cN$u)Cx!W#0kJlkoLpwBtB-69hz0qaUsemZO*89+v)nFcwIm4OubMiveE%oo z^FPY9nxuydjz1+BryuhN@4u3q9DkCKp}7;?Pa+aCu`zKlaI$synOXg(ltYdg)&K@X z4)T5Qu43f}n~Zj7Qye0+hqHI3Ao3XU5M)d(HTv7TL1Z@@I*3z$dtfK)B{bAH5jjyQ z6i`%>RMI3lLO^(KCpAMNCtx{G&JmPAajwo#Vc5;FRAyIYy_DEWd{q z7$J0I%x#Vr)wRH!a!MM=F*#U~T1B;>>N0n^Lf>XHY~U{x*|rhxRi0N7^JWOf(P}%R z^+j_RhsJ{Vd13Bc{~jDU(_nIYZ)GRrDJOwDY2f=duW8qx=vIh}jIK@}I{0?K<6r)& z5MW2%bc&lwa(1nR>wtc72#q!W#ZKqp23Ye@4;XkI>$L`s%ekzHaFrZJp}hZ=49$@>!c8A^iS|TG^~2@xM9Z)%2WB&B4?b7vrm=@3G)M&xp%WRtmDO z{4+pr$a(Y`FlXLTl;~BgxGa6{HTWm3F!h7mHFqbU*$!qcUy_lKyXQG=N}`#X8v#u1 zIUw9NuIg-1_EBx9KarBKNo%AIw-r@(fS)RO<@D%79%1Hs=wbqfYr**Gqa%OWiaP!? zj9*czLyKl}H>G0EZJ~^m>k<0IdA~|55Gv@aDfo{up7=Dc{%WVuV(m*1FvswHs}tzH z+yelE)W4tumV|f85|Nmh!pfO}clfYJ>$!S$-Ea zvz3vRzp^4+M+R9?`w388f`)D2{{|ns5zObE1TR#rWU6QTEs0@KUG(nYLoyXfVjePZ z`~CPL!laI|97lw03A?sNfABn2V~{oiJxE-FzCAo_(=~d-%d7takA}g^SQ{H}ls3pc zNcPf%mCN82Lx-NjNJw{4oLj4A{H5v)@KB0{tH|ILUJD+`sYAgriqSJNx%CpVtK~IH z9|I9`eanxPU9r9}4@XVUPR=l8NZQ<)Trj=_2Ti4J@-n~58P`LMo>FI(^%ZUa7zxd{ zj~1eL>$l7HF>?dD|M-Z5h>W1fjxb^7QBCQ49M4?g)Ix!%mvB z&H%=Fe&ML|d1xO~kj>#Jj$~bxS*7v1+GtOQ0XD|0jXx8ck+=1V+w7J18X_mOFnfD( z4;lE@h=#k~&mKz3{6)<_@l0L}cOR-=T6)eQ=la{v$f>%@dh(hlOe!QtPGk>fYM-`! z6D4{rItE=>;B*=k?v1Btp4F?Ms83otUf@mVh=f^nE#gZ|II%m}Gr%W<7}|Xz@KylU zCo4CF5N`Z~fe>!ugM$!m!h=6wFM4Sw4P|VIA_jaViY;(eN25(GAQMdorvCA1o8X+v zvX-}QaqTA?#|m;(&b{!LvxADgdKD>ttCuU73qVOS9Tp2 z`^NZM28XTBp6N)R1*I)24lvZsP|}*XQ^Bwcx2pRMR$$xp;ob+0YCO~sF9B;LOF9E~ z_A;*B7rY~dMnO?{X-GRxcZ-$J+U8yU@hr@#ElEI!swAnwP`oKso>kd!DVLq5xFt)o z19`|+pC~b%%UPT19MYM-JtN)6YwD|Slh@LoD}fTFK^{Oc^BSvB1np@@L2(j`K& z6lxShn~b`(+=;giG}rvfjQk-LGG4(pbh15we?7EuCjB^`9HZf$ZL%pT?_|zk2{KzQKlJ}qV+OKz= zK+O#e>z6p8#)ga9@yl8nZCO$ZW=I$^pL4}!se=4hEKI|WTbwhDCeflGRvf>#iueZ% zLD7@=>{)6%T9iMgAo&!~=j~xV^w=cuX5a(E19sVaG}_a^+LKZh-6M}({V-mA(_a16 zR*56HS8=$Q3VT+V+QZA~H7B5eR+`#)v$zZT~N{d*|vEd4hiH+A!@cjQ!Y-gAq9A73ky<_rmZxqSx| z0geU>t*qWDGKat8s7IdagkwqL!5c{I16Nr$Nd{NnSo60$#w%3;e6>JU9~GY!_I=K{ z$23WL(?dA~ts!DP@XZwSYT{k(+2Tc~9AYJ7;tF|)p{9ghG__5f#$Cl9aA{q#}1%?u(boE_#9AqKr^y?(w;!ct3^_if z{@oARSO5RveMF4SOw`S7%!F*M?F{~n3;pxKsuM+4_F0ibaxKGz2B)TWeuVi*@ty)x z4yjAb{)5*$ySj2E#hYTy)4A`(?b?&2zD5fciD=~$wiPwQb(2YH>R@tUUM|o$LlSt*-{OB?tnyEl#uUbRrM5zf*=&%Y-_q$Era;QC+bTV8Qr5E z<{*JlM-&~ayA~cu`g)h?&)H!*9X;t$40@!EFFtmpiqS<~)KeXMhEa%KIBo5wvKjpl z@X0TCp)+bD_iPkuw2|+nOQUY$*bR?k{vs~-EKf6n4TGgwwnw*|bmB`Vw(rq2>0(hF1Nfai zG$RKc_m;2m)cW68GAM?u{ObGBJuOC7bXb?lxrCy4L+e=?Gl`=Fj?L}s zLA^XL7q>%IxlXa;5uRVY7 z-am1p?;Cy4Hl0jYf40Q=pceMw<5*A|604K|LDT$q??wkmb>-rZZzBL106^q_kB)yr zp-J^HMm{4Kd2uW^GY( zIkckyTAx6@@0%aPmg%k#TI;SZSa~F`F|0I7Yr){402(m+(53;H7^R-7?TgF(n2uT} zdxTN)Ay0Y3-qn36px>WSD!oran4O?V81~bG2&JiP7waM>*qM$t&|`J>YeP8MJG+d~ z_tgiVn0tUs?lDq0hG%*>GI#dN9R#pgPPeEX8PRxYHS>5AMj~xa%pix(hyfLQE`)M= zd&#n&EliA35Rn#@hX(s(n!+WE%RWRl?=XoI9n#+OafB>1d=mS>4F<~Cujjr7XfU=U z&{Yw@5^cYmBM#POH#n_PooTEW{@4qhR1>ODKPLf~6f+J)_|B%W2rH|N=#@{kMH#oA zun=Oz%goQ4A{darHX{yvH1NRJfET|~`PJ0G)birPLiQRZJ^6kPw6}LS;}lvi2CXgM z@I5zih?VKdnGuU^koxQ2!L12^| zTMjc_zNw{R=Rej*OjX4jJ~4@*%G@zloS-O-Q3a7gcwY{p<{Y58RYKHt+z0igMD@Q$)njXl$(={*Y5;9GNFs^4{@K3tDv)dlZ zQba+ZMHT3)m}Y2IJ^uBr3Bf%>kbCotRd>I zAnkIifuL_RJq_5byBjW@n_GNn>P>J`}C?{ng+JV%v(q(+igl{E5{rc z_MHyy_TW3NU=z2OpBltu2{@*K&l-3Tic)qxMo=eYcHQvBD=J21b&f;wR`w1H*#=<} z5@WAVsDphbq;w>`dgj68w1w}xa=O-4v0xdi3UL!BWh)Y>1(BELcfq=VoiO|j)s#as z!uw!4n4o!;vu||ty9m#u%CbjBb+s9@F^=yxNsxPULn)BhS9z_2pQFyk&pv8nGIJ$p zpG)Zx(+vSL-Q$DR7Hha%>y3_C?v>{{$DE%5Kwx*bu(0Pks?EV=eMG-!6 ztS7?&f$;J<1kA{T+~g0K1MmSSopY|g7tu@UHZ*?oTkE6HIYU+>{}L4p{2O)#uzxLh zdBPJ*@x9FaWZ^EV$S$%+C7A~Qpd3CKq3os_PURhAtbM4tRii?jeELM8SP*ssIHA9f8dup0a$TQg<{eO3xpkpcx|FqFk)+NTow#!Q{@&qtP%USxt7|1A;BV z>+oDcvbZ}4C?3HKq1*z~Ok%4BWZF#J0c_2tt zKfwpSmUwnp9}voZXv+|xG0dM8krq7&bwB@CQ&8~s zr0IN>N~0)qX4X+1tGaCMj?C_c?u6E0D^HATy)1dZhd$I(uf&>_deNs^jVR#0FLQj| zX_EpgmNo0EMI0dX3m)rj<`K)FpKtw|s2J_~0_U=+5yGz+lgK49y;q9{3_!lL2djS2 zl^IDc536F3Xhd-?k0~a(_=m@2pNn)Jp2C{bjKWabg@ZMo8VV^eExusIS*OeK`Q)#R z6N-fo0DbMB9avIHWN~}pO*h1E?u_m^6X0@2u(QS}vxaoD2skcCBqBIk>A^BkC{{>} z#AbCmV<0gIK1zaItKq0~v;;V>sDpA-`D`CUlxJ%=FV$e63a{Tg=!*N8Re2$v2eb6h z%=2xsi!d<5x=+E$Re}b<=Z&I0;*lOi3WfO271O4N>|?bk?j>i_2Np}r)fM_B(*emX zADfxx53P@y=1X6doIKMDa-Y|pYAupE>^G3ux*{C4#ThFKv*+f=Fiy9oA?{STwnl)q zX2C<}ZHYcR&`JY%q?_|~|*!ym77OZ=5Ak%Rsi%$W9b_C!p@2!Ctpg3R2`lTu} z*LR@X*2o1Cvl1S+O&wS}#Q=VQ%s`F)*?omI9p+h;HW_V{!gBSEMeJ<=@kAiayWU<{<uurcv2HpW;yh8%71hN~7oWW9e-rQXgFaMQ0k*fo#&B4_6 z+}eBD9s-`;ak3X$z1?@jPrvIMA#>lM*jI}09kY+vTnkRV-Y)4k_E88_M3cD1EMrvI z!OhV!d2D7PZE(R|L3qfN7~DAm0^m$vCQ{l6DtkbNz2v)4zGy{zGxG z2m&i0XRVGD7YkY%(p=S$xxKsJdPVEN@Bp|9s%moPoKO9m++vN;Fm4f)UsNd>y4yP`SxcY@AX8j9- z7(t3s9z+Kd13yd`-q9Z|4xBko^9t?1sx9fO(j>GWwe|U9gwgz8@X3F^%s;f2kb|wG zEnt9Akn?uzSB7=CT6OHL064ez(pEgw48gi_s7db#%BQPMLhQ5hK^Qa}OO9 z$~W%KK0j>2%yI}WWi)r4ds+-^fh0!5KyE?y&p?N^-X+0dX!7%9vAvRV#R4*jcU0apLTDVsA3*D`kVfDT|vp zP6qw;Q{^BZY75l^eB&GJI;endoG8gW(dJNTR>ZfRR*;b74aoVZv*fFQ%9E+}5;#LGVYYo;OA zr(3g{HD55(=J8zbP<;$Dg|Gg)XK?C!>Z#S@GANxAzwbT@S%-|r#*WR^jil=d5k-m# zeoacVas4hZl(Hp`b@}0h@Uzx6-GUjxsN90#p7kWnKF?DEBoF-*6;40&ixGB0XzZKk7bg`M` zxc>4+&(#DDJ!+po$jOaH zV!5=+IcH99`IP27trkN6TcmW^if;w|R5r;w6(#+dXFD+VG&sifM}ameK4Ip0U}{YS z#oc=GrVqwpe~BTe-W-c6i0tV^`4a0P{50$WJ;U82HoAy|H2dh*&SC1A8Ke1e7xP}c z1m|)PXMMI(8AbFudCf<&5etE|G1CRVs`4Cgz%l#|y8y{G=y+J)Vz!`*e9(V|w5xrf zW3A;A*mle$NTumEzMDhZZ8T3xP}5YLsH$x6J1A=Zl9toZy<*Ui74*;H6f)k-e%ZAd zIC~&HE=(4e?<=Q$uqn%@>)p`nW@S{EmpHR=2Kw--$kad@hvpj0^++R<4Vnigy8lwEo;hjY9ND#*FlMP2HAr!tXAb+S39{&aGX z)IlNUJjbV9N&zRVdiGl~)1Rl>w6(TG;J^5|WC#Nh6Y%RA0>@Mo=9983rg{qL+0w^t z*V0DA9BhlqWLf2gdjQ3OWKti-YNfZ;G~m0Rc?IPtt#T?c!bDh@*~vLkZ6?quixlVM z%&crtvk0i)qnsTqvLcQ+Y@s|fL{ZL>Z+a?X@a=mv9Iow7`pz_#|%{|>?d`5buTgu$yS$Cml!rhS@$_V(3U zt=a6C}1f6@W^4)Otg1@&(+?Jk zuBiK{G?n8>7S>iEwa$@+lQnP%P(lZlL>c+WAfRaXW{--0lp|)7BQUTOrJh2%n3Tvb z5T=H_lSzy`s=*Ab=h*;bPX670V#0+!WR{~-2H z7Ueq%^lf#d_lq)9@mD+0(ugWJ!Kxya1Ss=Gv^05Au%ao=-N~||MU5UQfEf7vAbEz{ zASb0HlLc;O{`}0AyuaKZIx%7nQQjil4g}v6OLN)TNXwB|D7fnbnco^Ns}vimZOe&E z_%R{!*!fl5L)o_u321c@szhKm8 zpKo?FtmhFoQ((|F5o;;W2+ro^UnJkvm0uhlZBnxBmT0#IottikY}rI_G4K* zH=P^wf}}PgwxnoC=6#~i5OVh5-sgyf(4G*sF~)pm$R=C5g>H27U+XH!XkGf`g?fny z_8KJQ7=UZ5kYSSjtaeD70#T6UEleYK;7BNzPS_q`jM0y1g0|#{D=)xoX~;G&;C!m{ zKP>=-H6dXVmg#GK8KlS<{|y~$ddj>rZxw$yj~%~1udOgv=w1*eb}xc5^b+u^fE=f5 zLXZ?G^<9Y?5yp@ju2H>IWoidDB@D4E_T0Ciw(Nm#UNO$}OR)NtiwXm~h$zhD>YE9A z5oER3|F4Pi>t9Ohl=@99oha8s98lhAvg#UMGII^B8UjUGS9t8ZsODn$DY8Hv@BAiF z0-WwU&XOXW+^W!qQ~C8%vPCnq+#-+S^ri)uaLiv8-?$c_W#^?m!b0m;P+R>$y;#U! z)qmgaeaO^sN1VhPL>J90STb?BzUPK>zUTrwB9QA4#gYtIV5&$aJv>&$>9jCrSxpn%c}|Fx~tY9YUyPE>~Q*G z5C5=7tdIBu!mT-|DIL4afB_Zyta07F2u;@@pcx06V_Mh*FXa#NR0}DPL5kI@Xaw#t z3a^ip`3ZHSAsFO8{EB#bH(_qgXO~h}(unP#x#5hqy1pct&swUY8c=h&-no^Bwb||N zH=-f8(6rFZ1?Lo)4JP_-{xw>hJ^&g+G@@sI;MTzrFOf9`u8$2{xB7iT*iwf$SXf;E zz)<4$-CyF-xk}ogveDfrETxYiQSDHq+B2H92X$)>(GPni`GU{CdD)ZGE)<(- zQn@?V3cX=2FHkhjaL;~BY4^>iQMWeiVC*R0TBxtUr0b*pAj%B$uDXyz^?SYZzeecN zM&v4B?BL09rD4kuO#t@@6u{gGegBgQ{~ygBmm9G7`yYBe_S4MxmsX(uyLaQi7zvZ& zgA+6vkVC$A=+8NIZCC2gIy&EDLZ$qy98CmQTVhqc{d$xRLCUEdtYW;Ld$0L=Jizc{ zACWuaWC=r}STrmhmJjyZ@J0jKaZBR(IsL_!`C2aJteDNGl_Bk=M;VYtsfEg%`ukYX z4bQw(-f4x3oO~{rgr!F5fCL`RPbGx1Z}VZ^pmP;R6ZDXwvo{uyI$2ur9~kJ!D;})g zVbw~tr83zf5tQOpLN;66Y!>|Ya?0B&FJEld88qkYGPnXPl_b<~u2703@Z$B7Oe0Q! z3L-%^zS^D76SSFs+mV6*i&aT-tu6=U)QPRrhqbdlC>Bip37}ok-c3(FjscH);0fukl@Sw_s_jxwtoWVV?Hca+ zJoQ+jy^<@T)V>|!PTgdHAjPU_GYF|l^MEO|5=+VO;7vpGrYkbRPLOq)Td36b1^WVnfZvD0^$` z#-lp9DC2FQ`sUx-Vbvu239Fi{w9(Zl`;7e+&3L8l)QNlQ&(VA48(S+8WL(cA-L ziZ0_XvsW6$2MN^OU()6e((Vu9CRK0p)$j73`6EKpVw$ya8N+GNk&-EYs!uf7LQTp$ zOwLh>*-3NwT3D?hTjr9y>D3gia3QYYtu|im&+_r}ZZ3bX`0}VJ^u=&28Fk(eIn9j^ zpZ2=NMRvBczoT7G4|i*8zo6lb4SN%V>istueN9JKW&LP(uOE-@zvNT?Z!r3QY*7D{ z1le)FTz;fzNG}8v=aj?`V@Pk0U7ir#PCIm7 QQ^V=@33t&{M`kt1%fBKAM>k~Eo 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%0A{w~B^Rh(q)w2H)S&xfV%H9`*=IQ%uf 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%0A^mseySrci?N`B#eE-nb@QS>!a&D7F$5 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
-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


u`vy082)9McS>fv{&B256^^J*L!@wNh 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%0A`wKbEFsdA8@;_vplZkJ7(p5B@Vs64v^<|D|D; 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%0DnFJ-p5s`G$pI8&zgEF+94MF9 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%0D^}R-=uEneRVa`j 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%0AQ9csJWwG4;Md&)_@t2&L@eOvpI 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≀j8IpJ`JP%R_ek!` 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ΝL)9dv#hY=G4Lhz{xm~J*?HBS{gBPc1l1pgmA7yP zCouemW=6LO9DBfQ-UGOG4dWq2RGDS@NFG70=k&obe?fNBs)-cXs0|k2itJTj1Bh}f zerSrLMo=>KDV8Yo=yTYgk)5mK-vQmewKT))J*!Cvw!432?potee2g)Due1tu(JcJO znqlj-VnezJ2DiNHQfl}Gq)mR8g?s?}$qiz#nHm7a{+pyOmy{u^EK8{S5=7ZBBVM%z zic;G!T@Kf^)s+vUKc}KMN??dqex^>q{x;S%?>HoP+>(XUq2MZsG4@I-u-A{C;S+^Dn7Y*Fhd6JmF~)DZi$ z);1PM^7#IXfB-Y&h-^V=oV>o+Zj5eZTj@gPp6_V5n;J?X==0Cr*kB=R23-*p0;eDs zgcyMtyTtiHn-iU|FYIdgekOqv+x!f}xO(`h+89teUyOWhvuJwzlpcX@d^zjJh=< zCT~DA2gZv_$YDEa7UkO*`xmg@{79K$U$ULVp*$nEp6gKRJX~Om;mUw;1$qw&^^`qkva_JNuP!|H)QiZJ zUr4r(qd}IURF48e2eFQ{mwU4Tdl!>CIb+=6!>?vusmM~w+egwpKhP}#kdG-1*(~i1 zF474ivBbgO=gNP6lR(=zCL0soZnlXExz{=8D5BsLThINC^elx4(o}r9*Lkhq`&&^v ztwNFiJbQQtvfL#}!Vob%S>)-8tiQ5ns>G`{$`u$R5t;P+K++$tRMeAIx!+O=xH158 zg`fy;wErMF@QW%KFCE01{+CI~XlE>f7n8!u*ktW@YJLWg2TELP@Sg2Lmq>#9`3axa zx1n+@aFTJ~5$2vvdSRAxCW&13LuMf-i$vbZ9tg%DZtuP_yo*e%uvE`zIbODp(1)V| zJsQB>xc|K0g7)1#_-qO?PkG#Y=q(%8V6H#S=nL)PO`ODr1jHo^a+_S(y$!8^HClx1 zN_T;VOkSA5DG&BZcZCrTP*pY}ZS+M&o)AzGKm)9CJPFk%@AP~4DPS7T|G#ApUlGF* znP7l`4hVpNO#V;mBw0&4Yv=zL09w+<@_%0fi^eu<{Zc{=`L@{Mcwq|=cL^9~1tC)e zxxT)p|9cH)BT~5*Az6c8>7QoR2e}>3gdXjP&PL~%s>P(PYe!Vp*oKmi9}kK3}5z^Awf}!Tlt`fEJ119%jpQOcSsW~31<}f z-@Dc+n{0XpN)9M9%ZDV|_IOI612aWTQN2dz{q?2L8AB20Hz}Ig$%}q^#+^{Q*YoR4 z(Q>;D!DUm4cSrBPl3MQ@CkGBd0xXEXMcBN&-&-+gK0KnDn~UZjnQf|imPM3Wxk@ynrL6t1=rCuqW!ZidM-*9B%Sdi z7Yka1ijB$%z<@xF8*hku==R&^0zBOD91^J)W@ zh4d3dNmMkwnSlIz;ZR@CsO_=4M~l^wM5EDKQpG6W6{6xJrZ<_LFaCW`(~#<#qYnKp}@pS)e-TDLIpR#56&RQ4Gr-XhydCrI1Y@zzcg4aB9ZnM3*Y&+y$@q$fv!z$PsWGrmaPZr6@8ZHResO= zlkk?{?1HSEx5_#An7{y-U`A3PakNSUW80*{ z^cte#rCT*6G{`c?ARm6(CqoIK&$)LfNprv1mn+xGJup}Td}-qxn)Kdk)CW>^McmdB zLPVzKG$nt`H4Az!d^f*K#SUGjDGaj%c?0jywPZWX2!qYFR)U{k#>KIOyV#02OjzMt z1?;KJ$DV8I>;g*4mFUU-Wu&=zO(bmRQeFLHGpdZ|-GN7^e~H{cePb_X-n83Hg!=m677Iif*Rg z&1)&Rvj_q@fe7>3q0 zLzZ7V5uAaXi)0FKKej8Ri)rjiMsiOy$1m4fo;F*Wd+QM}GW08%)EBfjTL`LbUv@h5 z%Aa<}_*!4Pceyw~#B6WXQ5v+MQ3E*#jPwKResKnefE{UX(i2q^qp4bdkX1Pc7*Q!k z!QGSNda^)y!f1KYOa?%uqiD@gLngNeVxny+6IGeTv?JZS>LT|E>Ik&d6+aO#=#Q*( zOI`|swOV|*)m;(a`B|ZURH)dSY&`QLla;h~r-?G1j82e7*;#u_WF*@|EH>S!kD=z! zH!M%1HHeM6SFMMn->fyl-1$_+Z8;*pwc*RGoj&4K@mtNRXq5Dvz3KCpDA-aimYMP< z+xDy~Bpu)yX2o6>;UD3(-OD#D#4zx&$}qqjqskn!RvyD<9np>+@oJ2L*`+YM%Y;A_ z$6*xZVVH)?dt%%qyF1J8i1c=?x;z3WR++I{Ye_`QEj8xCwc!pL73T8v2`=3Lvp0hE zAA{(uhZ4&$Y_11}%<8O-gWLQ-IXtens{k0C5qE@>YlUjr@*|CDz8;ql*h>3)2z#Nc zoZ-_%hN#cG?E}YklSpZW{$%BU-*F1*U{r6ZfQOM4r#Y8^1s+`&KgMa$+u&*z=COuW z#pApbtabJ@L*`)))VR!qDM$2!Zie;3KM!3THH!jb<%7<8*J)aYr zyvH*yMy+4u`?bhAXQT?#-yA#pHlcUZ`_aPn17R?5s(rQkWdhe zrYSIs@ej+svC15=*d)w4N%D_A-HYX>Fx+9kF_XPf+o#pelkM*P_DMn*Z+&g@$*LW5 zf9>#DEjmyuYVSj>*^_SY3D>SM;^4|P#nEtv!`cf|qV}_BAQab|v`bbZhY{Bsec}`c zTaQfG)7k2aX_MU#+A31Z&UkcgRA<9IAWOoE`|G)6LXJfS=7)JALX(t%85Uqk`Y)2f z-?-t2P;7Tzra4*NyRSvx`k7)$pQPe%1m6l0xvAJcDwBk7!UAu(H-F-_VNb_N5~S1I zHc|^kw^OXPY}9S{J!oWHVJ<7D>i!-vw`8(2P64Wt(^VP5zI=s!jm5MKCF@F}0sx1K zC)k@nkeXCDi_dG&^czur1H(B^!%a1CZ2rvDIpWx&?_~?cD+!Is2SCAxg_4~chA>Tm z;>W;xvoc@KkJU+t4C-F9T)9g+cUtyZZ{)$o#idfXYWkOszne!D!aGw?zgF3D!`=*z z0H0{XT!MEN=3x!!WXx@>%p1P2sNCtBHEX2n5w95L`7ET??Axnq*e#`q>#tDRO+mD0AhC8r{)THnQzRO!tAf#uI6^ z>-)$^e~9fypq&@%>qhtGL2&E|nAWH-F*X6s@WZVQWTUyF258j108Np2@q!22RU2xQ zf1T}9>+g|2kXN({6nYtH)MJ}wF>#+`G&7QG02$I=BBVov=RZa9t7xF4eSSDhBQnsc zHu%FSfkNRr2&H}v#&F_^W1`9Yj;4_0-cH%EO1KHj#uAn zS>GM+09&|HTqXztFuc{Jlh7UJACK&mfH1~9b4}oHp#Qodb>oAoJNvOV_ppF~T>r01 z_WzImcF~w&ArU21QG|Domo!1p%Q_Il5Eo#yJ$eH7v^HzFc@SkO>A=cyHD(l zal@BL0PqYt5+K%N9 z^%KJa!0^dDm8To)hoWjU^z38Zjgu9J2}ZE<62*taLWWrnM!=!IITB-+ZZ9!`%1Ejc zm>P~k%{#t5c2xe9RUT3DP{&#k{JfMJU};ri_M~KgS*PNY<7^kX07yLw`kbNe3ixvCR`}1X92ztLw!> z>o_U$Mn<=(6oNh1+sU%)^_;)=#P#LcogI3EAaHrl_J{_Kl&3!2ka=4(!mq11l>Oz( zz=GGcilWIPVvC_y#Mso3nerVjK-+w)hMWppHl*7u2Cur(yt@><1H-9zQYESRYUy%v z&H2B~;F>c=1S_wm8|fZ0vMK!-(@0u$gg^zj5WS-MX*;y&?B5WQ*Z|^E>KmlB>4+@1 zl@DUlrNHRi_?p*y0Ejr)44ybfxlvs*qSfCHI&OaB#5beLEL1?MY#EOcY2!6ePuI#dNF-WYSt z++kxOt>SH@cIA`v|1+G zA>z>0JMck2T*I@LJdU3>T{>LH|7@t~t#|7QnTxnJR$Fupq=bJpnZkU;aiS>M55mhe8QS(YKI%wqN8SZsF`yKXeO#2oOORWZcFaA1pt7WYzaz} zZe%EytlAw&8U-2*6naj}0}gT4JQS$LMpFENEgPy_hpX~MM1Ym$Q7HG(39Xq^a8th&vtyH&I)qJmM)=od!PN8Fo=T4C@D2@skew#Qyc9>!RwNbs5d{ zpZuikopAzw(g!mq{bY-d6GpmY1&X*sc#cZSB_(qrAcFu&=N zpoD=?2TJq1v|dy)S(X{;(G#T94z4>JF|+S#*RJFO_5m`x!wzme0sE^Z&JC~ zl}+<#JbEN(JJ6+(jS>WFs*1zg*wH+Rbfif9Zmu2jpa$|wi=yfTr0M18q*gSZPB+9) zSfN}22L@Zob^61S&=j|AKD~mOVB-xOj{;}i4xA7zQ{h!aTv*H^xZ#*#yenH0`|>VD z_JEHf`qH3azZcg1d*o?U#)4u<4=YF-; za`h7(peV*1E=t#M8}{vF*Qn&*F62MGY3x*q{j`UOSaqOFP9^rg1xBdHL_&Y+Ls;YN ztCM}Ut&)AFldVDGNt$KfXWi?GN%MrM1^xy`zCqTRle`6x?+SkU`TW)DB1g7Q^1-Xa zf^`{%IN4)PV|^$y=J(YSj1_}5WfBR1^^zKw0Q%j;CNnQ74nU1DgJm}c&VOLw!p)oX z9eIm>$pA_s{lZu*w_(i+|2b4IB&~+lUFd7DVWEnm!pcw2rOrzhjdh^v?oXL*!1O#V4&x2xV23<>xHNBYZTP?aSmbQQReSXTyGGj!HTh^EYh%(be3 zq7thQ8@j46_bJ*8RAp^Um%TBWj(SG>z^f{<@aHJL{x)NlwZvGGDGBSorQ8I$@fX(; zQ|LOiw?ZhBM*J*Ljd|{$01ypE1I6E7deI?8jAJ>N)QAE`4gr?Jt6nf9+-g|!<$+e! ziVv_6x}eP}dBqw!Y)jOx$|>t-#EtV$gQ;}u;2jZvwhjKWqHRhwCe>UPFm$#j@`+v= zlR_lFD)M>(8b!Hjn&&KqmU{kg^YicK zRPWyBUZZMawL=gJN#{gt`NcRER89#Ug4F_F$_4)9rl9h2^sdn6pOV((08|Glh}^O9 z;Mi!NBP-g7t~t2jc3)xvjE(_5r-yusdRr0N$HBG5OZYF2vk%xFPxMhP4XJNAj$gw> zP3zRjF841E6KJ6nPUhGfZ*d+5#1M$Mm(_ z18f{9wD!#$BG`N1@^Lx0Dxcx)dzFX*+xpK0Ep$5ofG`-yiJrz13%LDnm{Jro`F*b+ zU?Kw|5RldXP3fg>>f~Z+46ymnzM<~a<=>l<=%KyF7FeieCqr&QgHx8UEQ4b$8`YLt zPA2VupC#}0i(5P3&hDJ*SqNQRt$)A8oSdV$cTeyOLiPK7m*5}B<$jpu3R66QF9;g0 zeBUP3IeS+0OgJ@4cfuiZ(#lILztXBLb)TC9wZqbZX3+B5Bz<-p_T{H;4H#khO#-^R z1YD+^wzyqhOG+KJ0S%kI%uI7IJka>IBcAr7h5$0;Ar}uF$B%__bI?z*Im&hQe!y&+ zP93z8{~$R^gKm`O?NA~(co)_kM(>8fc{>+Uq0`TkHSq#cB70;dXW-a9t#Kls)> zZ8TDK=@~UlWVAWT*tAzY?m5zQw-WVZd1LODjslnK#-k9f_@nHQYu|Byw;e&pbMn0@ zl*IY85e@x;BV-7x*9ZoN_~kNcT6-M6Mu%(_9X;=5GSzz#8kfz#BVDlyW^(2=*IWYr zV@Hk$GUsfs*o-n=WZubPq!}BolL*#-?9$d(qLDgeNoZd%>k@ig+AwApG4clK_Jjq* z9+nq4vsbf`+NGJ8Y|1(~@K8edtuHnXG|9Z!Q2j@Ni7=ADpGnPm;}^GoYB$@y7b*j} z&YD#N+^h*GjvRaadLKvm!y4%y0AeO977Ld7z!7Y>RXXb%CIQE5@HoZtPU&k?-7{Xq z&cst-; z2VY2!LT#OpP9(hn9ejI@Uh`J?-Q0B+<)*8ep!63)@I+;q;=W6znS4qCcEq#(8H$&- z4EX*ULGbA) zwTU6H)qt+v%ZDtYZvl~e%rBKx`VBcOR~sL$ZU-~2YhNq9^F^2DkNA2BM`X%Y^U?jU zt>WKScIJoaZcf#Eu5?GsKRICuuDYk2)6I7DTs^wBRQr$G_66lG*!RE(rd=4im*l^y z-ITcb4i5BBU+{?)6QgR`)rnWo0<+Ec0XDNnA1?}8DUtF{0M~21L<0e@6gh zK;#igztmB={o_zOOfog|KVF7lDv^6B?yL#L;WcYw$0?;8$E9OJ4(fG%?)&tcprKuY zgg25cmP8WL#V2yw#3%B94amD$a>V<(#H(Ms%p{`Hqn4bVWe$fs)_X@T%@Qkg!00U& zm5#|K@MTke!k=djWE<_|A5{$P7J~Yl{L4{`phB;bm2bSQL&A%gt+NOnMv@lAPLr*F zbg)vB#?wakjXqm!r)HbH$Gj+T^qn7^f`DQqHK}LSA~UW^m2$dwd>*IZqRl%9_X%~r z=aRnn#C-#CeIrJ>CzBgdQ_j?o3l;BN4>CloOY>M#FpnBQ~BPWRg3i#fsww=8&}xklydH6CVQM7zi~ zI?^Cy=Irw*k}2oUL_*zfp#G7?qO}&9t{C!APs4cmUU5|_c`V-+y5jgA!L~$ zd+PBRCu5n0YnWzpeM>*Aa3RBpWN_ErU2vI4BkIS>7g)qj2SOHPj5BEVH`?~q+gQ}w z5!UvE<_m9&d}kYc5}wuOvkKBBwlIl^zKiPRrIobDFmX(_&xyD_j~J8zQJfP0BLQt-k-z2OG{?wdWt*cB0Wh|X z>){u=lbfJo0iQ@_cK$$2@xff%+GwvOz#Pf+7iZ};8~KI)NEdrpW^Q>T!2}qYP%INh zUN)9+5v!+wX3Gn!z<&i}IBBkMf&SYLOQSTaD=b5HlCNTmU{w((xCy1Asz%O%4rPsV z=pZp}SN^U$&Sv6Zo&U2RMD56-EIYRcqk!HP4ojf>yFskxS`7O_;mr2TizVG0;4p`8 ze>>$tHL!K^Q|jf)0$5lWLko6plB@5)R~79_(D0$-@;5zl@MnoD_9Q@+XU-?p?PP@( z$?pyym?lG+*FCISA==7di4SgM zr@X#27`8sYrsK8RXM%}CA@5|mSr?_uCO?15cd);}^+>lK;LE>8GBcfDup^~T&2J^G z2&)N)8m?FA0yKq&rk_QG*D)H9a*LrtqPSnYV+B@<}{e?#g|GMlG?cz7g4OL-7GV5*pjPD*E@-u+L$epc;}LrZx>ak28T|i5ueRCmSwZq;k6~ttu(o4 z33=lqax$t+b#2oH*3o(n-tm_v(83tW;%olGB<%%!{M!qI2E02gNe6SS!^W)8qs&AZ zosY+V*fQf&q6g#Pkige650jLow6$B7Leir04I0q#TJLk&T8Tg}B&cUZ$yX^l!zy83 z_v?n9&i6ASFfew7r(x=k(7?Ly$%l42a12)dXEUsk2hI(nxuMzv^506pppOL$e?q+ZN8@=e$C1S*O68Z52uI@zi&da=9AEjh2JAKLu}k!{0!s!&$@7d zh8#R5h$kjA-obC?OGS_@nG9a;~BsDzyQ-n@1U?kW;}T{Di{ zM)LC%9Tka9aQzmf>oF_-uTEJPcFzVTZHDd&c5VrrY1RyRwh0=sw3VELA!5G5xV7md z=BVbC?8RDmrOiybO1525#Y!hrE$TAt?|j7Fb$|~=`;#FsMF*Vx3!3xgXajDDfOOH6W9~sl{fDI(hsh2`KcG_3fEzamnvQ*ESL3S ztAXAszhwEWIo17G zz<_!5iV^faPmm@gA8i+uP00rfB+(eb+=XsS3$6{@fJqx3`Ss+Fa@ltL1AQ6zIY>ZG zqV5_B++0+94FQxpfn-qsrVq8&&(FH68Y^K&3!aQfM!C9l4AwNSy`rMn89${3%lT|s zP59kWhAI!9)PrM3p(wS_>yv`&8e5`%*jSi?>K;qgWJhc?s-8$$TI4(xOXe%(&s7W_ z>`Z7OxDl(C;8Ne5JV*tSLZ_}YW@WRYC=Mo9UId0PmkZHsiD1b@utG~<${pv380So? z;J~cl2(REwHS2&k>xeU(g`O>o+1A|w78zPj(0>3f&WMZ=V#N|U-?lt^7Y(4re{%bE zi0Zj~8W?R3!vDk@6%qOAwP-?41#N|DjH*C5hyy?VWFdk02Gne0ZGYOeuLpVs_X?09rvlSJHbV!nx?x7o05FJ5Qf#AobrX4t5+5EC2%RmnI}4m5tz zIw?;@D>=*wr?n7R`HUDm9*tD3Xja~pu8oAt;N=We$s1A*a*I+kYg8tAa%5yw%P8HV zTRotZ$X$0lr?+;Ap6#QZ%#L221`VxTt-L;S6z}7wxV9R8&2(>b_}qhL&D#Tt2k`8= zPTwWU-!%kJVoqhbC-dne_Pe%xm}BXL2m68V>P=|&Q`Fzj46~Op)*xfV{&Myvdx#)= zJa22vz-x4ucS=Ay*FS~!`;P0oa#(v?Yt(B+CKyh6O5C!KTncJITXZ8rCNx5)BwPX> zu@;wspG%ImUG>u`=GPHA)Pxb#I5pHH3Ub0J8Fj5pzGu`oVY#3E2_w1UpPkubhhoiy z5r=Fn-eK%<-PpP9;CH*BgbJDzfY*%X81O`UAubG8E)^GyR<=Nz!_JG9A0_kP!k$bU^i>(u$j%f1w(75lGVIO&3s$zsDgj{QuG4Q;1Ms2ph$Gm zBB#)-SUUNrV?hDs$7FtX5jvB6qLf+L2%Jb5(wgAag%WqH#SJA+gztBp61{%u;eY z)qjvJoIeDbzplnG9h?)tc4iqT^UQhzw|oD+UGM;<9lU^R*5T9viJ@RoqD0M^UH~F6 zCTO$8ZTj$Y|FS>L*$xSNkgp7$0{Xh4qq@O`?MTqsP(}+zhr}Nn&RFW9zThzXnzuGb z54cCVclzL1&~?K7Ww*k!upL7AA1}! zXe!l;XP@MmB`{V>C6d&$6_9IWrKtDIToal)HO8c;f&)L`cn$Z21|E$ly*UsYzL9{M z0T&!iaBi9D?^Mmm0Qui4RpM;Wc)d-mWp83=$W9V&FCFz1tV2@;ht&wIT)|@JXBH}f zr3G~cL2`8Ef;!6MDDql863=5*moW`q3zIeQxB}Fy9CuDaQT*LunXaV*vxOipP3ihi zrtZ|MRfj=x;P}k9b%7GFyjFWma!5QTzLZ}TG$dkcd1FjZmw3PmZCN>X;)8>{0R4ss zV+9Pz#V%?65xM-NImDREu1#rd^o*g*s;HNi5lh#F{s^u(5h22;?7l+_M0ZNmOmB)Yh&MX1W;Ra5H@X`b&w zHh;^ckkZP%ZQYShp(e*;vAhE}&O26F@B6%#8O-Wuv9y!d#zTVvXZG zu3k2g;;fzw4e#jmcZ!ssN?r}ia*boZtsC#LhHIqDYXY?IIrHJUwa><8j}Q*}>@k#v z4%Hp&%v~6^xCQN`6>egsmD1&Mb#R}w$DsV$khtx^&x56v;b_1Xy3?-f3U{%=D=FXU zByGyavTbD-E227Ui*M6{XttIgd1Jm=A&|{XwJR3!_zn(b~(=%)FED{nt4t3^A~WNrIqE0M0Fp;<*UIbm3woLIeeT+xLz0%71fa5EynBCmn5j~s~%y0eM;e6ZUy^Yq6R5q@1 zLTKqU>;wj48si}O!yxUrk9>R?eD1+b&9%96RHbpGtX@6Nb~CbP?LCnwqB-gCYaJVy=z{uOcV%pIZ%FxdL!cz z!tbJh7nWT_Wbj1;Vy(Pe#SMzYuTYBs?#)JDqgiABllAjUaL2r0g@&28*d?2pQo-#I z9MoknzR^<7n+wH61aG07$cjJ8j?2zJ#^m2b=&jRm@9|lx2dY{buW_eV-pfO*@VwA7 zuDNcSDUWgcGDrtMol#2g^*|aPsc}1Y8M4meNa^zZ_@xCZEO64vwxjeUzN!iSnuM<{ zT8K6Y__arYv*&&wHs%PsoYn7_VuA zWHD{MggU3q#1!PI+iAE~Z+iRsuL+koYDB{r;~%wwjm-sJlzyN-Q2O68Dt&?YyqMrX zKt(@lL-qf-+W4O`;!@+uZ&Mui`=7M7n(Ne5qeSQ(NXV^uekd2048{lY+f2$#e)FMg zSLqr_^!fKZ&!rf6N1ueLf`0qgsmssfQtR*k%@S~W`)0QlCc=I_8n6zxVKEdR0>I&6 zG6F1xn)Vo;>e{p_SvBBWeztwqO^s0;7 z#_$l)(yq1PM6vrM(@DZaI*3FiCU$C5uAjqp9}>+uhKFfG2S z+WFldB0k}@`2t?~wtOAQ9UVFh55^&AavQsAb@~ShO~NV92d6Oli1@iY%`Y;I6qbL&Z((H24c2hY$8l6kiKMFAzgnRC2OwL1}`Zc$6(G6MQ9-1Ur~%aTA9++ zcqs(Efory3&EfVRRE-q}*1_^fF5 z^`l5~Ng9v$8+&Z^Gpj=))Z$PS=uf%4@iQ=g3o2HnwlCSz(AQ!X!_83dr>;dq{0^wb z)L=OUTU3|e&@>UTczK(*KOSnSvF*zD)=_}rRQs|?ZcSnc=r*zIQ` z5y2)vtiVtV_1JN^&1VX5-^q~hG)MgkXLRQG7)Ht1zpoEb!1aloh3q~}#o3?ZB3bL0 zPZA!0aaB_pn0#_$629m~hZ82>e--jz*Ww}4^*353yQokiuZ4?&BJWhJavXS8?U<}O zxfpfc4w-2sJHYA-@6GYV-)~WM-->&OhS^$%JBJ#WrhnM3m}Rv`Go=^FC*60r0GZ~* z(@klISI2>r`;Gzv%sPrh-DNAySY2_?Ev{}#kCC(C0W=cq=e)R6EUfB8*VJpy)CM%t z{PwbG{{=^+=j3ebb=w9DFbKR^i@@KZ`OaxvA9y+8@~u*n$1mUdH`52fO2|mA;h4H@ z%|VS`T!T7FSSt1O3e{eJr~2d2nV0djPy+dz$NA~3e!3$4V5%`*Y&VMJdyO{PH`Xc^ zHK-1`%&#Mp()L@sU$lcnA~78WE$03LZf|m2fYBrEoG9=6aCj#Ib?FT#Loee|s5^s? zgs;I=>5ugKpxZI(Ta`WG%yG{~OJDJAxgn4nRGg6XBIgfU3jDE0`!-Y0Gb z#kKt;@943}DZVDu$;zRNwsmV|6fP}iIPQ@Q@@LmCIM<1ISBBa>$=kIFOJ0!T&f2an zYBqkDmC}}u?Xq)gxtG=Oex1J48L^Ko{SB^z;3RmOTP;#@9^XRP>QC(&p}6-wt@u?* zWCPnnuPi;2?Qh$v)0(y1jN)(2fziN#!Uwm88t`oaW?85!JVYjI5Wy&3FqMiaLpH-L zRVS2qnTjewHjOuaE8EbO0?#j5>QpR4R-^-$n4L-G*{m69)%~c5Q=GOz^8!LpT%SahmsyXXu}pK#osOqUZF@KVnHGf zZ9y)+p&FY2JQ0x)^53ejs2!1*cz@E87e721mH#teqMu$v7h{Y6H&bRB?(f2X zeR)Slvjy#eCP=~=jN$%Lly%0xfSkzUbiDTI&Ixv{>6Po@*5$F{$!6!V34bkQ9%j9x z#;?jB!$2HsKZt_8D$0j2go^mWo2V#7O+iLX=PPcbevnOKe~Bcm$QYR%%`y=i=}6lq zEmvH#5MN9sBvX8KhDqU~<~4C?5Aj{49+G*;j=|?Xwy2kq(e5fOG6}0Swz_Yk{Hkbe zjdI1^U_A-y8{iwj%))Z`oz~8vMum0KcMCbgcX}rM!mny<8HVqEJA^Ko{g*pStAEDVf;yvn;ZOXHc%42f`00X z;Cl>Tkqwx9V(cMXX)mY20x9qI9DbOo0589+AbYHy!57%?!Edbp5qRu3e_dDp0P97* z)}AaLJ~1C$>T***wukLKL z;CTp@M*Eq!_&jzg<7MEh5##Wb$)(U{XbB-?!LZ(!*4aL_H*go1%}vr}g^`|}VwH@e zN8Y?riPiqOCEPga%F#T>FPB!kf=e1qqpSwy>)EjZN;iecv9+ud!^RWuwmM>Y+GB58 zgPP%)K1X-D-7`?8>j@1$O7&o(DQg{N@#0c;A&}NyiM?uifCmrajA?zxhKNCrt|b?c zwPkuWGO<#!Nt%4Jkm)i$;U4dxz;_%!ccOsuzGbs*+O$bJ1G=z!TtTEYpqEw4&^*yj zYy1E3_D<22fZMiiDz;s*omA{pY}=l(?TT&Nwrx8V+qR99wbx$zp0)3Nx^18HG#}IE zY-ywaV~jq&{6%DQ|1EPDYp0o$5I|%8!Ug9}!AJSe+N&QJa zeaO4!U29cuX{BDf*siEgNH+vniE@~mTUdxLG@IZ!di$F5KkpCQhW^bMy?Xu=CLvE> zEx_p4H7Xw74E~@_SWHK_)D39;vpjAuGgVmesPHH=>E54V_FeG<^z3qqV@re!vh$^uScg`zFbM|GZq^+mIS3Fs^Bo ziVb!y*DE)Fm)bS(Ej?LTO@Lm80zFnCb67kU_RwaI{MyES6c=-%YY!n6yA-ZyCd&-K z!6ct2f?&dw{w>Cm^(GHK`=jdGCSd=MRpL*rD|GNl--}ISccZmt221$(1i+}k0?yEM z?9Z%xW6Kux$(b_4h0*w*S@hn|;8xg88@;oF@a&=c67H>Gz^V?EOAOg(YW)utN8rSI zl!Rbu>^=Obo%gmONCJB4D2+#M5CQS3>h!x$IE4;Oz zBJBF4c#7ez2f5e~YM4Fhx80!GWU0`nWaMrDM;?+>#=b=O2UQ%98qOe-V|H-c8}liE zk2Nwa*Cc@e%cJYL6a6pOVTmTBuLopnGVkRc^5qeuSLU#PR7bSAXxDNqJ!^+w40TJG ze^Lk4U8e?;#qDNy%(K?T44)v@eZ0*~b9bG6(&yc_OGZ$(n)e~*^1J6vF$tG8SwQc3 z{>ucM6YM0CmAAjEPhKLa6RP#!Pq}bwB zx2`u3W`7GfRwifLOl6J~e|41SeQ35f8W^X`V|d69G*SV0DommgO*LJwwgz7OD3K({ z{Tc^E;t}2Ei6Ury zpJ5&o5pc$^!<@Tag#EP$K`H|)iw=iaqdbSC$(W7Lc4gYk=_C}((9^*JM~D({m!763 zZsFTE{pZe8lX6V7WS*-V@dqlmdEF~{i1miC4UPB?%_m)>vZ&dF*yQY|@VK+ExVu&; zf|^<5=L1Hv&ZQE9QT&tIr;I-w1W4BAck}K!;kK4h>r>eT<=jBd-KXiMALAlyl-3NO z(%sFHRpZ(M1v42Z;*H(}F6%Ozit0EHV22l*-&d)*zd?^l*Ze;cqZMwpD948xL{KA; zxkvCcdCPt!MT0XR<^v7BQ1Jia-#Iuy+{Y|3bhy5~%z_CIzr-JcjYepWNBix!Jt%q3 z2TNwt#!o*dGX*Co!V6?pB?1d(t4?HOSGi2v^MO4k|HDrLs8TB|`4fB}1h|`^6Zp3r z7{St$^v$#Re8xaD@pkrUq5T#4{<|N|E=cmO#gBb_(Ome4u56psuP|uhnCG8z?r*1j zL{AU6C(vo2oM|5^=p{JK2cSkEi~|@t-V4o4^r5tF4b z7o|LE{W`wUdaRZ+7b%}I@8!_nH0gC{%^5b4-yqdjR|{1$mTq+_Ra>4}VI@vmMs8Zz z_{-v4_}CCUe^vQd2p?e%A4r^Sm>+?%Qfxm}Fy%$3q~#v<6|Yrlhil(oxzoaQ=?3Yx zPr09pv6sk}O@CSL*KS7w<#X_dFi5FDke*aJ8bZws|pv+wNjCO5P|i+%Y`i z;$s_~nyVoZ1Y*zVfQX2us;cbsk>#I_#96K{jU>bYsl;E$42N`y z3G2T+(la5+Cm)cNmNdywl1b3fjZC2!)=zRfuYkFrTzbG{ID0QS%jB+}&H|_st#d1D zFlwllAbxaz42z3@Z^0bxu~2JwQQeFkuS;N1EX_0QkAMI;^2CsZqUs-W-nQZ#LMRZM z(ASJj0kH4RS~GPY`vBo)q|rRn0;%eMhb(AJ=P<{B!?K&PjHz*{$z_nBsqyz6v*vtR zF(7>$su8YVpVoP6L8JllCTm(@UKoa(DuNz`SSTksyohAq0lFsPcL7tq%vUbTjyXf| zhk0RugS=|UClvwN*E`19N3T7@Vzc9v8e0pM6Pny{1p@(ohyaAfY}d<}=TkMP;X6R^ z^>-?>nuS$SZbtKAvsw+z;xraE0cGNz_abAW%JQ#33U3H zkj1&Ji{OcSza?ziUO>2q%1UFNMG?QPc^gO8vi>TeSN6>46?xs7cwg@yal`Z>i&(8x z;)JGe=S!+z>)&(2pG%AExiRxlqPLJ-&uBX`Iyvgr$IDe?1IRmXmlvmX8_(`5EbWR* zDy@VtjmiS584VhqSC$gEh*1a1PEQN+s*1Qa?akbObab9_rR9cpDsCP=%XwM_Xw)<2E&P*P8D#+fUCRJ5rjR1lOYFJF?I9J-X*}<0a6{NRS-{*`HxxzHS~b>78N| zh?nh*Asis~lb2(_NCsy|Te$Cn+u6^_f`~#&h-!wSrTtX8weG4&h=?q4NT8gXfMMJwsB>vq~xrVAh ziP}HWD&H0F8-0JEIHq)8%{2k#k(^d%ndZ9p>ybVArkf(~EBwtB^n;&63XX#26d@IG z+FE2-bJOW`DkksCT*?#cgIEm=2rzsZqTku19vT<18xs6fb9%Ze0k|xA*aXl7;K9Jx z({}aK!rvtFA>!GN4~`|qWvF?Ix*b{$@n%}xW!CDbmMW!gFaM}ag3Wcw;eK6|YwhOz z#cOoq)7Y)hdixpT;UH%E(f$QM4QDfFIh%>RMAbdGVnYdoLLmE*-TI*5-qNbEQA^9c zj68t1J;RzS9nEFrQ_(EYq(M~z7cdkc-ABH`BT(t}+b4rUN4<~0qt(SJ*g3lUJBqL^ zjrRoo4qu|3z5Ek%O6_tM2?RjPA>2kW#)ie$pE4|fc%ABStZPYr3)@ow~xb@0ceZZKNz|d*DW_=~q%Bha!U9NzK-xS=nF`i}o$PGov zULlD6;N9n8%@xzp8E`IV#?-cQyRd@ed&D)gjl~`L3kV)h7)%*)=m+Za+s9)K(6tv; z`x*);WId%9JQ&RRk97-vA9o+pP8dX;K?^A#+#H`LZFDVbYH`$0l15_$H`gI}Cb2z+ z6}O3fxAAs;+y4jt^qFw5p(1=@JB6eruC3f`qns?`gOyBCGkB*6MpIpi zyCzxYj6;uQCTf=97%pUa+tQ^-Vt&VCaHu_MxkayleSZ+#l{jf#ynYvF?HlI2tMl{V zH6pu9C~!%@m`nLep-jF}BpW15yoX`TcgfDppK-Gwt=Y67)w^R-t*eLanP~0>IsBQ? z;+ZP_g)^SNoa9aqT9JQ-`L7_c{17^GCXUP>As#e>zw|_=;7oR@V9a{KynvthzC{jy zE|$aLjG#-1WjK)&OxWo9lxKIAD?Tiwx_k<|}p1O3VlJY3D!v*{;>u zh@I)qcfEYT9dm#3@xi&K+z#P|+XZm5qLeIEL7csbk%fb2fnxO;B<1}1D-!vakqst2 zmWK4_Q~~N6pAgPjHtZ1eqpO&54Z0}t@t3suup8JZ^nCY$MU+e|czQL2Twsm=&@^l- zHfl`1R_% zG%nyLW-=J7^lMf)`8u!{FNy+IGv&$QN&2h_Sz5$U;FuMe+iNNgV;Hm^hjB%YukyVf zT$ai@Nt=_31x1e zwIzVKs;N{zTtt4`MdWTPFfIAU@WO+b6>i-iT?C%zS!#GRFU5a;(&vRi!p4hTtrwkV zLY@?fsOLweoKJYgl^F{-DwZiRON5ExER#yYV6&+VnpqvYq%NF-3W1#nX=1fUP7^-K zqcHed$6I%IXE_s*b@0d;u%LgizFSasp*(K{t{$65O-P-hQoOJjKMS_H-vg%ew&N2uzS636{!ta&Bmgv`XNZ4pd)&AS!3Zaf7X z8e*Gk;UI|$uNj#t*hz&2mAv)K*U}}Th@W(HTlr~MbAkBVcY=b?^4*HbxdL-VY2F!g zBY&MUIq=cNI4}hIFj`TOv&2Cmjz6TcejXjTbp>Kn0Mi3lzLL{4T-7&kB(hZDI3#L) zvlRxX1LP0}0tx5S$F+L%!ZfPv;eMu{8F=}#4Q}o_xnB=Cg#LH7tbz^cF4gyP`wkfh z$m@T)nUU7FcKd&^)BfxJ;~%EFe_e+Bv)w_B5dIf&7@kJ-l|l_8XfjT4h&tpHUjJ>gsUU=|80%1)w~MaON+6Wy}a8=tY=H#t8i z(HooSTb~U7LrNVBxG>u@`w1X7INz{C6qU*H9#B#C*k?uMfhJe}KH`uaRR_R(>!#c_ zVMjCOM~Y@Gr%A=xw;Kl?Fn)w~JqACF=|^?m8??-V;by|DR)IZGEEtC6(*1t;>ztWjNc!#3N1@v` zrz1!6H|-3J^QcLEMNb&3nxRZ8SMzva2Uc`cF_S3F7$5RiK) z6%!BZ5^u4hNCz-xC#mBVzdVEH-iZ#8TloUh|AwvZq%!#~##Ml~5koF$;fVm2<~9k*pOWqkdaa88poV z3S`2O_fW^D6`7zyC==RQe-YRCjXc!)c07HayufRykfPpYM@^|LayH`apR5K^M>hgI zu%cLW!{I51uISSX`F+3q)uZCs2mk8hJGjR0(Y}2jM$GSNM?GD8^YCszBOY;ld)NMh zygGf&F^usXw@2-%9c{z@FWM@;T`nF52i*?iFq+muOHeku_mFZ>u^}W>Xvf;g8za3Z zXJKq5Qx?q%bM4MY-wm~Q`S2Bv&$et-_chxvpGv!Z`fS3Eqr!A?T>?czlV#e@vXi{u zPA}ZcFoV5=p1$b_?Ty=*xbE{@$;#{f*c3HNKTiT?`E8 zhPaVjcFH*KmWvw1`{@+NzRrOsUI9>ef*-G?i%s;_MWkG%#G2xyBul@TW+5?|Fyp%> z8$BcL+g!Id<~%6xpp&q|gue{f`Dq%rAVQ=^$P3%gLM|?J!d)cV$-i%JS7}({q@l6f zIy1!$TYVKG?GGlOMo;mkus{^_#=YZVoQ=7jcg!HKHCY^ofVjki!i@aGaK$=EP=@Sd z!gLD>$=$nva;|!Bbx5orU2tfm zrNX63kr_ow42uwBM1jg#M?fztZ!%}tfkvFfEw5Kix-xBhH1^v8c5;eLbQ346T_x=} zQ?DhVt9jGNHVvJ=Oz~^WNSl`3dJqWn6BY{rEGU&j32+!lcW0fNnqAsS1JQIZ)k%j( zE+}L95f=p?uS~r|%9^E%U#fH)PO1<~yGF$2DoZqI)c9CmqVXoKWg}S@nO(R=+!Ss{ zDMQ6xxZeOpzbe>>UtY#9)5(~J$Ff0qDX-&Abl=tfS}5W|MX^(^p-O09ggu7Cp6*j0 zJSQ@~Ef{!>>rRm_>0nF|k`pPkkS&DUk4uc3--^7sO{JnKL3v3l9z$-RofN_a=gx+Ue0_+I^J!KKy`&Eu(5N-jcE>{^t1=fOvoK8 z&n1+wo%hw%Qx;#LLPzpbkL>PD=$_s2KvHOzG2=;En3q+-CZpHm&nLXQi}0#cPZQoG zTUHXBm%;VOrWd|jrN*Q{k?~y@v2z3UprynPvklF%P3KiEI=5+B{N?^V@N+Tl4U4-M z!QIY&9rx-bw%EAztec8u+QARU>0Fu@O_sa&%dNTz7z1+nbRR*YAqAb`4*f=zZGyLt znYxUn7uy6$WY4@~#c=*h{kH60eXpd)GZe1SWlAU5@CsM?$glqf{*?8J2D$nkGZ!NL zj~z1pb1(jnQS<+oi2X~p1Z*4~ZLIz&ULF6juSWbd8Ew}2$G$oW*tm!X0Fbk^%3D(# zTZK+cO+66~Lzr=)65HHszYnk1ZDZ(rF%e07spR|mJU{??+9OA3FSet8l=81x8n#+y z^N(D_x)Yw3~m3;;>scvu)OJ>Yo_~2+4$$n$$e+p&xn9%RSY? z*`KDi%TC(#Lzw_JQ_WheYWwBz8iL96$L5XQT|#So>XD05PF0Y@I5OvjYFD<$8g@lu zgGHJOPlV%^kny&3GnncK!!G28rQ20t8^gjZHrA`6nDxD~nICAi9#|z=vU#noxCs-P zWs$ldMT|+=4QZGGLK*)CbGG zN5fdC4+6A<26@iVxmL`g8qEU|-5Ma13&>*29y6><#Yh4ad>#~6+ou+55Dh08ciJY& zUDGk#hEXj9h6gV+s1#Eh$C+XyOh}_Id{rQ25nSlbXo?ubr+2mWk*j9G*>+)1Px<{e zy(FgnBG{<8;}@hvj#|{aLSpOIRI31t69o%cXRBsujhQ+tkyKU5p(zZhRJ?pjWasu_ zm)6c$cvChzlQdsEG_GRY1$Ys`Nx@Bx@+jXy@STJs9#(-}PX||Ha*F^nPswg%wTpQu z4^c%u*ycU>Ab1tV^-wy&?^8d^VR!_3#*TnwtZ#ERZ1s*)5Zg6bzh>1_6Ur5Pq07dp zhxIcruio=aX!Lb$uq-C;pb2dD9!$`8^hy8HbI^{a=kPU;x85^SHOl?h#Ls}ETMf@9 zbLyq4OkWZj{EmC5@;hVLowRTO?9M2uGPAyM)+#ACyAlUdl5p{f0U>5oVA5@A`+Cx; z8-xZF^vlX)Z>|=BmRUTlB`u={jZzxvgn;*^8l#V{6@tN2AgVWaH?^C%&#J~$-J^OR z9KR2E$G#;3u>j?9eIxw)twM(MA1a;JwK^5@_3oQD)X#08Lo|TY7DlUqRCjU zIqzjO!vPiz*P2YM^;1L^j&`5Ag`r1_fe>p`9FcN}D2hP&DH%Y}&_Yy})&)zeDqF+T z`kY|oC_soxdSF`IMY(%G9kAlTB7(7Ct@}YOG*WV- zlwakIG@3KHqP1xQ>RCgp*Q{FLRFQq+em4(0&onGKk2Flf2WQr7L5a43i1b`@`Q}`d zoWxjB<5Wo^pM{NFplJW;vz9H3y(qELyFLYy+&eL2X7GW2cBDUD+ zB_1$lGG#l$W0#2{9DYzk?hn|BA1t7kyUF(E(I@^yU=GC=oQ|oqg^{BKL5~ON2uogq zyyI-`;ODTJozT3$V>NV3=I9vK+BAW}uL(m~85y?RLwUTW41S4F^z2pcGWcWTnrh<~ zeD$1${~U-P7@jSZk}d4FCB)mU2+!>gp4Zb=n1pRAw2j6o&76;jZl_@?OsZPa@HZ;l z-aF4ssRyr zMm4GlR%fPwT%qNDl_2p!_6heO$w7`m4G}RjEn_g^LS$HmWcdgY6WE#HR|xuix6voY z#c_7}y-ulXMtOlxJe#t^;c=1?Dt>)N#SB#=cq-@^6JF#6aeMQ)eGQMZ8_Bq265G3O z`Uu2;K!K|DWDuzKKMqcX6&6%-DbN&B`OuIABcgIpKEVIJ?1U%?o1ghsAogzs`oGdf z{Y!!V{W9sFN;IHyV6exI_*t~iy6}r>i&S!ou|9cxqSCxPv?(-WRpKPYCi*4o;QGg9 zCOiqfLq;JVafXd+LHF0k1wByujpWa)zERc;0a0+-{CeErzlpy*HZG3&ZNP(POp-sa zTrq2m7!2tUR{VEhMHtLY43i>E7<|Pgi)d1to&b#7DUAcoBfc9bkGC2Ae*Q$c!WhQy z=2;B0xdG05HP|l(bP>>fl?g4g3-+T2T}j~z)u3@0L^_-2Q)cSOmwEU})Q1xff@m$G z7dl^Y^WJu9rv~Jz)VK!*3a7bzJ!M+6CdVhpe8@Z|T ze(-8Cav`_`@Y2KGh^;=fPLiF`_k{-w76$mjFT{j2Fk?W33E(0Sw_;OGN`gA~t%txT zyW+s~*V+e5`8)v9Qh=D%b^0DTJB3W)iMp7@Y;6#G%JeHx3$NhuxVXeS*5p=%T=Vvr zb@%CXXRY}IjGM_5By4VJ7^3rRLu;zg*RyIG6d)7zElSW~WwEs(p9VSO%4{hr%6i>I({=FaidT)xa3;XbaAvs5+0U^AMGd(8MU^>H^dNWH zW;be=YN$Qe#5%vK~i&UFiRPMLxs^yS2*|baeyL{~vea z9inP&qF|Ej2`aa}>hbG`=S0lt~?2!z%m8Z?5OhzK5ML3AW1-dx@l5m}e1wm4^%exE2NhuXPz`lLogNA%LcZ#W|zwrYE)1`U@Se2$Hc%2%8^zHf9$fAd()expj zKHWBJ9K!!9o|f*k6-Q!Re-gI*tbO6$$>(|;ugC>`Yf-A-iK9(x%Q6uN#}6fO-ZHYl zNFEApZR3Nla<&%&*=B5qnJ z+Ti^MFpbAGOUX{5P#Q~Vr7L{O=PJm>w(AY=(=|e6N$v}hC(sUmh7`-M$pZ>qQkXs; zHDHZ0K^{tCrI1BaSw51kEl8s{unRbxJExo1zw}onUFbrLe$3SU5J?qE%F`LPLJLGX z5>sgLlETp1S(!%w*&KVWKhJ3+VJQ8s_^vE6=J`iDDB8`3v_RN1Ol1hDM^q*e>J0*X z!6-IPheWGh_IADr=o{*k$};{9RVEWVCRB;IfPqn*r829uHAxDYjjc6F^9+?E>1eZX z6R|*3N%TH|Vx|=VGXcmU$EtpeHwj6E~=|!)_!|weiqOggK17I z0l9a5eK*!U*RW|hS=wLQn^bg-zoW6MRt<)7RLWc>!v#Smjio@Y6A*EA-4{Jb|5J0M*BUW2*<`HN>H)6k@|UcZo+}{IQ&&Y{Pc%x zd2}MJm>>Rb&ssuS5q5vVYlC*wj$pvHY}edzIQLQ+Y!^)Qb3mY+GER{f$)VO3yY$7O z<3TS!TyCaOwt?+x3xE46Za+nlo_oy($bdSM$^UQ-6iN}`cnAG=so}TEgGK(H*j;{4 z?Ck$_^K&@nYYXd%Yoi3D_McgHLc$ND9X1#p^(Wod%swNW*G zsJ3muLa)!+3!gga-ntK@vtdv{9a{S@!eQy^l1vo;rZ>k5=?lYP)dW;-2aeHmTOJju z6h2}*D6omNXy7NAQ#P?)#!8&NLHe})G$v`>6q?&O;YrFSy@w6#BFHe73jga|PnKt< z0|UCVzB9AeOA}pydzF1&i$|u#fJ#Lgu_!kgCMH>L$7zYQYzW}QhW=KedTFbe;3~eV zmv$%~^xrK!`4CW@-UF&8kb&`9)@wkTa3^R0yp<*K_vJ}MM)LrNYf=K%~=Yf z45Tx$GIvr-YF(j#-OwF~8O31Yh%kO#*77*ENC?S*xB8b|BqY|rsKv-GhlbE3_H7NE z*|y5~;xyhrOcHIHh1ffJI~SgT7|&&N^O3%Nt`v!Ms!x?3q4$wn8pda`)QgeFk!ZSO zj^&EzrkR|Dt-iBP)m38$PG9uVd{MLz9BzV>)() zYC9(Tpz43dQ^K-siv&3(U|RRVz%K2$2VvaA`TuWCPmRAm`KFQU_~T}i0S*f6)wXuf zQ-v!&KKpab4zcINH59M$Gi)~3v)_*7xxsQI53I+3Z-BTUd%wg%10*yY5Ei92QyT?e zA=5c!wfdSI^#xm=8fN2aNTq?1>Da9kkgX>Z6a&1!2ry{cu})ZtC+aR%$aJIaO;;w1 zkH$2aaD8p7LYb>OqfycY2E}`5ipitr$d2wJiHo8Sj*jN=Non&DFvrC)l_8T`$cuWJ z;Q4Z8DcZ=F-GR}9)3G@#bV=`1KDl$(Ca>^m5bf9Rge=Q?3}R~>`pp~Q4XolMm0?sT zUu-0$MdeYeh623tWP=xMm64iSaW`gMF)Nk?jbW7Ok;PBHPK$mxe`=XE95QvcTNNSP zr9lq$tEFZ3fxDb4G{?WCpe2W-aGYVaOhf?TCTfT*hm0W;@TGqUpVunM#ov-7M6 zwT9M<+*Sm1TBm`S)FyvOytZDEQ;Hosl`rh822`d)X>vg~mV(=mGG~!E#2Fa(Wm@w( ztau;p;4n3bEoXjYHuN^6a`os&Q))$8*wX%?%dmi9+CHzh>IBdE8IZn>oeD9-u!jfq z^&qyWrvS>2>BZG_8Kv1^U)9pi70?o|EtRzk4|U1d;?UAgq838ZvUERsJ~jW=UG-W{ z8#|6KJbn0T`Qupvd0Yur3(UBeXu6J4SFpAqN#vfk!KBj6zhA2B z5f5vwdo^g^gLkr_ZN`XQ-f$>~fX*D5cSwMAod?6-WLqHtzxid_!+=nlwEf|!bi*WT zbg&g8yvaN88dgeU1{opLEJ<7_$q3!Vvk94Ldjl_7Xs(nHGTK0zq$a=Hetj=W!xB5> z@&2Eag5M44f+QSLqERt>6bsAu2ke6Ey{0mZp>xc(NoW~{Fh?u>!lPXz#F1J@&wuBihm;4m*{dZ|XRq$3PD zA)nD`pzDs#OzV@7Y{VN8_DpRL)o0d2zh5!D{$h@|99nR}X)`yd7F)~_+RVudI|W*D zt~|pxY;GZP+9ne`nUeoPD3AlMEVrp%JQpzJ&iUnw+!Gu=b&J09-<+Qhp%H;R-*^Vm z@4P~-|6>aEPc1rE0dx3Xks(^-pDhl~Cb!YtF`-X3L$g;}`g&-jZ9afj6^A_`I`i*)o+ zuAo#3N;P6>y_z~8om`E6+_hOoDLX0>QnVD7UbB!N#E&{o$i-$UR|XPpvXsH ze%f>h-HvJ`^amg@?P2dQeh4+gEt#=Xn3UbKVf{*v_~hzL1*v>wmDc5!9R}dvxnhEh zmfUn=u9YzQdUs{~!Qbb1(MAD}F^^%yQNLY>TN0e+ezmXL`+L&sp8hz!4^ zC83&=4?X_=dwB4(uO*X=0$-tMooH7lYAcno?fdB{sKt#=*S9M`w3}mDct`VjRuo0R zWhg(;N<&(aMa0lAlk^K|E|vfh+afU1_TV_`Nd>$;3x6&gPEpDg1;Q*XsM<>Xi-}G0 zu~dOZiX~R)$et-_ONzwA>T_$!iPS6#)!1}EfnP1FoJGS6MPL3ah?u4v7ozW7>>iPB z*+gh&g@_6(8JC-1jV5f+vK>X~!cE$(o~}k0nDTQP1s$9-O7YXV zf*=34H(rauuy#%)6&W$3ydOTT{$2|Slu_Eo#?q36J2k!1p`|Mc#!Uy|X!mkF;TxUR zrO!D0v~uWf+OvV@$$hYcw|=G%r{dv?J?;9vz;biNqyPST#u>r?p@TdfeyX?~-&I$~ z9nQvYatGq4tEpHjTlAWQJ}^49!l)_h3_q?iS5LIWj>YK;bC%*t0`+cL3owQ16JR= z>XSmBKSP=hfBuMqw7b$a=%jxY!(`ZvKj?z<8yiWIF}2`1m^Dq1GZ+P?ropxgltvUx@)`;dOIdKb+#s>K_H6W;kMD>!9kQc7Q;!~92%v5pB#yE-^N;RGy-OnZO&HCe}) z`KE!Z5>@-T?Ho@T@00ge>;RA;EJzqYfT)Irj6Vg0g4;8obwcnLzH2tHa1M3EF3F59 z)H@@U<=`743V0wwtjmvRFzW>HMa5xrjg{Y_ku;$2M#O3Z2DauV+8^Q_$SS zDs|8o^XBCdiWX|&*;K*Wdbl%DX=zQo*-bwNMSj;p=`(2}V(d#doNej-Z4SoYR;7TX zcFdth4IIXlR!+PoUHE1gV5UTugi_5@@#a~_yUwfbuSNZ!%qt8-Dh0I8 z*GQPFLk5_Nm>N^BG4up+e}E?o&oo(+^Vfou2yYbiQrFyp|LUW2Hrcn2CjyIkM!}9s zHe0t6p1YX=m_AZ9P;?crz%h50(9NmjYTG#urFc_2LcY$PCw22>nZf5XW?IZ{>4jd7 zW=_wU3@6pq^33&*IT~wQy_&t6z*@c9MB#Z^hng{2y}CtlhNm`FTw57F-7tu?dcJXs zo{nmO@RiM!KZkS;n>HSP&T9b(-rjx?SFd}qM37^7Ld?(rvCcrwipi&?&`++DS864( zR*7*%i$Ty!kXMWMEGg`oob0AKhKofri&fuCii;S>1op5(YZ=0Ms0B_VWEj!EF%Z}} z*U1=@YbNMFwtIM`io>gA52I}!0^-pMir7BgPR< zLFkAI248e7Z#T(Yzl$g;zdW&8kDpj2o%=Wh8M7Xjb?Z-md7$0#kC-JfydPz+m0}pK z!Vu5U-QmU7GC~*x#!&xZQ8yyfIzlJFvPqjDg!NRL@y3CQt;P-G?(~H674G$v*zQx( zy*rgJe>g`C6JkUds!g9j%3*C2r8%w^)y_Vw{jR#ManjrpDIDcs0PRBO2Q;)h%C#Nm z9}PsU200G^muagFQ@ng)&hH^e^A5uN(Po7UBGD8DBHbj@!}ITr9|se5=HK_%H-v5=_DK4-8(6xhJ?N@eSM()t zTU<6zjrNlPTKwi;#{)64qCs8}dh^4WLzyYI!Q>mQl+9c`f3PNAQ~Eoi!D!kVN!hd? zYj*V$cM_~h?iU#QZwr!|64F$VN1Wp4jZ3khtTgSEkbRY{jN5aOAA|;qCC^lZ>*nF5 z)(bin^c>Z&oh@K+js1th>LRgd$rCqQr0}XJD$iMhY+w+EgaPwb8RLV-K`71A6j*q~ zI2;>c7L4ksjUg&o8O**RNy2&So-Q{5<7oYN&5?_7IgvU^p~{ZeNwtduu$~dlaci++ zisIyxAg$NsUx(k&?_(OwsiO&~{!s>`OwyoPA8wU!*mO9wgd`E?gbOV^iv_IBDTBdl zF>{o{vt}vDU`Bn4ulAR$hdzB6Kla5625vSt)dpd4N6S(=X{|ICiM7-1N9V)=^h|yK z0!M1=!=yG6nIa9#eTgMtEbHQOx(gcpD6~2eo%f}f=3kU;zH)>95(5LEY1-3I1;hcg zR^ePfc$c={<3*0CZJJ?@jE8Ha;o+Qm z7INSKJd$C~Q#@=OXcrDvM7x0*9B}C(OP9t!_ZRj`Vby)) zy&|;DDSz~2MQaPAzmy=hFYeZmFuZ^BE*7jYOjqflN8OA=ud-rHT~; z6h@?PP7Spv3oW))F+q z4~ty#EyZI>9bFxY>7%21+(P+Wb_!Xd`;nJ~wrY1a0OE;c%V0OJfh6zmI9@ zojZ6o?(=I|4^e11syz;Tp!XTt9)1NXeY3vKjyA(e;Y9Xon+0SqjMMRw(ugZlv$vDaQz5)@hsNeMD ze72wg!!Yl^J&c7|L$p3XCSZtusRT3Vh7XnVF;~C=6{q3O@eRr&?x3J$e-4~2;4`Rn z_m`Bk4mA?Ro*}kwazguIv1#mS{(A`}$hs@z{9Xgee6N9Q|L>JhrT?1DsRTOjvtoQU z>__H*Pv)}X>L+jjfZ64-2;^wyT9#Z!2ag(`9q}>SmMf*0jtRr7QJ>$QS09cq)jrjPKAKA*J3ai4njjf1X>zK}u~c@{BTCQqfP)Tf;)L_v4B%+SDvZb>p50 zi{)r-*94=%HmQBek7)sNa^LXt$b&Js?~%QmT| zd=CL5rx^m_co41OiC8&>^z{MhUxd|fqyhFRxHui+1N(hZA`$v)6PZXC%Ec$+vZ`UYyS_&H+N z!IS@nl$S*9{R<4K_oSjv1}*YudVBagWDpz3uimL^KSLT14u5X))W{o*vuJBSuE;Iz z!#mLSPJu_r?yEFkfttx{eDdW}v?(hxNG)_w?q7q|rJ>s!(o`}|@A@%N>PqF{ADdb0^c=k%$*pW9!&Cj9(%Df;dg*x(sf}9gVS_<&X~M-s@^NT%EWN$%@1NKS zK^FdY-S)3oepj6|A-Cca)eo68uyfla%a<%{#hHm0WRNOWa3OW_K&lkNV8RheV_)JD2YdpBxpHNn#m^|cj6rC2>cP~Es*x=KFw&Q16{{G< z48l>fxuoyUY65wMsbUEg$C2yG_1V}K?Jy>;tAXOG_(5~+r_iY9bB@0(%9d*92TAi*`Ijlq zOL-ow>#BD%EYa%`4_V|{9;aK+@27!ip7Y^0Yen6qB@&Kq)qre*haqnW)Cl)ey@EWm zCtQ2AU|}}g(0Sv2Qc>cE5{^B!0^X+y_R9bz+gVCCy-##hhAq|)QHo|*h~_ozR_g)< zHVw8%!!^U|KTC`@6?*cY4^4+JT4qE{#|=z=+vkrBN6^5Bw;^Xkdl8`>hlXclPq5>t z*VXe}^|e)cTA%(Gz7Ds(e%*)}^-(&Zlo%B^|80VGb5CtZ{{0k|{LV(v_&-#~|24l- zPA6tVtl0Elxid&fjT+Wh0{{*ahdDJpnBs`d(DD4MeSJ`ZhTjWnjL5fs(Sl88si?ZB z&b?os9qEF&Vx5CtiYS6V<#7C#1Q(q-t!`M@R&IbehMYP1asfM@%E9LObhm*6zBitU z_673CV%DSZ*N*_jgkunKt&tQTC8kcuI9Lq}8O$8hNJKP;$PjWFoWQh(eA4!?*GPoK zDr#IkRj8c}nCp*Qn<-HeefOIM!%H$Cvq~G#=dV|g7uq2~VJvP+gB(r|L~TkuZjJB% zjw1*xMYCh4iLh!r{DRX@y)#u@&g{^e61cT@?WMf2HJ2p0gzR>h)Ol*XGEeTyuG1J1 zD3&nJIxAW$KAWf6F-;zG5a_Ro@nn{^*OIN*nt*aapiYibFADtn8XnAVqJY(Zj1pXl zP*Sk3V^Cn!g_`(lmcN@(Gx%#X^Cet5z)(jIGE$X1TrP7?N<^5x5;^XA@$&AdCxgN+ zt3%AyE7`0S^cFdHN-GOk;87-Cq~%MZ%SFP+p4S!)W3t_`WdZAC6GX)%^^0*Llu|xs zq9_f;%iVtKeGTELW9my=d-B$8OCg9rX0xVT;4QUW%9=|H$y1(KyjzKl}C zDg0I6p-G~J{Y}!k=+}Vv(jr|y%_I{T&jNyE5e5t;#yHb7^0xD~M1SeL+^x7;sFpEZ z_9LEZQPIPZ_XU%?Xo@FecS;W0f!Qqm#FO2zUI+PO+q|U#6!qsC5%04T!u@w0aTqYe zd!vWt^uYNOXA=e@mt+_j1ptC_=#Z=~z2pqE+3w3wjCQA1BJ!kY$p+&#&>+{7*b2Q& zHO^$GGeRCK>Ze^_LcEHt{D8V4E&o|XGN{!t#Ww{np2oDE_BN*y7ma_-QWe~(vy?d{ zG0f8atNx)-qrh40yg?Fq!$)z{?!o_j=;ur7VIh%6v6Po`=7o>kmg%Yt$F(fS^Uw@e zf2oDlRc7qGMSirDQ?Tv1Jmtg@otO*jENmS9J=|BJPE z?9Mdm*0f{Wwpp=VLB+Oh+qQkjwr$(CZ6_61=XrO(A9nZ0-eX)p;hJNvb*vLRzB+Yr zQ7;bT{J}m;GkQ4oVP1ELI%D-@f5C&jQ3M~i|e1^~!Ww{-|JvUBb zD-$0RTnC6Qhmbtt(i&VN)E=GNA2q0Ig_*AVe92f>S=QdzY@Y6^a^;5Vbkp^yDVW2RR2xbKSwqG18(e*+9-BQ$!J0)O`nmXA1|$@2(=Pq*N_#=FXlt z6bqwdAv#D|MMO%dp_Y@PTN}?9LNS>h++)*oo9GV!P?f1HGLQ^+abItIb!=!vb zI!{mIa{>!1H7phGr1?BW(-XXiA96J*8BGCEGCSgB#k%WpgAb^oguCIIJ23K5OuLy$ z3YZ7c^zxc4_DP!#{e3jlbF8G1(RCRNi2*Y`_RDTtkM9AXY5x5j=dqJC^f}lM(ZuM4 z%^s3vabQ=VqdI?}BQ?19wc|^P9x8(MAkZ0c*VN)`D3D1&_t?Cqg>*LPjibn+w|S%< zX4bLo%<&Fy^wB+_5b+C-Al0d=Pcl~5+2Kh&0Fz61U=nV7*eU4{z3XC+E%qnSX|U#> z8oc3}y&RY2>=#9`2%xQn8<%ruU=#1>aXGfxeYXDt?gjJCro&$(k+gw6d_}Oczv`2P+;#f&C*<-Sm__A$O4YPvt!}o;*Q&~1cicyJ zdvE}e!!DUHH59{6-SpJ0xtzt0`wVIZCdt|}we%oY(j*8k1l7P|<~?XZ3HA?cS?j3D zEX6w6*@DG-NwWiWtJ0RT?HrpEvhZtgAe|{DGtb^@;oa6Hm?Z*~ofdXN%Iy~X1UJ9N1aWv<2j*;2(wvK_H9*#PIal*^?w#VsK98#+dM z->_!EK9Fto@Q&LRpr`ig&g;e0TlKThaJ0!uyxhKfO9z)_R2ZS}=SkcE>sNTIMyM+F z<5Xx!kzV#jaRN8zn^QC*(cGm^13@?eL3)T6Mg$9tjBVj2PH??OTQ=uqEGZkImC?($ z4$;dqn&80MCO%bK(9K=>)I_FOFv$y6=8^VFX9^`Z>de(ixqL<=93wtLfOF4=Ku0-S z=mBhl!t{(Vssij$k@_yu2aUm?KXbf${@_=!}seGSAGIq<*n^ z{{)K;m5HfOFvG5qDvRK|#|K3HY=iTP z(-*0G6iRLY(zY7FMYL5MCJCsq}ZNOjS7$m$F)aZDYL3;KySsP|E(M?ut zV!x5pajT3$zK=2NrxD^IQ^Zv8MrT_TW=i@fuECO%4(U+S+nUPz^d0(p2-Hd8BiTK+oW=0P#QNDgv7o|FaZchY6WQ2=1Y=z6VPPtk@8H9 z)z_94EtJYZ>(nm6rRm3xo0d2UArlR|rqT$MA)f+AQnh5Lw?r(c8t&Ku84;YiqI1a+ zrcK5L=r+hrW(9*R-1EZeJ)@cANADTr{qmEe_+q)!Oy(mB2Lq}|YJ;IT)38pO-F^y>LW3U7P!B@U~6qO+n zRo<4ioeVG-kTEfCFdmT4SiGH}$NLrJ++uG0Jv8=exyol1V}eCyg-GUjKN|6nDk5b9CwMSq5cz$F z+^=wXwK}?2(t%MMk`V`7s-8K^?|5?c?oB4?c^>gK%XZ{gS{7;O)fBpDqaVmy8f=EHdfq!=$)=g~F0ob@Dut(Hp zW91KcvO7VTP%JE|xYgIQI5DXu|6*l9#!dspgGIy0?sw8;I;19C(4UTt2( z1rYq;ckgC@3A!i#ExHNw?h7M82KA7oDG9}tHlcc!aIboZaFk=a1}r&wFfPR?_rO`A z0Kp&9_OO2*;ED{j#@_NyyzRUO5Ek=u`M!J()P`F6K1LgTZbtx+mWF`fRTARQ07J$` zFiIjNOxsL@OiI~wB0P=wPH;L?E>kQ|zjo(FK=3Q)eoc{-A0Rc-%?nAwJJF#|z!z4{ zjngidIaaYhHHgh?mUqNIyY=zn;^DgF-U=t>$4wJ!t>r1TN;a3zGdPc3!dc$sZdT~K zZb1xekfs5COkNXr`X}UEC$QT0n!`J5me$lMD**^Exo*dtx4+hKFM{@NT625Ir&ZeE z)IJB7fok6TtHXjr*eUV2ft|TfF-z%%@yp?cNX?qXHphyb&IG|kuty~+iCh`Yi{=0W zVrv}i{r2g9WJGg9VoR_?W2Sxw)jO`S4_eXuDYp%m_67cE0zLT6U{k;vPPznoKWOg4|DEAer5~ zY#M+&7OUtUt*S^BM%|s z_C5Wn@2H+wJ$#xf8cwteQL6RsuHZ8QXb&2Ps#Md5(wqc}?y&MIdH(7P;=_ig`Fm(P za@MV4!W`%8ZJsi_sD$~QOp4v0FtDql*bN|Jt7nXgmh|$S{zGi?B;-Pel< zSmYR!WD4l~8fQIeQxO&;@A0lFa2>|o7oWQ|diylk18h`{Hr$_6>mwi%PUOD#9Tz4m`T*vd|}sFjGFzNqj_6;8WBP?%oZ{LhnIx9T^f zUrAiHAmkT`pgtIPDj&mfg!^Rhvlf~g+2Vdmp4d$O* z-TSgY0uXmfKmw3=Qb4^BceuHkQ`W=&?k7Qrx6SUcqpGnybd!))Rf99<>rsk}kP&+D ztlW?Xhb~!MCD{7dO2^j(;b~^UN9hA#F|}=Y%|`n@=AP?O!EBqs=(($;xQW;t<7<_= z-5#8xenOQy^$m{URyq^hGO44CFsXmVfO;YCAj3~d0ivQ5(1_S+jbKB1gjK;+MYWj& zj3e|XYSK7iDLyX! zYMq<-Wm{>8<5a?@JLSukMBi_F{LwFn|2E0L$BIU(H2)>)B1pOtDPZyImBaq)8QN&6 z&P#^G3jJ|%*$lZd=d7J9US0E0U7Iq(T=SdWecTGc_clSi`^ zs~?JR7a)5jPT(9>t&h1jgmh@2sZ3o~uQn=OGZ7()Fcy!LAeULO#V5&zOZbyIMj^gp zgTE%H04wP_h5!lSXhN<^Q~4y)*gSSoMeso~P$74ezz9R-j22-i$(yKnHT@5)EvHl! zq>idkTUq|R3}tyKT=N3&xgbDHBZw`M!qQmAcUd~hyjVun7QG-FVICW+Y7XXi+P@u{ zxU*-03EniyGt{poPKY5Qk(?=mbym_f+JApc<2#754U?Hh+tT$FrI|u~@O)eBrK7g5 z?m;##*C=1KLaL%c4~W9>!iJG!xqnI+;&^1kld=YOps5AGv?k*QJ--snOGg)-a5j;e zW4b$bT)g7V>RN?malQvN1hSIQHR`QrPE4v-C}vnlO|NUx3&p2C3<5;!hZ@@Ym|q;+ zV|GrKl8FYQ4p7pD(QCMC#xbmsy*R)!T8)QFjNhM#YP=k6tDx>n4pZA~&<#_04r+Qk zPs2V`_uYvI9wc~AkY99^HH3IIgx-{S4?V#4d?R6vQ~Gp}tf7Es;?`)1m2=lR_mgwi z(h^p3|J_-lb31}Eu~M@X)@hecP3a`ZV*l3A@l3P)(<+al`ePbBNP8x|-~gD%8I{_@ z8O2>stsRAbwMy_{KFumy?>Ew=X7P}l_q{iFMhC{NBL zFXj-Z)fl};VtcAUONVRjo?|>wvs(c{s=19($9a6_}e**t%&>S4p))K7WHlvmZP8vcB8-%BLE)t~hu|Kd$IyFba`X!~umz92nBd+)ipJbWg8vFVv2{MCi#kCF z#PZ`91NLvcG|BuK@>$S)qDxlmS18*XA2fnk1?cJd_~Z4S-h*qM!PMrUnJF@yYxeBF zWlP|QAa6}|%Ol62t|pN*nW{#{AE$hwz?G82N5^%S#be*r`aDE$LV2@f3zA8nn;XQR z)3HSdMXiq0m`K}VjtpAELGAjFPGPk}# zI9`8sYg?0J0h68zp^>7oGqhG;H9Uf?Zwsdnozt-fOZzYD%)0&k!~6pY2lFgcJ+%g) z+h;Khya;9&AO+CcqA~C`D4q2!B&o}MV*lgs86rf~BQDR%WCpI{8H>`yvXIdetyb(m zHRJGZE&)L)u=g00iK>r>R(lxV1+4A-*{9H@w!f;D6l&38J(*{EgBEAaSDa$PA;M1L z{53j$Y9u-~=jgO6s70{1nzwfK!}87Hv3=~yrG%o%1*9jPw^iZ94t7lK`E&guc=-x@ zt?t7~Do9%#L4To5Nt5AZxS50OFb>+~n6jgsM{NmS?ooHez7SqaC90x=)UVX8PEIjI zC;eVM#J<_!3hc0$uUKHsKu=IE^{(IJ(!n;Cm|+krGsDlSUS1cPNDp$8{2m~}z@hp% zrqFggJC&fD*>GY*r~@c1_R(=aI5%06@zux2xI7KB+Ffa=IDEvyng((JQxh1~f4TI1 z2XRYrNVN`LYsL8ZoUVK7lXBM1o81~;bZc$A4iRT# zZOnAVm{wa7!w_d%cDYJ@``l)aiUBqi7zhsLcR(POL6-pvn2(F)k zeDE>?5%Zn@x`Yl;K?Oa`#j9H89Z_dXWKxY0j#eRsH0s4sXQO0#!SzO^8eS>H3BCm~ ziU6A1-jFP#&Z6+PQ6iH$+9)y4IBS-vXRWt-RKEn??-Yasz8N|3Djh%(z?u9~e(>={ zs)G|kBD%00TFK8hq(WrDr@9AC@Bhi*AGQ{zc#9-z*CeOZ?Vm`}t~JO(kwIryHklYW zROb~+ER9T7hD>&nt|9}#2B(Mp$^{pv{^j5vFpJ;Z7ebl#xuB3}gHg{Z;hV&XVIS(Q zaBt`#X*S0r2S6QHyum0#YEbr^=T#Y2v1VD8v9;VIqP!S#Ttd6euO$A!FzAtqzLhWN zYW9w^_0AQN<`~w#>Lrp=hk>9s;wnfuZ;KZzIURtg)+a{};ajv*FpM@x5oU5K{c|J$ z*Pvd_4|VR4a~sS64Zq_&mEfF1N4|_6a^IKX?7Y zuc;bXw&`s0z%w;+I&tFH9FR&f)-TRMBoP+nc{D7FG7+rNy8@%&SiJM$7(eCtTRNi( z?!RZeMr?Y3dXXt6C6AFeGba`3oZl^u8L6x1lG0{n3y9A-=U$N3CsifN8I9zlTop&G zrx$@T<^hkwQ++l2pC-R2loc-gF=2GK>J=-PATipgf+c%6XUQ#@_=C+V6&Y+crc7jF zuZL7VkA-7t*_}+1G7l@JwYQaX4m0ppP1|Ph(~sZbIIR8iR!HwC>v#Da(v(& zbrCt%#R8jH6RtBRkeGEzlWW7zSNYl9yn~aGhv=zyG*%ulc(s*f9PV)(Z`5}8usbKY zU4wq^YIHkEjyq{J-bAEt@*|H4TSKD@{ge-Axf4>}#EY+rJ%jv!abFJr;pAqd3HPrM zMFyfl?iHiP;LJ5a9I5-&I}vu2Rd}2+MdCteCJ8GNLn*=hW*qq(Sn)#Lq2&KU41sh&ZV>(bi*oV+@cO%Ng#>G2)kQ=Lxv=U zy&I&-*PdMaSw#j`=o5GF8@3D1zPz}LwTnp|{&Amx?ti};q`Vs-Qyo{vf2vgWM8rvH zXs&c|0`!uOIF#?SE?)5&{EVsm4xGOS+CQ_UULmJHqj+8s|32zbKzS<-OvOXNl8w;R zC%Ya<60-LufcYgADgP1XmWqIjSG+HhzKMrf1a?c*$1`wkh~n%ufcj}@rzfB$JSVvO z7|iSLijGgl&{gOpra6MpJtiMm8dvEmkw;ULJ$2dXJJ3GAX2IoaTl;tDY*>=C+vHA* z*W!-*EwglR@&4QBt(WsuPy2@^S1q(_@JjY`a;5pi|~=o$lqRLJ1}p0V7Nir9(VUqM{T>`Jjqx-4cr`PMZ*( zW=b}K^WUfk#?idL?u5kSY~K0|;;->>Pyi7)ge9!;#~}m5WCpZhEa=yhjPy9#1Mh)S zafK#4u>qGbs&^I(uO*z-3BaL|x{3!>9mRv3!^$?-^ahkvI zzkKMk^VlM2DKLg*it;fy;LT-^vd=I$b7ue41 zMOU~I+sq7d7!Rdo=YF@gwOPk$`=(DP7bW|oa-JzwTd+15S znfUT{hNS#;NF-IK;M+v+pa}B(alA=&%C0s;$3NRM4mvt0KftXCRyCDNXE0_kIM{1J zd~7RKIM3%Tg-R3#r@jHw5kw=05>3v|f+wTm8fIDFRTuxn!?b;?B?o>|*ks&}g{G90 zEUv`+V0q{s<-mdLjtqn?7A{BZjxP4p9a$V!lhiz_aGQnuF7PhTO-kaUf_y;!l)WXL z0qQx;bq?QD>OjFEuU{*-|AUr~vzEptQc~U9IjPfPZO7pEqDbB#l1okqg=7Q@&$I+R z7ydumc3=WzhiANx-i7dAxXt4+o{icm5a>Wgz~5JBj}pwSmtW*#s8r>Z=0LpZKaVv; z|DF&cO~CVy!mWtHk^BwgHa}5?v-?|v1c<$tC=BtM0}f!nKwx^FwAkJfBjYsD37cv7 zt&7LH6qAXmW{>$xL2BQ~gwdAW(O(Jw`v|zI{}~$m;cb?zKtK}zBO~y?fm^JSCzv2o zaHVSFBI?imlW(+LRyJkz4yaw!8n+VXb9?#yowM5wOg~wTpqSHz^D%r+yA6pUgm#e4 z_Gr7}Lbi>AcTd5cnfGwmv0iPt8~o}}XD7@s7eTLKH`L~nEVU#bH0BlkJJ^r-I9}C+ zg2Vq;BC-g6VJwpf%V8)!1uuTmgLfX&(R+HSdQTS!IZO!2xSA z#-x(m3PsAsKej&AMXcc`zaC;#EKY+RJ9C|+cDa7KF&jTr)Ya3qUJLgxS!$wxta9_* z<@%`aArK^J80Qt|0cXWjxJt=V4}07$&xIvbif8 z18>B_@m_PBKsK$w0Vr^{R{bQY!*P_>+6Z2cD3UGYG>^HIe>2Dz;DxVjMDU49Mc%jE zzP4ta@aauXd8%?nzq3BlFEgx}cE$`*aBK`|@FshR>R(DTB8B-i*V^f}3cRZO}WJuirX-Ck_ufwsngxDVg^{$5egS zxPY}9(^IW<>8I~QJPQ@&GDqz+yqY{JkV1kU3WHrRnSXWi9NaL0Vi0l1E|~OB%lE@J zU1k*l$2==|1Si$sPexNoJls&P^FTvqr@f? zj-CUy<>?ig|F*qqf46PeP^C-gh4=5wq|3RjIY^<|4XUN7Y* z+fdSX%(LUg;uTbo`&S{tMcU>OcZv*o6w`?#Y@npr^QwfQA{ zo5jCEL1*E5iaeh{%ukd7S}FVe-Un=Rcaz&;7E|`6re*eg(0}1A4x2cZm45APtKXAL zT*bpwkcU3Bm6eT+o@3CIS^gujYv^qb#vXpb+n%z5AG*1Ay>tR>AO9#m+U$36mXNrQ z{^hh+(%@Q6TjNL@p~)z)F2V;gNr{{o~lJEh}Fp5&8$ ztL)kRdVTz`J!$NtGgdIH2be}^Of(ERHU_4w7|LX-(AB5@wqmoI(p=F<%3!`+*Jn2k z31u^8AAXs(X5tu$jktSouw~|GBy)&rPuU!p+N|bj2gU!aH9c85cFo{vr*&v;5A&M# z*$R=RA&5r#n+fUu3*<@uz~C{wqzamVE$-g^0Q!+kjywkeH1`j$RnDP@v$N1$(mx$J z8q4PhuS<~=c4y=MJT%-NZ@?hVd|9)MhFiO8`j6hur%G-r%9@E$ z^q#pkUF{i|y8sA1jlISBDfDi2>axpV=ZOB1-7Y^V@*`Mxc`G^dJ=P=b@6?BP{3{Z^ zl0P~}lL~t?q%t6GAS~{2?lGcSga}3-@*kHtOY9x$K!^WP`DzFhczRuq^e5FIg{F|4 zt3K(*)@}284J@C9MV&S+$RSa~>kh!T$A^oF zSqPhk62z{bz3ol(r`S7tRC?K#AcN}Zenw@4(X8_jbIU+o|y`%@T>Z7izQxWt5>m?|4}|PP4;%X%!0mq)@K<;VgiP2>>5)k4 zQd|TsH4IZitZvi9^AW9vGo;2sEl@rJ;-h?Wp%^zKjGHF_aWaIa4H`20WRxR@?(>g< zr4Q#UsO`2Ox7zPsMNUg&>!E=xUm2$yui#mW4MM}I1qT)3OPV|lcjd)UoCGU+KX9$k z5_n_uo_tyGGK^1Fd+j}Tn?MmRL?=z`FN94d_*ae(QUurjj!hT1?SCzspI`^a{3k49$FI68J5U( z`#D*|qZR(GG;xOa&p`QZcEu&vr#fQsTfppO7@`&4$^v^^;Yx_76-cHDAd6VmwK(3{ zhI=R7I@Gg!TI7mf^)2+bMh2g@xz?z-MX743B_xH=UeSwQ)i*utDmvi&FA*;co)C`z z_E)w0u`**h_^~tNIryNKMLCY^Pj;un_+vFYR=xDQD)%! z4e7RozI0C!>Dm)&ePzSGMP5*-*$2EFmz?XY&1J5C)SuiT&k!rvCS{7L6@SRJ<7VN} z+AN?Y|Tl-X4$c0*uHeB$BHe z7Z0y=O3Tx07Vt)zpj0#qrL$Z5TdzzvCJijE+6+t5tLK^85IZ#+5EBjtjXj_ifv=8` zT^Gkk?%Uu^Et!dF)uAz}4cQD6#yMw6lANfcR_aol4#rNjLg~U9WffL#EPy@29QZGv zF=v~=l2VFqNQe+0itCgMS+4Rbh2_?i^RX~k(8a=rokN)R+h9C8FYLlH*W0zHLRDO; zhp%Xs)~iQu&_N;s7sS^N9mG;x>%>#|3I){&l-Fq|s5BV8)Yd8QnRb{yO3LbT@i%(s z=YWT&@@gcp-Ym6>l?|%Eagx=4^$dVXu_#y=BA_`Vt2)f(9q1c*NF+DDi$FdPn{3ry z@>k6uht`fyK)V8pxy320VA+Bt7PPn~l2_+7rAN)r2AfAIHbB{(wA+^^?-dWh;M>zs zW%^cFPsrj%p}9Fdu+J&rB{4ZQ!W~6>iz2w#O(Vm&<*Hd^^h&&b2ZS;gb^!p#hVoP8 zUv&8+SJP9}VQeS1rn>FzBcC|1G<0yIsv61$_n`sWUZG!CEQ96I2XLAmskS*rm^o&0 zx`uwbrX;oYB$Mewj;0NPqE(8M%Ue@81cud`Rg0&dme%@^-QFQ;Z`8PN@aQ{56Ff^p zr3}+U4YZj@NbHl&En|u;69DTZ+;s-G2L%uRxbd*JHr{^9qa<(1o-s4)n%z-Z>4JhP zTxfSdab)G|#I8^bH&;?#4ITP=22zl+pk*U-+0i+ru|OYNNd5SVN`Bfmw?L$NmU@+wWFMTW;XfxiOrjsejt4Y8XW=74@<54*>wxc4!=15Ldnl|3!Z8l7#+ z(X+?wJrMGpPWnt$`3#8pOkjMZe14D8{89n=rnvspc{w3u&heXIO@VcnnK^K2&)_(s z-f8&bj1G>Gc!27iC|FH-N6jyzYa%>UiaU|4} zM?A=p>vO{smQp+RI@kTG} z7X`3mieS|{#jW|3+TJO`MF(iwnR0Qh)fvdj9HX6O1Kc!>p4T`&kQmwap#Al&M;$rb z!dXSc(89#di>vChC6UI6D-PUl-A*Ffn!$RK=?RH93E0GrvwOtHd=hzG`Tm{uD}%Oi z1YuGgcRHPhqpYdjFa$#HRLn}#y25F(sy=8wh5|ORn27)5Pi)Z8m0RC^A|c9t1cR_B z!vIKFCsfGo1D~4}ZXA(d$ILWoEUpEP<5m$WzZ>m`uT(7I-5`WnYBZ6-d>zZBcs$LpMSXl51 zU;3t|qWw&+)p=r79g8#ud+i+=QB6JlyOi|FJ|45NF>xy^KCHgJZteVjg3@Ba4$PI~ z1(O1K+A8-5Za!8(!4dDr+z3bS$U;k*cu9YYW_YyY;PSH!EhN)JJVh$;U^%-=DaX3ny3@ni9dG3YcTe-;)u1=8RYNkx=>1Cs;hz zp}9m%cl{1j3QP`+LLAFO1@R5}->1ONgc;=J2N#yH0|80?4^6@U4-8c_um1xKW1j&C zKh(??(`$GgF4GW_bG9lF(ao(F{Y`0s1<;-QYyXrFlyqO66ImADj5Doc zZmHP*xNRiH{<3Ybo0JeS!z;QjgtFYsgfUdjXBWiv{zkoD+|m=RBhQCFgmGW%mFbiF zAp%OPh-IX$FcI2lL18r6CaYEDZ$>L1IA&rRbH~`9;02|7A9AV*-RD}OCn`_q23$y3yU@- z2?xbGqkU4UR??Mto6HpKQ^A>_MWPS1lQFkkFGh(zGUf{{9ao+7Th&|x_c*V5W}u5Y z$qMe1Rg$jte1puaYt6P{7|qoH0sRL8o_wDi#X9~gniYI5*Bw_~MDt86`a}|O-8p%2 zFm)(z5VD0rbf{uji-~sy3jmlZE9r74!A3-8?Ie!QB7hTGY`DzFyc2${LlsARn2FU99FJdP6XfqdFy~mjZ zzwq5uDmD^mL3Yubjq$6&>*B=y%he+aZi;$>l~%6tl|AXQgfFBjQk#VwMe!|_U0OJl zy{Xd0OKuDg0)S9WZk84QRw|^;PX=`y{(4^y{Sg&>sP!Jp+!QGI-zt{pzy{Mtz{H7U zt{vLZMW$$O%PxYvs8aAKSK-sqx7O$9sYPyxC;rv981mF+gl(Lh{QYsh0~|9?Ulai$ zb)ozx;5dF@?aLov6&LogC2lI-Gy<>_1_Gqud~WQ z-h%Ph0_?O&@vxP%a|xe#;(FANF80~}5qs@Q!p*%{`*4;B)r7ED{IIvprtU9ZP6y0t=yaU(O+j$ zX@diZ;QJpTwgtIZ-Nen}-U5`h zfaWVRVDLRQ`iYHEU%`q8Lq~KjKZvRV#vq`3p;TMUd?E?X3BmikPYuEQx{m|F9&#eR zb$L4iY%K_ICF(SxvU|5eFp-FD=((YF_ASAhUH4j9@*54<%LdCVy4;E+g8H&^>?VSN zc&EXZh}A_~rwl5@tMhlmD6l0v4DD1}eDg7J-8e>h&W^MSc+CAdKFuVqVHvh>ZScdK ze87Vz!Ye}FE-3+GH|LQm9+PYjPv4C(gmB3Mrn9uu64q`9*%HVFc~w3?AVL-dBojXc zq|S3z=8QW< z%QFoi_IjGDdQqqKeaCC=qj6jOH%wKtX4w1JgcV;~c!}WdAy!9QW2$D_`btM`-N;G?* zhC<6AiL9nG$wYam%37l-o=R3Suu(`XFPcymFT}B&UTL#+@@{dmX4xEvz52zoj^4kl z@w`;nBLManV^PbwBw(b^wlS>RlrYA8D%UHz&)3O6C?QoOVDKb7v1%HRZIqLM(?Hgd z#-1C57nRd$#(@C-i=ObF-5={wyi#0z!ICrwmg-($r_Ps9iq&B?%KXmmBi7uWI&yNw z)22>y+4Q)wPdk5{^)kUCf2B!mUaa#xZ_#-^V&qf9gQ(uvfj7SL1ZQ;`-WI}ESE`FIhdHe7dLE7ty|>+s%oFQ>hhY;g+o@z)GrusTX|IXOrHCU;l-wr<{-#HbHIEkMI;Od%s9rMNYHlQKQbB{Y1_YA+l1<915Yp;VN zwJ_x+_4&#z#X!e=&%I7f*vEr7CIbyNgaxNkUcCVe$^Qi(E>ez+93ZO0GaBZOH8sNC z;o8Kg8c50z3oM{SpK_7cj&%%UZsWw9>kKu%z2h2^eNEDJ`~}WKe%@MEld9O!l9%eS z7>{a#D--s@-G(7iKEIR{;`l{=FO&ye#(tdS@)Sd<0x3z*>d5--%ee2{b!%;E_2=)| zmHATQY@*BJmrFNus`+EC**uK8y?BKxPALe+IDPrf@I5IZb?Bl!+?j6yUSfOeb;cLH;<%=lUID1M(+aHH6IeL+tx#ZBK$@+B+zE6m53EZNcd-?2prk!Z*9s zP4X`7NQ?+ZCgQ1e%u!KE$i-S zT>JvjYvo!g+wu^j5rct^t`#bTIIgL9RB9rAUXe$vb7PA;5$1nGiYa^YWFwgRo{md8VIb(sy~oz=O10y{V{Tz z9J;HrPcA{Ur!7!gIiaQ~P7wf6NmtSyh_(6Fu4x0#Bs-#uofx3MgqQ|oDA~kTTy$V% zyj!Wh#Hh}%^cDKh)b<2Cr=xViS9XOh;oZdCJj@_Csdm4KXI^7UM%4!CKZ^s8{_4~I z<#JhE7sh6jtdkEC|7c};2OoE@K#mPJ{)ap#S*Fe;3hi!+kdmDL>qhf{5qapYS*V|! z(+rsHg$YI86gt&kq?rAx0XEe$(z>_cMpt?o!FPmcH*W zptqO3{MLn}cy)v+86p; zQb7vAq8lH5p*<9R;bxwfDo8j_qzz{s2HJ;o3td%}J*b=N;>bDKV2j|U!Jb0eTowEm ziAWoy2uWWLgkc*E!_S5eQgPHoJEzW>#B>>+ka(^{6>(9d9i%K0zAdp5Xy3A?pLqrr z^%UY*`yNF%Vj_%{PNBHmT12H#j1wiUuL|xOqgCrX8WKjbInG1n$IfqkSP9fZt2h>WGWw%;QFc1Bh&7Wo9$O zb*6ONr@{kxI{m4qccV>a=BobPQ@VXf@Eqsw)y^0zJ?*X7ryhZao)uA5!ngFE-GtiC z9V(r9WG=~L(W-`4J#x=&U88meQPGwFVOtQQB@KpZWO#E5JU2E(f&);e3nDlowzd|- z-bSDf#oe}Ty-6kLAe42^4UPkCnh-8rhsSi4g5UIlt{w$`40Jni!bIOP0t;mlS;&JS z2SJwv)3i1nS`&+o^A;DaB5S1xDy786Ys;_F*yhVCcySMxB)CZ^5BO7pCK*hX45dId zo-FQ^ST1>yB(3o-&z@>@nVk=EH2zDeh|9W&T#mbHd=aN)oA+z5DalN5EvIyV?56sT z3Bq)dn%q~uWJ*7OD4s;*5ex+!V20(&rUEF%R@HY$D^o;(i4NBmO*JwOP^gc4VPM&y zn8k9ky4tWU=h?ObXHF{8tDauM#T;H5NW;iCAHFfM5jORbs9 zM9;E(U>PV@vK^sRI8^3t3YC!i!n{w~lm@WK&oWC%-&Qq^6-A>OXkQ;qPm_VP&|9Cy zjHGjq4q2}oD;QPJx>hs(lThrD8e#*Uda7}MmvPYj<7x#?qf@#1jW4Q6#T3sx=$^&I zD}*V>oKl+Jzc_V@t$K&odB;2Y2$FVB()x&kc*iWNtFWr}7QFhJvHC`9cZaxh1i6!F zxs$rzMY{P|Gj+hHG4|1bNH|99O(*^sk=0-7$e;Tshw%uyhuOsoV|i+i{{aoEEn5_g zdY}46Y=Sqk_VU-dEV^WcW`0oxIPs;bF)+KA@6 zujypJO`t)T!z^eNl|asu_xRqq!C~(n?(^rMbEN;-yx}hWdnudHfDa?J!zhz)Pvdtk zL+$ajiRdmznqJLw_8)xI(U}$MKchFOrV~|YFjbm)6Z+5EF5|Yf)R58J(ui7R|IR^p ze&?KT`C4xD_QfXnQ3|Q+myW5?8tE1=J!0{gMO`VHsztrIDJIQx8~}v(rJ6o>i~4LM z(BU^|=o&kb7)=&@;glWH)(3^v+APC(pwKl-s9vUMh`?VW!@8rcjCd!mtbUT$h7dls z`=t-{2WT66Zz9>?xR;#s7(PbGAju8`e8x_Oj3KxCi(-haj`l=W#g?`;Am?B{Qzd=H z>3d570!R;L9j~y5Z@5ZtluoahJa>dICw_QCtyv>~waM(8p*W(ZyAR5I9p1DRKNWbt z>3f!lKL;lqYr+ZD{lfY1Rlb)7-Ih1s29>yDHo?n3)#X;+Mk2YVWy)i?7CT zFKR@qtBz!3M@lp>9#e%G@}o~}cKVGfq9xL6!G!|}vE?R|A36zc*IPzE?(l0y4^ksn ze0Q0TwNCsd;qdtP28-gOlnp?6GNUuD7|bu9qY>9w#w{Pl{?a*=Ft=w^IF5gp1b<)-JfQ4ZhkH@@SuzTl|o$q zx}n{>ubu~DKn#xuD)4`lxODg`laxsLHtQ9Doh!sd0}y)aBd~=x>}n%0d5s1I@mkYUMP@8K>v%i za}16&!1n%3Cbn(c=EP>lwry)-+nCt4ZQC|Fo;Z^?``+EUwflANQ}tALf9P+gj?e%1 zMd5g|>|}7*)uZdXaPJw0nBN@aNxpQhy)*qCRbc)>``M!eRn)Yj8u#g^OTJ`Jcm z>0LnmeM*yUr;=05XqftBLW=b>E|wBfiL8JZr#JDcQzh{mp!R8BMr^I&nAXl=ote}O znDfpwQ=aj1`>ld=3(IIdr{x?i;50c!O~%f>&TP0`j>lAIHV25yZ99qeQY>;@bXQKr z1#Ax*_Pn$J)EbPIXOc{5jyaP@DXCOjvLT=wZATqJM_94DPCN5T-yOXz zHI6urt2ET`S6LIZP`eCRaTn`f61%$AXyn!u*XrF-v{$ts0WscLyc|;YpDR@e*hmEp zqLI2RUv3<_Ip_bNC;zsD$p)PBH^z{(@-3EuIpm7ii*vFCx*X(mjtz(n^x$9_n|_04Vvw84Y$(c`F1phFfjr#b2SZ0O`D6-SoK>sRgj<=x z%F#|s-g8j7ta3|pt6<4cnL%unggY`_x|!6iFkRLu8}(BNL`miJksfP38I^HfwOuyJ zr*+m{+rVQ4W}I@9O|=RQbj==3@u)VFftvFyBLL5Hfej%u2T7)2ZF+>kFJum> zfIJv*P{n|$640-&JeC00U*GnE zN}QOgN7{tKGF)J?v8yAh^3%3_5T=eSD!-lAP+0)5?Ji$h+LH;B`87Ig>jw0{pt*fm zq#F!mA`Rjt6N1%Q+npeBO+7xAtJk>6)~KNcE~P!cS@L0Y2TC#*%$3qZd1s%LxDfBHDb|ek7rqf-5 z?`sR^@JVF)L%KC+pdrV7_y{sggs%fcf6O9Y77?Co5pscogwc`c{waF=4&_%B`{Cc+ zKJy(OB-A^70MheR^cnY)PzvO93aCz;u<-|dZgaXN?1+k4_=WhVtc&!&jgCRI?;o$;oqMeg-ozoh*9>e zH)|5R4RmcB;h*3(>2NjWd(1d`MJ9he^_ED?d8I-|X6%nrdMEQ4XqW@!#gU?J?ROWv zf0I;)&A?4Ae4U&8VDEG1v_A{ng(6q$+Xob?L%iGgIQXd1c1#w_qiz_LUqpOlO~u-n zRJ>~$zHN($3sFn-$Zo)|iL05%GBzg1(92F4(P-1$VE9eDAiI7bbAT^o;!iY>q_nQ( zx{|84lJ%?FZjA#cHZ9zW3IiXNMdg6ilQAmJ;xK%T!h0Jmz;yJ!nKAz597}n+xic0p zkO)!$mzsGu*&l4W9$ZrrdzoqK!E~ZuL+GY$!PGpZ4gxOFtGFdZTA^=1hslQ~-jkD^laubxw{Ma7)05OkS;-9ygnCn(Z&Pjt$1$I;xd;MauD6aXHk^5Ho2`k41D{)khXZ%b6-G&L3I+^DUbptD&e5?p0SDe^ zq-wNn&|R|D%hVZ4Bhy~0?fVQI*@#1l(o@y!t+vI6a-&qDN6q<5ARdeGVhNL!6dOk& zU7<(uh(q>G+%7>C3l2sI1>RF78Qw*X4`j6qFZhPyk)vCIZBsOql1Gg-%yG7}_M5X$ zx%nH3YMo^TtUFl+x9LlaXDm2iF9-!PhU0RZubF@wnStZC?tP42`T79!0yRsY^CGC0 zA(&bmcIsc~b;D3G#uCHOlB*ec&ZT<0j=-ZTo7~`bdaNVkpXII=?W!T!5mv!2JLp-N zf>kAZh~_gL2$J3arSxexLUsEgDw&8cI=*ri*33 zmdy=WAG1b&k>}Fa*|piY>yLEvZ1%pbs$8!tk+(l-YHnodSIuiGqrZW&Yk7V>QcCt* zzxBlnP(h~#G`)Vl)jpR`trSs@8#Cy!ul2!^>m16sHi*|Y+zK!6(va&NSwY`ikn^mW z+`uK;-O(l5vFP97bz99(Jb`AKimXsAc5EKLz4z{hk_+sQkPGZV1U^2$pu&FiOj91s z%ES4Z-Z}Xi+)4YI+*l><+-N24+1twMxd&d1{(-l?`9~j0$ zQ(+RLBlThxP{O2%+N53ezPpEO2SXS!LWHn3%~t9%7LA{PtI+n``(V@RXgc)#AVXwb z12oe^JfCNJtkEOND;K(GJEJ1*`IAz8*OO{J-U>qao z>n~6m`i_5wJzetEkv3gqM1%+ z7qn7_f0x|cU8v&4pXL;fie^(VFz0bxY$3Td5A=-CKE1!l!2&ceb@EHZIO-BOai(NI zXTnoZWNWiL%lBTPFT!eWxkrV(3&uBCP_MO6eSsSmW@G;|qMeE&=J)}Bk`C_}l8TNh#R62EOH9b=QpkK_@r||1H(pRIHhZ}u{q)7WsdM>Ecy{JzkOOzW z`r=>qF#&^4`TGkg?_6}S^u;(Qw)A^U*oFR6ldsd4Q^6`4&3v{HL{v`vA!dxKc-3At zl&%-%M&}@MPNbRV#|!M-L)3M3+z~>!&V|49#S%VWYa@wv%x=#<$Jq()Wde2Y5$P|M z$6T;%Zm%Tho1JN*ch`I=xH1+)2k<2{QAj1Bb98L&{Yfh z^<@L$!;^hdn>;T`mL*63eEpAIj3m=G1v~t(!+JTx+9S4V{VqE4_BtPovOWx%Yy8qQ zix+L0xldO6_cSR2<4|I2r>rc53CH>^C8ZSi6jsonyV5$4sLvLEMKqZ-c7|&@ao$5) z=uYntHst>9bH_SG{ufvwrU9#z)c3?7rH?Qh#i&AgCzn#q8abuX7g|vq5$`0{;b`s_ z4vUY>&;OXK$I>Z0t9+?uAHje7CjWm_`2m~_9RC^HDpkOY4!#gUx?>jkG3g$15JLv( z8wWfD4f~}rnj_O|j-FU7_qkZt5SIdQq#Rf$(_?gm-q#BxXKybn*S;W(0X2861fk## zB=DKX68P{j@cWoCC$}JSsP@Pulf!47w$rFLwA1jDCvm=aoT2x{ZTcCJ=&ix?z3;|W zPvEV^R9c80n;}ymyvoq-@bgj4wAKid0`th-INib2c{6LAT|&R%`e&6e2O}WPIiFDG zV0O{_^}{Gg64bz6i6J>M5@mq-^0~^t>8}s6y$gcna$XJv6B*sHZ9pN_* zx<7+L`b3Qi4fc}P9zsAnT9rb*7?Gc?1N2uL`!4(m=0@Vq^xk=0&_9eSNV@zhNRfjE zYzB*YV&t%s$~2;98mX#ihl6lFU4uwuS|2~1Y}((rnZ)5gjz**X8LMt<_7b$8Fj{|w z&zDh)d!Jw$3{ES2jx4)ESlB$0;_r>gHA4Qd)zrfJqw1}JdvWED2Fu6 z9$}>kl2)tj06Q#|0N*xD12sXCMeCsPXG2mAj=(0TxYhd(Rgj(WbCjp-!SZ~d>a){T zJ`>syQ*7`C65qrfHdZSP3l$m0B?M2~)O?o=hJob^f`TV5b@Z9YE1zgXM@G4ow7!6k`Ka|DMcPlMR(T zPwS20MjMtzt5cmtXl`v+%mLA<&dJd_?w9*4Cp%^wKe%7#Y8FAY!+YEg$?&*r%{_#sjboX>kA0{^#BRaMXMwzix{^x+w3oa z=J9=HX_k7d1UZJ#QQ3a-7WKd~Vh*4g{~~7~{3c{=d#e6yGYDjEt=f%2fBO4vD^ciL zRLoqGOAbMAj^m->ZV$B214N^C1bWur_G7cpRqx@o#+QapSa|CT@7aoux~hvV zB@2DDm51b(KLY9;wHA!?VWOEKfrAy+*fF$!hgaw#)z-U~ucJS<%MFwQa~(&PxlX`< zQuM8q2`*zt$}^%>#1A$&l7AksZRCxkKV9qzmS!0&o}+)ya8yGER)lH4f&KetR9Ev| z`Pr8Tcm3Lq`adg9oc~2NX#5hS{r|jCeJtf+0h5H-B$^fjxtMDZ6ZHukuSB%0Myd11 z@yW>>{2_?b#0N6yj(VNxY;Q#MIq#j_>C2fOpC=UmjT>1kg#A2b+u;E+?I`idyHX8& zngfSgWXqfJG|?`Q7`FR7#bxP+K&r5Q5u~+PA`Om-5HO2A2AR#Z4|^n#h9EQ%PTf9M zL#I?!a(WwSRPwCHXfT!GB?&s~6bCvG7_H#&%nsI-11K1}{@(fhUk#v|q*)wz;NgY= znkLLgAK&OHlr0UkPi~zl2htdw33tb3`&l2KH8D9_aU|g+e9nra(?n(W+H#OwFqj7! z^OTLY#UONLnuBV-XW3sr%1irN)41VYRSTM*&q30w7@umD@#j9(|R<@(+WJ12VUunsw6CYvR8f%uVBPszYIN)I{Ozl?SHUA%?KxzH>)J!g+; zN)Hn$K*1`}o`(DKUGx`4R?*0hreUa_jAEc?5t4ye6esRZ!R+O}0oOql% zp|!{qC-k5ohj_9DDCmwCo-h;8f2aZ0jK;_NS=e)ioY+HdJEOB#O^jMJ9($W^0;9i> zZNaHFU%uX^Gh~IX)8Ih1)5HkU%O+~y#_1_0+KtKXfUi@2HC_NMD7ayXBpQNX^%;>s z<9T(M;(2k{?0It-<2k|J%MN(*yL5$&BT4UUeSB}maWZgF8Q$O_3fa!t*9V(4kxhsG zRjWkbZgg%6(#tavdhcq%1}zBZ{z1CmEf7IoYpcICX2Ju`<+D*s>5lmxB&6Ca+L2xn_w;~MF6`1!dR=C z61I2eir?pTe~ld>*Jj&{qQ&O7#~ZBJkI(0JWT~h`m?|1&Jga1*t&TT z-gtS{B2}LQ8BUtDsaB-pm8V_evJT^mQT>4oF^dGcSR8CX3ZGBE8z`Jc@rvgPDjv^C z{)HUa{pK52ejrr9MP|`RQ5d}(q-o@0Bg9_CZ*F4b!cLvL$Wp+OHv6Pwkhw@;Iw=i% zZbi$|!x&5Gg2?k=`13e|UyaUr%5kO2MRw%9|I%5krHz_0Vx>Z7QOnDB5A|>COTsRN7%Ze@|~i zk8nu1P5hPbmWMi3)h0)j`avxV9*71yi(|QqNX5omvWOsOAK_QeVz$ z*b7Hi9+qEIHz?{coLYMj380-$nwqQUjyx0d1^PtdcNzw$Ro%4z*mfS&qW79P*?x*f z!0rEz)gA2=J}=t>3gdm=%!4eh?Y8p8)sSmH`5IdLAe6r_oF(dyWzikI-&*T1n!M$v zzYh{sA{H2lDteyA6S_wYq6qx>_n<hzTu6!=o9jq{dJ1kCU!%-StzB))ghA_$n`UVOTCCAnqERkv zQt8E8M@4)2=ijF@>2Kn*??$cr&!teDNr1i=r^v)K}dn5`C3QyU-7u(wJ*_$B)7M$)E2xF185T4 zfMPN*Io+0`dA^eK<0HNiI;k#0tmg6*x~)+fr+H--um#F?v6s@Tj#D4&8R)|4^yV^p z$gH(3BBPnopZOb95&@zsvRd1fDI-NZ)=~F^DY|ZVA#9ed3D3<*Xpy2E1SxME* z;c9@Zc#jb_)EeS~ETW?fS4I7oE54O$oWu~h%6wffX_6GQqIMM(*1mZi3k+kMo3$;k z^)!(J7M4_Gr&(Jea+qo+HsaqiC^OWz)F`I91ZOo{&w^1ZV?KU3y1ZZ!V%?UCsGgJc zjeHArVEB_Hc#MI)+79Ksw+&w06Fxo8<4SETtnpyFBnrC<9e`a_2Tq$aR~}=@E%F*H2>XDNFNl+Qifc(3H+R7E(00 zwz>CepScz2?!!RvF+r_e+*=-SXjM&IF4ccJs#G>X+4D!Zi@!0hq;|$&~Op zy#W#!0Y1u?mKqPQ?CwS3i`{3B@3Webll^ipi7e_l7utH<7hEYLvFVW~*;+6|Ng=_flb zhh;eYoQvq}OYWf~v@u64n)ceK7yS=18e*zoFX~0nqm;@nC46#E%=IW*%M3&3scTC4_EfmCG7q|m4=-0|SEQYtT`EiwjM z_@*HtX0lxl@x#42{2UNu=Z3f7j4;BM+fNE<;4Ik#p|@-uJZ7#oKNX7&@r8xFw4+$V zuHMh+EpDTN*VMLJj?1s49N^i|2Rz&IGXunmgv1%#3U2adBx5Jh++y40TZXR}#4tt`_?)%CpPEfNaC|;e z&3vLwYdqLgMN|?;fT5dQpwrx>F^ zAJ96t9lfv*@Y&4lZ|KDEyS&J){ps?|qqU`rAKYL3*3b!g@X- z!;8j3C4fF*55mSNrZ0cx2T%VJIrc0MDRoP?Fyt?7{y^#@L;M|EhdRN$57iEu0rdeF zq@8VFizWzzQZ0(q`V1oEhFDKee(4nm#xyxZd*atFy0QUxdk)R$?S?7t4y`@<{l*Z* z-hh_1BoDpzfU}R$7BWn<%1+VU#|Y_y2N=usqfdt{qmfhQwU+FR7qq4LG>ri&kv}@> zrARfX$UulcqF0tFqn1{NQVglJKnx`%6sica-|-=zf$;P@(O8hFSxFz4Mrw&Jes&C+ zfk%xAH#kx20K@_%(Uscct54J`md;FV!nyNO&ELNppP&^7{5;#UV8wBLtmsC|E34Y~ z2&~Un?K@!4F)hZh9NvC)m>?V%UQU$euoX|s!7Fh$>uT@Mm=_tMJ;ZZ0k`Egp!By}g z7a&b&+kv~nRNN{T19h)VxD`XG4ybNF`tyF11H7L22ESyc7vQ$bJgY z_hw{%|Mm^=135K&NeOZK)!?OMA z6_1k9S;QUA~}2vnxy;PM8D{4NNn|tRbQ0g(?URm5S;pTehGd zsaoT<7fn6@z=6$z!Unf)k;zAKOO;YXdkt`)y_!{~sLg8QNT4he{YQZ*N7+{d$@k3G1ry>K~$_ z0MZz_{N{-A)?8XIHe3o`CL%gV?C-WnVL-(h*EQGq>m>_cwZr&JMRLorv4LLWC3jYf zg8D-$gj9N;cIxX6Rq)lq(510>_&NcPUdk?3D~$8^a}YXz@LL|IIR>JTM1qjSkEg&VMupYZGqie# zdn=(_s2;+*K|z+E)8Cs>OdyOdNnvOS5=P@8o>MDRb6 zW7=Z9vh+czFtey!H|~?J+pY-QJ_?u9qJdI%glLmGlGwfU500? z(ZrBI8AMROAfAPnx_MQ0(0JNXz`A3*6Cb0=y-Q2*X85XF|Ib%(9l8DxW{!*KpHKrB zMm6}G)i_%o*FKYL9qnY=Y0mS_%&H}xTcZ@o7@6%VYRFz+ZKbeUvxq-1B(f%es-AKb z_(~m)XqU20`^E+O_0yg@j@XrrKiDSdXd2o^P|^$U0M-h{Lei|vx*X^dGcoB^fuTI- z2DU|u`4m#09mgW3YTgax*J#f;^8)&jxg%1@pd~8?ZuRo@%RczZw@;LbQNXvLJ-Hr# zSfO-iA+*-SZnJ>AKRCKX7aZN>_vx1~j`FyT;14{#s(02#alnV~(jA2lJKtJM`W}*| z6C1`j2jX+a&<8&zYW(D`ZW;Ch-&!Z2mfQVvelt$wiTQo|_xugkcD=jd>u50O|Kw=! zUxuJyXJPC7zt)g+lyV@38q{Nz#Wcgr0-v7ZmXe&S}nV&SlQC z3iy5A{&>7bQOGS1$^{$+5Vib%TgOF1ch$L~0T93qOO~QTNEV(CaGqv5FjPb2&BZo) ztj`H1fp)q2%$=$)&2aO2zdl@b2puo}E(kg|*-}#*=?bN8!{d#rsz1CVgx&8D%-?!> zG8}gPBhmUdR-9icd~W%=W35DmQv#%*8o_x-8z*x>X!!~1?ek~}@<@vuGPesE)@Pab zEtt&JkTV8YxX@nmO2T&vGxIS9*U&vs4gW=Y&3~I4>ucRn9NXLaq+j4-JEcnGby*V= z;6TOxWDSgqS^UZQm|LLzf|2?ub3<7Q5i84A&;N(u+T^0~56$MCoY}{M)_q5;+cuD) zF6swau{yE!ZHTL-au4DNHS|7;Bx`f^@noU`T=XATAcQoniDY=RHFC^*2@Hcn*Z>(i zF0O<9VjmO41Sh@rho7GL-sPte<>iOk3LWli%O}{An#8puClZyDyqnAlOi8dLO_mz> zIX02qi%FBY#&kW*2ZXL8hTYm=^}^MvPwJF%*>|dxRx^a=lvlRsFL#Kp_KhKq2*Nrm z=jB`a_8R;axl$B^M;5nYyDgugN&#K zqbA^BLsO+N?!BN=%nK#f@~@>s9M$+Sz*GZKHuzwd$Ii)uvi-VTDude*${m8~j#>Y5 zVO3yNe%1U#hw%UcWe-%L_jF*ca~N)@PqnOj=Cu=7b2=R)SBI?$PT4vXd;P~-9h{P{ zpRMPy54AwsF{1uDPYUmh&o$-cjSf%Ge{{}p4Z`XspuT-8!26=j{r5$Vg@KLTzjoeO zqkpLW6hsZ_VZENp4lXRX%qSYnHr`;@WyhG!*e8Ie_wDxO?fiz;iL>>9DP|{>OA+fE z{XJSRn#d>($tbBV$N`FicerpkX}EDXYPfPZYq)c6FtBbk0e2$6RTZ`IT*GKJ!Mt8Q* zFaH(Ba-&E8{V{G<dVVlDJi9A zk%T(E2af~Sw@2GY6KJXuUdzjpRm>b);{sE!bVSnSMpc2&*Zgax8N>D4jJ z4+ag8RsP6ewyj&dQZq^pxFK^WO|`4Jl+&I^6=IVGe9#yuFDQb~qRe=~Db0bXxr`{O z987r>tK6gJvD3SnMx9uh@h*@p771dexA(Sf335NmoNCFgAyhO}iX~JwJL`@d3$Ns9sKA_b^`asE0GW90>}8<=yK3%WVC3e%0Lw(hQm2-XHh2jJEb)-l77A2a1pHd| z2-uEerRL61K+EmMZKtoK_LCCD?=d4tO>4)1fyK~uk`o^$;WZ1>gWz3){G}N_2D~A) z7o+C}lXGptnq{HBoocms$;eqF(Zw`w1;JSF+Uhe@byQk%n1M@@B!f(R20E zBmn^;jxvnSR+1GY;~HkAr{;mw?3tOLxk6|nZhGdP!Abnub0Yjb{}ZJ?t4Dgl9G#OztuvK&(_l{y z#!aJD>!;GFn=1hfZasi9)(U{E-gD8?9em%xJW)R#I`{K;?9Hc0m4H1&Yjijfzh!(z zE~@<{t^*6#rmsZ0c2esiON2QTZDgY9eFhAer=_luCe0PbNYjhb{jh_}sy%pT2)toA zBnDj4dSDhesXMBP4%=<=+=j?JE@~^8_;hS$n5Gh!OkhR~dfd~Q(tz=AcEw0Mlxs*z zdqG7MQ1pduQ22Ay7&gHw9a7td&th2h)8;i*KpSJ1u84!Y;9yEM01YVb#YW$Of#KHY z@1N|Uw#(Qrb72V0ozK@|yS^>o1AWPnBZN={FJL^f@5Mh78|+1THROYA)GE3A;A8Rx zzBG&cbnrbK;^hue4}bUvI)1!6YOIF4_C6FZ72|WNGi3ObyObfBs$}Ky1a=Y`I1?e$ zWGYej!@UWtyq3Gzz6LJ^Qw&u2$!*}*jBl)e0=Z^a1*S%_GlqkXZvC#=v-UoWH`Og#cgi#Pj+A%kHJNX3Y|<20f(NmZ z;G`s_y@#S{vjbB|E~z&wsqe6AKtsoOpgJsgKPj-7=CAVc-FlCNcBmDZZEq8dzZM{G zvcyjV$VDfPfWg_L4nS`;%oEL7ozz1F&3f-oY?PaH@-48?RKB?k2-r3h4;#J=kC zs82kk16th)l;JL}{rTy&qRq`caN!Y5t`;D=7uCD;=<-rY$&X1;S8~gauAYP3GJW9a zb}DBC;zu&naB9>Yzdg;t?U>15RIzJZ3D^KLM!u+Lr}omZeo`{TJ+oZM6+ybq^<|*Q z$#vzXI58jsj26fI$vCuJgHCiM3i7^4e$;v7sFQx-o#)Cwh7?;K`;~2DbCz|7(r#CK z|Lr8KhHCf=syhnxP|8`6bUE@pK>E>8f~~B)GA8bWdp^&C%_V$mCsFL8mEHT4wAkCG z-+w%ND@IGmK07*@4t1+&t7Ny~UOpHE!s%kiBdvY(ijH3nul>!NvbOtKyMD#vA+1^< zoMK(V%uz$x>b5R}+BiN(3Wio?s#v~#dI@>YB!9CJ7wKKK8 zV0J2E8gp}|;-yI%aVJ^h@0#Xd>yAYC1wu6Q zDfR1a)QIX*^y(5+I0Jbg$((HCMNBRu>eW|-!mzq;Z;b%`U60AOWsRX2x zZI{}YKwp<6TQs-Mo$IM3mmwutK=dV}N@Ar8s}L+=)H4X5f6RQ|+8Vbn?Ht3sFw^gqpkQg<7fLr$IW~UAy6#Xa zk#X~M3g^eue-2d50er>fDr7pisvPv?B4xd}vh$sJ#j|r`jvDu!S;b3o`$eJ)z&WEv zkd$zXqK!at%@8TlhAfVqLW;6X&`wr+J(?W?__PlZQ;iclB+k>gn`@JU2-kp)oSlxL z12k^`_y8s^awT(`1?ye-c|s+MdE3^zFjKHs<2hjRR`y?+lHy=vTN&?A;X)s zB3v_W&i88CjFO32-pJzBPy4=^9k%Ch5H{IBBC7B%sv@oY(0md3P~NU%@Q=s``Z@6v zB1Sa&>fDkV&f+WS2f!*mQ1mqwbC*z|XSc?tu;A<3@`?YQf4pw&;b7eE{B+HK!BZ>76E1BnPeMG8VG;H_e>ds+jT{C{W`bf9d zVF=GdVJYv)9q;}gZ`DV*Hj4&}PGMZJxn2QW1NxX4%^Ag*z4O*>+?AZr2`IUB60eLP z{ir&P7O2nQc(F#`SF5gq;kF(|O*`G@ozb*`4>B;Y;ouT$m}|dvUr~;~46okWzij?s zU89yLF79giY)LqYJy1ji2pB0X(IoVGfLVzSs4GbJI*?7B=l1eF=UTJ&P`5J zgl5$BLbBu3?;qs84Vl;eAtzQAGkSh@SO3a1*phVg0yg3l_BncPk&;u#_A>|1GbfOb zVgKR2u--UKbP_}5sBi}+B62idvf^xP(=3hS#w>)zy5IYeNYb=CG?kWivLzP*aO^I% zWX(;Rid{Ovmt-jv0r)OG3|}kIxM0{^s(-^%N;0y+&biz&S`ky_nAEtt*lm#~76j!D zxjw-f+Emhc4z}GTXlFhJDEC!)BPb5m$__<4vF(O2xWv|0o6$O9sBCr9)3rx*S{SW@vW`WvIwvd=Sqtj=(gbBH#s1^pd@re$vk=;~8M^O!IzALVr z*xI5Im38ROS%xyCnHtK9D+#qwwh?HW?n*Uag35ly@>!UnfRNhU{lvIDrZf0~YqSJv zfA?{xvE+tPa}MoBLhEv~7RkD6l8S_RxK#&9>G~a$2v0W-Y;9-u}sm`L4u~ie|uLa%An`9IZgY;%@& znEt-gOq>xCMr$|nom?Que#~0VtC-QU<3|GMdM?{@v7dm|Pt)-Jt2fShY$+mZnIfLK zsEzh@4Dm}amW4<^`z)7w(x-}_6uA`n))`xzeCH_#i5Se1={g0Micz!Wky<3Jbam!L z<38TEeyD+;?HyUnKt&|M)ui&txDqpTR<>$gjo66l?+iFM5#MXDZ?FSPDYt61{TZLy z4K)-pM!oEKc^G|ma19-*J?^3+?fsuWW578tuw6fhI2!61MnaKjSwtt{aw7zYCz^xM zYzxoI)H8p+EmFjKo)da-O^MTJc(#CfjA89ixWVGzyF*ha58R z{?Up++ajZwPi}1`cf|j@RpTnkGG$?+R-OTpnIB|>vi9QJG1+D0<*Idvbc|9`sw`HC z{5Rez9}t8U9JV(mQ8&c#6z#P-1l~!sE9(wpFaWG?m0wQsZ`sTDcf;(Q*yRJi9uWP( zk9b4mZQMHo!XF?H#tRSM-zHEy0~Kd4*-OPqw+s8L!Cvks!UHs>@$AU&+`ex=z)ZfA zz~YC_z&>mDV%!w@i|;Xg*XvsW=?<`idzR~cvS0Hj0DXrPfO^LAMY^F044|w9(*kSm zGYJ5~a?c{#GoV81m-ONWftcy11_9v0!p`r?)0pkV3K)f;+bGJ!3?qbBYb~AJNY3LYGVc*ot){4Ei zdoA@H-KVP8rPUWZD+c`saN#rIfpx(-!#!Uw*UB%))v>PjLXyV|zL3Y#?lLH6hq?-U%5Z25wZFjvI(kz#$G4*xQI9t&4EwI41E zq??&0C!%I2QV_&s=mJ!dPj20Orgz#UDq*8IyU42H@%`4C>e`g4+xSqQ49EH%Wo`4> z(B4ncSK=^6g^{F`vD_-tCt=7)YAFH)pWIE1Yyub?3T)WQBrgM@I2rb?h^yp8jF2fA z-1)AS&qq3Q|AB8rBRoDyvA7c!=1Mnm%2ou4auTgGGDFXg?OP-72^LPJ<(AT}7gMb{ z$e|HSdb~AKo}W`Z<9KIgkE?aT7bTB2rf!dIKHF0Vv_f`|d5+`hJvz%5yvG7*mYH0- zWGwM~4M4^~ryzcD9W+o#x6HCrNf^5%l%gVa!PShIFBt~pVB~9-2V3UIlhXz!=@Vnd zU9QCB=aoip{@e&Bp?+Wr#!pp}WONk`wOd_Tc_#M4t8hQ`Ei<`2>~`L!gYoe>WCP%$ zOg@EEvzDc~-{j=yb~4Pe5JuLwpv1Ue9=vTo5cw1JGj_1bdUMnx|Oc%($tKT(kX7RlsK00wJFtMH?aCFZsl^fo<=SpbA` z4>N*}zbdl3ANxdl4~J=5&L9@^q|jb0>b~UW>sztC_#q{=GM1`rQBz5NTEB9v4+7im z4_TvI5oSyAYD^YPHL{pA*dIvvb3bQUiwj^A)-}N;U3|bL zeQbUe_QOYDO+J{ig~vU&yamp-s)u0LeF6ZnwfIdBlra|okyvCtsXq_U3ps><@?UZ8 zfO(0GVueXhCn~=2D9v{=C4eq5+iGIQ$Ffp_`a75s%h%7r#Eb!L5vg(DkH9+jko9m_ z7wEQQNHxG9%pNl9j6GCFO? z1oBzqqPxa=PU+uK%Pn;S>s07X3*1AciOZ5=k@MUG=7h2qwCC~{Iig#v@g@H92_JEg zwWy&cLF#fosQge~=_A5hsCCA!=Uq&PBh){KJneV}9DD5N-(gc_f|g2ji`zx%M!ut+Z`dy(}~AA2TAPmvup z&g*4jj_7I12^b}L-eGE78XLFF^3=zuuh%#+gF&RG_Fup_#5X9wkIkP7>k|ydOd#la zpz1o-2PzjU29R%6h_2V#utmA7I>9#j7VKdi_6#@mqNi?GQLT1ppKoA(t<-I6^?aIZ zK`wsodl*Itn!1tR4bp*+AZs9Z0bAENJrYtha)4lIz@(C2LRWvycs0d4C5B6J5h2Wwqc#q_*?vOI0` zgu+Qhul@V>(csL>9i6U}>6MAKFxAe7z~Fq*DZ;_^kW~M`pUczja?(>!?vX0W&4n(& zp3q)!j zAl~TbEKoh=xAs%w2GO`lbOA|td&Ee{sUjGDY(?>Q{lwm*IA>{xG?H!OP%nm&{qiMEdXzS}~`sTR~ zhL8MWnD`X$;|oDOip}?c?eXC8+5|sn2R`(_nfzXQ6e<&0@laG6n$s{Zj2KGfF!IE> zj$~s)d1%upH_kA*R=AC8Qgg)$-wL+E!0O3QT=E!BIcJCbH~`*EBaghZy@9h6Rdtk9 z^&iiJHkYcR(ml-=1lj{Rrl%Z;nF6b-55Lk~Io@!ynMlQ%3io^Ocs(>3M;zIQXh~OQ z13BpaxnNZC20E6vQ3ckHjD_)vWcK;f-{U=G0%TF}EG&rwQCkVq-d1P*J8H89ORi6y z78xZQV8?9A4PCtO2O_)Wf8yEYu+1a^v4i0?*|w#`i7rAE_b5v?V6r7+<NE=vBru7oCkoo$j<@-rx72Cp8d70yIc#S8_Zv**<`T z>y?nl@9ll*-M(A?OW{g8h+yU(mlgpi%MkI~X)f5@SPIc`+gY9bw&nH`WZysO^`@Dt z2+>y6adt}OWPbk5N`7B}Q>KXNWK+a;f6aKwiXEGU)>fwaVa$S_wmeK+(*e{x`P;BJ zV?sH=&31GEot%NJ@26;Q_OjmUDPod$#(|PoY*yV$7z0|}?Db7bV`I$b^@o5GxpXPb zpv|Ye%d6hPQFlf*h1~AGR9O)=clFNf!`AP1j|z>}f&Ogtt9ttu|HAY1C~azcWVA_o zw(_hf!}ABLfvwsaZcujI*U!MS6AL6^9{o4A_+F5^PYCkYTZq<;q+91lWHxrn-Bq-6 zJA0MeIB^fLa`(^q`4;KJlRB3+4wyNa#t6vtGMf9h`Hd>0|ZX^ps#Pu$Z$M!OBUxY2Ni9M-G)4ISRDfEh6Xl?gK)2&i& z&3&TFc=xm+5?XwdIvg)rUh-ScoZVmlSa}UExs4ihy^M25pONH^#h~q^yhYY+zKIyD zaG&bGK(^bJ4QErI*r$W}M~hef-&(xthOh_7xx0Yyu4kEjCvT!#G9165eJgL0Te|Lo zl+szGAK?*7a&!Y9x`r6*AgOXD?)nBD4k--*I2WenlhK0+&x-pL@07JS2usw$pXoyk z3pb68@fksXX=q*pp)tyPlmFOC1Y{QTP*GtmUE>Bc6lV#8wr_(X*_U7QO8f?#dv2X& zKxGs+Upy`qoTsk(pi%8qlE%R8l&P#IJ<#DmbWRO*t!QTdx?@dQNV+*&d9NFhbde*dVag^XNO zGcG6+^vJcFEj&r)fn9InRo<}sJ6CdV8p8p|8;k9LF6w7j@lF-bPv$ql+GbN%nbMlbeoJ%mD1?`e3AgXki+v3o} z{w^zq1ltr&k`e7H=rr1JZEbl;{P7a%G%Hv!-9$1duei{7(9623vXq?|DRYZTySUtLiD=zgQZ?wF zEIy-mh+9gux$X1fVT(G|wU;U#5`mG9gesrX2M8NMOqphd(1KDBENJbAXJ> zFXeZ%!FDm^TZt5RFq5T4cFK}zVM_|{DKRz|S$Y)uaR+3F4qS$K`VrZ| zY)7GR_fp(36nct`u#O`~7>Amy8>?Q!LUcELMugB85sjZ%Fp~9QDYT}9(pbaH!?jsZ zmHOB;=>yca)hTP(%XO-v)x=U*VEegppz1Y_iiK7A5?Z41%@M>lXrk-X{PR+-K80%g zFA~!9ha^>Dj4b}QtDgmANC*=~#Ur#nre2dCPXSS&?+D%4<`Fy0Olkj*wReh=C5*Cl zciFaW+qP}nHg?&zZQHhO+qKK~t-js&j?w*gMxU3+jMvNS!l zYw1m#hG@W`{%#rW?ZT)w>fJhD}YdBKN)TBvX+g8jlxOS!k=gdWqMPK|(6; zD1rQRtt?6Rp9%Rua5-=Vnf_9Xq(odMmT7|Um9%tZuy{gUv^>^^DKCnqtuCqlJ%1pP z{cC{%_2ow!BU)s#G}U~^A~zN8fyXGUjI1-ryHe(^u4wbPOT%hOS^Qo>W=P=EQ zg84Sku-7}DIkFKu3INF=o+adbNN>b3fg0lwie$_&ZpS{H%Q2|OVTJ6pQ#K1?gr53% zU4rm@1J=zYGN~TpZw9RoLd8JA+|dxRtUeU&T7_VocnoQU5kb@*TPGVwwtiZ#+hs7G zYZ#aZPKvdTjJ%KwZUlt%NUZV_mJ~MK?VgSeK;uZKoBvwcl$d#eFGrFs%3DON!c`%I|VuV*vin&a4X@FtI z=I}F%l|*|_NSfCjXtQC&Deurjw~k=XkUF{P=+;)!#pSmso=IDuk#>%JpVGx`R0($} z8=dl|{&KEIAvqGcBSt@~iZZ_*Xn6srvmuvIy@g~3PJs5f(vYkG!7|q9C!UVOQ=&~O zc*5%d9*k*9E+C)G8vhQpedM`m|A~|fAZ*wxSajTblQ2+P^PA4e7GK_FGBTr zUxE9mKi7ib6_7@Ru);jBt%(_i4AX|eBO^7m2Mn1ar8Klxg3jBzAk_9GQPo%uEwvY; ztQ>H>+H>se_A0S59gu8oM`+quTDt(o<&dzqMh>1yvqHGkUu1#Yj#Kc|y>hi;Y$8St zpt!m>`*=XFr)hF~uZGLl1`c>pU$ETsAQJEJBSYO+LNjl{TQJ?1`iuahK{T+{QQQT{ z>ARQJHev$UsVlzmsVO=yB=km6W@DuCt5UWLbc|KJbPVgo^V;EqVjwSJF$)M<1xY3K z_jmq|7r27y@Eo)ybg7!Ie{DP^ZL74B)FSa{$mjGWb#tww%C%yyP<7|A^P3`tC>L4C zCxnLkz+W&%8_ycq)?apdmiNi6>}=QEVA_AlN*K^gK#r_EH3BAqB&X;C8msJ)`vYm} z=rxZf2S9e3^eX{^wStPAKTXUXf4mPubo>(qyh=aBQqFfB&+QJed#I@b?rGeK)fSsB z*tUpj5umcy%)rslBv4D;wEAdUpZG1?I6pyQi(`?hT-!D8O%V0f67&r(f5>aUT{^VE zOeM~3BBOy}8#Fc9#sw@!fdjXTnXm4BbTVG+WK=JQ=hlu>yvq;cYBohL>2SH0q&#Y} z2Q+S=s7Zf%1DRiT$92S}fX{*)%f$Lx6pQ3%H#S57m)hEfjxu*5)R4~So}{P(*W8wR zGRIjjYqDwDhOk=~G>yKEEX5}YY*Llw>mO`I6evKyr@VFQx#kv(R4Js$&HUicjs(H(*0GTb5MGSvg30e#6MGsX@vkeCG28a1Z+wUHj^cZUp7q1363>%)c- zxvlm%kY)>~hoIc&`=m&9N2ow`S?(}(+4AS?4q&=04rsb;_I?cy2RuMGne1?QX}>#1 z>91+SzdJ`mX0KTdoFa;Dp$oC@RO}&i($0Yu<_o$oZWGhq@MKL4bX3+ZdD7nDwbI_v zwZJK#HA4q;y#{wQM$2}4Tu8fzp$u(03V9PHZconIyd`xl#b%17iw(g zJS3eoat)W;;=7Xn#SD-x=rwr}WhUixfxsTE)KeWXRj2#|=B40C0|dL7aR;jWgq@Z9_)PLs9qZ|>@ptIWmMXBJARfec*q|ky0?$PAKv}-;B!94Hp@Eo*E zQZU<#P6Es&nmv6e52($&O~t`8LElgwOEFO)NoI*JIhc>@Xns~`o7)iUh`aAe99PIm z0VKQHlwdRglF{jHdd6i!O4ufKX_u8bq;gcpf6+QV{zEK*8nl0d(%E4(%CyR2b;G(+ zp|SbP*ZeKut`wxv-3)evX|46pN4+`dELXzLUhZqpyx&f9pVWlNn!?LpsrgAo!(l&~ zArMpB$n|nCk3W=*t_^b|sdTi99k4@|tK$FC+_q_p^(AR`&rbzVTU%fZ{A+|c`1<2s zwa5uj7p&UCC~#ohQjc3yuwnp&B`{CQYJ|KV!z0pSrWb$3DR2A%%b;jgd3k|NnZf4< z{1dhDN8rj#P$RxdUA3H6i?EWqlJM%UUK1L{v8+uw7>!~RvznLzy)~C3rAE0)C0@`) zTcG@LjOB;IZ`Jk=P$tU>u9920;oz+NBm{li6ewSa6U$rvRF=RCMgnEZPfi zBG5a>{1HqC^$|=%^#rAo@~Bj9qR=}wb>Nf0ptjsJvL2L0bf&$*9&0;e#*Idw43$1D z!rY!VtX+_;6XA%OO+&HOQe?lGFkmAE*-GPJi&SJ9hOD7dU!W~75szaTV1U+nr+i+| zX?)fs^qK4)mU06kY5j$Jt0EqWs4F{#qTD8#DKl?Wvu?z)s?09Cj2F8PEbF|Ob;B;G z<-VKgxQ)9ks5WiC5RcPy?iYHDM&r4rB|5=Qf4UlK!St_%)&hF*+QGV-L0n8v{|gaj z@th#$LQ&s_MY>g>)>Wf4-N2K32mkyaZ5CYfzD^gWQQvRMwp%Fb7i<-ZX&)4B=FA|m zdu2G`f@U#+zu2@zzsN$zk-+`8mg15zGj23vK8eLMTb)C*6jLqnFUACAQcuKiMzTuL zl8x(4w~Q3URnIBqwYKHm83#%R?!g*dunOxO=$7czm9sqD|&=qyEgQS44pl2aJ&Q%%1a1U*RD3WO`PxoN0?= zOP(K+G}Wm+ZT^yP;sfyTz&-IPlw{DUA#Ge&1U*ZeynMxo&EQ9>kr8b~ySnbBH}}Ws zB*rZpBH*5KcFT;Zn-J*2{RUPMpr@9uS7Hr<>DYD_Nv*&M_6Npx^n4}3$;1w$@YNc^ zg&A|^wQVc&lPTK>ZiB>7U!$^nPIy-zx2_=tU8Cdyr|x1oH9=9#tVxBIr{e=ckrIRQ zTDelaoCI7(DW=xlk7+@f)kmf)1hBTQI5uf9bX7B+8&2o)NTHm>AjWk8w|U#l!&pI= z@v*Yhavo+gv$B-azw>`2fIBH)I2#_R5M86xym|eh6-JqsI+q=2M;)cu~>biSr2z1mK# zYwMc#cFp+^ta4tJa$F&;OXPBT(OQjz1W%=sKg?-NuX-dEeFN7ZDW4#-r6UhMZS2DQ z&pnKG9XC=d@IQYp(f=>n1C$(G3>^Q<9&oH`;G5H zR#7;TqNo9@{Tn=1G8~z2QnFi@`wX^KJK5=Wa+Z|I?V9SAJDS0iV!Gqc#B}=kUc39v z>u2)nfc?deA_i`Y4dRX&@o9!HY8*EXpJ+hJ#?&4>UM+2FU;NA`6nc~D#HrkHh2`C=+L>~?pd7Y*o;vQ#VJqsK($CyrZXz*)Vvd<3CH}bz zU=nLa9W?(WwOH0&bw=8SLPrqhGzyoAY>u8|%)+;0n!wI!M&c!2(|nHFy(tZp&S2A_ zTUS#ecXdp2vZd<@P>+}_^y=S5YvigU8afLg;1UxVyV2VeU8+qdswzalwd%G^TNsQPWpiDl07Ac@_}c z3}I`Vb%Js6j8&%ZyyK_qN2-eyV-2obI9cN)o^`S0nl;rxjdQ(Jy>lj6DeDHN@72`gxl0Ygb43E(A79JyA65-q0#28MbA2el#+l1H+QmcDtNSzZb%V!Bj)p_Q z^ybvuou??@7^v))KFxt2u9>v+)4nUpdyjaB=zbo+a$^XS#?oywV@JT@Dt;jhO>CKd zCmOEKb&3rPr;EmyCfC(=Om1*SRi92@dDXXcR?u$c73ceMR4Tg-5KIp#tt9={Lkwc{ zF&Kz2RMQX;=J&c;X71bvv0*?=?sLPL+bJge1|twzlF6q##!w-yV13VPdN_!Csl0o` zTuz%=XB$`xu{T?p^y)Ax)Cdl_!Aih8+VBn1Lp}RDcHJRt#Bb3Bt>5Q~0g9emr&K3rXkxtGXq12d{JO2-( z8&{alzRh7+Z@p0fY-Dv6TV7>Q;FT{Ol_B0w{yba7IH#80VTy%+3wJ`FXN*&}7x^V6 zb`^S*q}7c6%I6PmaQP^}1ExK@Sg7h*))wV7H@e(6im3zvQ4(WUsI6cB9!gkxiH5Px zO)S`&jV-{~0}RS4sbV6eY`CU2sU~vg&z{EhY0BgP7ij@%c{C z9*0ffG`SR;Wg>dqRUv|7eSLA;!zDSlSf3YTry>8NJjl52Fd1WE31oUt&@;M)ZC-BT>2(3Zd~hc-EsSaI&y z^O4--@h34h%ud`Uv!_+r5J-E@8)&ZU%ISwFtX&<2G{#)Ts>dAbOG!!WlZ!-<45fm~ zx=OTPv#c>)_|vm6)T)t{vPWoor`wNAd4%vUE;T6OShisj6#Wrq$b>`iTPe0IE(}uR zl{xB=tgc+{5UrMR%!c(hts?1w?F&o`0r#uCxWK}s5=7ZQUmPW%#Ww=?2E_M!LL>vu zgK?UVvDB;;24nrBeslP{<_M6m8ASu1U=$0KV3Zq}U{ouVVAMMZZ!SOuxKJqqugJt4 zvo~r+Eq2s-wUBY`tG2RHB+Ui<@qrTryA(~R{lY=`X#OaC9=?nezL=ON zRtitY+@yt>aT7=`H08j#-d$asSzxC5g#?UO8zM+~!0bAvRsPyrBtC_x`+w*(- zjaULJXILSTzTuxep$rBH4hXEm7jX_#nC3vR;t=kVOjlf&wn7C*Nsq08&QZ*J7eoS2DdetEb_W=RkaJLzT~;1CXoj z8IzQr%`e*p#wcwS`M_|Ml%DTT#Ue<;zF~HsAi$fQ7Y|xp8o$UNlzatc#&S%tCtyp! zxT`lDZ3lhYnk2o`14}X*krDf9;Iuv$MOiu#Ss$w+vPnRz0mXuN+@IbN0P(Eg{osvY z)B_)L8HST$Ws#^n&~#OpnPHf7C>BIXA=ZMWTcIdD#eHd$MJAxW>^XZh(?eV3JzVBP z-G8G%kIw?$VWA8$Vz*M<5xWNt-u`4m+T0{H1B(SHvlBX8QRp{O8!RWV^IQNj)_n-r zB7Yi(9kB-;fE5TZ4dBrR*z=$8qv;KHW1t-{^KU{W^o)Xhfn?#)#K1Kk-&Oe488rHq zx27Lly}`zTU|=laO4!C|%6POi95nsW5c;J~rDH6Q$(;UW^8-H^#M9(plg*b}cZY`k z8z*g7V(jEvTX{s&4VY;u>Aht%{R`%z4Ds}cC3H9n!-e(5cc|XfcxSz-G9l{&1JMO1LWER{NK+< zU;JC8Cx6!pKcW9`AflDcEo_zStu6k)#lmD0qhHI&sPE;F>c9V(J{<;3BA*=P$kWM# z4y#(TL>x^x?ptl8wxx!exO+SX#~8R(Gjg0Gt!3j(e}cI^r~2aZ0L92l)W>`af7qSn z5|aX1Vkl3VQGAca6@)A^7NjTyG6XV(!&dN7V7_q=vm;TErdu9SpF+=+s`rBgMpCFc zNc^_pRaBsAAa`1_yws4wu|;NCdDxH_I#M>_1y{%s3F=E%UdMCy0~C|hYXKoyH}3+e zDB!TL9>gi66$%6XH5wf(E#f?DQmR2bn$67O4$O-(VyR|mQ zf~O@&JL6m_L+M-z*$_CZGcjTvh-C8z?y_s7uY_MdY5jK^qgai^f)Cz2I&F3`N&)Y- ze0ESN&>T5Dis_jxfe=<3$yvujJ~NJ`RecJlVH$X-*$w*kJFIpa0%zh~*14Rr$T)Ug zN1O(Y_!>UA?fPmm5DCGwYx}p^*9C_sK$}QaGHft9t+tx$5yG<*O>HgCgD=RRZA!OQ zb%<*LOg9Kt>2BCPBI?Gq5U|?mG_l?0f7%L0`Rk7E7cMLtU5w=vd?M|+dB1< z0(Ex0ngQ?psv>daB351I$<`=G?&im)q16f3N`Y2@O3z~tvUE@>-KrlBTFpDRnO!Nt zyTz=>!&IbTJOYtJKSBNVuPANvlH}siR(ZVJQdGLV5@5>sq+IcnrmSh!CYj@|uIRtn z3}cy9YX71w*M~p_F3DU{@_v4pfsz(m`lBTL3;c~7vo(NLjbY{N-F*)2hhD6M&!93a zE%NAZ&6)+rk3jt;((M7-&$CiirF|l4Jv&x*k_(!qNV%4ov)On%Sk33Z#!JiyaI5} zEeVRf3Ai}_>ZEkOO=FC(O0NJw7+&}UZn24ekap9l9scP@osO*6mH{1B8w4=tuS?Vc zcLm~gSpu?R^tvHpqzd0I=54&8y_@>(B<`8V_wrjF@~3TYF|mg-c-8JSAWZuifqNv5d&t-LcxSYV-8VN`6yn^20A&B z^J>L3yUB_AfE%l=&z06OXtK#68KTC*tyL8#d`o4CLYAm#=FfB!d?AWB;zuMAs0{`1 zm9ua&5B744z&`5OzmROZJk^^`cC0dDLy5q{#{js^ZZ8gB1-ae*iCbmP3IPD zoPdRk=L^@co@dL;rSo*tej|A!@}fM09iq&l$s8qC+D3v#3u%reftsd>E>oCJ;Q?<$ zfRO?mQkau75zLhfRpV{8*6f)xDR~JaEm2&UotBsk&sl#@`#79q0*qv%luo4qPG>~o zoX)i=-Z>oxtJ6A%c;Gs4nR47w?+RX)-JN!T4vET=nl)cb?@WBR)K7gk*%AL9ijE3+ z-tgorQh(UiT4oYmHf$^}d^BcV!IbD@U_~7H>%W&;?bd#iy_{uD-kP0b`7l~U@-0Ng8|%kX1Iw` z(#c0t)`6%Ik-9}0h}{lw+eXN*K}l=|peDDBR_{RI6W#+-J96sbvOfo2J3UV=N42=y0>zV7Ths^?NAI+n-bwU zj?AYgyCu<7U*0abcD$2Kmjc)-c87WDD%@hndXuab^RG#b=yHFofiMb6Xcg3bshK{J z6xL?@#dm||d@*R=CJ1L>@ui`jST$k9VNpN&LRWe%Z3Ji1mwO(>F0i>|@=VK7$2dZIDZWaUlV>^ud&rIx{}!bIL?Tv$ueeA0Hzr2=^WQ3o(~ zH@ig+vv?X+gSaQ*3z3NXg!kVv9y6qnCa78KahlhYEt9Q<9h^oL7_+_71EK1`>DO@2 z@KV^*P$Xk~$lJ*P{lXSzGJ0W%_l%2Wkj+WZdk5_;MeBXo-@WT2UWT>!V|^y*U`?x5 zaAS$7*Z~2q3}1TG`yBkw$HfiEV>X`T=2*RWfBb*itKqVnlTNo@A$)tW(74}2w`STd zw`d`~2mkTc4G!MAbxE!@_JGosFrI;%%-bQI0T1%s%7OhDzOsEAq5YV=;&Ddt519vv zV${r`7dm9MNN!9+91D!h6HFzEUzVB8Sk!nhjPga)JvK1^mgC>-c?- z-Z1jda8KFi;FenJ;7tKW&3Kd){v3KVGqp4=cXuDAH7mhmnoKNML=n@|Vi+O2FL5_? zefI846`^ms3qja4;AgD&Ud`{0dY<yf^2t z>B(on7&gPyW$1Jh`5S-LD2rBM^YG)QLK%GSXWuh*DAFb$!b|Oqp@^T=p4*1Q2KH^z zm+16Vd=fcbtoE-+Q@&EPO~p`>E=1EbYd0DE3d2Xv@H(<3to?vfG05i4sk`no=GH}U ztqR&goTQ8VaRDDc3)hyHsb2H=nr7hICGe?BegEsuC}7l~w}Eb}F}53yZw1%+a^OzEfGMI}+7! zgXWG?6NIba1cLigRZ?y)Gqu{xwa{*)a2f`+pVj^ERF!G2=d68tYEXC;1p)K+s^*JN zCADFDz4O7rL6(|ti2bKegs3_MAJKUITW~7(!1&5wFwC>tme|GY#1pBAbi;91zwrdr z*0bGus|KA!x8=zPe+VIgw)ahI(rD6hX5^FVVfFLE)&Zh{Wu3MALlA?VLHVz_JaIHj z@l(_gil^R&Z$If{7*Bnj<`<}lwt?fz|72?RdsJFv(I!@ z4)6~fqn)RhR*2<+K?%Kneea$)ciCG_2bvBxaHOjexAJ9t@A{`5d`s4KLL8Hl#eBJi zwA@|6a{Jy@@$~_2wSzqBx6p?di01N9wYF;()1c2n~7>3rQcDhspfxN zOigLsQ_{~}a-S2aDKD;ce!AjV!$*1&Vq%I8(^%N6Kv?$`fi(}0{>T=K61XZx*i{a4 z=84$NmgayM(i!v2MRwHrN9V1OvL2Q-2UjE8uZ_4S8uH=d&Y_as?D+(!m5bU&{G?3p zSKc5-^C0k88MW32X0uyf8M1*iKi8!eXnqj)NC9}nGrpZz`jGd^)m4k?sOK)+!bVfb zP)xs7Q88N~T^KZQj#b8nKa=qS)KSY?c%+T6OIZAk?`TU{U|qkt#Vg^GrHrR)dRy!s z^GbCM9s8^6(@nxw;YpTtJshuAi0okpAOb?4#u-O!^0qYW8Pe!~2dG~V$DV3KZQ2>2 zC5JN@{E4Jdb41;EM14psG{Y!0!zg=#Ok$S4aKxDEd8lOySn7z$TM8uPpoPZS%LIQa zhY10g0_+Z82AqXquiCdBlR!XM5fTN1%StBlz-0Ila0H(LV+CaxdHI3@n zcwSmZnK!ejn>`Cc+D`}k+81(Ug?WI9Lw7)$KvvwPiN!C^a`cjWJtA21K`?4f6*3>< zcE-)0y8r&Sqjfm+EW8T{x{TqLp2tpWhl^zxf*Hy$fu3C&J(DJ@`cyfX8!K3!z-~{F zb|61}Sesf^pzDP4LF5jndaCnaxu0aB!Cs1QYor}udDkK}SMXABA0!_PA_c8$5%$$Us#pU9&zcVIKo>`UVm?!~ z1=6V|sF(&}9BKzK`@jO)LI;|Q_>Q8OgM^fpaz(va7|<~q(Xft2M#>C9lMXyFpWK$$ zb`|7Y#8yOyOj7NL_syVfRi2J&PiL*CGu8`&l!z)Z374Z^UO86#_})fLZRtR-1B5`# z-h|YZP6VN-oECDv2!bYZzQBBJW^qWsiAGeUAq;O3B^ICOAS)Yoqd_KG%y!*0+-Ufp zs9CcvxK6H?Yptg#8}_XkoRSa~(&xCB^t!9FCfOv3XeH8O=HSFwX`5(@H)J?7MdGs(IV1bW95OB3(`>w1cCVE;TL;<%H`)7{+0V!ao*#RYd;)HF#-`+`0b_z0E%N_kZuni$7sLIFF z-I(s{=kaNov{ZHwa?3e0K`Nr=)~O@xnBW?>#>A+CcQN8o+;M+NIa#nuN7H}NcTHLb z0ZzL3@$pW-wYDq56-`fGA5Ss9c_03X&!iqcyG{V&j0fXYra(f)Yr&wEJI{>M8@G*1 zE}CQd$C@7_NqWza_ZUO#F=W=RkG5tFxoP*qX-~#(4as4o*s7+;Un-bbAbU+KIY4j1 zNRcs!r#mskMl9S^DQ3)=XO6PsDn&4th}y8@HVhW2tOK zjteqhBhG^ZUQER>UPWA@$p{RXUzD1wBpqJ;d6<_`HAV7VDFc zjvjO#IbR5y!zmRbD!CPj#^h9U3ZKLbZ9_b*2r1$2#sf7>{+6V$>L3zrA*XTamYpGw!Kf*=*N^g8t!~KcUS;L!{-?Z^#c|mN zqLfR8*`h{);zD$)aihNT;W0_xCMsbEXP+ADRkZ7{YnSxNvC7Qd*vX8>36e{qJCo(4 zt%OH|68huB+QWT&e=9SI+al>C(#X($mdy%j`N=KNaG?XCntXf_7{Un~TDe)IpG_xP zsziz5+CyC?MeJpVeuM5g+!*0mtMY8DOs%Ha12gN@GW*`~%$3988{;QEcNek!!O%hT z@Q9y(>QN!uze1*pUT4y}1^u>(I(>sA@jNZZw)x@o0JHiyrID%It6C>*6iGQ!r&0$~ zdmvenBJ5~kjQ1Toy`DqkRfBA4|N7NnR$;p2eSs@A-f%d)dQrx?iy0FKpQUAeSovuo z@MToJp|k3)2SLiNRBgx;b7+$NLW^cyF3meLg}Jjg&C)fz3D~WfLNM5~Zqgp`Tp{-W z9oQ9~bF2|VbEZix_M*g`iYis;*}Ym1_23D$k>bg)svoB#6w{SwV$mvZZ%_}`$xUUh z+0-`NKw+*cXhYrZy{Z_2h%BH@LWr z3{CTa#X_q7^4LfbhWXZ|uQcE*XQC;9H?~9Xq-*3TDNojIsTafZ!^cHi1{WZNIy?pX z)5~VP9$Y{nWdO+-Zu~Ucpx-?^r$*tKA~zS8ruhfxgMG;0k0JPzGod&jCm=wT__nAw zn6Nki3-}(Og?=<1e+Vdl*#X#iY8V1Y(}ytWV)~|V@86Jo5r(?eSV(mKL-bJuzYz#o zM1m0t*+~wF1EB)M!Q7W{nH^IRyLVoedm^9IWP}l=bFHcbQke|Z57O`z@g`Q`OJYsD z0vN>Q_cLA>#HE*Frq(rdVB><;HRhWg>TRv}MVQt#%r>kdFRig=op-k&^HSkX!6vN& z9)b<3`5ySI)H8m+9*}|}Kc5SKS=EJM(~flkI0;&Zlu1M#gEZZebE6a=ZO}JAEAI*T zT&4lEsCyKnEwg~!^dmP@aUcr4F8+VXpA#74WW=*%S%=&R6mz9OokOGg-|H!qHFSB zl}){`b07;Ln8x$`y{_HPZ+v~vTSf%Iaj6r$Mgr+`MBO_8tu1 z8iKX2 zHS<0u?^6YTQuQ1HSNon9jV1OkiUlNDu1KY5|FtSLhaj!psQD}Gf!>XZA4b!~@H27X z6mVxHIWG}`h%c=&CzwZh7VcBo@&^HUc?rJ^qz7LZ7#-^!fr0rRDZdxoSI+pztRTQH z?62U3TGWd#@%QQ6*$Z(rSE@#w11zBq&c8Je*%6<5`zCHkG7GW zjg5h=F`dwVeu`K-{g*FfN(IF2f%Ok}^45Fu`8+ z4v$l$DaxI4jCVKr>>k->-#U;%}9tEFS?oBdf!86Kn zgt@xk@?$L(<1LwM!NfZxHhnhC+Aqz5wbduf>>?Q zS&YYe2o44slj#t!XqvU3m1i{zbvGJE2zCBIHROm%m*EgzX{voV(r3eTZNC%c#myW@ zC_%4au`vCLP7vS@viM=v4i>?cd6E*ql>>g`G3uYJyYl0!Z46xB!zicl7o_QY9In#V z)qOp`M^1lD`g$Ik=uGwWUT%6+k$id)_^GEz5Rq8fslBmykLPbM$+DzndZr@jgaNfK z{?oW07v$$V*V5{7NP|)j;Bkdoaf{I3biNtoW?qoA1?2Nfx));X+S@q=0eS*%fx3@P z{0h!V&ZN#`e()1X6PX4z3HsWo|Y zPl6S9Imu19>^Y%;Ed^}gy_@ddk>3FHwUZ9Dzg=1QtZp2tj2N@5nYjuoNy@?8|oQS;;)JFkB2al5wj#JoZ8sWtgpn+rmYo!`bHB zAi@<`NM$5sh)^ysGh|^h5L^soC`GQO{?S!CJ>WHUd%`oJ)jbN2ZFH74ii0>6cnCwG z+I=qQ{dc{8tJ!J()aL`!aNziuu=}l63%&C6(K4-(jfTAv~bug%M zHF+A;V?QJ)og{binm#OOcot~?_PSuy8v~`w)>PtUB3W;P)(M!(SxX?l&%4vB;gj!b z(@I)gt;3&Be2i1u);`pi0pk@lF=!`cW%snk5hD65hYkQGe7tv0mH4gA9=x|{sbV9INnHIS#n6fNtN_aTA=P*6`2%A|?&V z64TX^KQU?LnPxovR;txhhcPUf^A~`eaec-0!(xwe1y#sYiSn9>D)n)$Kg>WZjc-xZ z-uBOfdB&oidRJMiAW&w|iOlLg1S zS(3#nj_dHkFX_JIj7snuLn3eKGr2gupcr-)DfIX4%lHoUE_)i1X(-_r$vO-Tw8Zx}0fjR0 z=Ao=Vo>9ln39gk^vM)uW19AH7+BJ26YC9@S$NP6B$P+^Xf=1-YlMp}`?6z4bpT{Ys z5>gpKBBpmhv;ivh*k={jb{x|B3P!w+Jejw{Oh-c}S`oQlffLBb1LKZRxhMk4#LiTD z%PG(#eg|#wbxM?A_5^?e>OLujiER2s%E78rd}zSi)i3t{ zaCx`XJEc`QW~^-;%lA)Z;@bKYRv5zv%3Z@K>3H2Y`%-ssxmidNom zX=XBVU6OInL($rLKD)8XY4t-Mu((Dys`S#ebRNA!I-}!!&X#8&;BUlMg5#cpH@RxP z>1)4|KVM?+z7nrsEPGf7h?mT}zTfz_hw~_t$(tP6i?+vfjPPb-2&S#I#z) zy&|ick~M#}w-|sISMVvXKLQUbG{$|a>(&eE`?YPR2QYTHA$vs=XxAVj4hQ4Q zXaO{wIqcCArA)&5JAy0zpmBl3n`xm-sqyJa(1z!GRGcUhK`^`z&u*o^!qN3L35k)QzBbLNb)534;mz@A)}2`H zXBNqTuE)`R*g6yy+n>YWwX1&h@_Ga z-yv_JJ|C=&3Sft_6Lxi?K!-2Hnc^@KS%j^2{kH7Dr4Cv9+%Ztz=%XYx;BuQPTrmXD zNcT2HY4mrYW#Ue1w!ww_y7-G){XR!qGnu=5sF(z73kUqnhukLjxhtz%k6r(v3GLc8 z^^B_-=LjE*cRdLkrw)R4WogPm0lc;>dYIokV|EgiIYB5Vw@kEwHtiVVH9(fZ-FLln zUPutN;_gperZZY7=7lbB&OtX;AZ+SosDF#8gzPfQ`mYlin9X9+Zr}bHU!XF>po;D8yizI_KVbm z9~asQ*AB}eWEN14Xpo#v$)jCN(FEvfe&yWBLug-+))pPdLVDbbGE6SMNP4t>YLZMs z*(o=6p%XU4Q*ztrNxnrZU$u_f|M-*)`>U z+H?MJZL@jG#Rau1iEODliVfEE@F=}d^Ux0}7#OjIMl&%5<8%mw<*}& zXmAm-_JfooHy4ifoZ<1^P3(>95l0ecy~7P}+^C58J~&AKV>cwrf_`6e`|nl9{_%jO z@vk&kVgLEV|G$t2iT~0DM7qD9<2;gcK zZ{(Nl4Uh%|hA3jOD8f8{x`M1o-U59E;Icoa0#+H)Q$hc1bb$nOB$WR?RLLn?R(*gz>lA)q>xCH}|Da@P448uc=20f|<;^YWq z6=8Sld|R=3zsRwlDk zKbUddnH@b4XKNl2^Mlmr?0kIO`a)kHiS>NmTzBx8R@QUa6M`zaTUhehPP5!d2Gi1~ zJ7L-PPxm=MpZ&u3vaO_G9yP_YmZAm+<=SthuGzHTJvnT4COQ78KpA+MV#A~LGCNmZ zTwS#8T-cs_adzBb-2zRY!NI&D3>;NG7G;RB8)&A&kEH$;!{1Vg%OQ8&yd*5UcS#k! zrg>#`qr2n3@Zn~!(PR`(qj48B5$wfUE7%8E81`+wgc_TuK#k) z^pZ7g|H-tQ!rxj)uAt5^v|4|$u7RJ)T-gr;3gY)NzK|G9!;JU-VW=i!m{`K)aH7Ve@s2by6!^AKk#N=l`{uj;T>mJsb$h?bKe>BRIGn1A&oFz=y#Ou(!UMYpjSo?b5d z$oi&N4vPxNvq}T zEPu`~H@=Co;oM;v26!MfcCYXy-tjakgrQf!U+3!yu=(f)p zIC<-&cz1@C2GFa2%j@lD&pMwoyeIS;=A1<=R2-&xo#2Vo4x;?8^3Ab0!k#wVNZ=M! zqDxVS8tJd;c9mTE#EtrThl#}r?+Tcx1xcv=NLBY71#+!iZ80_FJjvB1~||Ul3{cPR9*rcZxIi{u4Lf-i|0;6lH#?=EBacF#61Lc9IDC zIXE#+VUbaqGaeZZK(SGgGjwuH{Q_H{jK&iSRiwR|Z$H(WqiuTz9SVZ9q|+=4%rX?Q zjeECkXu-~-Ik^;(#)X*$er5JcT zdjn$8KQVob`s^@1VSQq6-RFHZS#z#m4ahCHd@?FapSnXpi%Owifdcska-mvMLO^qvZ;=NV z-9h^?-yiwexteTTI*Fi-p?f0T=(`dz+oIes+}Q@bZgoRm`oW-YR;Php^Zel$ywUOI zSz`&Mh0Bd!(RpWXA>3p46FWR0b4_2Nd9hA8WqAfq!!W#Y_4Ho}dxqwOBN5pzR;Kr) z`Ve$6_PhAS$v9RJu6tPg!Dn%OK?Kuymdd1%oXeKTC0F4XMS2&SwI<(xuJ^-k8`5t> zD(Oz$u7*4Q-O~%xX9%KrXyI?!X@coMlL-z31>aKg$aXv=en_2M<+aA1tvQ0JuZU_G zt?jq8kplK2Yu^I--}-snM%AVj?&ZSg2sKq*GK#Fdy9w)v`+UPUQx)oRIGeyhg6<oeEO@H3#+8r z;ZNc5X4jk%De{)N&#DdAToQJ<_dSBm@Q!n3i$9r#-iOK2e|eUC_UF8Q8aRx~q9r?1 zba+u{?jT3L4?8ZyrAPqZMJ8H`aaj?NRj>#ZjDoOu>WeTIq99K@B(O7m8U2*Sw` zYDdl>M2lUH$3PbNs{&WqC6cA;LJ#8eZ5H3_81vyP&-@h*55|W4S6SCbZvn3^bum0ME9!VVY7HO;6+3bbBnF$Vb4@TnjnTYNvvTt5?lb!A zebIff--~ywzhI5Io;m09Q6wg@uNSh4{AHwmMyjr&Y}EhfY z1CWZTR7*`OIDibiuNmK&(k)fyf~l36B(acjT6ggjZ*weq{2eZ|9?JRD{z`tid=Z#i z_kwvP7#fR9E^8i}s;i^vl1gLQE*uK?;QYxlP|b?xW}AUzDF*M1Z>$n;d?bO3$J3hz zfthKj(?u7jGJ?>gDyNh|KI&VrNzU7EA{t7mc~L%hOywu?dm+@5a~nja2TPxb*{&~% zm%%wL^FVB%5%tNd*=0tOxkW8<5+>cB0I?KeRSdrlHw^93jPy%W9O$Cl0EE`2AbTp> zh#F;e+Qf}1m6yhp9%qgG0;uMQaK$;8n`77+_XJMv7M=VpSlMUD^2kx_=^(ITx1i#H zDJr1jR2-~JW5^1b1=&0%k3>4XS4%Lq%)MSNo*Lh^3ga*$X#!l3PoGhPi)}B!Dsnps z+|~?cJg?e@*lgC#4RJ(K_0j|b{mSR7@P?xMb za?)q$KQ;)Mo}m^_k`{Z7;%?)hLmRO*+<%cKR>0I8Leal0M*4w2GuBHr71VRh_I&yM zyGay#>-2q_U-@$mC=BvB#G(&MzCp=ld7l1T9+I_mk=WVK1Gn*qo5}u9Dp)%^Q>UL^ zlCi6kld0YR(@y#iI=f^;>_WNc%N0n+%2xW1^S#gmO*~>{ef&O1p4v|U;VBGyUWoCK zHiLH=uNCCq^$2|r*la*nl$A@X2Ua$GyN*lYh+r)YgfIL%GiF^}&@)qVp947Yv*V)P zuuimb|4>w#3uDL`teMWwV|R!Ly~<;*n~qbXnM@703i%vdl;n{if8BbUY*A*EhMa{q zGMt{gjk$(xP1Ay8hDItkWJ3n(Ll1fR6b1?97@fFA+bEqPH&+_%7T_~VlzrHber$cG za7wP(2R!6N+dX-tk!+hzv3*hyUI~Tu7NNv54-!25=fV~Lc0_HQC4b7gThmuF`^T%( z20TmQ_-1@fo)K66=eEn;|7BR}CTZv;ATt3#C>?>$gxy*j1opk`nHB7{i?5g>kUh)Xf+_HE0HT?93FQ%s>@mQTZzFRYp$2kfw^?y%d-H_6v+48Osv zGsgY=4tg1i*CVfkhw=?WusK^eJu{xX~*$a=9_uiSdMRY z&hS|^-+y`G8jSQA^2R#o#Gzzy89Z?W$$NNdc9YutvQH^=iLZtjX$#83$3T2)ZK|k6 zME0VVmFC?Z^8WFKSOqY65K}R>KVbB;-zro9OxqG(F;Jf0QX@&4yeY{`zd%^l?kyN6 z0s#^6LyUb;t$Jphavsx@`}+L$7N$P{rBh=e& zh=FlOa!C@G6R}B8OcTV$!r^LJ4CTXV^!~*hBu3zPX-)kj%^j}=*(fqO2XrVAC)W;o zHS+!JCrcj27I7mvDR?Vj1ux{-knx$*k1K+ZJPC3H)2ld( z?PD;vKOxgN-Z|uZIr9PU8c82BJ;zOjpfV$2WrbhXg^5=?X7kw2eNJG}`m56)zC~iK zq@S+(vN8kdP;7~?Di;XXFbH-J8pjMYPSMkuDuvezYe1FkVJF>$xR8J)HfCqe^q5{-LJbN%H^tD%OypJpYIK6OGFGKV$JSmUhX+W@o6e zOM=3Rh$1J0ZW^1Ut-`lq!on^h)D}Rf!4PfymB#e^FEfc1TI8xL+UIIF`EiS--9kI% zD(sIa@2t=atjhAFa0@K7D8nTqCgYDKLN{Qu=I>JiOr!Bw@M21~VpAGt2jw_qlO~!a zlTGQ2R|d7I=S=u?TBY}BF-OI7KvjfQMffHgL}Mq{_BoHcfc<5^s=6i&J#6lbex zrIoBy3XCHU&E-m!uQ*_*-pF6j1E(ElhJb{X_$`zFh&1dtJ?Z~OOuIYyC&`Gb5oTr? z@QwXwJy1v~jkd?!Q9Yn3p^qc>AxV>==LE2hq{VIC<-{DB&>24_i(lr^~NKKyOVd2=D%8{en^RTM9k%Z@9mot3M(VjqBO9JuyX^;CA zo1T6H`1$?Vk1Mnqn0HNhiG6$^O;TSDHWD+g7$*^BGWks(+UU_osG}ttrWmd}! zSpSt-89yvwhj%vOxo*H&U6Vyp6H%r)=4mku?QO;>PjP*5c_T@nln_*DkfezeBS$^( zLs>12K3w$@AS=AtqLxl{9mUVTYU@Y>PJX2#I_22A25pR_O)edq<)|lNfE>k~?Z1_9HEipoO?R z4ki?z4kVpF$tWKuEaV(b=bu}h17<<*i zNf342f_9+I(R7T@0+q88J0k`KVzPM>mg_SYerA4ejf+P-?Bx8GC(G5Z{`dMK@9f?i z2jsAqiJ8F+4xdyQbPqA5Dt;9L*OgnJ&}y?PGK}bqC|3!JRei8Di_Xd|4P(kGR&s=; ziN2ATW9DO?v|s{%3bA1~m0JXD^$0u2bmg{wcMV z&@^Bl%zYc)rcEOYj>1?y96E?F)6rAg4hD5L1+wT)?tW}G=Z|c-i4VhKcuTi06hKTo+wu*=IW4yMuUkV zTaN|A@8`;9lFw3p^k*stisH+=r#>abNc0Su_mfU$vtO5%-)^^wBj>9GENTyx^i1C~ zsb?{&9cLMaBN)Bc-Y&eVkDURNs3IZ_F5`jSu1o=kBGX1H7PbO5u%ht<_d320-7z(G5P2KVbN z?hLMW(ljhaukVqaJAcg97hIZ^`=s7^@fH^I=tB8^^5;HsxBQwyGeUiGO9@k`fl7`} zY(2s2+M^!^adnH@&pA#H0T;HSRLTlLEozXOr6)bS^t;0N8v+&< zzBXvZ*#pE=b--{p=F$4Wqgbi?WmUxU{?^T)-O+_Q|JQKgv(=RYW1PQPowY{=5zNdtKOvMINY5#EvW=`{f9X3fQ0iFX0c=%4d_ z_+rO?G{L$SyOo{S8H)(>>L^QjCIe1*Loq#b_H6Q(YG@(Uqc&`%>Hyblw@#)h=J{E zg+^U?dw@+YcI_gxiO-^Iz91xV-D9P8ZS44~4@_7~KQ%{Z48DDsyTdcmv!cNXpwl`? z&iGoZF?V2lY)|+0R~W?JZ-aCZX?0fA?%OiClUoKJV4DL_Ep~M}05w-<=79HZ7w$I1 z&B`7KE*~Vp{;lC_I6T48E#oUkn0zm}Berh>9xfkP?(!ZpE+0%T2>6G~D^D1G?+J$w zQg<*MF>W`kejiI^6Y1<;C2lvk{>d$zPo8Wy6znjE4@@^4O^OCu*iEmy)T=Xg3j~Bf|LJ$t@?IU*F!!EzbO>HhfRej`J(XXF|Ub zrxeF06#o9L`72CVPyY_bC*D7xXdsZt+$4{wySMV>b-TX!Sd>b|$$k=PTSRoto^@>{@FKhby5gq8i;Q-Tt+i)fvtYv=7!5x+OYc z49isKE9fh!8r`9Pan|b0kJCZxtdFheo~~TqZEkqavo+)@?0KDTh0P(>?1~#x8GV0~ z*?=#f4b^?8^+xqTZB7u2!RwmF{UBEXBCHspf4$~HG*sADERGja=?zx+-*eDbbI`b5 z9saPDc!8dI_>~;0GIAfDy89!**pPT0<*+mq#4M;4OJPAVUp_-@8B^rc%pvV@PCQR@ znj!vL$Rwgkrxh$`XFWBs!eFaJ*P?K1bS!CL)`nE}6PPI+n54DHgmV;m)m!7=eKTSO z&y_-!L};=T;IysQurXGsX5X;g(>k38x}9cOywBep-sZHxSq+`Nn0qHOzP+3Qlugu} z25eixGJ6VjB|S%idTu!if!N&L)!8Wex{6b8vK=17^ug@B_!vNdulv68Zec%87-*q` z-~X!;2%c~S8WL2j2gJwzREK>OlvTx2z-!tnXrhaq5oPkL*U1qY7VVX3RkJtYf$Suw zp>Nnr7}xOHvAB&==v`o85*aZ!*AWT6imJA9O(Lv1PJ@L4y4T@}8!2G}5`%Mx7z`T{ zEV0NR;PBB3wS>rjMF(>J;v{5_qiApvP{=QUD`KA0sSOb_6U+V6vkFoCeD;;lofmM;_U~2 zH&S}Pm(@u}O-PEJgOkyWlb0!n&&O^~WPW`C*%I*E2Xs|qf8I-pCEW1BWGJd$UnQxC z`CF+i8Dg11MO5{Jn4W>6Q?e}ukm@@Af`XweD<4SK1sq>&P1PY<{ZH%G{1 zY17p-$VSEf@s{Fx7F%}gFSZN=agPI_8RSBgzKGKLEzr8&!U<=Q$6qh>bH#=oS2RNxo7uwj{ADWawCMr? zF_b2dlog&7e>Xg6NEgB2^waX=;je5B7$>mC*_})>tz7(BLg%H_wTZ{P#qldWuSV}Y zD`IlV@E{kkgMp3(KSs)iVI7cuk=DVmPDemau%7tuRdgfyYhE>9%5m2>?*zzj5 z1|+tH{Z+BzTIW_km4Wf6?Dpj?Fk)I_;I*Py)o6R&if*L*;7msh@V)ULd-;medg`Rr zp@v_aS{f+c+)BA;^ki0(N_IuPex_#vzZqwbK46`4$#>(R;*T;z6gw@;JLhNs95K!r zB_@=5DFZ@k-c@<vHdSj}FaMr3!zwS%T zAw-z|`HDQa1+2Eejq-B5c{@DlZ89!@aa4d|y6$`QIFDvX~%+FvsU#(y_U39A@R#_0kTai^u35^#uUhQ1RxJ6%NSP&vZ z;rd7`r%8@j8fmCw_XE_++>%W*0VKJK-ZjY7Ls6eOhdwgr`rXj)oKg}fBQXM>SaU?F zQ6?T?s=tK&qK?e>>RQhTl?)=N?i06_47-Yj|AF)$27m$PY!w1bS7_^W$O(^EX#|Pu z$h7N$KI)Oe;!iBtj*;1rQf*C1HYV0C>DU`ed8WJX86ig1aVhwn;y)`qk!p^yX=2Ec zhl&w2Z1FUUn|$c@#Y<3L)F|qV%$IR2AgWYM;%h;)IrZl{G>gMjX&bh!^0~DWoD})z zhtBbUtRL%25TUK1{8$XG@R#e)M%NY(~F~xi%!k|c*Ag9yJ8+rk9~6X ziS!PT`ILfhTBDKGC79L6F>4aYl%1}5O#pCHqqEUHO`ogL)`25KXQ~z zsyWAUo++01aPE>3y$xse;EpXzgI!u^_(k*+3*&!v#8uLRm1GV+oO#)2%QRz|IwD{- zZ1+@ciZa{480V|U*O}(8HUna;;YyOqMOJl7=8Bb)S4_~ZO|TjH5=mR78F9Ol?m(&9 zl1)&zsD_F)ZJ?=0n-=&__w0T~EVwrdeU#Vt&^AZDibxIA@plEWJs>rbR3f_J5!huZ z_Rje7Ey=hOo$BzW-8}~L)vJ$p3gL&=`2&z)xNVdQ1`I2a5AaGx$nG!^1wC+6$vv2S zT(bf=SpIaa%|&^l<)X+>G35mOzHM9NTy$+3YU z%y4RbLE28b+Y#E?h#zmd?c8lSRX??JNP)y&@2CAS-uPPOQ8FSUZ7ODI>~$QzM(5ze zK)51a#CH&S15ck$tLuE1e>?ypKSE}owWrfgH^DkH;a9xjVixC*y+PHSL*?%r7p%ne z5%*NR`=H8(_De`pQ`w69h&{VS9jX-ea1H;X?5ri5AV=-gcq68gCP&poA!ac)WS(ta zAVs8@Yu>OW|2pP5#mpC%+$vc<#jKcZ-oP`HOo_%c>*QC#Q|aQXcIHJ~I>T7mNJ zj)VISwBvyU;+`e!j%MVZC-nh%<(7#3fvKyrK(Y27wzm9{OaB(U=Z?((E)>#UI?LSz z^F|8rVuDOCYUD#PahFgvInscYJAUm$_Ho;W+negdpg+;(LyU1(tuy5Agt0Tx^-0+E zNfGyu#4}WT&(@GFMxa4o5L3RGex{;=5ef1WJ5gwW11xJJ? zMwGSgZ^sL4Nv##>buR_%D)HhuFCnI7nE8=+5uOY3GwZMX57;w%annCn69OHg;A@30 zH;6lW65tysre(aM8JB;H*R}<;E@e$PQUh!Ra5m;9m5*cnL*R3cv2eQ$^5m{Kb*|P| z)?`V4J3jA+G^mp|V$oyYkN{5b^@!*?k}3wD_A4G6q}1y%Yb`=6nXv|bnBPi`aCC4= zr2z?T?t(|m#bTzps~-FImPRmp^b3a;oY;7KYhXgNUYY7!k=9TwQx5wC+eT?bOLR5y z(Y-Z^m{+EIoy3~;1Ko-t^LS3bHa zo>6$8!I9SGAe~`y(`PN>p;9VR4@i>!)z^9WA*^Uf{bXe7bL_VujfjL{#vu+q?d`n> zeoT{X%EIK+!b&OqWK8SjXg-B&85-ONtEcfQd9+CbpDvXM!S;W0C4-=0^r`F$LEn^% zuo~eS4-g1=n7gkRmY)0Kqe0WxV!|0$7r`)lOf*vs@kfkdf%nOtR!q~E^*&aI+ zg+|4&m;w&0{Cb&K$dG;mlWcI~AAUNn{ek(}*!M7otedCdcS}mK*Lb2QWaH0x&3#?F z>=|_z08YqWmF(6X|K|R$l=Y)QIba+4XEc%d*DtyMLFeW_lvT#w&iucT*2p745Jkk` zo-y6~W46!^VTfcQZWRG>3!u+Jkj*XHQEj}9ueDVmfb~}1wBHa=SRc0dF^3~^mJ@&j zK}&~(4n_T#%hA|wN*8c5739exf4tV2wnFFuL$&R^JK&Q+|6uENOn!$m2`T-y5~zx% zmM*zvr7`BDWE!&6q@}iTuAy5=Z&AL3T?bzM+j$o~(wg3>wA2|xd2}~GX@KvBl85aH%IKkc=Lw#t)_$*Ye@3D|^j3XMmZ}Ejn z=3PpnAf?%aF^+E;FNsm57g3%rm4TwRE$+M z#c`9upH65w1EPpQGZK&0U=xe}*7H`1gmg6an!(>@q#KpQwoi43X&ZFY-r;m( zck4iO|4=?GFRZ5VByDq<72pD|2JHN4q`uWSPS z`!}Oz{xd}*URk2FM5jtzPc)~ebM^~sSgvQkn=JT}K8o-pWVR1Q_7RuzxcvqYR2CD| z_0UoDuAwSeh1@}^_EX~e6r^x84Ws=A%P~N$j5@3|P+m$O@(s;)CdWeCP1h5#lxEsx z;*)`BK0G`H&asD-(!+uTY7nf88q}!QtjTgs(gh_U8{Sb(#~9kyQcn;&K-{P*6f*|O zosWcYKE*HGVfn9a9Lv>=z~%$uXGb{vVv2o^oJsKI=J{^}!90QOj8sLI&tLne@F+|q z+{#U#c_8)j^RpgP73yZXaiO&KSb7Haf068?V*Wh0V0i`Yc}N?s%!Ta2HlPkXY;K|0 zW#685-_nbR(sNEIo3Rl48@QWLmoiT5uU=wDW0{VGGOcJXVn0iJYeN&E#Km4UNP)_X zHqHkgpxl#Hy019i?Xh$M!KqufiVgh5t|2~s@RnKHFZYF83A3ZWwSbuO3u^tB>*~#jtN8BV?N?{~ zVN#_#M>R+Ok&AST_y|uu{(UBWbI6KAZ1x#-5Uu`A2Du)sy_b3UIhJ5! zJyJ@dtjf=4Qne0L7fn=X@YXosyxUf)g1ctgP}qvm}T z?9+Djb|90_SE^ED9bK;_Za(c%Bdn;ox!KL7thu|H?_DSufHH@e8-K*Wud7)JJCnrQ z+U(82>&7%#;;*V!u*ZlThbAAUkwP&L?}3XipHCu5LK*h4Xi%FPJ{g3$s*qNp@>@<` zNJC{9{@y#~{1vs$w5wz#^s(2rc*N?ArScXk3kBfp8Ey=(h$^xJn#7xi+Gw}sz%}pk z=>3TQ1h{tg>yR}@>Hun+roIT} zmuBBL<5Zt+b^99EtdyI3lNxz~H9tw=qa9RJS0b{zE}FWoty~IQ7&Im^VM2Dqidc)@BdOd3ea6{V{7Ogq`?-v~-2({5--9ovlP;%3|MXRfX0 zdLENx8xEI=BWlfg??e6JdE}Yi16Cg8eNB(%LFZeYh!ZF;Up_s;JE87Q2_D`3A&-dA zRH;r_dh!nXHiX-a<4X{(@~BXCiB9C&L=RRykc5a7SQX$S%2X7Dh?RX;Y(4rr@J_{j zS&zoh7Ku(Y`y>zU?fkuLs|? zd^hzS@101*%>e|qAH^NNzI-6y-Msq~%%7A1qi{L^lVnBmt#xq6At|(HLWOEcTt@ke zi8UTOnG%lQ;Na#OEL|&fWpwd=5jtHfJ(0;(4X%ZS<&A7c%i-8`c3nH;N@Q$(R@WqqR#Uajk* zklFfols<{1`NCAnF62`ckb9E!!Qpj7)rpMQSs|F1&5)8yV?Skof}5vBVY`VBZWZ1b z^^;-`GB=CDX5^I-)}boy%BuqKDMZL;RZ(EdfHvwyfUU8fDd<+14-Q9n%%UDQIH0CunW zmGY-=;|OOw%%Pin)pyx_LC zH}S}tHLE-~iZYxzQc_aVYHYc4!HErr1cu%nY83hbB;vM@F;vk?>Jlb1umo>f(@
      v0Bxe`Tw#Su+0Y-QefsxkbDG%Zb}iycQ%I(->_ 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

      J=L~v4CiIkKqFdPUf+OVF_JMU9W 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 PSlh697fl61Wb^{WM$w8rpc;) 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

      } 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ⅈ_bIv)wLK3y&nKRrU zp^;77AKvKdE}(4R-ffsXBAN{lUG?wpzuNuSmaH3xC_J_jA&N5$?5EbL_eTBW3^}9=HuNbD!Pem$D-RtU?~IyKTvHSt zVAKv-*ufq>cX59%)-5~gAtIqTdqfR8j0R6dG@CYF#LC-Y-WAB?o35CB%bgb_YD$z@ z&LkHEV&@vYnoQqTT>9vi!`)A-E~ZD;>PwZ$iS1H>AA4(?#Z=i=ky8KSBn3jQ_(Wr; z;sst?QTI_U!zBuspxsb)UQm{!X7E%rD8~IMK9XSW2`xM%&PN9ExMfcR#Kam(zcG8_ zU`mZ4TQPFUPSseXl;{2PTJ17$SI5U~Ufe*kf^ zH>?_hqBAQ=pK9zrH3*)mRaLIic{Jvd#2b|p7wHo$4}l3;HaNpV8{r%ER1M>ksXE3D zwdkN1cI#JrNmbgPMM+bK!xe}%G~6puC?4u4yL!(vt4aduYwkv^xz^)sol+rNnuXe5 zDauKF4}a`R_pG=#g&emXDhOT`4CNn!7ashsF@Q`tQh*%M^eu&%qEz$Hf(KwIK5$E=_vfDEl&?wzFN@V#jtUZVFjcev>|#j*@S-D4PrV+ROPq~A&ssFd2X49j{vZ){86yNgF-e%AmqqL7kQJX(;> z$lV~S2Rg%Mu!M+y=&jU?D*euS4vse<;L~TiBogB@spBy2{#PBg>5c+l#K9Y&%4sU5 zDzlldQ;%}Go3=5$Fs{4ck!(<^ie%J2uP~Ki3D|dOP%=&4?Ht07+%3= z@m}%yL~iI0m*^$K9DGAvDnPjNP*LWEp{H#Iov&Yzr(w@@#biRf3@RhN0nHve3&;86 zsyBApL*k-b97Sz%29TpDL`CXs5LP@{I%YH>Gvc3vLl@;Sq){qI#T;rmzP_R7H}b|Y zyCA*^f;ZXwtBY_(=GSe%M&37|fWY-&VroV?BzZ{1p}Nm$v4e?aVzMTror z&+Qn%q;h&VpU3ReVegMD#J6PYgOiF(N|Xo@J%!j2ztOZ}lHg=b*0!h4ZR()_eO4VZ z06By|n5XWCoz_(Ek9I)y5B2w6)8%m?h8&_+#sT4HHXN>>Xd|q?DsES3zq8y&H9CJF}r23}_H) z3a}1*V^0!jT0&};AR-^xzd5G&x)zIJB-9CKB)ylI3;v=`Mw?HY)XehrG=}H38F^v2 z)YF-aemsqB^)WL^L$8!!Od9AIV_e&a6I+AtMg{?%)&NwtT>Y=LCoQk=lM(6xhm})^ z!WD^?Is*xpJJfFRz(YR>0Uw-{c0knTb~=__{xh%sHCMnvT)7mS7<5!v4r#M3TJ5x^ zBE>J8aF!e(=?k338Uf*3-&Nx`FQD)U=Mi-CCVmfoIOP;1G+d^0pYxn)B#T1vhdrGn zuyW@Ox(;Y}?#i#muD2nf5h9T247Zfao<p>sZVH7 zK=Nd#6&nj$D#CGU>ayrA$ylJC_ICDxVVYC4?eXh5T)Uk>%}7Sk%1d8dNslGUr$9~!#+Gc&)*4eOn!Ba^q? z*RD4qe&jVe=~Y;*vkxG)MZ(|ghDk9(Pb-y}lv{T_cYSoUZ-%IMknM7SIM7RxYxWu$ ztVGG@d<1e7r#4;H;PR#Ieob?(Te^9vt6`wu`#!T1!2C#+L03;$WzY={xuy-fB_W}v zSkrX5qHL>F8!znlvMC7_{6N1vH6vmcI(O5v;^=T#a_atnM96#kd+hRx*C>b9U_KQS zbk^74otO{W#Vs}XO>3HKB5A7kTVmT~R7qGJhfZ!xBMDgJuXv zT=QG=5v=S?P|WKgJGkS-3tnW{?RMT-nzu-7*c<(^%iY-e!9J?Jv@gycze{i5eNGQv ze}3{2`G_QV*j>uad!@c#eNFDzcq(-fg2%csK;7=nNQDBDo>rbAIJ_M>Fc%C~^MxAT zYeSS?kPAKh6<@Q(Vu1^bt{itKFHOp2xTWUDmXR$iZzb6{@hevXT#1JXZeXtv#QfrO zIgTt}v!Clx$mz{6nV@uDN;NH2((9x1li%2`_}dX+PyPxBSd<|SywQvy?>f5+br9b0 zOobcX(NP+v<;{Mr?cnTqJlmXUtz|3h=3+iX%X@CsjhlLSy+$#utqc5r==u)sIF4NF zBg;wiecGI3sU0|^$ss8xksOYWg1ze`Yj@@M_Ql;1IkHElNFDZQWjXx!hYQrL0=nB9 zsOeNyU0ngd1upbj&?g9}n2xY-Mp7oIaD*a|5N2M8C>&Us^;@LN(%+`!^O{*_Si{sC z=Vph{4PSfn#%ovKm;X%zG{S#naI9pL4KUDm>wa2JTE{Fjz7cxjFbP>_x*;IMGsGwa zTTj?=4n8}5px}vGXg8agr?d#Q&komgWV9lFt=5u-nNmjHOx}1eW)(+j0=c^+KJ<*F zSgTjftiF-KAC`ZpNuyvuFIiu;KJ79KjFTElMhj+zbfLx*ZS*9+bPC1_W1}Fgzfsjw z)^fZj$Im9gj-76K2(Ps-#l|qi(yTyRTfXn_f)grPB8|m)-53C_KzK@p4M>ATYfi9W zpTM;$#8@YnK-@V4pGnAAsE}EMCi&w_JtA_rGWB*7)hfr7s(s$i6zppYxga4u{hG z1CQlyreHO>^|e@>ORBmIoqr^6AaY$rogkweo!Q=OinUSdG4y;KOkf}`tO>SAujj!L zhSCw5Gabv`Yt4FMEz=jBEamSBhU&9w_nd`dEQt^mnsI>0FNGy+77(QxoQbx&gn!uT zeRT6oEl9Ktkq0@iJx9Vcsti}MtQ;>!K?~M@h!kvX2ZOOoiwEQ&tVGiQ$Wl?X zFu$doK`ejiwp^%O*IQV`;d_CBn20Ty0>Sl#P8H_8L8=}rsif($6FS_81vBI8**WY* zRWZXrUGYdI>Ujb&3Zt*|Vj@gl#Y~Jkjxh5#AYx;qpz`EVC#(75Z+Pe_ximq`RRuR% zU1`JCoPs!G>FC%V)g2030#-~$i!V*^EueN?QJ_;(53m&_&$pa#AH9)^Vg{K6XUx6^ z<`+4+vPsT&F!tUchg=S`IMqb8=+C-VqtMG?-sWV{c{d4Qvr(^EtT%Js6=1@dB%n$r zPo?K_h7{Yw{agxXxJ_KIrGYktZwk?jGL@}hkdl{Wc`XJZwXnFH+M1mbjzTBJ?8ft2 zd-9TT@ViMtmrMu2f63mN`7eXhQ%iCwv-x2R);!pb`aLa4bw-ITtn4oHUw7|VrZ8ZF zT%P7?U!Ze|(*DbsH18C`z(y8zzR-O*uOr%n1tb5r<&jg%Ejc9n4J0g!W74qTxvI%J zPCen+b2J>;T4;3OsLvQGNDzN1zM!|0Vu6&k=po^~|m2 zl!l>b|GrCTB|lwSC%Ieq4)|c`4EV?L*gLw+AIplxc`J`rf1@@NTjp!oo8yVWq+fmV z@tcFff8Dp|2VBVf{s%gh5yuu>#BQn9J$fJ{KO-5ovqhwPnI zqc2c28S9;(_d$@$sb!V42QKlS)I)M}yH+-+#qsT$u%7dFLDTN7pdZ;Tip>mPO$LF> z6cSzvqXKzPUSI?S=r7Co`vT` z0CV5{28k~8{YGJV<8CjPtY4hyIu6r6IPA4C+pXorX08lvMOmS@XMUii;3BE>=*hWE z8PfDu+MRRLclVPGrpQr0ERx@xd9O_53$(~?^+1*iaD z!};!prrdX_AJftjei)Ad%-Uz@Th=}cDs-@@ZRO-;9J@t7$B|1>A=l}*WleMW#HDs} z&{>@ojm4cNtJ8-Qt45XN^45b14+DeL=gL)dog_C|?&m+=Um{gu2}$>YjT}A5>^l4o z1(2@o#MCM#cN!t(wV7*G*ZCsw8$}4$o?0eyxHZAwqDa(=NaQt(7WNCV?NUWvuDMLYG{Y{>k^QNHr#Kh96_eh{4h02-^U#ofami-M0cXIr?ZQ<$ zTsV-+lkuIM67sel@kE1ZUeY+IH*jH0HRhc3bngD z=OQUkd!T#<(2l6;^3>;tq<^YQaKrry&K z%(;SE-84&nN5_Tg_fhp6%oUU1=_ZalpA=hI^=9WA$=y(kyYlB_oUDmNjq}ylUbCaS zZA*GLxCLf_mhzdQ7Mv8bU`pUBV1V2**mOv-Wdtxmf1d^)a+zU|+b_?)0JUEG<#H8l z33n6N0*s2|?jGWp-66$$v+~o0%Z@aN-NM!p4Gxk37p@;J?rFUFL5`;1_tEQe_4gLD z-g^+y+^$r_b6+)H0^?8c_sShVH0A~)DbS;Rgl{tvJXG?EGy)IFPlU32+6Fmv#e&4( zf+r8~5%UsMe!&{_7RuFPb{UK=cgaZ>gK7{2&i*k<3OUvnk-tAh1qf%yo1lC6D7Y?M ze`x@_Jo&OcDfeCp?}_04%cOMxWq`KsBI+YKg57Ck09G7+?4yxr61s|YuyvtF-nJia zN?F#c{;ISv;Q_o3TB`v@2-ez=(4tG_*N8zw8rby?g1Z=E#elbbZLNg1?P@5}>o{M6 z@YWcnCHK4|M^}7cmxVVWWXT0At@%6A8kC9pP>KdIF%$}6f1C2$^ZD9ys6UtTj)X(K zTi)RU!ouXvm-BPG8c;U&!EI~{g4);?Y4rqm={uvA3;4@x{s{HxTTSdp0@N73g?oIf zCmKZdu9c}hxgmeG2hkD)#@RIsQA5C@Tpe3joBa2s@(yFxpkZJPaYL)O-L*CM4ybPf zA#LT_zJ&-P&6!>52@zO5QY3yEu$-30p4_Tz@GvO6NlpOdexuBv=BGG{`yq?Uht9G9=|9-X%sA{+xb=ge zy#{TdnXN})?tXxI>iZsvU+l7DRNVd!ef5or)B8IIJ}Ze7z|82ms7b^>u=6^FDL8_S zMh;JgSTT)X#UXMixe4wD4WtcMFS8TcAyWl#T$vJAES1eH7!spEHWl61?iX*@<93q( zZZZTnrvzt3R48&=wxa+it$Hf{k2MiO^1SeugMEXYb1DDp^1$O^XAs6u`U2-1v|0Wu zfh<7>+K=efG(~it_&^qD{-jy-N%GsVdcKmuSQ(9XrMsV1>N;(PLo!6`Bk)hV5Zdjs zgEuM6mFj_(?8Z}vC8bZ#F?-Lxk`xP11g6QJvAj8|!s_znCXe~Hz<*E~)V^CEd*REz zHD9--Yilk#53|vgJ-BN@c~Rhco{SPD3cnv!b&G2kjIL)FJuohajKHZwo)GE|gY^&dxbTb2)9R&b{W zSiw{T$f+oAO_oX;NIW&XGce(*XFZnET_PEL=m@dvH+Q+SCkPGJ)I8%(J3juncwiavl2Tfa(~o3<3XSXpu2!W^d>+DW?09&r$W535GI zqr(qAne(u7@h_b04j2!M=;e{<{60BW8LPI)C`^)FC^5@ygl0)%f7v?4uzIChnCC%? zo;h-}&*Eb|ifNoF7T1}$Fy}`sd#Y)D!69tXx)@bVX;6TGMP!>~PK7P#GFdt%j-BeN z-KKwykLLneJwQ3)7_7#m{UAFMO1?mjBf0boBR9b#S`@ict}8*v7S8i3$!5q7;#%b? zXMRZ%CNhnXnhO>40n#l=TQA8YJdb9PbY_p$%(T%LK|F#-l9t>k7s{)SqUv{~(g8Dx zE9#Hr)G>aRU$|o5P|BG9kE_;BYX*s9NR#wBuWou;BGRFd8OZ9jPw2XmjocuA*9E<_ zNg|kSJ`M^e6337phul$G(Qnx*)Jx)*ciH&gk=5)Hd5@(09a3aHr!~GTC6itZjpVTV zIX~Hkbu3DDoG@fFdc(R-Pfl3!FIevjIuI{wJ7@Td5&TC|5ZN1&+3HpH;txq+W$(1b z5%eoG2Zez=Ok0iS@H2vt&Ar4P-* z(HtIydG2+N+gHg~^t-|jwBcyc-sONs9k|SSM2@P;uk$MB)CH~yFS$=Kvqq762%JFn zDcI6iIR-(i#R+lIisEGYe=P8i=<2$vJXaP9>rXc6H~Az9z*w@e{#@nF9Jbb%q!+W! zV~szzN8}P2ok;nG!);ci6kp^;J8#=JeDaR1Rm6XA+8@tXbRRarJ<8pqX>`!2mS7r^ zJIe7YN0UxuMc1MxN3s`vSuw8^x0S7qWIJN{MZKO!&3*kKqDJc1ER4rFdVW83MAq!N zM5$<>MDN*1n{JxNG6K0z;eW)0krb|{s6dmifjnSwXuf$>X_$7@ayV-EL}ny>Vf*E^ z)v@klRY4Z#^eoPyvZ?KSfbEXSz{r&$ptjGXghx%3BzITJNPgJ-1DO7o%}m*9QuWDn ze&BG_I~a8g2b(G4{BxDGYcjB?vtxWj?C~IWfccI%iB$yM$UBpwFBEkk;yOOT7la{d zoK!iBs;kTp&8+DtR-=>x;EIBG-*zD%8Hu_rk-#F3jR7Dza+P%R+1HkCJQLxAQs~>& z7jpeu^xwDtf@7=G5c!iYkvi%~{SxW{(t5&iJn%Qeqe`wEpU7CsWN%Yk+(#WgnU@bH zL7CPIr)MTIHZ#>&oEN1FezfnMqNivaT{}B@er&ZOIU|#Zg>Np-X(p;O!{|s*rcc_3 zB(Fyp!AGWzHz{JD5Pmgo4!EYcjd!NQrS|5td-KoX3ovfi|7+)ec$wpI(m7E_g4xN| zv{`FwS$$aJz@%88Z9~NtSUvyj@AhL=K~kF9kB%y`GOI=%zxO-qOCc|}Y}xB~etzdb z{`>Bo!#jI-_U~*8Z!`#n@9vl}-4F<6;N5|tT+Q)U!J2I5cKP>bfCOOJH^$(IgOD}& zUAwH0|LX1`S&a`BB=`e>1^luSrw&Jo%ZeCLjhcD#EdYrr-h!H>3c~ zQqtWQtOA2x45I<+VT9S*3cjZxAoiYU)iux@>l1Ise!<<^KT|tK#Q`@VOb~hV$X!-V z%`n#+KV5_X+`{6yq|b)gYe8qYBufeR=V1$BV1ndy3=b~$fMv< zb0*s?_<;N>AT8)v7`szys(x)g%b1xE)G@|>nxnidH)J&{rd_J1O=qF2{&mHR|0!V8 zMP2%l*j`$$lUb)V6NskwkhSt$*2YO-cep%q8=1v3Pa}HT%oyiUx-bYZEl%)}{9zhq z;3@xltCBXI-=%o|20kU+G3v@8c~z}0gZ9ZN*T|(C$jc`#4GS@8L4@1HcL}gawQ1PD zHJs8+0gIM#0rCg7lG&86S`teYD83<*vj1Y2#ro+qQ0pJQ+Q)6_FoCtyCF1A&D^Byd} zYG$2JdwGO#9N~{b>USg0Fyk=Z3|p%VdHH3A)mtKa$@VpGk+@zA<;xRz-^j3@bcIOs zM>;akhQOIbtK8i$&eW!rZserAOcGLFKZ67(znh{801H&+A z(y~Rqc(?Y20C8G4KRr3FgeW-@w%`!R`9Yr*dxY^grBI(`TVtjlso&mmRYDJ3u3wuX z07f*4C-IXS*s^`p0-nQ#fKuJ)F4FD++ZB(HcL~1H9NH36za`S|dCC2F+wzD)BDTbb z$2@`JBr5ng20J9{prB%rL(hOb`G$eG5Jd%cN^HBD`|#YYAA#czkJ#uj1G;v#H3N`z^>7L_6y)!l~Rt1Nni|PfcYycsTz`=KK9NTNbu=Cl#||M3Q|BXZYT>Y3(f? zCW2s<-%_#?N$4rt?EFX+G4(XY_O}=}uf2K8g#xbi+C2NzrIyn?otsW4G+F7Yt@mCx z@WdRV9?w_%vY{a)g4*qi&Koq^MSHaoVYk+bbM6iQ%`JnaT|;P>1{NV-tO(^eDABLf%E$ zc%Hh}rhC0M_wl1wzIYlra(;7r?-p{Ay%%8zsFgB#iK z^uCOh`{G!`&CaoDoZ85-l3YBBTa-04cJatX_$wRN>I9awBTGuFXgIo_hNMk?3rj-l z{n>35z?P_+|7ztDQ_gxzq_BQ8)$ANhbJgN~q9vV%m5X_Gs&as-;F(#8enua0dV;^<1An?ZO zn8zw6UFeW{tjmtY95Ih{ohXLa+ps~Z48?fuLLHneij~wyKAMSB;Jn266z)@Hm(DYYbdTMIMxbGOegksF48Od1g*P%cJTSgT@cMSFT?se1{EuF2ys9!KXpjK1DNJE{zt3wlg|zzYFA)O9)EUFOK>hmNO= zEXvFA_k0wDzB~Qx8mqinKj6BWgDM%PGV%$FbyH2AM$SUHP&E11b`DYpmU0{>R=e%6 zrt1l_Gi<|FiT{qNr_TGUW<@JNMEPNBrncwtQh8tQ{`fB=FnVQG;w#zV z%qpwK;~8zvI76pzYXL3H2S^)e8PeDUxP|ZAyYyQHD>KT?+2Edox4Sy0zknyvNZ5Um zFOM$omNxBe+@zlP2YhARWG?$WWBJ)?5<|4$M|c3S0Vqn^rg^6bZqJBs8`wHlnD_;S zUpI(5)4Rc^Fk=#^7x>KU#BuisyA@^a4}g&{2R`xX|$m%A42p!RPp{zA~%891!r>#JpITr!9}NHTKJddA!hlbjff@;;eo?@5la& z>SnWH7k)@j2f2NdL+vV?MAsRn)?-g%Si9cdH18GXel+DE9_MMq1ZopE)aahWGyGa( z*V$Ymv?dPg8QsPvE_v4&O{8N9N8~jt1BNWqGc~1Gn$!b19GFFPr^sJ&e?R>XA2!J+oElAgNX_>4dv}`T zD-j&c8Zg~dAY}Z4P$E}F{U<Y-9lv*Hvf;yVeCtcO1Qg_iutDzG#!@6epfNu{0Wp}H9Ua@GcXhm* z@o@dfWr(I8%D7uXQt%fO;q&`QB%aL$qGb!>)AoVpPycwB7!>5GEsJ2a_@ORelvE-jLi({l3%WMURny$cCM(O4)V3!qm8E;Q+ zO;X>8V>Aw=l7P))(`7bePdkN?0SE&jMh;7(6*Nba%}=UnGWBeeNGcYxyGdDv=4vy2 zk@dy4Z}_|=>zKGP&0S#>Yt5F9%bG_<#6CXLszYTsKvl3%HBongdda8RL$TXTI7!)&b>n%M%tHy|@LspsvovS(w>nb|eUB6HaL?`#Ill4NZcaPLHhW(3YyX|9n-Vq}N;qtzLE!(;~5?xID5{;L> zi;(J}4c=|N-1$=P%%*rzKZH~2k3f~`V$^om@@}!bsSh$Y1N-KH_}19BT!nAh4v2o2 zNB#EA`U4-Y?(^BubA9qiChThspqI|fdS6iz3%c|6`(KWGABIYrL_U9G?oZt0#4$lT4WKk$7tJN-_~Jqpr=l$Tdw&IL+` z)vO+snhbbj=MbuL?cPnFMv+*~}2of8!-hWhxh1AospHFgmVrsow|0 zwOh(K3Ox>pk0Du>6Wv0#FKNY)N~b}G285SiKJyckTF3}qbwL-Aalc#~$FT+FZ|OgQ@9dfNu(bAKq)yQjjaPCfPj(6k3R~#?+9V62ZRmU}+`M zuJX~qCz_=J4N~26%wIu$iqJNle;rQ=9g!y~WU_F{tyErlx@_TQ2cX@iA^M82Y^QQN zid3JLeoV%T`peq;vLNa7<7 zS2#4*Awm+M<>^07r~2N>WC)8Cy$f`N?)>=eeB%d8{6TKDHrx^QNGptCXa^^aN{6&4 zYX95R9PTe>TiaV^HLMm!klon1zi;7O+^#;m_db@D)&wzGGhOTqH}8-8E$ndg2~89CYX7>nK&JiS9mc9J2i@goMIw; z1@Vyu%etcxZ(+k5Q^<8P?stxQltNFF?y3~O)_N5yr6Jk8D|4%0-`lZqf(v-~CoJ>v z&d%Rgz#xj5`Hjr#tsLex8WMMn>t+@?Z)_jySSEPu$ln{K3%Pb>YwN!v@5hbhIa(su z`aMD+HJtwEwe-(xSO0l!9e?+p|L3(|{_|Qhzxdkx;*aJR)BNHu=NDg@U;NGd;;$ZT zy|R4cXC+d7?}8ky8&*c!J`pK^7&F6@h;m&iI1cV1sKU_Q@erm%u!0DI4_n<})F@68 zxL_H4Uav7A*#+GG(jht#;vyDb%t<7o0MUe0@GG453v24AukAF;C=}8nIYH`&tR0pe8Pv0Dp0-9Mo z=33V`)FbZI-CI|*4mA~*P%e{EyGe&>K&Bd!kGE&h#6c}*GQ50qp$|HqUrp;0+sua6 z(2iP~LrC2c?^M36?d^XTo5}X=d$-fy|9tP0kJIjCCq*TU7MiF4k!DMpYks4q%AKE~ z?snw2P(I?opAV(e|CT$Q{TK%ktBy^Hoka~-Ygy}j&9!KgqTm)w;CD@f`_|#w8v~Hk zba3As0r?RlAc#Qm>YE9bxBxL1xfX-ZInD;x|KSPX_B1ag3|Wrk%S%YqmVJW51|eU~ z?B=^u>-+9JI62%ou;BHvBYSa%03F)<39L$k1NDnbmxkqOXtUDV(b*5{bb!SHNp#r;Bby#S!mzoD%bv4Ff zc-s2@A6^pf$)T;EyIU(?pqFv){WagR9Ytl%$O9iR>9!X&AFb}lM4MQc%T4u`9a=-= z;fHb6WcfwKU7x7?d>+77N$&w2$Nl}rTO!@%A?w%n%!OeG>3%xAV>nBeZSe*R6K@7sIbU>&leZ>2yXjt(0168EJ#|jM=kqja zco*|8@3GLsZXXf_O~ZS`V1J>yVL_%ng^^;wN234!HaDijBFbp=Jr{H?P5M3Eo6C9T zdr`t~kl*tON8i((Q@>XG_xhf0o2e`354l3s)yw=f8F6nW0Pi1p&Df4$e3xd%E2I7+=^N0PKgMZml3U3ct2*R9OHR8I{?4liYYE(+Zy zoA>pN4X+egE9n~bGAi&gKE2BRudZtVmmF)N=Qfh=XKcovNp+HT&+fz6wr$(`u=}rV z+cqA?^YpK6_UN;<#z}gN@9I?Ds#8~KL-~gNP;0i_9GPM^ToajYHr{8BH&@YXvr9&^m~swpS*bF zy0_%;EpN(b=`A)1Mvx#S{iT`#8vaM~ZL&~e?69fqD-otal70JC`SL3H@LorpDlwTv z%$O|=4{}Hi*D~x}2FOqt#SyL}GU?rLD?tTS%SoFesYC3@c(JLqqz{S5NrLeQNQUin zPR9IlZ^PAA%<4nyPac%RPhCgXm}SzOrD;z}W^i^K=PHSi%%a;MF4ioWBrDhsW$M#- zZTzFh5AS(P%&PvRjBJ~)-~_96`K3$H@ffRz!sj` z^RP31U#<@uV5fmKVCk`#TmUo!GyrvS+luYHk3b5}&1c$>X2rPnCi*8T%UA#FJuNlL zM=GyU{$}Iu&L;`@U6{*n8yEc(H3(Y0)9p#?wQ>Uu<7v_}8+qb5uTJK8Mv!F*FNQNV z>*CpEEY2}JC*bMrCXJrQ;8%i>f)Fdm@1=zIw*VpRbNYRa2Kxt+?eVyi)_!@ox@H$f z<1l?mnd6@A$uLxJK#O6_Gwd;|sp^+z$O}VPMe6mU9PaL{d89PrBTotRlW@u~`wBzs7 z;A!iJP2OqFAMd0A{VYy(KrIo1(?uR4Lm+e()(gJy9^NlNDwtJ1?yb7{7u42lOka}u z35M3*kIu^bA?#eoEZ1nrwa zq_!<(v9It7zXXEN+oB+rxaDw*tfn6By*RgNh^eUQunWbWB1N_E+F7HjnDj1FXte+& z)f|>;>2yZu{HAj_bB_4TH;{rf=r0r?5C{mMEyGtOp}8x7CKwP-1-0{yD#rJ+3)iV`m{SNlKr4dEah&6aBQ;L=5f|R&qGz>WdKhhNfjQ4e^+}OXt+WPm3~!V)a>_vr4`eH zL4AHTX6EQU?UgfQ(GSaO(yZ86C1}8_4tfUGMHz_JpXIrT&FbC-*r8W3yqPt-M(R&u zR7cFv@+Ym{Pg@=ZTZ8xtWMFUe;#Qk|CfPIa8*IWnJ+PMEV^u&_H*VkiRnGCXt|PGd z-uF~Cnb1OcKh1czjXTK};>KmKm&V^Ufj#J z13mO&lY^U!Co(|!rHCbpar`?zaxt^!vHK|)o?}&0^&WLU1;ne3k8OEm@6TGV)g@%b zb$Q2kcdJMqMsJK6>Z}xPo)D|S&-#{Pl_KFWGgllw`{}0siBpmwXo~f*MBzjbOdcGG zt@v;Oa40a2Bt0=+D+;ha(SST61Otd<3Q#@E&WaZ#8XAHI;!Z}Nl@|BwYWI3xrdazr=oay7Up)+;^C3{W8UXG8z8}ss!nBzN-AF z9U1_Z`qx&!QB<~FdNp|A#^&eY3cBDhA3JIWB1(p}peKWCBVwRnEu(BA16u*z0E0y~ z#wJLE;(pdr3*|ta%7|$v?qK|8t61)iZ}U%5(aX5?ExQdKnNF?3R(|Jd@0fi+qm!_3 zGO*MBj4UqUYyvZxo})XQv0yp6Gzy5sgiBSU%YkA?d_n)yZKR{+E_h!HMF4D zQB{_@kh7K6a@AbLBJ>daw1gFsVDVW^bhzwDT`Y%2o2^gzEScrr@>D|J^OTgAN{za4 z<%IztjdgXl$6u06aDB6^S@L}`5`W?6rB*JmAy&RG(Z%7^4gJFEG{BBZ&ZqD@33d@JTG{9Pc-5}>tOzv>s>H^H2)n`g=dI>NE6sH-A?ENbAhhU!_nFrGdX*h zR8Gn;x~ENGl|wyj6pAU*RmgMvNn!e<^13NoDyg*#*YOK=YQihQ5;-QVSi8JQ5bG6l zY}RkAq8B3-^O(hgRA*4hO7lJ-m8{P74{S;13ktig^>Oy0{0EsTRVFEB&O1B!GX$zA ze0=`1-+yy-mB!_|F(?p_6*v$O_5XmQm7NWpP5;Bt(aK<{n>;XTsTpqa3IG5=1B;Hw z5y@v}LKa>u zTH%V^0>$A#aAuSoFB(jXaA$}V*HJoH$s__CIlu138J;0eSw@NEPj5)qBeNy<`fkn2 zAMin;D_}jZ*&7gTGYXg4YV7MkSXVu)Y_c@h9J(7G-8+LUFhQ)+#C$gP8js!Xd~4YX z6pso*VL1ek9HnGk7x=E7dnymCC$Jikgd@5KxFkhN7-Ho6akLH-KpT{L0T$NuK9!kZ zSQwtn2+kUE+C7oF&80g735v^ZJJC^a9W3f82jiyJC?29~#0#OY*jJH&ZThAeZ|S_d z1H9gjRKw~aDS(P+$VY3}tF6(NLI%tm-y>&i=7~be)vn;ojRlZdoLb?ESMhaWpL97J z?$U3Ppu%W{T8kHxoBCqu!Lr^?ENX>{b?n97Q3i0M*- zj;&!B%jpE5Ek@v|8tHNcMZ!6rYc-qi1}JwH@6L1QXlOBI9BI;pb7LI$1%a`@SF9E2bMPJq!K` zWdAKM{os!ajsd3d5_`1{Ga`YtfhBUK)=|0s;{^TQEWCN`pW+3Y|1(#0%u)*$*^hK& zAX=%lpzW!BW6$m$_udcwrhtED>{B5BFN1Fd{Y^>#%qn}{B707=+DbTceZIxDsgn2V zLg2(%Z|5|S?mUt1BC_WEPt8TB?Rl#0MeOx?&h-Uwn7}WN{g+r&4IxXUR7#Q>;tsM@?Ui5KhjG+^!wp_0Oi# z@0`zja3GoibTk;jp+Jfun4xzF||J7B(abH^xs;{Fqs^*RZ zDdRRVph?AXcAlW1y*vihw)V>TWOtmskQwVBf%_qTK!OP8%xLfDA+;blAf*kGn90)E zok@3#(L+=5sbTd<;E#$RouW33!!xMQowAO0Eg<)L*Tg`HLz8Csy|mwF{@Na3&cYLb zV(s)Pdu4mt{gR?ed1D9xUB-pq2+JAu2?OhzwFJ{4-hn{?N1RE|AzO&ismC^Lt{N3YR4SI zeYevyYm?a%C#mnkV2gv*6B$zfhvgnfkYE?Jshm|JjdJu2-{7}&8-;!*V~qUNu9_i@ zk~Y<()8&}XVwb!&VT}>IC>^}Q0BFn|;t17He7x>E7`96SnJ7lEU>kg2EOeKoteff) zzb!{}=QdC)uH$#ukW0!NEir*mI(d+$y)=VV5ttD9DN)eKN0vbVWfaX>-DIRFDj=m< zqDsEJiPXAo+~(T*J=+k@jdk;Y5B_mT81Igws?juC6|kC`4a|Kx9bFP#klN1BTpglg zLNDV5cse2j$B_%EdPy#<8+B;fCBc$w25ZM_;f&Hb$%3{?nkbXdhAF*|r?%ljfIG@* z8Esx3UlH6p)@bK7gwsN%BMkNo` zua>|2^?c?4E4SC<&F~$1aPY28dt*j7SvU{J0wtt(L)W%z8J~A#+-Y8N_(xpp#n{x2 zM2@uZUbJSdO#zy)Z1!{Bzc`jScDkRl9G6;X(IX?84&s0FbR-Z)DS(lT&4G3g3##5Y zRvrs&h18^Z=Pz&7lo8_y$q1snwe(hlP^N*?vov1 zo<8Olb$uLxh$0bWa`-9zVc9b4(&_11Rz9 zqv)BWHj(9nWHGcnbObabA9G_6R+tSwQT z0vR*^(3k{Jq$JSI!YoBuBzlff{gW}(i&>bwuh-KkFZc&wK==wpTjV_wIm6LjC*b1R zl|@KPT?A58n*j|uS5LmhY&J&OET!NSxk-t%^eejeaXI5BG#AL{ls|5JaN^gonjCi8~=_nR>`|XG4A(+Wz$?R0Gbv}%h5A!zv}WJ{%ihjlg< zb!8zlfCoW4kp}$9Iu5yIEz1nz7-X(w4NJa;1==YB-g6S67CSx#Cc@tl7N=gAx=l77 z<<+}?{T*^D=%_W5HkXg6e1vHKqO*n}4@0?z5ef}AKLus4R2YVxG zjyRuAE{pr)f;b3m*$ye3bWAvDN%ZmsSAnd!$BnUX7h%?llqf}JhK+tUO(R&ZBt_b} z^twB{1+8ye6hqYiUfI~6!;5l1MFP;eHocsbh*4H38s~SS@Y+i$#zH}N7oQ6IQBon002NmI*U)kf=!k@%|kqA zwzv*%b4%BCKx}q@7p}hIT5kMxx*3&Bn-#iD0gUI|UOfIZV06!jni&oh9?r-6x)T*7nkv9E)NdrD(F8fOx3|DkYV-$p1s#ceoDg9Z0;=6#j*vOo^5 zYHjU=1^NKjp65hP$fs(J3j>>Jgi-2M46LS6f(3vt1cx}$|5~%L@q;gQ z=f(dCox@6fkzK=979x|fA;h)CH={EfsxjS$wj*Ouhk;GrC#(LoETkSx|CnyqwJGCU z2yL%=ZlAvNj_(K`d|TAy*^PX@fFv-Sxsp^L?n#GGK-tPyt4sLB|H@6GVc4fRC9jNn zR4GdP3Gct*9+i-#7ySzeNC^rENbvtp8~;DeMH34{Ge<)kdO;&6XGcS0XHi>c3uh0J z|2+K<37|xYVg>@kgzjuSec%C2`0M}t&SgT>EI`?HuTSF_PCg)*({PkhKcg)as>LOX zxL7Q>iA~8Z!eKQrIkRrJ7;Pw+T+tZN$YJ5-OpUzkGXpin4GrBb^^EQpb;h+g$%Xcg z;f;vCMXF$F2OKb|aiLw4lbvU?Ow5C{%scH7e>~6o)}|T09+ISmhg;+3+3+QDY1nr_ z`GR_F$28WpVE|nxjOz<@kqa(>A|jPAC@Fim-#|G0 zNziCVllEX%;kVxPYdQvcDKqub*~z>H$S0mbK>zVS`nOI{&+F z(gbB!HfBp%z2fN?dK!06(yE_uQ-91uC!|{NBE-LPV~z{}u*&u6S2Cu>R_L+xCl>#b z0POp%*b^-Ks5OcnGK-*|svg?XBvJFo1pG`R|%3zB?5J#+75eiFuR5H z#0SuB<8-^}JT!0Jm?0#9@_lbm zWQvhv;c6E{=R1Ve)*}72K&(eT_aZr_GLBT%Q`R}OMI`-iC-QbHs`$C8FN}{D?~1{V zP*ZI)1abeaMkS~YFyes%Hbjt~1)hQ6$e2M`tFMQnKBQ0!e#qa=0oFj44&Wzu>c73Y z6d^sCBClj$y1xRPtY(?pugr&-Q4G+;B?+L9GK&&76zy!pVr&`XcqlJehSROZwcP4# z^Ep|+aYXyuc&RFRP3v~N)*~0JlGfSmp0P$27|!ETAk}RVehcfd`(c%G1vh+W=9NCy z6;MF+eT!Oev`noZ``naqMR3XCF$YeUbaCoCw{<^jLEYoQ^A+)SI0uOoiPuWt>q!?= z;NfEDuA=$~R^b;LO;R@)02K;l2@3zRSPiF;C>$9Q#9}8@w3|=X!1v8@bJuXDnND0k zR83tjsci^c4^-DQwAriV6^#>jLs?0^r1&f|xO`|Yxg5{Gx3*RvUWmB!NvU^3_Nw3` zUW$_w)mXM&s$(r=o7|Y(p>?y?&wSr|-Mk``%|y&tF<;JF4UN>vOwbT0eBrTFbiUS3 z))1;cZJi^UP(#pGHJ*CoOe0r<+{UYzp1!X6v%Ze&!kP1i3)>vi-c@L!?gXbXQU26u zCw`H1r@Um`Y}5X|wd(F}wK3BpjJu{GarO~Sl6S2dz47+r4ye(5rs=R71a0McnoaWW z(l%0yiSbWtJ;8a*fTj^uPq#%aM_UuJe&_#hs#7Fd$0LIW0+OW!0^;}|Q=RbtzEt^d zhMN%;x)eYW+k2=x-`obBTm=#iy#!evL`V(lTsR#hZ0qcFBGdnRSFcE<@^SkI?DGAG zdHoFH&*`Lj5%t$8oad?RBkGx1A3z~AkSf%4$brQ;+F?N?KvJKUQ^sT2nPJd+_HWi! zSM66Cm}WAmW-6+t%Z8Q_Z$08-Jo@TmJLyIPvPxs-DzxP|uPZ;tZk+_Q_}5bXmgESf zS&38oEk2#BddWpJwymt2>+}6?H@>X={bgJiiC&PWV)p?`6sbC!S~U0 z1sb+^!_%t}lnOHpGpDRAUXDfU!K3>~{er`vdL#9$^RYy6DpCur9=(!@Zp{+6)n^U& zf?!;f4Vw(G2_uw!VJlfzZB0u7CYhz8;E?B(p3;SuJ;iK$hQO6e0nO;i*Nod9 zdPQ?K=A-!S^C|15gw;JmvKJm}k%seB0*!agr&=Y?Ta0zp$(T_vY`$`cyRC;D;d_fW zV>aK%@7oUmF7Dh|kxI?S-MSzX42nBZ0&^NNG(Zsb*;u-Uoz%F zDPwS4b7<6<=x>C}X$Y&tVIS;=+zsM!_ zzWuJBiu~7RO$m8^>{-yq7lLawlN=npwp>l1^Mw5l2zQzQ!Mv$yUg1vobk}3{OXPD( z(vu{9Vw`(6B00lh&Thd?>W%N69Ftma^Aefh{iTk9fPkgX(+@DOWNpGq5R4se?A%U zGW{#4?iEF@Om1*7H(9!)ibrjoE8zF;m&us4Wo#!WMfKz~n-f#K#@JFGgbt=RFcEmY zk1E)D7TZ_(C=Ol=*%iw!(8;d7-Jc0!H-``Ah=I-#JP0Cgud<7A4>Ecd1}CSH=&Zj> zBAOSV?!>;0%rR_VI*$5?`&JXg3}Tisvf(a1yK+|F*BO0>M}PBh4@{4Le~(CyzY&5r zXFOYZ0g|Gt-dv;&p{1zp0l3->%vq=T_bSmTi>kqTHkzjk#;(xd@qHvZqyMz+rMZg( z)s=-#F^|87ft=U69HDbRP&TM2z-onyDskK}B9|8|36B1YPf&ALdHI4_Mm9d^k$!IfVOqyMjP=d*%ngWJk%TJr^>ASX=&bp zCUJ0{{wzHh$?-2Nb1nst2Xjao0qD&^B8pr_9f&q_?%QA9&N$w52m~k$kHP^E(s{yX zLBXgqo^YS3zT|b$sIzCZ4uho4=_@!f_nE{=eLg(9yj~Qy5OKKPU@SRYWDwpd-OpAp z9ewP#vH^DWQ{R1h2CIJZ06R~CVcLX`cCQLUwR$M0d`OeQq1EO*G(Vj}M-E|N5U#}H zaF8qQsluc6(4a0Fvj+7_Wh?DV(h>K3r-q@w*>RU> zvTp-YnXHzKeY!a}8g0W()P-iJ1$^+%1XO)$E#ojwr#3x}&I7yozlPNn+K8%(xGbF^1IXK8B`KSL0{9W9GYyWGN5z^*P<1~mp6|%+kB2cr*oun_9 z%>9SbDiF@rGJt%sOXl3VxrnB~dF!3I;)=e!BO#!E5=yV}ko9UR7=Nn$+~^P+%yVRZ zFWuw2Ky>awtDdprH-B=EfJ93Tk#LgpiGy)Ls_s=ef^$!rX(JmSH}uIxBXh|9W%jio zHmyo!^V)!QyBb(ba%E$2#<)=ZFDwdGdf5P170VPUj}A5;vwNlDhP&4!A=CLlO>1ag z5^mfh)+@BfWXCA$H@-nTKM=M-cNR_HFN7Wat!iG{otHZwi{cF`qv!8pMhPK~Ld*uvNz>VQ zxFixsqBL2^r)+G^(Lb1{cGwRfN1asq(e%m=BN&xwr6ttG+$oODL&&j@Z8$TjHqo0B zR{%QDfXhEuy17%;GmNfvgVS`Ubr*f3P8saV=C$?tu;>kIS$FKtM;Ts@Wb3GGbk3cK zD9+T+wHY-cmDxvP_c&Y)hW;Z(C$C~my$H@!ZlCxDT$?b5j!erv+0t_`^3MI=h+yDp zpi`2)vtFJl7DUa&m|8M_L+^s#^O6+_`v0b}5oufAd<~ANQRnOi=at%2=+x>&^;}el zxz#lHu6S8_b*r7=%fz!UeWNXD#v7_uW6b)a>pz`%rnbjgk3hyKyQbd3dvTj3yuHci zwzf>X9bCI2e@^pDZkzfDs`u;RCFKCxx_ zb>(A(PQ}H7Ly_wZie(sVTii{ZY@_+UsxF^BB_18&QH*WBR-;48J%g;_ z#ccgW44#Z#FZ`tgEI&Q@@JfgE`b_%{l_1ibz|1eCY6fPPe>N6^r`(XuA$)4A_H7aj zVGVt8O`l&P)b#%$sC*Mj^q6Svi9%-yan}`0qW3A!`uJI*C*%TLLT5$;SC}KBci0W8!mt3Ly$D9 zf(v#8oP75pa$_qoOH^ND<<(T8=%bp_$1Q&z)yo!-VJu@=`n#-Fl_tVQ8xl8L1BkRU z{<1Y#pU}9@_M2%AooEc76h9Nyq?~I1I`ILyL##Q(tl4L+!31l=0Ht#TcQc}pE|fFB zpt~MfT;|=x27a=)>X!5c$bg0x_3#^Q1O$O*&070ZhP@F44;yvLCd&k&$bCXWD>Nm7HCsG+@ZI`Py2?y%@bQyoW~~S=?6s| zKxQ03-hW3ZX<(6&*2F5QHYBU(Gw>l}∈GN)zT#{tJrq43&5ig|x8;jaD0Qg1a-` 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

      k*?bq>?Vg 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�gz~0K?Gu*;69m_Kx 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%0D!K=ffT&0F3@)7{v)2bP`dQY_;SoV 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 noz?)n5o}6-+XfwnnnTT{ zPVm%-6CPRcrk}!dAViVo@YY}akvspRrA$PsGy)mTw?l_LtPM|QU+L{Hu?h?CW*qf` zIeDn}u;F+p&Gl^s=5Z>lioj^bIKYL*8Q2=315KFt5os?a6J(-O>{KllMCOzO0g>9SnsP?sSKzAYJ)YvgHQz6n(++XSz}99YI3LX*xN%paY2_i}{3dJ>t!l{>Vr~NJ z&&6b#cw)jB+D~|!ZDHjT>fH!C9x=I~d+X`HqoGyt99MeDb|oWE7LClGH7}O-DbxCv zB=%|ut8n`4vQVrISgSnw59W<|UrhheCPD!+eijlzS%|e|A`q(I| zD2H=2d6VQshxE+RlEoL4CpJp9mhCblWGMX-ea_aw7 z5A8)fUix;zIMMrfEbTcZ?5x0tF1%Ge*)DBE#p?fcS0wwh#P1~yl&Npa8n*2PQ>98} zlk=!~miI!o1;%sQm}D)uPBSeMN?M=R*fFE67zqR8y%_7gwC7#&AoTdwmn*bqcG|aT z;E1lw$Ow*Gsnax7?Ag6)M-d_(HAyH&L1pw&;=NunW1dc_FU7o3F+$TCg$GI|R)~2Z53~G{iTY&eCT`eQ!a_!5mA+ z&K!$@(xo*TQx{)Hsd63*>-saHMX&{y4qsCgEsh4cxSKwl{s{7@=%Qr9XWa}nD^hCH7Ib41Ft{!S>aZ8Y)2EM__Om{ z)Jy!&rpJ*}ykkY@H|=X!zBcp0(9mF6EEmJE{^sabn%!|E9^Tz8dH<6LawI2RgogHg z03)}G6w+LP0{1pm`mz>s)2S1xz+7dU`HDPJs26zzRaZA{I-`ViODIDuv2AWtYjR%m z$VhB>LphR_+IFQXc@NpK)zCY`AQkd*qj9F(z$HF=%dwL>(qSwT^Huaj)-I*#m8=B` z-Y*jpbC#87QG!Gt%JQnmNY{g43~ee>jE-qk#_-vpFQkY;mF8Uq79yzO5s{W6w+UFTR*tK5Tj-QxNga>GYx zmdaI}Oc0osm|=#t#ed^vj9>Y@edjuFyhkbCMxHHz2s!|BHrKMY&!Jr05f2MNa&wE^ zG3OAdwLT*!6UI8D%$Z zg3c~|Uo!Qc%F7zLx;aut^@mJX4v&LXE&dPl&Fm}cvFMw z3Zz(nk~BbiZB^3l=r6MW?z*~2e@wrinJNqTbwjtwGIP3Y>B)1j@K6_@!e@9=3cJ9~ zKm*PldIhQN@*3B$$?6GbhAiQWk-kSm9Ylblq_EDuN3*?W>Cd5PftG_4;grN`*Xbtl z9m;A0@L6nY^+@}cw{FVC&lCg-d@`sEB}%Pd)KGidQ>9BiBtI;h{17)0P*SGst;dYg z#7$m#|79wlawZ z^IqETSQ;GG2AWX1xAL0W#um#_FAIui+^x^D%QTeGgw7I85|&=TA0Qfti*Z3~5Ttj{ ziVmA%kb?)1EZL0p>n+W-C9Ufc{9)B3EWe?l`b-ZB` zt@d`EY8hF?*l4jX#32h_bxA3{dz=gkuA54#R4`dy-neF?zIysR@bVSY7R5BA7DPS& zQz#fHN(`F84AZ1nDhIn1%?27Ry%H2X&10Y&rkmInBu7O#G*3|@DcVZ8*sO1~V{$bT zc&?-7cdnyFPTwz_k2U}?{6uDE+eK-w?O^Zyt-2$J_^o8&SjCK1a~0p?rfBj2w>I-C z-9G(|O)~)zfc@@Fdd`(VlK&YA4$8SG-(jY=>%5cN0}JhyU%-THoB=&vFwr(+l@yJt z9NdlEPQId~gxgV5LiCHIK#O4Kz%RyhJ^wMQ7T(r}cIhRP>mLV`n9*gu+>X!o4?YadqmA6%kT#XCt3oqNiUsjKW z(ms}ry&FidO)O!{4@g>Vo?xX;*$QYp^;8zpI!C-SrDB|_USBH1Mq z2u-P$1&_s&t^Ay2Y}%o6)^RL@M)tU01|{l99iQ`7xCzI3qG~47$uzaOWH!8W0Xap*~6$Iw$^ z8n?2+34a<|P#aVi8X;(U~( zY=}LIKI}_W-QCat=*109S{ay_LK2@msI40UYE+JV{CJ-@a`UG)M*&VTn!1u)hQkD4 zx$ECM_;8z!H|b1{v$ek74)9hTQ;fs>F624jFAPnFKunahc#3N-`F~bj-(HyFafWBrXHsTtake5^7KXzr9X^2w;LD3--G*H7sKHN-uOwg zVJ@BOtUTQ@4dvz5&q}uPG!b}I+o|cn87&p+oEM}g&%7*@-y@$Z$dr4c3_T}XZYtdM z=OGhpWbAAhX#(H1NN>0tcn-*nyjiQT4;6K~4<@6?E=;ZY$Ufl(#x1s=mO*=Yz!Pt; ztQMTlLz&L-iMy^z0h(%U=}x1G4276G-aJEVI=LsL3l!<_c!5}&ZAT^On@Y=xxU$@X zeqR~TPiJLb2DgF=6M4GX%D+56-UCe$o48|v1G2|MW68}tdCftM+vNgoJuZ`Wrxqzl z!niUuAT4rqIHIS)7_%U1jf)XRzZPeA-P`yc7T5NVm1Jo_TYf>hpBuO-$CQ=%jd<|e4o>7=;*@w}n(O0eCY1kui zrkpXL`;bzhrnQrw`%7%jlU|p-0FIL=EWHkrne8JjoWglD#+}Nm73rT3J)7mE5 zj8s#~Q_6hl@$g&usC^Qy`Q)NTMO8!VBqVscB6u((*l3GbKYj=m$N7&rohz0C%zkU_H1IZyC@X+eY23_?Q7I zJ^K{`W~^UEv=p+NJ=$dVB@;t}x^ai%uTk|b|0&2xnLA71`~A(7Y~0@hfh{ISsXMWu zBhxt&C@a<}%3V4|(7F#U;eTeNpuT0$JdE|gAfs1u-Bohz84n_{p$kbd)Qm{p|uv3?MbKxP(?;X!PsTUr`^gnfylS-Pf zHfa7Y=)o(ffulWnmjbVL@@_nEV6WDM8h(w+eDV&@gSdCKtBl&3PhcvY^*gTt_Zvw! zYy$$rs#c%3m!bShrF;QUQHJya6pCt6jft4>jFaZa&TEvg$r+;BD$yBcqI&jmXd2}`iJQfeX zEvg^7SZin>iK}hOr^YVHGGmv)X#rRuaw{VR;8np=J;u}YjA{ne(KNF4{oj_lHM=fU z^?;0*4aj)3|C@~WkANd!4)m`sAz3*zU|kgXOBk7Kvirpbgx2BaWaMf4X0uv|@sygF zFv!z8|Iv=(I~QV%t9Xh!B8I#_gsQV~a*A!I>8O>@=L@w@y-T?c9YlLINI)mV4KszI z06*NHSrjmYH|CBGXC_t8+Beqdhc!V}$UQJt8R-gmQd0}&YNI;9)7>`BhJeP~mq*7F zO06%`;{tc17^6qI3>XKOH9{c~r#tNp{nGs%hOMGLFcVMmnO<`?>s@WuVO%{*nJKg6 zkj=!SN>Ws#9&@CdT1U6I_y9G1nH40w%_0S5DMmetQ<;n|Z7ZtVbY?Obra5=TvDNsB zqec2RK{+`N+g?hy@*h=ZUi2 zY$x%~G8P*NqVf%u`FK0R#l$O64rRt_gYi@ZCUPc+`A0FD6Zj+Y#4D(ocNk9Bx14Jw z>#b7AYZDF6GE|;!g$C$#D_^0uj4R=Ew?E`#2ia@n1npeYp=D-XHKB25^gpgW9Kki(n8{ifTAA3(#^!3A2OaCZ+ z=(s3WUKhS0zqCXguoDzk?X%8Qw82JO>_BOg9*)^5E8PYMNp)t=x`-(q+N*?=7C`HY zN)Iz}r`jDqfI`rRWmcw$$I#Pz? zkPp=uJ+Bo~pwQ1jC;kJj#2>&3p|NWM4JF{SH4i?Lu`frfIl7LD6YP?g`wZmYEGwsj zu2=8$8?-2HbdfOci9N6ps3#=tHruE}S7a=jIbIUn@4}vznKv}(RZ9Or3-%uRk*aFus?K%>R5}$tAkt-8L2;#Mux7lqVF#(% z^=q*QqTBy7ncr5M_|z<*n>5RrKqhzY{QKX;vj3TZi;~W)x&gd|GXWx36#t9lr)c~i zxO|+LW`AIP1koM+-e5IR5J^!A=K40rHm)Uv0LU< z*sfxJdHIB*OK}BxC6aP=SZA@ol423f0^hZZurp4NM_hGqgOG@Lq7k(zVTR=7^sLOu z^x$Db3Un2N<%nn!67iP!yMs?6^Gh7h_lEkYF1{}1qkv6-X^4`BLVEg!Vd-NjY(5N= zE>bnm9p%zQ4K>7ezL#-G(j6j`hPcBN2hNCX6Oa4uwz2Qm;2%%aE`Wv+@KT#oOcft7 z{xZy;`>Ht|(-wp__YHGrQIX;m()F7ARJBgkQkA!b_`dS;_0(4Nd-?ce+7iWdNs5W+ zh90X-a+f5`h@{!|dF;O@#bDB|PZ4fs$}%2?d)X~#nd;`q4!{@3F0$DZnw&AuI%oX^ zHg4*gSGuTfHhSeVfe@fIo>Y?LQ$m{S@-3N%&*dfhZpgCG~ zlifvaEtbj&kWp{|SZ8(yFcp0lDBDc3*>ihuCx`R07)8B9w@o6A+vaSIDYku%z`U4$ z-`svG$(;E3i@JZ{|3le3MOW6X?V_pJw(W{-+fFLBZQHhO+qP}nPAbO9+UwtE?Y%Be z`_9E^ZO+R+dhg@a1IcqU3O7per(ivDdr=@g^cDNA&Lh;b#-p@a$K)z?ndG$#R<)Z} zDt7DNZ7q?MkoreiioZUDM#2Mjn4QW_9=`OaEMYA|-@CMjY#j1s-XM7lf!#|i^%6_2 z)^VRO26T13(D{-$d2*%1H?0JQsfJ0jCKyk4=!)^0boY82GhnBq0wHUv&aI{4G_wX^ z)2Jd-X2nfnF5K**!{=YJ1+ol;qspc}yOQ1dyP&XB!PJeuquJ>~baj8PCo(p2A`f^| zXe(FW<;r+U=61In)XQV(v+KO5p%)KAty0@w9Q9eN2uFlaA?Rs=;E8)iiu=_Samyh7 z-~+;BZ_9dn^+jpv!|UW`O;9{(?m)ULcc~!y0|!@9q02J3piQ0%{>e1LJU4fSuBFj<2Yj9#$0 ztk}>Lw?WQ-r~F*M z?Z=``)`@)oSxTM$)0fQPgD^(8rk{@G~4PC?&ySp5)v8L9xRu0UpL@v5_1?2;GHM&8y4@&bZyJ2Eq?Ri+4yk*oNeUq9e$}gSL7n3aT~m5Gcj%I^6$t~#AMBl zrEg3zW?;MZ4%H38DXnz}?1}g8QD8`t{hCM5K4OQS0mAwV%w$4FzXrv2L1yREKXL3m z+#_*|wC94k3j%ZIhy6sX*%oLT4^Io|WD2ff1{A@R)Hf?5ns}-x0J!_A`6Sx!K#WZ~ zEFh1=FRD~0#@f)0uvS^BhJn#)k+5X}%$LEICC0gS$- z9IuUPLKRVu5sWT!kjCJN*eh;P6U8p>78mZIggH#&owO&o3{lDwUusO~6Ri;uFA2P) zuC#N`>|SRhjH&$y1@pC5)+Q2?C7iAyh%r7qe4Fm4^Z6XqG^IH2kl2q86||ZFy)X@a z5Lur^9}UUT7YKPy9Q#*B{c0phOSS@E)_KxMN$O!u2E(8pvp!ZYO{W|+Gm=^j)R1m& z-5y&7z$~+;3_|^tEQ7vM-|6u0%?q)g6;y+8`g8R5aK1{Evb`)sn~VwrWh4tkNmXT-^r>NRI{dhKQhIFc=a0#r z+Hk3^u*D#{;HdjDq`d)>W6vRkS{~yxZ)5AZ0Bx{S<%m3*iYO~hR>R@U+`cYEhXh-Z z2&3#!Q4fLvuN%<-?ZMt3ASR>*7`(XdUg)y-G*$Cd?#hQr z=1hZZJ#m71?`Gd~3u_N3tS-Wbo$ts(|Gk>8ccVR4dYvw_c-jF}^HmX`ji57F(A6>Y z4)uQAC3+~;W2!~N8HR9VX0gQI=B3P4&^5<+<&_o=--CU%f4!TiTWx+v@Vo>T`fr%C z{{*i^+f>kK@R5T2BXomIT?jHf@rh=&2}W0c{G{LYY8HDL8JN@RQ;Ga8!go<#AmN0a z5e02fKNR6n(ejIX#qtznd*S+npMA8r{*$C(eq9rOxS}?Aap+2v%o4))UT85;P=<14 zh*qq$d*t4fQD*2;d11E%(QWm>D(M~)Ps|&BQ7ig=Z4?H{yl5LAhX2a@e-Aiv#QJ2m ze@57cKSPfHZ(W3c4>%M}jg0;Wh?d?&K{`FCe)KE{XF8-&h330{J3cSIMQ1{yd|PYib8-jz5~ zK5|S?6Bfxn_0eEF#*EkaBbDR@YLnrVC2lK)J{v`Hnc{sJ+b)(m2?N zUGKwH=*L{ajEKJ0ZB=&Hvq5Be_aU%sbO?Sf19(P)W(?d&HH!MZDs|0x*~x1InJh`w z0b;AO>`(A!g&>?PR=${5iAk2RlsWWmCN&?6aA~wq);`3-qOSub^`<+6c&O;Kh8V^A zNn?bqF>T)9?&Q4NG~ptLgc4TEVq2{`*ZsaGH;p*Gw=%8mNhmzhD5J$AawJ)QNHg$> zO*PrI&cZ|aeUrb35FA7TVJ`^YES|^P-TM=)>973bmvUbx&+CL!w2gKvS@B;|qOF9tspD$6Qe!Tm)uvt<))Z2DHFT8ZKGh zhwfA0_`n&`Cc^8n#Iuj5fb^m5Yrc!s!*BZHRI3IQZp$E8Q*uAu{ve4o9&i-ju8PDY zfZYIF(JJ%{fKA^&n}E!9F1f2@t=F9a?=W0-FIcWRtJQyfZJz+p5e<5JVWDQhF##4i zrcH&AbZZRZ0ms5C;0K;?!3VVm9#FeaV3oyxky^$duaYB%$uv=XE4N;fr$5H{`0fP# z=@=Jy+Jf#+-6{}M#BMVe4N=11fK8FcRt^`4fBE&RpI;ivgDD7kg2Ip$ocmOHT}rvz zIRu$_l7%}cC40gvf$a4c0a`Z^_3Jfvk|x5U@?0@?PDLzDQZI>S^U2r$X|nXMEH_G#W#eC|CTd-(KYM1vJ8H$A zWxA5#eLQ@8PzTa-ESV()`S|%K#|DNa&b-@gM6HafMP-HlR4FC>gyGOe*29G1!Ycf( zW!;fojHR=@xU)!ENz zE`V}lJetZIK+A*uaQ=fXN{$VhT&cf^ihAWinOVLF%`8hzRlOJ0xeZX(_fBa@}-~L|T#S1au!I0U6w}g>L2m>P&cvHx#W}1%k?P zQej{Wg8Z)dGg+-dqee>k0ok67h176TXRHSpm1-M6bK(oagiQtUreFImk^adtfwWN$ zYK|1>2H(to0A>MQaopbzJfn@SR&`)qzrKf@G8bM`z#W_V?1hrVg)vh6k$q7mpHoty zhT8e)NxSyc&$6fejP$0AvY6lFKfI>Fd{?Mql%hy@tmT`15>jWzcYS)6u5ZaPemq{4 zC@nY(i+pPGu4{e5l&S#KFESSA6O>{9acL-_q!7e7_D7#Syou z4k*2W0UJ>yI>kR8C9n#yCZ_U62C{SHcF)Tb|KDuW9B|L@8EQ|OTaa$#RR7;{ObaRGsI8Xx zZTh&Xc2oUKr;i&(vbw|6IYXI27ua(=%*wlv>v!Hg{P; zHz3yg$w3={F19IS8GaoRagPRyF))13z}E+Ud=N(bKE*xYZ%Ch(d4TPi1vh|GFox%! zFp9h7?($bGMX6LkLG7rrFr71ckOy_nZd79rSt++1zzk6tGXrCotI+%#xKS+Yc# zZQv|-3rNT6nLPdQ(^{)+lP4HftJ=XavCq`jICq2>TErOx1}v1W>P>3gOhB(V2!Q6< z4SRnP{b#bIHzv4tyTs-wC$0)EO<*st#cG>W1B-s<9Ty9bmVgPj=nwwRd5i2w9lDP* zk>xcaUN3fw=cU&8wvNdKIxM*z`jGfGD6=D9+(X_~Sna^!!h=oLHru)DH#JBuS>*+q znah=F_cIGp`yzyM?pbAzuGEY6(fnfk;at0pn2Lc*%G30$0zDS~hD`h^(BoL^6s+d9 zVj$3YnhcTy^A+r7>=0)sNv~5YfvEb$k>jN0LV>g<8%bJuT2}rOHPxQ(H=!8RWGEzu zh%>>iNJDH%fskhajpl|BRy4#B*OZt)sv!?t*OC);3P(fwM=++3Qy&E*5nOS>grHir z5uXlW6bm-lNE_k>O_s>MkmK0WP{B1Vp>21jNPZ_{5OSx1(jjE+N77hAegLO%m^@P z$EkdhXRc{JZR(euHJ?3K_P+6l;{7kQ4U0<#E>r6rTNX3x%dg8nYQ}FHY8l)MCL7H+ z+1Ib0T`MW-$~B-i9e9mvSdl0Af4vaNmsqWHm2}$uxPT+n{S7JT zP=Jug--z{%8KR^N7WKVRW2u2Gf$1WT_$;8il29sv@v8Kh`$a8~+n}>*glnV!g6|BG zLR05*s7EA8aSzEjR}H*k*Oj!6(a47JMs_Oe|4N`si=03nPYWMm+VMbCY!KS6_~e6# z`XG{s`Vhnf|LjJ5yNTihs5?ZuWO9Q`&%6rY@$jxCGemm>A!y_c6Eep&%E`&&)9sFW z2<-=R?;n*Te#IVARLChgRK8cpDIk_U1M2!k=PA3i+AB)2Ymi8npfZ_H)NnSfx#MB9 zOYpcI&d^+o(#O&(oNQ=zEf=}Cvdfpeh8H3bJCGD!|I<~M@{YexYf|DO;bk*BTCBz> z2d;@%!Y61PH`90^yEArH?5!%|NGetjK8}ykn)#HIZ>$I%F@$PckEIzwRHiNY2qJx9&RM^F0<|rvRk>UW*A;e^~3A$A>h2#l~&A>mU zp~mND1m1>NLNqfIP~zrHkVGX7I>%*)&`IW8mU8@bPmqY#L2jO2>3jUh)hFGq+%4|} zy7ka6fZTpTY}ACqh~sJ!E=>%6M^eThct%AUT0@vB4MEJ72ES<=qAe;miVS-!@dzoud9FOfkm5tlAetyYQL8&sinbI=EW(PszfQ-%yu!$yE$qeQUN zsMrcr9v8NbQrv--483Qftgw-F54qi8(S-6k$S2#1H}BPBk3!kg(N5@f4%_2PQ*4zP zll`GjBn;8IBrSf#(S!4-8)I0#QH`Eg7~=`j)IP@9=|@bUTb=nOMb9dLMsb865=s%H zjIAOCGVVi`!>&V-J|RDq|5$Z`P8LS-m)Ed6y}>ao*r`fxmA)mc#zCS=!f9Oxgoh2s zF)#LKeBS(Pfg;L?!inu2&z-9vCr>U}rW}i_U_39NXZBpjv$K&Y0@+;Q=JXNIFqtsu zYXm)n-~Cz#`kNIoZ^wCHnFR<6f;hgMMie-Ru|88Ca!7TBp42>PFs?U4t#c_?k0jqX z6C94TwRb4i3lR`0Hs5T*tA}4O1tH`RF$IBV-f~`)_LdM-pr;h9Gam*P)|Mr0oK6K^ zEarmaP9eu|Q;K`urzvuVj-P?VTt!~=L(WU|@>o@AL3>%Spf;bn$G@^PU+Me)QYk$Q zgH-%ycfGh>F7y^J5(fP)2HW^CSkL;chV4RJz6g6%>mAc3N5R8BmA3Lx!%uVgOVdDp!VE1hxY`nxyNtffx$S@XBoRwh3wj-2b z#kCWZ9pdoa(~$YH`SXAH9yGuIm(%-wM2{ryPszUj4>_d&t7QLQwFtxiMxG}r1VwM~ z!FwS^$E2mv*VW`RFgB=pOfTO#*?85nlKm|im%^L%p`1)^V}>z1hUs>D{$TcHu1u2e zPb67Lo@668SndNpPT$qtjt?S4jZmZ1PusPGV%AC+2T$P(>0xyZ^e+n;b4;qW*N{{c z&lkCzz>>!v9ZyDFXJSzviZLoQJW|k-aF7%JlD0tuyM}c#eM0PfRf-FNqtzrigcW8M zH|4}JcWbU|qdAz+*QzUea6E)^QXb4(;>B`k787`Ys50^t3nPxJRGB}_a(1ET!=EA{ z(nmVq<=qt^$VAytY^*dRK_p~8WTF8e#MeW$@*WQBP@CS1edZ(0FeT`)LTdFcB!Kfl{CPKBIJ{Ndw+^9AmZO*9aI(0h2 z$0$PATOrL%Hf`gevPxE(`DZ7#n_%)2sbB0WB)m3}5F?Me3GvcN1aZ@?J1S8%HLGRi z5PT;EBFC;tqBZ*(m;K9_ToesVALPQ(U%sZ7h)L-z#TOO z*AMjskDy^S$0P7^AL;P=*Jv)3E}DKj+?JHb+VHQBr(bv^P*NZF0=xs-LeV<89(M$% z6!(%3GjgMTO;WZeWQzfK@*{CgUpn#~^q~Z^qGsq**!<|PRNi+)-pk(@-={wNCiHLg z_K{wFr%0)X+P}aC4L)By|7*HEY$Q@J^K;Z&2$_OEUH7aV9}qDd0fK+qdzvy{IGM@d>m1pYz^at zJD||M#J0I3utnn_Bw|545dEXvByJ7VcW!XpLAP+v$2Kw zkG1gRih+Wj{e@W}@mrY9d58UpwTcpw2K?QFWuYN(Of*`sVpO8WjpKo$#lAw59IUyB z+a&o9?fc}O$kA4t7+dyjBc+uqh9}EJ;9b?h#9~FKjpN1NS@nE4RKF~iWV&{Tt-J~$ z9144jey?Y99->X`H4gi-+(ky3uAd2yp3mL#X#oav$xlw-{C5*pi%b3S#FL^(dXNRwcrDSp@s_N>*wNp#IEIFKJ z8+1D&mPqVURREqB-A#ZExdzYI-xdeT2_c51W|YgQp{}KY@{){EOC@y-9#arzW?%6- zE1?dcBeUG441s@V{>7ZfT%YlE1M9O0bV;GuFC>*n{$wQQ{!}-PwU;B!9y$hg_S_Cb zni!_m6O(g?x|euZ?lRj@NtXwDF%uWnI$XTH)Q6=Tt;9G2C zTkXmqS2$%nvNf7G1H*-r5Hmd~!w(6Q+!R$Lo*m`Z2hMhm1r!p1I07cmSe8c&aYB@I zdo`&|uiu*_^f0?n*!}F6eQuh)+L>jK-!5oJxzwWYAhQl0wNJxqCb0THkkFI|y*eGG zaTlXEl@)5RDTnJu-{vjAH*HBca)LkAdQlNqGznU3A zq;}Ver5J(I(~V%~7P+9%QJZuE;S=!7U4{MN(f<&3VocF`7u8a!<-0Pz37IL!a!=@# zbxuSXLD%L`k}YBG0U5M8MJ9p>DPGhkiYBpKoFU*lS8(1~L_TTacoks|Mn^sRE)(uNO3DG6Gu@yo4z6u2010oAW+F z!@Ln0ehieuU86Ti(6G!k+U|(e9vRayuyN@xp z+;QIRnd3OPy?XX7d12wP4FPmHv(IVbLYMn%uN;GODYRO|T@+E9!9CqJ6=ZX6Bf9U+ z1;EHYd1z-6QemJuJOW0EX%O$7$H)Or3wm4{KR|hT0+3G;!JN)9O3-N>H-K&D|Cchb z7j~4~eWDi_1Y5arFO?^z0g#+15a1T?|L&hFvUL;X{xk$%e;$T^+!%B+vo!qQn8zTg zCS@Qw5c^V4 z2n?+nn|Pse&jY8av4SN+UW-Hl@b6t55s|iniA0}o&386$g$<9Qn_+sgi@d>{7)mod z0v*L<45{C8tOaLwd&|GYi366tQ@lAbCc9eBZ4i`s^Hpl)Ch-HPw`mh*@IyX01%A0I zM%4Ugy<0zx&@h%H^wOVo?*Bahgb<jRJX%*y94T|ep}{GnLA!ci0%HB}5JT{Rh( zVC){2tRzSCO2Tb(Jx!N6P4&5Ksxc^&PuDHSV&aZ*6L!I43M@r$4D~xV8!G8+9X5vg z`3H?n;DJM0Ee&&~yPZruY}n0~@S7NB@f12bA@FehU|juP58hUr_*f#Z|FZFdM<2-T z`B^UCkNV(00kr;`iS<9=E*T&d5Iy9tVHuB6SB}Z%jb5(JV+`K)Kbm|VkO2dmO*hXU z?$5xvfxZ4FeX6@6#L>@XnncCA-sW$ul7u53@yciIBZT9BH;$@fvz)8POIM0D)gL+9 zqE@LXY7dTx4-HY*$*TjoeX zwv%+DczzR;p-6o=Q)H;n#S4UH$X{2^7nakZkjurzmQ&5<0@bnV3iu@{>5arCh+K32 zXYc>j1dr>9{(s4_%|iZ(arLIc($2}LH0jPG|iyswohN!ptLl`yGeQ@ zwgR^B0wt537ssHU(;MV}anW4u(=M=LgWjL6s&~45?m&APWcJ1MDT9HFr|1lR0K3O@ zczpuc25L+ZMQmDHVFoA`2$iC>eRTOb&L9K&b13fJCx5+uG%mV{jyu9T+IQq1nrXR6 zjsJtgLD2Y)m$h~U{**^EP30bdx+n(KGk z=v+qd?ua2*r3ix@5itxCMhWoxR1i1B7^S{bv_-v&0$Id3#V-kQ`m_<>*+O^e!icbu zWI}D>#RV<1t=S%uDme8l7Q)5Xb>SK+gTs!ut~6OdSebYh>QLHtsH|sN3oJm?(qhd%dO_4lKKq< z7t4p(OLtGo1K>r$e{3NDtcz?2a6RXW=liz$#74}59HjTCIoPbc(cI>LU3DO3P80!! zmp?ZnE5-z$^U6Ot=}lmAuTz@VkM;%=OYBDstBWxOiK_xpFB0jb&!FFSu zQSjFHcU}9SIzH2)s{0PR(I!Zzvt}Pf&Z>!8Mi-9uy^yW2AAu3OVYm#%8kAPJpImn! zyp2DMA%9C5ou2{H)R0m(kbXF1P$|ZXo;GASQ`a6`?K!|E#J>b!%<;cI9*H56M#(>S zhVh3Y%=}N{!+-9~f5f)46ppO1B+4fi-X@UmZ>zu!OqlKB!$Uc}DY=mG>#nkzwLkPp+b5@AX}i=ppf6kv|C zMVpbIuvO>z9|Q(VL?>XDv&odDlFDgX&m8-U)9H$smDB#=A>MP}8KxypxCe^+Me$p!} zhSQOAar*P6H5WLWC+9w5gJ9wOQps{RCxdXT!3ozWbM!}K+i>H{fDL|*NQqvm7Fviq z!;;J~(txfZS8HlJ-B-lu@)Texf89|}h{C9?^J2}6j}nUHDfZ8h zur8OAi1oPV0=B2aj<8q1!Wo%9-(Jt_Lr&na_wG2*>-oa43k~ZeG|5P*VmLkA;z~!jwm@=9Ua3n zX-rQ=R=Q(XVtZ>;ckn+IOF4M?J;1c!1rdoQV=dKVvH9&$`0s(oR6!`<3+0ds$#q`) zN*{hZ-tf-}W(Os;QGo{)0VZ3%`c=$^VS zOn)Q4P*Wu79&$L%PeMIvJzOX*AF|kIsty%A+gfb#wG=9QzB1R}e4V*4?wTX^E9$?} zx&j~}*{Gj*ukgdfX8i}(R?pGKik4sB!O{N5X`KJ(&%f7I6c;f61Gn<+;rUXr#46FZ z+#s*AXZ5KvcV=;|D1;}2i*2iBRJgu`2S2Dd+ zsAKR5JRg=;4P5UVgbN%~q=cP5jKeyWjK)GuPE!m!2~@?dlK2d$GX|wZaxdBMZLI%^ zFSb;3pSelFGM4w`mTnwk{kcb}#O7Bnj0HF|m$Zpl{bI?%=jZkJ&0CwbB(##tLORIHSiSqf-9tyxl8Ssmw4C35l09)CL2eK}pVtG? zp`Q~R5RAoUKR8`5jBaBrAG(QuxHJ!clm>>p2mg_~)5Fk+(v8o+sx<~xnMS;knpr%> zpv1x?GKPcYwq~H4O8PhKf6nXXPck$8r|pjDXNMDhKFF)Z5&JA$KOkyfGTLfnoH61bU zyO(pDk5Sr1sz#;t8jB*Y9gd^*voj)E>^HeM3$_qiRg^i%j=JCa?0wTRV@alY->)(a z{l%(@;TpxR_HG*>=R&g6K*#k_SE62bB_VLKqYeu(R*euKDsaHsb9MQCFlJa+_b4%nJ?J-^ZJPC&R6w(r#BqxQ%aklXL;qEP~j-LS+4g*+j zcs(K;law5IdFtu~ET;Bmfh}NEspopbVx9dyuh+k?L+r7GlqZD%P7l8ifCwP~D6Y#^ z5{o;7VL0Ld>jn?md+US{IPa?b^9%P1PZhT)q^%UFhY9OFb}R)e{h;dK!@E zQ8NjP0XvBi{GHXt`|(=y{VS^ztsuKv;rx`QAY_|i{dD25a;%LZKQqS8FM|FJV|Ful zOfHfkxam2Rv|!z$GSZGzUy7lq&8(`!(0=VO9KL?REYJL-?sL)l_nURQ)8_A&ErBx> z*0iS2{1fo5ib?JR^%0xjhvC}&Zix@^G8Q~mCZGDGTj{r%n(JmwpPI#gI|;YEC{-Ir zrrN!8|xGFQiZz8KYg6vc;*Sr(9|DN@_N;D~{ZZR%P2j@+_{n zp-;G;jc6`5&MKxIdS-tMc}{`DP(gK$(jv2??JSPEmt!We%S&x^FWeYsTJ}vD1%np=GY@usd~;#ku_3sh%=)Y7{|GggctEPyJ?=5of+S0N=?Ty{rkuxe_9AidO8Mrw?(&(x z9X$P)sOVhCnEQQ=Iq&c9xuKw23qc2|TTKyq3T$=RMEsec)udjJ*(HmG$8;yo;+Hd+yMPSTmR2jfkPd-|be&;+UNEU^_01E%F+r#dj0j-3z+_e<^=`P&w)}pr z7DkJ`+fhRC@%$`Uq?LVoS*dwcjCxe|d(q~pD$|`M%#rhNjfmJKqiFG+pajrf+EGebFSZ}b$%5NQ1t+ZMAotO*nVQe|N6pn322A*Vg>MHh>LOqBd}ERFjqwO1{B3b7Xtqt*g#d zXp4~XK{Xk_UA3Js|^Ee<{HO zu0t&FQ)FENV;*;|4OxS?a`QiR`36l|G*d5cgq$u2`3ADqC5W(FEJZpgc(aR((`3S_Ph8}rIX@= zd6_Ii>!t{pEv%1%F!LDS#Izs+xBX1jF?3ruo+n>Ir{pq(T;7q)E}h=VpTqEEm`IKw&TSp@-i~mgzT4Z&E94FE)&Q6#t)sW%zg$}fL{}ns^1YQOR)Z`2FKQZH91u#NXOX$|W zNM3~htl9Jb#td;QlYf7=kY^e7ujJu-_jW3dKTh<)#L<@2`BsY~RpYdPJ6h|kx>kQ? z-RZ}ixS4l1(YW|eI?eGSqXV*e@`lJ*BoY)xxJOFpNj&zYh~+3nBBdzjf$lM&m`V83 z628U-L#E0fjTCN;RIiR~97$sBk=6yGXGc9-=SXiszeqA;4Q7W4NFw)o(&+n34W!Up zOpy8u>52yFs)QI1Qk^E*kFOm0)eXn|X|SlqDJ_QE6?%i~$C5`_IHR>T)*LQ5VJ+QD zvF$7ykVeXEiw7O7p*d*+B}vjCj>0W|NbRjon`@8Tce-PEL1e;iEZT|4+FqS^);f=R zKKEu5v(w#MQm%|Xhq(Xel} zKGWZwp0g9jVv)wmDCin-z2W}A!{e=tXWb*2)N$$f)Ymh87b;k<%;W^U==X(two{P&n6+_XpUc5vf4KyK z7j)l;!ZU|{+MUuz)JRi6?$_3Y@QZOF)%Oh=)GWeq>$78*{|&x4BVi^TZmX!iNxy*q z?ct);v~|>dZFR>Yl!pl|Hr4@EU6ZnJCmVvZ^uSbr6uZ}=e0u*~HQ=xAL==j|X>lIH zaqB3armIQ05W;AzM1n(AkfFyr=e*#(m8wDCBNyy+T4tKmZE)ajIG>i)h9se)X?{!V z+&UpeY?Q-U9NQ9g{%s~NjY#&}mrnL7=;Z=g(q)+ma>;P%DrMA60?*}8$Bx0Dp=nzT}?^4cbn}{lTr^kw}QMJNeBX1s}aI{ zLa!l^c&NJ`)P~rHC=nZUaLyY0P!}ZVb&G=E0MrObbc-Etb)w9g4kPO^ zqj;ghoLIrgH4^aeKsfPN8#pe7W207jB^F#%`DkGTGSigV_O^vEO*yl(W^0VqVQswG zXiMjLG9ahs7Ot})>4E0%I}TMJJI;`j4hiH8jC zgu+Ywr``9ngMbjh>_+?bAi`Qmw)bLO?r;ZHJEB;UUwG8nCKml_9bOVb$;Q?Ssjh>c z5bdGx#5_Y|R?A~v50LJWawI&1XU=NS#XS9JNxJ)2eym`~x-;LH@&qo+#Bz8&r1r5q zsqS#PQ+|vkHD1K`O+E;Rb_RDSsEQq(LS=QT&LPQo$hI}RmNcxr$nK~t!w93**eLCw zM+mxI`F$E$INIr-vey9awkr_VGLYbl)P0M`1K6_DYH%bHfqC*xm`T3a#ML{@Cl483 zdv_2%$umPk0ZVSHf)*44*@%XGhHex-BtNY8DhJs!Q(Ao^5L0Z|`cc9vT8;PG2Vph? zU3ZQ%Kc?X(T?DJ6CjuogMDgVUU013pbMRo8Y=DKsAPba}O7m#udb#rM8K#bI$nh0L z@&N)hcV$4;*eabI=ZSh}p4?}88%sT<{Ken#1Q?;VkKT5h);Ii4#qxEmk_mO-4o zZKpTuc20h;f9o%En@u}ohsblJ;56Rbp1!psQSuVT+nG4@ci5h6OMH$gbZwTma6Vp5 z?v&f=X{)U!@G+cO4+mMq_$MfhG8Uj26u6tMNVP?8G--C+GfKh9om)z`-h?qz0f!9x z;SpcF0_>+=P1dLMY(1PJD&OhbC*MrTUT#hfby1fXS`B(AI*u?`Ab(I$sCUY$ADQ_K z0xS8!4)&2>7fE6blCd0ZTxfPUv(c1GFmPA!bGR)mOV1Z$^sY3rGpCvQ@bzVg)YT41 zo$RLJbMN!hFU>ZnSFJ7(E$v99+l4Hj7eZO;45P(|z|Uc|(@eT1HQ_0d7nOiTPs?sV zF;*c%Ec^m=ry}qkbMf(Q<(TsQXo-*CS-`S3B%}eZj!=M|uEP7H{_rd9{?e2LI+&OxOYoJX$kKAEEG><^b*sp^ zYu##zVER)0%;T^R@>dGe5{i+EqUS=3CGRC>>~CmlO6+bkdp3Im-X=$0Bk{8??lIl& zj$*&B>FLXb8=2LJ!zvVM)ag?FW_pN*hDrJj@4AQn;B@X>-ZXuNB|Z)#%Cm?v|E$MO z*|OG>6y}9(JFv)4{x>(tjsoR@tz4CZ5z%`cesL8BfOz2>56%M|;4yE`H8{#?{{c?G zyjGd0{J;Ad%NJ?P$@Df*oUEq@3S6ZtB4;QAT<%UG@6vuob0= z6uE3hj^mS3>1jBWKa46yMreohttDg$bD?OD8KyqV5ov?At&T2 zKNtX$%aZdnj3qEAOaOxJ_@Xn{@sfU>LK6q@D;d+VL+b&~#v{|BAf*8-xTypxWn&0a z&O}otnUI5IjY)~GzS0t;75HTC_7YYgS0&1^w@WB7FR_k&vFdSBWumAU6pAeQBp82Z zI6i0SWtdZ>(bwx6p0J~*!6q>Th03=9gNuDP&H3(?M&=?Cl}(e|*PV@WKMo{Aqm~1LM8 zPcf9UEAa}sP)JRDavTZ?8k5UJm0G8zm!YLn*qJ8_{q<4Yh?XBIy^xz(#5wPn%kwK6 zGE>vXh%zkRQ_xH~+c{h>#wDV~{9=85>Y=EevW2D+*}GyC-JA>&Z-^vRC){DcCIcx(-<++lE@e_b1c&MQ zQnDpnjIyn<2&XA^%=)RdF41NX%JKNmSNxBK>}*7STlVS*HtPXJrc&060SZbV_F}eaecb_r5?+Bsvt## zYt&HZ3}UwthEIckL**fMg^=%3K7xfX!i8`mOg@xEZE>TJ9+m39TEUo0O5S<1earY*^nn{Zi1u(sy>qaA7-S2iZNpZ z7QLs}2jh7Z_8BMnKhfuzM?KWW5CkjYc**y0jxEkm#|@G2p*w2PFbY++X@N==YEknWkz z?gGwBj}OQemUGjJD_6Xt%WfJLflZQzd0H*Vd2_E^2+t{Wf7XJ3TAw+lrhFkj3tQ2H zrwAn_E(mT3?PFjqNshW`ZzB$~+^IF)j~J!B;`8i5eP-#mkhp34X*8KBkl+S{(X?);z*`zdtoB${U^3L^Ce)mRzMvjNh$3(DQ*O2q4SBh_} zyl31|g}v_vzx#=~w2ynHlVA^J#yHf*0u(^;g)oz`3MHKVc${+ zLI5>l3CeL5M-M;>IEV0neR|Qv=8Yo!zY-(Ss>kj`6kvyD@?O}Z?WyAqm@pw{H<}8% z`Q7u-CNT2lQeD$yuO%@w?zr|?6tIKcj&UOGgQ-T7PJ@mj;WO`C1ib`$IZZnyS#B0G z;Y^Q)$?@icVorz1#A!SvQ^cGyk-&`sDJ7h#fXRLZDW?2a!zWEZW#ik+Qgr^GdMPR1DSd+jS=47`PmhMtpmY+tCi0sqx?EoRf#QC$dRz+XG#fHL;K*dy zf#&sL#U%$|vCazIt&)Nuq)AXMixKx2`N$j*G6_tSRu|S3Ihj&95ZhjP%g_c za$?PQJc^w;iQs)HpT2_--*ar%ghMQWiZAdV6Xm=?Z$ga#)4+t%X)alSbr2^zMXb!E$aFtB0;aRULt z6`Q31)Zv5aETf44XnN_X=o%lGO;4&*Y_kDv=^%BXF#u2mm0;8vpL;dmEg}s7YgNON z_?q2tPVS-`8XrJ1wQ6GB<`vfseLsQ96=aqBnT!#asE;|yfpC%-pI*pD_I`ydIIwYt zU>J~f97RLu>Z^?MBurx6skLa1Qw5w6B! z+7HBkSE7Q>OlHdVe7_&m09=ne(^L;+gJ?!{bzUAA@zR2!)&>T2V%yL0H3XxscRFHs z?(PeB4o*zan7alY={T9WS#fID?7@)pII7d`8qD}P+p)iSBHh#2>zcDg62a<&g#{?- zO6FS<-_B+${qadfam#&I$2IqXuUJGCzijZ`0gsfaI?K>KGtH|Un-4y}7y;3YU)IY; zF_YCjNvlHEs|JmO_`r{7*wpdL=B?aO?u$$Fw)$vQg#qP2bFFP`I*F->8=K-z0M~3d zsnt;J##HBBRNtpf7b+2i{OA^rUwaA^kMfe(wXx}*tT5Kl@{ZoTu%bMDP?v?$tQ{$I z*NJm<+E&_1wWirl0HL(5*t~UfZyORZCg06j(~7;IUhb|B+-qpOB#{H}ofuP*8yr73 z=w;crB(8m?_MIlQS=}t$bI^2*eydF4uxXV~b+0UU^Q$72&qHnfYAv{n`qrGgxzK!G zei8CV%SlHDnXO&S54=ULmlUu%qii`mSX;&XL%02`D(ewPcyVODhRg06zt-WdRhY|d^`J+mtEMtl|FL{KkcmT@0Da^YTqFEL8j2eSg$6-ME9aMH=}96A@#W#8q%1 zgS5-aw_D+ERldgl5gbuZ;kI;yk~b!laR24p?hxkJ4JQjJE>=WR-L9Q1xmDoCBJ-`s za`yU4boO*WC7xN3OY(y+l%b%5>PZ%0wUz1NEmBh(Ndr4BS+Rx7%_)!kO!39L`&>OI z++SXDSCWdRi*~>@yU*w|1NMs%BiCMX8Z7&zLJM~u$Ap-z14X!($p)V1a@x*4$(`46 zn{N7Ekl$8eWZWcomB}UC1=pOv;oMbldhkxZI!?G~(eJa+I?3C|I+CurwQu7~7P1?3zpti0JSx<%AC%X65J^srebUt#vP)77-;E2J`d+WSYtF!|cyVG7whnUJ zwH+Gd1Zq4al>WB;b_JTt`2H^_1hciL$HLD%HSuQx^v`FiKNBEXTO(_6ga56Um6a5f zz9E7f^i4mO3&ZFjrKR{I+0Q;_-lXl+H1A!nY$NI?OH~DOwtZ-R73YOMm{q@ z{=$>66>1hIIt}eq^s@Qi`+3stzmQz^phRTdW|quC?9Dh6`_-H?8gq_E@0nHS@>XGu z`0RV)bZf+<*IbZ-0_}z1Vg+aEE{?NR1!YByuK5=8r_q26ZO){nCX_NZ*!{4672CL~ zu7%$LvynqtI(e_Q%&bC!Psez8wE&iGJ=qR<|F;<-1Lp^y6&5*G-EDTllIa% zZYvCXlfD&7bPwzeR~1Yu(Wn-8{Cb7_C4iHGh{|0C-ALFEfSwX`8#LX#!hUPZPsi(D zuGHfnhj3iJa8cb`zCIEr=g&O02m7tyxb$r%GT5lws6m}ymdrXGJV1`Di6ne&#q07h zkag;MFNYpb2E;yKKj5>3EzUW|L2%)ZL7fcQE|xE`i;%F0p^cZ!SHd7KH`~@@F@EsRk!g1p4O?~ z`mMQKc}Ty9JdH5ZaCs$O+7rE2y7RmmrQJxf1c~TGYF3kwc3ld`n^e}Ezxi<-5}rm8 zDyd*$Q}y=aF!6O2Q-gN8T8vlwa2;6DoUqvss2|n;>gA`OP$-5?DW1x?I-FhTttLVW{fbV4qTiT8~5S+iliZ%%6eof zjQ0KEwiWY%G`b^T&8W~U6f)sTm|YUFIT>GK2+MOy*eNPd^7p?Xj+xK%;jZ*8aj$CA zqbsTQP!gG+<(rg9bMq;o$|3VH_2lKx9%-eU{*Y+yhQi zAF4r4(IrDr9_LAVgwm^IiRz#gRM+@tg0AL2Olt+`CL?#f{|l4kGE9IC3>8tpekG5|XGzUxQvqJSkO(~8jc z1#S#}OooI`$!8E_dtj3YEwSOS#)|gmD3tB}bz;Yd<|sZiO3UwD0IDl)<45F66 zX1B(rxMVSy2E*n6o8F=jvWO7TloU;$aHF)*k4gsB(unq?y>_)!+#}kM09btx!mcYB z*blL#Xyz_SVZC?QIQPVb$3`;QW4u$NPwRf|b31iphsdiRF%*Paa*zvROiT(h%3dEt zU=Nezgq6lObYh3qELe4XwClo=iw>Cv_o?^40aP0SI`iF!)u}!IA?PK>VwdHs^QAJG8s=8$$!jUrI)R8s1-R zvwuii5tU%onW2z+j85)g7ErhaXfj?w_pKslD!LwedAl8v2zMj9U_fi#dQ7$Xf9r^7StbNf(ZsK<=j@p@IFICsYMndo#!X;u#@pO6qR2h#lf^vWqJqf*aD^&08=Iw5sAZA^nI#JfYM^O)s`1q?pX^OPLN0A6 z0%A=~9!%KW2OcwAMrw0o8|ixS6Wu=mV35SL2|cvCagza9phd4S8b?_;YpK@k>oa-E zRmYGcJsSIE^=@Ze?>%)DW%bbCD2r8feKB@D+tZRGgGw?j7q*`?kcHouPY{=9J&FaW z+p~E5pJ_ktjQq^vIMmVBaC!s_fY7;AQHXe*sP<7UeGN0(tsIg=l$ygKf#EHNyPVXj zKk^P_VLIbo@+vjdVZlG~$XUB?e-x05=nQh9E|HDt_(z5;>G-+R2Fj|D>KkJT8AY1- zPeNE$1Nc9Zh&jWV*8(_-Cz*4bMirS(Z9Dg+6dXKt$7y{+e}pmoYv}2MGV_cf=Mnv!e$Zyz@4j;XjzkU+m)B#P#%+S{WsuCDB9towL0 zX@0TnuuG8o$1}TK(a1SVr65XuV$d zE{qN6hgz-2<|-3w2~|q6G>6~s)pEJ%<<+Q={agov2lMY?-s6aUOu=E6LRokcBGk@# z=EqrQS$~v_G;pJbYU8R4P$!gD8;F_R*Z)Owg5sN5KzHXR2n$h|{=T!@XTiBGj((XJ z(J(pLAEj+)AS=I!A6;U3nKgarb{x)=pEkuG^6v(*7ul^+dtT(4xt}qM_8C8%nAV&+ zIRkT!4XuCo1f9g=`?JZ8`S*#sOr#TKGq&8M-@}T>$YrYiHR4G6jX?h z0*@jAPkrjt#ljxbSutIw;@Yk1R?!(ieLFm+YXG@^)n)o4Wx3FzECmK)f8fLCUV#4j z-B%HEfy{sE)6P$QV*B^s{r@H_HpT-v?<*q)b(;jq2B-Ei#`aIJ>PfdMAui^ZLJrHW ziKxgKU;Sw-?(?YYBO^U#wEaBs{wDf<8jkM%gJn6)IxMT0re`FafTmnNaF%ZH~Rb{exW){Hq$W}dJnKDQ#;g_Sg<}5T*ccbYevTUw2zJy#M?!*hL z)oc&csZNpZmus->4*^tPrWDp#r`M%Kc`R9Jcphj@Wn&?{O1V~4q!R9CC7I@{H)?Kg zIOMc{8Jed>2{H7|QIkY*UTBh(i#Dc|?gR?mINJn%glD=$AqZQ>T~7{EH}~9a(vW+- zQgnya0Iuw$s!Q0x?g7QvN(3s2=pw~;?9%%Aw*?ZHNB?x*-tM=|Rp8Mix!3?Yhi!O3OIj?@4_l&&lk&$0 z|5XvT6nVMas5}NiQK&2^EMLiy@ z%Yr^b#6;0PA#bj8`Kc1RN?-apLDs08*pj1?4!MuRkXSDqE zIet1{ef^4W7=ESKpoQM}A9F5(UA;av4~6vGurGalTR>nie+UH8V($FmS;hc{T0r2> zf3;2%$Wn-?mLwvC!SouyTmP!wb=cC8_KM{B1dzj7w?7?UNCt_MnyMGulN5VB6_8KX zB5M?n<7X{zpdccdOFR=~b)h4A1fc63et(E@xL?R+UeIY(%ne#1qGT6r`9`o)O957^ z9It-kS&P|5SyoyZE-5 z(kfe{+)k-^J@c8ADM*>gB&-0ngFyjl4HDt)|g- zR9C_r0FzNP^I8a7+Oq-9r6OHqju?{uuzM?UXaz*_9kcAhWAI8w~F*lQCP#WyS9 zf2c99V3Vq_sME6qwyd?f0A#EwkK`(jZkU(;$)D@9^+EO+O!4*Lof+d!&7;KmopR{EAR&K4JIa z;(V6^W^vK7KYL2rCx#65pnd2Mk!`6l%ZER8Uv#*ylAMetLblv;Xhv~;((aRzR^H#x zCibDF#0bsiv$R?umQ1J-RBd2$Z0uGM$>MC*c3v$*VVH=>V3-imVVJ5IuLqCzFw!8JfmP68 z(k?Uy3#S;ms$;L?eEhxb-h`L2nSk{P%Rwsg_JYmNE!FlE!E6(!==2l!CA+sPCt%$06$%D&0(SlSrc<#T(wKiwn&3SE6w>(-X zq#EA^3)*Q^&73k&`oKt8C+T5V@1$dXzAskpkErFiWWIk_09jP|1@?2Xq zxuKPGx;IJ4Hy1ABerra<~vZ2$L zZ7YC7Wq~%|7TB4HBGQ%HCxa!>&R@~DkJ?jAmD3BE3s&f@0Mip3qc*h0_H8~Ts+aqo>g=7uGmwU3Ntm*Ke01u=-Ytrc3Dsdb?h9 zeMe&#U$1On@Bjg&puAz_daB@B(uExElqI%ukBn?Y9Ak_ zykH60S&p=j)BN?VnYZrMF;V! zr$7+PtuhUjTth+V_OZj4-> zP~YSwW}v3TsSIr27zDO;0ER*qS%A>I5|6diK(62@b!+m>B_!0Sldt7*{d;a){P-5! zWcsE}J%)Bl%>tSYlR*bBQMc6|=rXhn&Py1| z*p1Qs&B#@eG3+zz(pc0!#j~Lr^^x!;x6#9W^aayz$VAA$S|q~jzRhbY37D( zy-;dxA3x;9IN-LOG{#E5bF>LR-dsf5X@9QP=tn*v7c=X+jU$twbH(p=@<*m;|~(qG?( zw?4Yzupp`FIk^dQ?JqPUh#hU1z~A`VnVymwKk)5v?mWLo{3c$JoOgU}RnORo`oBlA zx~R~gb%B*yDekNhv6xeOMboxo=b#}mp{263rMRK4NYvD{bd<`b;6&E-UiN`WT=*;K zy-jhS+8+dO_s)S&CUZTRE4Yl%BJqc);FuPEK`U@tm0ere*`2Q87g=4^_$0bZ?uw5j9~`5Wg5;JKivjuZ5&aC!U$*R zQDU{{oiN|fawj=8V_JE&YyuIXXh?CgUovh=n5ml1*0&P-YdaX(^p&HURGq%a;+iT| z-Dr(_smW`Wyt=p=^(pj}e15WKbg1`_1Q+MSJ{6dj(NNcEU4@AtU6xEJX0`oC3>D1h zjamkD?#uj080Ge-w@16F^rj8Vp^yn$8AX|{{eR?0n2>%%|T2mH+TaM8A4O4Ns+ zKeG7N3>tePo&$34(Z!Ecix-q-`VptGBlpE2D03ETMUQ%3tVw<+H*&j@)4v>54*G+NRK*zVhD3(=Js^EF4DEBi19Lunt@u}vN8$J?7;r_M4GAT zUL=ujglmw!(CTa=PoExZxIjc}C~_ zD#z;4Q|#(M{*pJSmv);mkmk25gYiN!(n#BnDY|ONko5EU+xx(7Bj{WMt{FkKH#QmH zJCJkxqidhRv;Kw#jL2ACl+oq!R|EM#FDecB<`aq)ecsCG&XH>mQS- zXYO41+LBpgtaX_xD{>>90xC>sm~BBZ*kYwJru&VLHOKNP59pHaS&g!G1UN@Y+`?#X z7`KnnyeYhVlIXq<+@JxFXNWO7?KmpRSIz9$mIv9uJ}5?c_(m~K)ph?!SvjR~CPB^}&ywwITi)Y1 zVilgfobhDfvH3@Rals#hK-Ad%_3I8UmF_%0xnL^4Rptg8U6IO=hmI_$0{!CfiLwD7h;)k3+{KYD;w%WyUiWxl6EF)8l2V zJ?ErKan__}^jAHC(9wrLL1}Z}lHBAA;Z?sQpmeI0xV6t#Wt|n}<9VrK{7;f;>mP0!RHkQTD2CF~s^x zDT3?6cW{%d&&IubR~ms%C)+zxSCa>U4v)}1gQxeDtv8>q4t<=C#J0_f_|^1*OZD#g z%krbsY5KDh%`;IKci7PHrwgg`dv(l5$%Qj1m3-3c}O2{u14NNBW%y83YbJk9j zz57iHG|>r%&2yDamwu%+UO*eyIs=Rt177!G-}wCV6^c6`i%`^$we{`4OC?dXH~Oz| z@T5lrj8(W{9vdUK!^gB-x(%%;sm8tu`hrJtrst z?G;@XB#tw3PTIpRo3U)#T?z`Wj~J{s!0uLGtY2-;p?k|FTb4Dkip{`gS{MjK;+wA& z{Wb3r_8mPLQGP;0X@JJrz1POc6!~Xqhb9pR0188cMTv6)zu7rs=N5=k1SIpQc>5X#h#p#0^Fuw1Cl^ zAAxIYkD+zT4B-%YGTwA*y32H>NVLY;h2kB%!^*V7=l*FT#^b{$qbWaWz0Ncx&ESs| zXKGVH^j9J!{6I-ECgf7Lf(ldJElalpkm^12@Ic9sgiZE{^Md73e^SktXt^r%Gn4aP zdz_p1EpTMCjZ-OH=1-LDvb;kQ(pZB!=z$@8x{}-h5~6xoJ7bd(9Z9&>DfpBUcuY=-oYF1+RRNza+JV1&X-!)y{ru+*HmlaXO+Bs6DEBRo15|H ziZRM>m!@%rCdzx9o*tt&(TsmE9cOTat4Lfxw)~ROz;Nf*?vdGp1tb=5T^cJ6BNW`^o_&dpCMEa7Q|Z|my1kuzG4 z8_^@MbC8kX0&Rw3?ZPn1Lj6=aXa_}tikyos#RV=(Y)496&>=DTVNvaF;`J%Z50#_i zb2|7JT3yzlJ(6<#Hf<0+b#c3L?56^={7{wdJ-#1FY9SG*J-Vt(^nWPM7weMDLiDv- zqU0!^+?jJ$Ko3Gks5!Z4gVA3IhECb=yNiVUoThcQh_o;)gid$$$7&tVM_W~g{; z0?~cV;Y+Mny%H)p2bq}xGKo~1MzC`W=aopg@FjW|^Zn#t48KFDdeMh4V3@6=pg*G0 zfY6aNCa4{Ji3i&wOv}}7S=5^b+VuS)8qh6EHQ+AG(hI4`q_t|<)>u?O1+bPVvEuCI zal9zmro;SsKDPUCPT4oR@!3V5tN)6s_WeSxiAQZ8Sd#+qKs6Seg4e%1#C>lW@h)P8 zO>zuK$>5rVzAcTPhrV5pB;qbV{0hn7Z<4o73eY88by_7M1x6O*Qqun4joG~MFbaF#4QdbfF)~$+> zM|P2M`%Zki=!C;FE%IeMs^kxH2<3s9>^Gy{rz9YY*geV9)nQ1z`&+fFmsP7bEzLX~ z38F$|GE2gRYeti?7-+ax04{ZUU(dN6!;meGX$1&Qtlfh>3@gZL;!+YJ7Hd>PqtQR39{qjo$IH9qTx0PO|x{wUq;BBmM3Oi5XZ)XRe~V>}vt_qa?SqUB_U zMN=zAzn?S*c#vX}l&*|VC^#}>bv94daUvX);2G9pkaVm)d0|A0iA^QT0R{&37M88K z;qF%)bup%YFQ^(e^Sph6S0)UJaSxiY>IveO3TX8R!!Iei&j}w;`8P|g-td{#lD5=9yDT(~_4Ea|jff)F- z4+~8KNCEa^4e+{xbgE}5QxXH$m%PRUcOKlqpQfvsvsS7t1r(UW+tT_kN~N8=%abT= z_LQZEB#F|ZWGLh4?gi|RXxi`V*BuBfowJCp1tc!i35ggHmhTV8=VJr#i_j-2j+?Pu zED>o;4i|ky8$)fhijl)2u96X>mXdUuLY5=I+0@st4TgpgAG1o^RYXc$^$(PPE>8)q zcbA<%{tTJ3Irg3I(g&0b98eU7$XWIpb%vA$?5MW)JQuYDpVn?I5nJo zxj<&~cNP1-L`%V+TI_J&5P=g@TcNz{T00>a7;uy=D71;_6_W(If8;Sf=k14!Gad~0 zh@kuBwub-!=R9xkvAO&!q`IcqFojNWq)b(skr6bRs^K$5zRsEi1XP(5)2F%7%t2+& zNaX9IH(hulnm#`J_(&JwoTIi@nt}H8P~dYD;eJK&>HD!14|%lY@7+GCdg0`HFY@lG zL`LBV?GK=)TJRP|B7LuuA-UJ^HC=Faa;;MtOymz9`HT+*X6H7TItUnjVwH1KE#j1g zl|blvAUi2tBo6jb4*Sqk(^(rGGP?YAp(8ZNZMbfNNNl zeLZ9-1L^85AjIWfX@A=MLn*Qw&HOk42Rt2}9R7Rz>u}g9{-muGS^24)Hz+iWKPYsA z^+_*8>ii|{4u|-CMMlW_bq?OgfGkf$!)V@;kLR#@PNx4MVntKemO4}#rVl0P$-BX* zja0%bD2Y?9VauUC%U@g~&(8i`gJBF)<_2b%fb*y&8Uz#O_Ah62(40ZU$`o<`ExHZs z*B}hE@1NkGl2ChKXD3=Azx?Gd%@8BQ=80II%equEbqlp!p3C+p=9T3`J2He|Xxbb# z3NY!%rU?>9oI(XR5q#O$2(2nhQ%t=s-yet)MlheH6NN`!^#wsCq1=D zSqpKrV56>`&L^g&f0L&f=A$&`S`ulgpq=7V@Nz_J8SV`+YuL7Ux56OlWJ<2JOVonB z2uTLDs#p)!&D`mEX=VSTZuf!6VM=M)Q4S^wqJ&4B%%bU4UZeNMqn}9s{JL8+jEbn@ zy8})yP7AC6%_ej!Q7K<}j#He@AMUvkupMhMDa4A#OA zn$*Y<49qJKY^BQ;41|-Dj{xa~9BoH$t9dKGc#SqE*{`||*yQk5j+QnySe-@>jc=@7 zn@$Tw(Wa86xJ`Z_x5ST(LoLvQvFbRzOQxP z8qwf6dsVZ!dARrC!3yU&eFvYVgg)(4lRA!Iy)J=}Zawjn$ZEN0E#GpSBHdF#@UI02ULiS$5d2rNS zbK9rjL3=T;L^X%sU{XmH>^hRvW{dwhr4qen;O1zFVMBIp;9u+l>s>Pa<0;Ol3fM#f zib(1M2k@bPsNdZ&A?Q^fH3xGwAE<}w6Il+3X5Y6Y`@re8+&s)Cw6jAEKcbKiGDOu(n+aATf z2R*L!%fxYBFPo=6l54C3c5bFXfqXsA*#7}m*lYxJ zJiSbgz(gJkDR{`R5hJ+YY9u34w|~dc{FX1i4J^H00(5odS|WC)sIY4?TjY#p;VR$4 z?5C4#OMLhVseybfz`Q7?B9}7ypRPYv>A|mT=o5%xk9niUrX{nKv6o5X;3Ul5d z3u2Zik_0D%THAbO3Cd2G2jpxYLivd_Q=cGF%_LE}N(QzJU{IQpGmc51YqI238u;~f z1ERTLVOBTc5Hm%1)r!z22}uw+k(N5NO7&Ckf!mNgl^S-IfHu|dKUR|+#UX~1tBAbt z3#8(o2sYF-mCzXNYb!}3c@QQpyXn}YwM)uTzixBBOKPGc4Hz_B zKwO@1vCHUR7)Sy}To(z^o0_@i?oo$0e~$VZt>^KAlM2QtaXFb1k;p%aJ;fbHaLN*e z&W9elyR9MFg)J;2H}ufSBc3zL1RC@aL|hfZi_g8#?Ng!GRd zATV(g!VVfdlqmWzXg{YQ`e3kW``-d+(R=``6G!->aKOz4fWs{t#u-rFxj|6eQ$NBv zG#TzAD0XyNeRPl!f(OT)gq$JGOE|PA0x6&O`{5=(;TT?=)CZlviKMDvR1Nqegwhz7 zqJUVAt^m|H*%5Q$Lny`W-4BgTD!hweNSs?b`F1Sh{84dq2< zB(h=FAN16)DKB{OIi~2^@@2sob<-e?Ll|6s#~0G7c}qbH3k<|Ql*f6;`vOb4z3Dp` zUy|8{dP#zAj61|l!w(y_vD6zgmm<`Cq&w7Q8^s&g3?F31(a1p&C;zGu3^B^85y!BQ ztn==DPZ+ZsQ-RYD`3y?1f!0+evqrkNn^Z&6~Z zf1VnHCxX2Oe-5)uKjP8z_1+K@)zKmPxNHWMfXU=R2k_JYa46K|^2GjK(k zEpV~IZfUv?#zWD>$mE~@%_d)hJUY1kQW7E zJ087m&z_uW)^8AO*O5PhzaR^S*$zDZd0md4+_*)5c<~rN(n#L_!D0Vj*5yC^76tSS zO#ky@J2MW*{`?=TKmxWTx`~O5l+9s9<03twR;PrqI*}xBiBsw|l_TiHCq>#oHh|=7 zHlEMVYnbj|Y}P{|3@AiHo*6*MP)Yif^>Zr~KZJS6B?G|}h85ZsMo}=VB(qD>-19=M zdjbZem!^34)ru|TJexJ5;i2DFC91Qr>9Qg@Vny0CG8Q-RzKJ-gZ3sL8B|s7P}4&! zyaz+0cCjhvMG8JQ2{)TmjVO3`oif#;`>4~^NUwL=gX=0`}oOu z5)A$=yWA9+qR-lL+DF^bQ(5tiIsoIWigXntk#>B0kyz~hU+xB-*WipK(3 z*NjO8{XJE73qtcfGEblj$a>?Hra?!L%|7Hoo`KQ_jt9oW?L(ZmN^vm#HQ+;d_th-e zEojjbLmWZ-#}a?y7kd4_s=RddRC!i^b|@z7uU}IC&%4yd(#D?8+EBsF-AKSx&)Vca zw`_;bDmWTiMV=$10IPYVU4Pru_+iwo&0974|>|+l^KbOfc3LW@29C(o&O9x=+>vSv^o3C zS0|{wB~i{1r>MgL>M3o~WjYE}Mu7uNij1o4S%bXbN?6QA@-5}PvpewW8?ERFejwO* z+xvF0P@kl{MJY7keJ|DE4|4Oa1NrfFOr!@CZa~+5I^ZjIOhyJI%w=k+-N6=v8oK8rH(XBd@HXahm+a_ zold7#v#6+Ht+`ShL$zXBsRt31I0zky7AsJ@k-dgts67tjxTeFEPJs^b`;Gc4#C1wk z`V>wlrNB=61jaJVk=BC`RUzLk#mP@FxW zYcJbQ^ZuRr%WJ5M&VX(VHKCVvGgdaYy#wKCwnO1*wSzGMJN1c>j1VT310$4Gqtz8O)~D)zkU?I08g6pc zffR)eSva_`+wuu_c&~E-yptd{KHdL>OI$J zgy!wIkD-^{&n2N~0In5~FO?wNcaMycECokr0-=#9YLZ5g8eLgRp0$%iuU$6e7c)-5 z$Fg6hbe%&oe<@`@N^&ktL|uUB%*mBnmP&dVCm&;}FlTt1sLQi+QRgNox+V6!9J#ck zDMnH_QxKaC(+mZB*lrwBX8j6#pTfXWU6eY0c(>$`;Aa7rKUxEK(+VM;EOq*QndovV@&L3oZE6>N#KQl1WQ5iJ84hczfQUW;TGjW zIYXw19>^0xLm-Hr*3F9&&S7}acDQGS7C0zU8r%z&#E^~GXd?`zc>8w$fTQ>LcM7_u zE(5hj$ci}7I^=<&BpQS&s4zkcZ(*wM`W#AaOZ1T(juhTkP<8|Cm6%4z)(+dXd~;wN zviSDzDcG@0!Hc}G&AMmkT*?PIaf8s*+Yt1mI>_`x-jK)ew7*DU6^2O6V5%&3h`vW( zz)!|SzH`!J(hc%k<=*7VZEP-u$!_K+AdRix>KKXD8YOYtEMH{8RS)YW$jUMCO7-+3 zZml_iYl+%v3UXR$K*oxXW>bl&hF<=bxx4e?-SNbBNA6O=)2`A6+at~LP?&^!uu7Ok zq4AOjhze{{6KKlzS&^E$ASi4@L~1IJtwUT@_W>CEZKD#_vA>H$SMUxNC5Kg<2hf+` zNwMpq9$$DJwl&4i(w${EeZm>1CmaE;Xwn$xyHnw7l(x}O z{?J(i)H9@mu1-aDQN@V;QCvP)C-oexB11p*1`d?Z0mJ~rs*}&k#PwL_`IkwDZnjMA zr-yj{p!UN5Up?f%H;)44AJ14;#Lnu2fpcnx`zb;asKiz%2G+xvyjj4{W!&!k%m+bGa=jQHT4f`knpO3hZDY%elt1+Q4bQLB9?x;+3L3Riz zy61X*16mslw%Y-LdI(sqx_fxor@OVG(wws%@$M;eD#cI}s3}ah%t25!>=UUwqzing zr0BMw!l`6L{9>k93H(eVe3C5m|Ca$C@@BzWC24V*=x2%Z1B+OXXC7uWv#q555 zxE=H-;&hnr4)__m4r`;!AOKSx@05;@ZEb2gx1>pUSrfjN47XcNT_HGXDjjb$``uOg3BkQ2YFvuG*=g2r2~C~uThm*#r}iIjn*KI*U@t%5@MSps1MU!k`GDK=`xaUqpX`V z_2Ou-;!N6*@wA2ar@~H#te7bB!sU0+YYzU+U2@|sZanRYLyP^ECCdbJ2%!=Oqk@!! zw1tMv3Uv5-Co$U7xE<_jr0e;Yx@P}m*D*Dv@j*>xC??|9&y$$q_JnewQsTFINqQSM zq2_&#z`idZkT-2F#A%_$Itw;x)8z6+Ue^9k`!$KL>IQ5SqUJxWf4`-PJDRKDRWMFU7dCvW~0`MLniQ%Y*#VU6z{Y05Rbl*3BDjA&V790)M{Q3_myJN)lr-Y zAtZFfP>{Rhyq+K=gHc%qt;sf)_Nv$-N|V&;B$X(71Iv_w@!%^|y~OXg6w-PFX$r&F z??fcl!=8y6VUpvlpw`iO1TR?eio#?l(ISXK0Avr=B&Q)W2QN~uY;>j zc}kP2Za;w1*m~&E$a-vQ?ojyJW(sCOWTs+2?pPo~pl%_(kLs}0O3M3^pnfcFm30|Z zitSrh;%6ebYCpXNxZYN0D zB}2Ky`fLa8f^~vaHu^yGQ)?*MO&Bq2t@mpW*?9jK-zN&KbA0Zf3r?aR&`0e5wRj7; z+S)kiSv&ss`i&SS^qc=TtRPNXHk&;G;MLWYe4wrAFLu3igX-x=FhsU+#7024GvR*I zFw)AuP2W)`a}XyWkQp#S0kOfu`hALqDX*#FKoSN-aSa1$kt=l$4bKiYJ+rK6JWFMM zlX8@x%Gr^0$JFibY-$FZk3*YUIynMckjyuz?~m&-8PT!Vdv29VT2K-JSAZPPCodp$LxBd zFoJW#I8AaMxn#4Tu^{YkF-*m$DRoI>*}ntvNQolpB}>+o=#;Fa%G7e{trf^=P85he zU4ZKw>3-vYiU5LxJ=2uTNoUth4^Jt^rp|-N7y9&)y7-6_5hZKE-gO@vI6L%T6W9by zat4cw$Vb-5nYCEy{(c|hBHKjJp3#G^nXyA|S3Bi*-H?;+8-{x3-kn_(W`Grex;!p5 zr%?67fpte2YthphIU53^Z`Jr!bAzEw`QfJn2Jr3w1j_S~p1kdV<(h$?=I?f35l|#o z-(&Y!BoI)kZ%MDH3N;B3jn+ytEbaxrA)c`Q?yorsUAfl)n@fhrZL7T{8-5wrI8p=F zNOHvSQm_v2EM7ZOm9Jwr$(yif!9=zU+HW-8y^MeK__1 z>gI7iX4bFg7~P}0v0uJ*8gwGA^X)OdXZ2;@t28apuNAL8O@5m2lay+(t3+m&3gXI{cZK#oXu_n%nZ~C@fAP`MSjgyOI0X>fnwu;G zDl=94Od)7;WC0mMI>`aT)XdGAby9{62FmzYESLa}N_E@BZYnhVCmE+_885YXn8w1@ zW(AxT+mgF#d(}sArnt1M;xC2-*s^8SrqC>tze#d>{U+sGok^4Ti;|sdrCnH@rJrwc z$2&4{m}0OzLPkFY4X_tZQhpA@vcDwn-rEkEYr+o72sT|nT;vH}FUYlX`+K*d^_a%8 zYQ2HlIX3^C{+N^_<$X6NV{u^4imZR2XYpWONtIGC}P)0JU&alA9rWjKR6IM(XGJr zM?m$LCq=ZpLghKJ92ue^f6=5g_$tyCG3@Cr4q~A@GlaPRf>vv&CwXhOqN`w2v+hfa zaJFLBpX*Huv<`@;Hxw#^ypYsLS=7*yZ7mrvC)Yq8Y$z2iOB|LTaB5{i&28CebAg{> z5VO0=FE$i5i@xMSaS198z~Dc=4@@4B7Oof&yorArlDaG$ZJ~y+r4gr5Ih7YL(5xsB zD%#6h*V;-XC@sVwaC!-nhIfIuq8-dA#YvK&dg}_1ETXgotmKKv9=0>pvNBP}olY7h zp2)!RTiKvR+-8`qM(jU*C~@J zr015W2j5_gQ;&W))(Ae!t)q3=47AWrLDdrwk~$Xw?4GgPbuhq51ct8mmyl~I@`b{B zx7~5IN)J>aHeg4IwJNS%1ePLZ^vB}L_A6PT<7=x%YO)xK46PegZyWX%I3T12wKl4= zBD!e6T$z&Dh^!I4-ewD$)Q%wLz9fU(p3$@2p24;}p6@p+rut2v2YRbQxX(S=dU8XE zusPXo?82G)RAc%$tF3D0i)yv)(<266&-~oU{W-}!5lY-3Q@MFye_t9Nk;pthL;xCnEo01zu9q5UICRO`vZs$aj+HuP8?qW}XN#kmjiPk3 zO)moeh?tui*i_)^Qh4B$akyc0pH6U4%AeV^0F0jj)&(W zHj(!BxKkq(VDV8Z(0QYF^BwZsB^kcK=&5wh6hm;+2pTc45GT)HV|AeU_Y8?*=qv^W zOEy7IW*pV zVgsmU#Ru56Oc|hl>!(aJA>XCM#i}BXtz*{Yg?jm)ek;02ll+%FOV3(%4X?cR6-tqz ztV6RTTdYdk5!w6AH-2r^L2=aLdp7F9Y zkFanec~y%s4=k$$_4yicZT_{4zpRv>a@NGEl~xgzTT0c)e73q@Ou+CY-huX$mqhPz z$CzP_V~fyD1hpT~|BhkAk20j9-xyZ;ef;;oX;k_D)C2zCW`Yc*pn!GO?@H*~tTRTY zW=|=7ndnrE#>WiRUy8=;8Sqp-d|##b>>1c}SJzl>zF%)^x{b2+%XYSlS*1A|1!c2(h5I(6$)6qJ1Ji;&@F#EwN<=Ht zV4}Ar5HcVhvQnJ{FgXKo_RK;XJE~L)TF(+DoDs%ud^5+6AU0FQzTJ2n9mds8hA5^T z7dkBm>@5tr_l0FK>-DYWGw$3FR@J7VHikl8MHO|09tOodej)EbYA3Vr?Bcqk79;XX zZrwe%7bn0C=F;?}K>P(|Rvf@y!wf#12xVDW7t2hr16z>!DO8yYIiy}tXPyEw>n1X?K9r8-60ohLlZG&fO;Lp5Q{~k+y8g?hV*X4oT(0$8R5qzUlS1%u zeB|+Yfud<8j_W%=9`Y!r4GNd1w-~O7dqQuqAN!D-T5qNwDG5@SSCkt?9VXVi>#(bx z$5f*zED#mGT*Yo}DpEcgv!dwtDyL_Kb$3q4NX(NqnN{k3ZUsxFPGZ@sA6_1Pyp`cn~u0Y`FUSgRqyS&@BDkC>hT#B=EkR zWKBj$2?d71o{UQ7u`7ExtL~jdG6LFke?uU6FP1vQa~(7tNQ}7e+zNSDcRoF^JRxn5 zotQiO%S893o^#p^f7(<9&AtT8KV(u2<(Z8{XnYpT@Sbbz8iugb3c7!=>sbpNHnWL3HqygyN%z3%6JTA3@@P<9v3K zX&O`TPD+rzbk})ERUAYE{rF68Wm>AWCcFAB-ngj9Yd3F}vyAhQ{?J-`za6ffI@Ari z^`&FL5oiQ*28udm!AG;0C!UV9_y2LToxg1j(D?JqK*~sqDjaBFwSlNu@JJSDH3>PXpqv98$<_1@O=~ z8Kc9z*n3yimH0lZbp(>|M3S)CWK_&NsXQxMi%`n(Y^4d|epq?$j1p|jm(lmDY1@z8 z-W;w)qe`m!+{q-BHL&xPI?K^6Yw&0si@`W%T%Vis9kMAm`rTBy#X)$Uq6Upyt?Cg! zd%DPQ*c_?n!nUjTPYK&0HHpP%x|K@=KP}^j_%v5x+b;r5IuKHXw0E?BhbX(mA54kg z2_|_E{}+;_l)jU(+kdILnTh|>f3W?!nMPHVO%7QnD1uritR;YjyOvLdl=o-z&q0Se z5_i5jXQ#=^BV`Oa@Vt3BzFw{Z$@qT%a!Q&lnyHGpm%KH38%+~d&BkA{^>kq-7yHee^~-4JJr9MN$HMd0Z7?%-N8NEKHo#ca zd)#RYG3Kd&^m4d(x$REzT%cDNtmB${j(bgmbUE zDHsC})9A<*alZ?d!}dc}Gva2B0&PL+QH^LWy-G^L&MITwZXad)@ zDhQ7=lV$lA=gDAdd(-%GY)EUZZgFRr(wpL z7JNwUtQsK#9J{WtV7-6i;`Ht`Tffb`JYOI? zO&L0aq^VQmmcOE&+otFmIp3fiQZhM;r*iN#F*U~}m2=L+?s8|kdGepWYwJ-_BoV3w z>t$-l;Y&);a0V>!{RYaFNxvlY`KeIx(@BAk45LjA8l8pYJN=xz#y=`7kfxS&A1|)W zE%|=RFVuS?ZF&c6LDXCh_xx+0Q`^W`(K5qObC}+&Tlf%ypB&6>C4R$+qYK` zO4;qh+_Fi+9)GTm)iDOtl|D@qxq_4W{e}IztiA`rT||8Xy*yP9IsV*)lJvZE&`oAJ z9-&MYmN|}4R&pZE1i9SIfGYLZd^xIfmPs5bNt2vf(=)E557FJYrLc|YG*E%r2j0Iw zc^vc>@1*Z1pY#3XdH?BV^*@4~mA-@g=utW;TOaI)-ORwjM)5NknV6!A+32D<6mi_| zP5a@Od0{IOFtBSrt~bG7Kc3d;eyCTRw1fkK3!*WJ)AG6#qL~>vaPiAO9XM{yW~R&X zAt7T19f82X=NdkO$3VhdXeas2kflJm|8pg zfO9vS0nT;QlrWiO`>-SR=42n+hu$@mnTK^12tuq{NP?_rytX+b8+I+s<9&^2gTD+~ zFw!-?!y6fI>*FFALs2qsZXn8Nw1oF+lKk0^N;VoKME%RO@ACE!-^?#n$8+`n?4WrQ zG9}Dkp^1vq{^<|GBGGqq2dPqASv9i1b6i+27T$SgbsmZ_n3gL|qu-}PiO-!3OY5Cp zHeS`d%b`;VjD%P?)(pW+mLrE*AD{_-gl^vIabBOMH~MyNfPH7C>0u*dlEO;qr|oRg zuGnkxH|M8GVtyLM(FGk@q%hD&u*2Sgq1Bk_K_bK47$U0wd>ZeQqJ3?WlkBm3l0H{X z&ig7OOLCjV@?A(=_lmGoW335L4yJ0SH-SDgk_g^s7pIE3lTNv1+u~s|n=E4L-{17d zqQ29MWfgGvYZgFDf9g!KgH|3g03GZ>buFNKvHBc4=XQ`2ncGXc6laXeZ*6#~22yrE zDy;a2N?1IlAB#ZMTW6odz>F3&YfhITNUp!1-hRGLR-4!bz~SltSAW{Awgs|?+og8m zblJKL5HzMzs$hCCc~sf-Rb7FLbROA<@0aE2%QgJ1Iii!?MKZy9vUmD7T?Db<8JNCf zD5LIIZ~2(*-k(&X-ENg_=a}W|#p@+=2*rk-n*FjGHs{3e zukDg=6w{fFgpI&&FXF{QfFV=^-0D{z;Qi=(YlBR(%tFo0P3viIqP0mY=`mHX2elX8 zDR$mNN?}9UX56{P+Ga@xXJ+y|58aM!Cnwi1N)RF}DuG{evor7xzx1OuHy7M7wZ*X*kJxq082ERi_p20(d)E_TxYf{pw=1} zDvL)=9Ea&{jO#El6$ABUP~P+vyY>EztZ>4)D`#h8kJB}04%c}l+s1NQF<=wvo*_X< zz%m>-_|V_a$&g3NKzxPXrIg`TC>%XG`QRc9q=M1=FkSH z?vM^X11>j^X2vX8W2-VmZ5g_Zixf9AIIiIEX@8CEVF<##7_{B`{0;YI4v%Bd!k7bu zDe(?7h)lQ_3yUYQBORu;a+evA+*QJNVhdv{1K}$mph)UBS<2Nv)zI4bs|xP2ad3Z( z5bP3~#&PJSWtA{kldLg!N$5d}8*HZ-eK_YqsuoA|pat#rDJK-lIXNeLht>Lz6!Qm6 zhRv+uJ~V2I8O$A7ft^h)ZmWO|+5{1%s?UBb#+Eqn)Gw)tA+&?|ovR8f6EjYniy^`> zij`$lur_X(x-n^kTxE2tKuz?qVdxfGW7X{)iaYa~Q6{giY(tZ6N#&_*RhD_LYM;-J zv^|Eb7zY^rlsz;X$MxO~q)59+gGfVcWbF79%3kJS7!!=F^X9sx`ly=;Ar@yF zv2ZJEl9auaVF5@q_N1DLTA5m=ADAv#Bt*j894OKQ6;_@i*BOP#FT>&Y@4|J^C=} z8&BE&@rC>)DN8OWtxPJnV`DR#08yAH?OEPJ8Gvgf8O&8#S;U^Iqz4LcGP@$~1rM2r z43^ug)8)|=`K`AygUkhoYB--;x~2+;FURC)p7q7pt@xqroKvDP3!0z&bAY?ifDYF?I0|2d#X?FCTXXMeUfD@C8u%G<04ut2WiSn z*6lkj>60zSarfEgC_k@>(4Nvg@jwX5x zCZ6-(w1)h5(W2l#MU#Jz3~%^W{`W*sI_V08%D=e{7xXcG6D2fjTh1ii{n2n0OuDOI z_YvWE)4r5uC|uTJC*}q*$2*yCRqt=vydPkC5Mg1e^qc-@Qpd)#Jqf9}#Sep#Vd@j9 z$GsgoXi{EL!oZTGReI|Kj4Jna76!0qq+Pwitjo+b3vg=#tW}sTCfgjnp#TMJaDacJ zpRz6zt3ils-||7%2(rJ$vrabhYZrutH$(e-j;-O8pDTqDO9CXLy8-kQM&*78vOOJuxJY=x8_IVj{ z()a5x=j7%Q{eT1LgL&ia)mubl9g2$caL+ut2gf%n)MEJHhzJ0hEEr~_Fpk z4xHgM1r^mIlphJa`jyJg?ey^o8`@li*b&S8J>N| z$Bh}S8D_c*nyJibq;1wno6bgAkSo2x4s3_{4o!zN`iHF4;?8E{HKxvQxhA<@Yv`>V zPiP=zXgCYNQ#69kJ+n?$C17_298Ods*#Bo!4e*ix&TLOr5a+kr4?ztmK?*Ncar2AA zaaSlu&Gl-R!+mLxJEhpFc0z?NyxqGTbJKrcyN|yZI*xZRt)1VxleT?T<2{~4ppEMK zvL@+#72`$X=8WfdOdQtb@mA>CQl^eh&Wk4ND3$z+hIO)mm^{1Y7p;2ifRTqUSnVQ@b6LJ%w3zgC&bNpyOE=kx0V})?&HCB z$w^GK9D8pYvK(<&O5lFQoNKjK}dMeP1%1MQm`x__&$`xMFi^Q%0 zS!3<~WWYu8-6zibUur{~k%n`%B%qK^Vv|3z>N7aGYwZbt>_$&&w{^+C0tq>XbW07m z^V#qG$Hf%KYg1U;_Xrm9y>;>bQ_z%mFtj!L?@QYPB~X_&iEqdx7A>Bb*rxxMu=dyu z-3h5sg)x)cYaW}mzZ=d|hbzJua>fHd4DSDs}DOXS(MDi290^W$XDirHFD_W z%XrV9nepWZlj6LTOjyPccpRIFL`17JPKoutg5+qe*5u+ky z%ca!$V@`hJ)2rVnre4Kv?7a_2zu9qqOiC2zt+$c@QJ7Jp$B$^FQDt#Zlf)+rJc%lC z;*y(dXCq0uF#){H@G;*b+T1*?i$QPhkiNB~?8DV-r2=Z4gtUuYEFI%9@CY5VW!0l? z?}`HQIYyv~kOls>8jO8}`16mz!WOYgZUEHk^=r{ z!7*vKNo~xJyZwH`==2~2)9HcaV-C@N?_+@B_D=ZaGGxsvzU!56qDq?n`0JsL>>gtppIp7&1a0Mxnwdu>?<$Y4s;k z=&R6wt5Beeo<-8ygZnfN3r5uI*NvRy&`5G7dL-Y%6M;o{AIJDH2&N9JC=}!YKl{q( zf`3m2$T=f2wWh2Bt}2OI7PY6POE|#UAzr9cBd^`9j@8Xkija3ypbtzlS3@eDONfr2 z5j#Di+jKE>UATnNssinR0iNN?KO73B6i@)|KgzDFsXX|as37`&yhlabSgkc#C&yYF zv9AbNIcnM$WkL5}exiaT;Mf98Lsj$;YIR+DBqkIhD(WyhSr(&V)yM)a1KpmY?h~Ly zh_-9=G9L^Vo`fK&vc@@eshV9o7uQv1`?X&h9~&^cX!@{0j9E@M25jM!=h{|E1H*BlPz5A42yJ zBZNe&?`aD9`x@sT?`HpbhF|b4aj&zYbV9i=Igd@aMQ3KjA8gpwO-yuPs_)&1B;lyT zeW>36zsgz@xsyg_dGzGHJ@b5?Fc!Vswb%Q3~Z)=!vIqt18yaXvh70j{D|ZCC`H6~~HwneYW510`7JAT)TN&|c3?#8lOz4+nJYcLw@+NfaOv8fEqZ)xNX2!;nISVR)Ny@&A zoj)6|L!@lCbUP*}hILEiv~-49B%0!0tLc&H`vHD4BAWnen3-=_{-w#0!A({xdNMi65jPT9;kO9Agtyz$34?@{Jx39Dt{kJy8>8`S$ zp8D>3FX>)BTRYD_gB*Vcbe3zoxL&o%mvik;gKTx9A-`iIbbJjY53Vwpf-NXB6oJXd z!hy-x3L>zHBTLc0F>^{`E>L!B+l^YasvaGbdQkV*-NO*cic-=ruAvv{N@PA|>oQp( zX^FJSOQeuKZ0+6&3=BZ(fcZnX0B$rds#V(>^YU1uFPPK4&xz1jv=xRx>{ znEy@=8=nh}M_|50a?y^omW+~USE1W4Bv`7f*Blh>*|48AF=QwjlwoX?q1%s#E9;le zX1K>9QY}_QNT=58D~^RDYO)qCOtgQdnOd)vrqDt2IZCd@J}&hoMbF}P3+1pXj|))M zserm5uD-$k`*K)Q7TRz0J?D&p|6d47|Dz`+GvOd0UkyP-b`T$C?~?Z7lDmp~wTqUy zHQprY4>f^hOdVa#<>l8?q6!_rUiyoFtV>Z?`}6(jXv_a68qMO2^|WDZZhHw`Cz|)Y zCbj{77mNlBgB87je8HMQ0z-s7sli>rsC@)-1~Z$nod&&y3`!|I!fO>65B{k3#CttW~EX_&OCBioky{0Tj~ri0SaknPlOD_ilKFcz@=4V0iaQ}lTX`L zDM^X#iuz@>ZpUK5`CXXoe)nlUB_gS_js68>Lr&S-S@hHD&WE*jasgX)5Q1YQEP>vx zqH;lkW21^Kw*4IRfc=V_#EQq|A?Yq@F8^+f+flv*2iaONZQ&`PASR?EKuH6Avr$bZ z=;m5wN;vv$h^07bqJKNGMz}M7U8Fz;yfA_?O&N6mZ&9bwX%9F`ppJON6}HI z@UT3rNz_@cgp8nXI@|)P)q{~c6=_0zNjAAJO%h7`+Kc4d-F@afOwO9VOdVP61!=`v zGqYXsmwj?gYdh~RNf8X~n$}KP&6CZzqR+ZtH5p#%-Bn8&n)^b}cG_R(NA&fYRFff- zBnthx@?o8u_HOTa(Uj zWeP55MAkkF^cE*Z?@Msk2XE93LR>1(r{KSFE}k#QXylKh8-Mnk_1-vnMbRP4^JZ>( z=^1&&zzbR@{t5Oi<&frA7)L%x5mUdVp(>!=J6AVBl45<=$1-ArNbP@z6JraoO~fjF z3D)iV_bPpPsOEK_{tCz3e9fn-rtmRZu&Z*c2dm?3Q>eI7|2V*@!$I+jPsuQ#DQ>(# zdQ06US4HaUEgHh<>rFrabDm&eOmQNuQ1{*t!@AhNRIrUImFBqgD)W6E!%w?XnxVe0{+X=~>tuUA%Z~N^x+~uL;T1hUFphpE zfHm|$udg>daY)gb%KANhAb+IH^>>8X*68WY3@D;A)dGyUD^k=3)52_Pt3X*{tX%pS zYJf zorriPuvGw4vMRP7VWC*FjgID?J{GbROnPNt;O8aaJjgseD+7!EYDM!5)PkiVkO#A^ z%(MvVPpATGN=l}E_2Z2D3np@VMw0VR8FbX5RoB&_LZ=^_-(B4!3G@z7;gF&{cz*1S zoU#YSG8tltM@iz4g8;nG?)C6sHlZ4z-1T4>Zc!eizVX5X9DCK})GSj@%2C?jwqFp| zT`(+sUtJ_}a(;$Xt2kt7hO(RzEzPPz8Nk-tm^-LlQ#Oh>LTcHDjidg5^bY}YJfu}j z^$#n^mw{SbCZb^WV3tqz7)}MP5If`0E5r>&VUlLD+PN5lbAYP%or-Y3`a3Uabn0iR z5E!lBcKv**)9mN3o`W+Qv)}db>ys7pxVoIdj=&u9(6)xleP?d{ed%ry^!Ipb6;Yjr zJIWm1a0pB6e7yX-@&J@H5)iEGk|3fZfzL+F=Qi+;3tBc1i$vwkJAh?V1Jz zf<~wWu}wD87LS1JvG7t6q)WXFMwN#$@r~*x|9~v;V{5anymO<_;Xq#3xq|so`*9R+ zbYxFL)|I^-Z=~u$SQpOGeZTXnY~@nWo8+~b?A5e9rpx2D#i6>n-LvA>h#E_z9d-ci z5}$y}HDz7HIz(Hz2D-15B^))}ASv}iihY(ZHTha1p7GE@IX+Bl_<^^;l$7s=;D z!`Ht~Pxn<5xE$HoM2=Qm$xzJ>ef4iXi*ec1s_ zT$s&p!vkD@YE8NL{uYK4a{ zuk>Fu3Lzi$$%(rMe}&FLhqeS;?x_)b(#4Px=n4*XDhrCBr3L_>rImKeS;wZ2#Md4b@+Y0L^jY{{_1nUhe z?A1^0;!nmbss@Kdm#U>wypl3Jy=ZqrE*#gFykD`rOWceDt?U6q zMfkM_->Ow|GZ34-RzWJ)lLHdM6q*2 z^pn-f(MW``Ns%fA58qbllEwGgA3L5{9rN=SQ~bN*=TrC3^ZsfyQfjGHvwkJexsIvj zltC@fH!8NCEpTfDIAyz(s~9D_geSue?CNbm)UchyFNk6{c56cv(`V`HqYhX+<*s-% zG^_O>3apXs?@MdG|g^KK^$3lPV#q4NA)DI8u4UMAHlbd!`Cz>?xyws4SOp zwTn%yWjYuSAEaRc<<8zAo84n{sj@h`exZ_mCETg;bH5bRrQfo|U7>Jc)caS5#!MZM z7!bY-X4;?Z8A5=nUxKKo$&l6U$PotOZlr!aYt{8~pmYhN2Wn3Q$Qe~Z&V3QacNRUa zKP@EK)64Vq;ebl3cYC&guAyZZF-A~r70kLx>pL}bvvfzsP0u#fb^t`-ke(8pgj&tI z&|l{TV(Cunw5kQ!mM>{#(GuKbhKQ8$m^*G1_v!c|pix0?luse{V!IG#aMI3CkNa9UwjTn6sgQW}~NRj*XWKC~{oYmzQPCtJxW%LR*A zI!@2%Z#Ja&_w!=!x0kM$-pB5mXtVx0J}~=b@0Zs!WmRC`Jy0)I=>+CM+h4!STZmI6 zbIKLIFA-zrT88fRJ#J1s7XTJeX?jq7S%VtE`l-#b2Wlqsq)6X!$Kjb>>2WAVZsP>X zj*BBV@n9o-^Q%Bq7>WDB0FycHT8lW_$7Ejjv$t2jTQKV^6)%G8V7WQbBvN2)Dh9kr zbpcdwIF=CdW(!wPZ`#P?xMQml4}AA6QJW#bzQxK?pAhl-Mh^3@85ZQ2>xQ+Bu>$Hh zvOH>c;lvcuFcruM8!E)6l*Nq)njVj$Mlm?l4|M92TRbu5F z%Obb47q8Bi0YQ8&u)aOB{=Z*K!YXU>g7QB$YH!RraZ1}oPrp4+Ej%}4OFeYkE`fKd z9XUIsM#}k1PdrD{BAjv(;G_s7(LqrGz*_x$KRtMIwO#-ogThn`purTOZr!uTVJ;JI z5W7W(ac+<$PC$q#IWe^O2Y6`sdrl!a;6F>gh{;dzvTl6}&AYXokoF%UWb4RAfMk)iqq-J|itfjKH8^Ey>bzXrcy_KAD1{$;&i$0JM>NR87~9=u^mgfd;9^n52F2K4AQ;U>N~G31ZQdnm8$DB`{0^avUom0WV4CL=qjk zrN$5r0q>FrBsrO(hC$@z`)bJ(0o_bSXz0c;LH2xtqq+3GMn7Jo`B7R<5TTNCtmY6C zcu8Nv!l`Hzx2*UVN0&jfxiN~82gRwC*h~H9qEG)j6$;5M-rPhk%n=`W zzQj09{csv1C(vCz8pA?OFE$j0H~2RGmRypYx*lnNn}8Bi?tvE^t7*bNm%A|#Jqu_x zOk#_8l18FMn!>fvtkYMBTmv<9h$7L$f}F3Et_G^4;#&xj1O`F*0R#c@<6p)1;Cs@& zO5d|_#kVWvpU=ks!g$92KB9bzytA!es1&QZ~0N_z3DYC#<4;ZanRev@S%|8qq3w*PqB+|z6Ve@1vb%k^?13!^`>wtE*`i0Rm_hsRo>Xd)4rno$N-Pe+g7`*7hW&+SUbqidMG3tU>c%4@MSHaS0z& zhl`-zb4@|dF_VG;J~r^R3YDQ4r911mq&%VthYDK*uj}RRu%tt=gVwooW4I*FQNR-` zk+tIdDgSaK>SR;00Es|M#e{DB5SAA!|0JH{4@wx!CsDFbx*txRhhVcvBG8xM-Fo)+ zw>!)?>D?ukyfrolbVJA(?MZ*(y>Jj{vH!rgoiF%Iab+C1u+irAi!Nq`$^G!954W?n zz37UJV59)&dWO$Ej5+%es6Ye)m(Xj|{&p|l9O9P+e8;y~4V(KIV~H(Tqvh5b0*q?O zqA`AVsm^=Z14PXlV22NM!UqHS-Q5Ew5=0`3KEMoH1(slji`D$QX5TNM0kHu%l_iNl zxW#pO9V^glQLCWo1r-2a+*gu~k%ssl&`X-PO^ETXMKueSL~Ml2#coDM3YS}klY6l* z3k+~1IEf-ri%+X0)N+AGQH_r-|B4C;JAq}^HA#xcC}N>7SF();554HN-&RP6OwVsD zI924c#Zs@_d=DUih>}M&0^DSBKd7d>ib-OO`oS~|ChGp4GG-^c6#cYr%;tqTzs?8W zb@#bS)z|t1<2?8y-lXteSKBEzWf)Od{@D`cTbE*rPqin8?*zRX(xg`$PcWiT7aMuu zrTk)rN7hwuG_-}&?};h7}fOTGWn^d1d6 znw5&9z~Ytr#LfL#03?MaWbAJ|LO&LX?VhE(UrJs><#=A!=lD>VWr29OpiXc2DX?`M zd&NKV+by;F@RpW}Y&lTa#caYY)?1QXfP=?A=dpk0(t&`Lm=!j!xn>L?{wIx*hA*u+ z7>LOvVxCu6;@auGzAa4ZBd}DeUlNs<`7^ugB&JmA&Vg$I#Z+T4KCE<|doImfQx+b} z#fW1qPOH0WT~UMl1y`QOpc(0$yuN%fOJ&Ka-DVj!!Ul7oQXn#aS@tigAuo$9f5`++ zM3PV&jd~LytJPSUd6+QwqLgH1zS4E`A`%u*dQ-TuE{f=~z1riaQI{1`XBPFNhc`-_ zPNe79y6Ty~M~uuw^B%dGD1%w*t5?T0x!^I?ayUoA$zw z@Pe8cnON#3>9>9Vl|L-;c7H+v2Q~-`Jb4Zqs*z{W^X`#QBR4$b=UI~O=MhEK4eTtC+q;WW z=L@4fEFfxxrBwjOH*)<4GfOOi`ZhrAw9CrfZ=EYJIr(UgoA*KrNn zAbYEJGQA;*nOESr96Ekl&AH9UlrGu@8EuKH*icHQ6Z@>}$OIBu2jvpf)l!Wl;gaL? z^AB@c*-=}jVU&B>(w6Q_yNfbH(BGb>ovfGU_zfcf@Wr|c7qS70@B z1%?_plU%T24p3FDMUQaQ^@2PRsW(ZvEwpixb;z&;25go;YzJY3uJ$a0M5)9T76bxj zC<2ySWf$o-h~t7*7u9oL(7&B-x5P}n_03tD6*%S85rcUL#f)@ZbhIbs61Yvp&26I4V@Rq$;>+mWGyU}h8H5#QNOFWV6L1h3en9y4 zbbMl;!9FVXT~|={KClaMRzeIw4DjsDWOM(h}zta9;&|1`dM^pm}Z5?`Uc6? zgD{e7Ari@-A9im&;yPv(dxu-ZF`l37wzu?bN?Hwhxu*tC_Gl?k4ao~aO%vA#28V11 z01*wsTM~d}9xRhfb#CkNLpfXV8x`ppeik1yLl6^J8F`vfXTOW{ zo+6S~7m5AjXYq+_6r*=tCoY#!`0NeB8E$%1kl4aH+tJP*i38M3({fKj0A$?w66z)B z&fDjIh^>}hsa}5HVCeJ>hX2@+r|e+$U&C95(!swRd7q^FnySVoHvJPB*i6(3{FYPh z-elv^)FCgGt3}>^U5fmxb`A|sqHK4tK6g*u-Cv;FKQ6)8kOS;k2f*1>fpiR(35cxn|JNoHD@Do%T=R>}cGOuwP>!gMrImTaS35Z*lOI?KBQpa;_8nW$- zdzxHYp7ZjTBu12G#fq2!s*{%RDmiOC(on-QXOl*18l;|W&Q_J0Dz{U2v~GyN->$AE zM~XhVO!~%=OAkvaE$huknhg3Zk===vCDZ1&@VIQ)Q%~o!NUb!>C236iTxR3!I#jP- z+pDGXGtvp;Sx*Z%N{dxfuMZc)K;7jp?SG7BwXt084K&G{N))cXeZJHA*Wp_HKKWaF z)96`iW8A<-5n%%d^e*8RLFcHX&QrXn-{hDvs>DeIz)QNeT&O`MV{Ds6rF)jANDkGL zTtOwk*7!wAP!Y+YTS#dl`0U{R=a7h@xM79@kw-&*HS8fXaz5~Ixn&`lyTUanMBxDX z(MsC&?HNLJX$=`j*RWhy2Ffcy7L=!N_-6qhRxBS3T8b!A4$&V2|LdDQuV~6_oP#k7 z_iKlNAZbVGXD`?jJC+*v9V8?@c|HQ@9MJD?N><`$1Z9t~zhn!w9Vq0^h3VNdgn9qe z!K-BS=q=iKMyX+O15Hn7Jqfqo+j3J=rE- zU(qxU-4Zp?u53@T&7v2j;SHPDtQvL(cV)N37~0V&)hutvLWK(CwG+Zfq%O7b9>RMP zD@_IE%jX3oE1lWrXqJY_U-9neSjh-n9AWa6EB93DNm?8sXHl&)pJ4h+Lhyc*pD!fX z7m$5-&JoZZXA7T&eL7K};EN2g8PXWT+UeOg+ADspH7Y6>xBAw`@-?-@h}9y;aIxe18eVw3uR>s z?a#@TsqSYBCQz+ky7iAACaxuaSLwP{@NQ*36;{3~aikz4p&}t+mqgf|mV&v6>x%wD zOzg&r`JFch>^i7FV+c5kL0%7VK}E%+A?RCUTLWc41&z=o3y)LjM)2AaG(=o$SqUyC zx!?cpYBIvuKTYxP311*R#1cRZ?*3DeP++4XIg2Nj7o)NlCnf$!B;*`z!{B0keo|9C zp6f2filD*OzgPin@@D}8rkBOzPo?_T!*0=PsOU-ZsDF(`w%rc0kU0h};=XxrJ z5EzX5GHeIKZri_I%dLh`XUZG63Na*=-g2&MktrPuz)|LMQ?_VD4K z{PI6QL`_(7;6Kdx@i^i#6L0o2=46-0tujnH5vM1lh0^8pNpAs^j%NbY>MNB|QD(K3 zHOL0K`Mtet;mD@;I~MDa?KkvUT^*6lHw<}DwV!FBaNoDwS1}-U9HHc3dB@mRb;#@A z`63$|UuFhtxe#eNKRuQu+kGAeXQYrAs2|MSJ%40o>Yj51Nd{hE{orvcZ_N9)f zkp9{!nPQ$kW)Av0lX3CAXOus(eypBFU-$-X%n{5}#L#B84SIxg96P@Xy)psAa0u$Z z!AN4*ixfr%;V|eJ1c;kbo=2LaGUm@!$T)KREuR22WjIeFF;&Mhs;^q67A zx?Oc@>f5X&?5Ny|zP4$yeGKr1%jmCxFDH)9*xLpuhMBJTuq|B)z$IgDC%#t)V%ZE{ zGCpO9%jw}}h?>jxGSN{UCI2eFbXXVL{r)xCxM#Fwl}h{5FNN#raQ0-fQ)${apX9l} z8A~F(feCT+95C#yQw%q-GEUW;N|mz|kR?@BjILyL=XUN=dyc%K#cqq-8i${}*eHe2eX`y~R(LQBFE&?sJNOi#6U`lL1oK#Do0ew1wl5qo zuH-f}fN4`6wTJ}|QSyT%0he7;MToX>v3u8(BbBENsR0F%`%XzI}op)F}?6nB8m%8tU%4VHCPZkXxvdKQ$*Pzl~MNOL&?j zX4aDGiae}^*UZ&b8t3WACE82My$0Bo^TfHl#rfAn`e=x`i?dtB<%Cgghcxf9&$;1OIH`yX(8TP%fu^vn{|SXLuA=%D{Z%=+s&hEw$V@tZ zH1$G~<(YS>wp)4>jXq>{rNA?mv{73fFiEnK2@}hu+fCEKcPqfp{~j~Rp75e+2CV7f zVT0v}Yo)$HVPXW2_w(X)Coe2%K0Wb)6o;`^Na|>=W3G=8j_Z52YmV!qb0F1+*9R|Y zp5S+Od(mjRA|Koq`GIe-gJHoy7}rl31xk*UUUKi^v)=?Amj4K}c& zbvN^~1;-L;0fl>VONUDUl~@fXTjvtFprt{M zZumF^q}1$n=CN)t09(Hai*#r>?yb52&f3-M?up8pq}rKwuvrh!;98q~duH8nTuem^ zp}N&NSvDvRqY@GMfvQ!rV=%uqW>aaF%VD{@k8|dF3bQE!B(KjG$>W)t8j9$~pnJCe z9b6zNi4X_m3-%i3At8s?HL(HXW`!^XRnT7b>DP=8jRmMy7zz_;6UedAO22flKr7x7 z$S-5rU9@kokHzEsgn(USFEt^UMG!bGV8s4GsNW$qkksLn;1XE8F9ks-Ooc`->FkbX zjIp5_M$z4~&hP@cVtEQXimS(N!Haq%PCb3vIjA=nGjoXD^f$yWN`0m`?V*UtLS6)W z9|02dm$-KZzkj)FMT_DF89{Z{%gL#_ZL9|0fHVklpujHO;En?tq5>`VL=3lc5lV~r28cOo>?e&X)R`=r26mqBytkfWk%IK(H^kKm~|BMzC(s>jf8s=AIlfm-xxBKEr)nkif8B zj2p$5^uC?lDugeM-D|D}g>xM?ciA%x4LA@L8VBt^6!;%KeS*8$AUh%x!=6y^ewaI` zH*kEkH~t?&yAdydP(tVrEJ5TOX21Pi!u4%IVmL&-Ua&9h@BLjv@UJ-fZ(iTPe@2_| zrl|k4(?r(aG9gF-lhLa@fKS>upA<`fU0*;<%n>X7XaBnfKz{U^5^4j(aH*Q)UHi}` z{UpepC0>0^tiAjMY^C>;x2aB?ludgH)LI7$SGRLrZI76Jut%u0Nu;kMHI)p}8_=>; zD9q(uq0D!;x*S>o!|%@T=*sJx>9-;CI*ODbHwVl?NBq5*V5bIkf^aC9>FHtkk9!>K zTxiWyXI_rnW|UaVxf=bbLZXlke z*M#&^f`mCQ&%nyZWcjUGb=Hy^YRlsKEHZ-=B+hWgi_gTEi9YNA{#D;Xm$IJqAA_{$ z2;9*WOHH}qFIZ=~J8vnCxRly+=q%7m*W<%Gy~7(YUSF?9MVe)oyjK$EuU$&nlBF6A zZp;X{Q5sq(%XV5q1m@S{)@B3QOj2pIs-c<3hS;P)_+MXuWg+A8HY!mT@Tx4bdzJL8 z8Ims4=W#VEko_K4qOg>!LPeaIsSPMys7rHek4#>@=0Xcf%liiYx;(m)7i7qL!o(=M z`!VhWQfzkT&d>!CC>54QFBDd^VP~^ub*NP{o|rayzB?c6H~bUIt)f4H6Dxs|9!kvA zi$t#Did+P*P%81JGN)p)ypHO{?drp#UgG_&1*)B^o9sRhOd%VlNAA7j2s z+S-bI!g`2!5IJv(S<B=OpfzD>w7pXByf-_vVz8c|(u*wlVXWZp?Y_i^ny_T=@& zSHiv{h2KzCRkWZq?s&EAoRq&bevdb}<4X6DbSW;hEwDp7=9%$;6tQ|InHT8_A!_dE z5ns#H@}XgjasLx0Ym6us!~~9Dcd(8fRLdrHpK5t?!IN(2U42Zexbf{cNw>Q(*1+_& z8Z?R)?$aurM(oij=aHGo3~O$2#lm_|p+9nGKduseg6NSkUadXII3o zI+jlR^d0&XP?Gl{(S^If4VIhZl`-eJW(e_8EM!VQn6Q9m4nUQsd5J zuIo+UIRJ$pYYxY4g5gl70VFtO6-7yh6Dkt-XBMOyENx4?VCUi$HV07f9KhoTtqL(l ziI15^_BbLo@Q=s8L7tLRB;ef5C+{bbLa>A$HB8{6UMOge79|9fU(v?O_(Ho7nApI9 z!I%sg3t4vN4MkeozzPG{_r^KHfRK%{5ps{I*3}NJY*`A_Cuu6o^|Nd$%+j(n&gT~@ z{mfN;ri=+t@Hg68a}IC_hZE%uk2HKlvQXnFp(ooY>C=-HscgfOlWAnw5)aTs84PO1 z2Z^I>4S$nZ&=SQtgRXm;ENsgZ5nGJrL^aF}{e^Qs{{Z7krmD|SNpp%$DXB{_NkB70 zOLs0zIbfk4lh+&e*ONzGt7wgTBcl-kk*b?l?jWVHPyI%3_QaokJ`^dFz)JL5F-j5*_M)2HvwM7A=x8b z^st0ihRsH88ovmi7Gv&BFtbdT;wq8WBv*iQDDDh+*0X7xoJ|5nPPI2xSjI+?Ufvb5%xqQ-AreDFDnbTbI+tZ4ml zHwWI}K2?UJY91UD{6nxIPPMy+bz-&F=#$W@nCLxEhGEC8K*0mxP0*cpE$|!)0UPD} z9t!&kXB{!Mo6}HN#(2-naqsRj`lF$D_rwIniI&zT{F74mP`o8a?gS^Gd55%l`}usd zbZId(8j-46)H7x+ToLR=ptjFdPXX6Xu_Wz-g6$hiv;=iK3v-f*%bQ1|W4=;KgjcVN%5OJmM_<< z8dReOLyHTH6Ku>OmS%>b>n2RIGF{YkEIL5pKM)uAwkDCH0=;qi z>J+N#*045sbe&-vur`p-sI(NyZ0qZK361GbJklTR%`aPHE@OT9)nh|$H&tK7uh7pW z?$~wNHVnAfZcH)erEA+B6t5&r5X$nU>dBL%J}(jSH1!O)rSqjT&UfKG10MfOq_STHm}1d8`>ITHOZ_@daQ ztc(<9DO*cr>A>kgAy@r)_aK?^V(Tl)T4=tBJ|q0|`y6IaRM7JAIxnU7))m#1W_pi2 z3KgC;yKIZG&V~K}<5D!(mkgqOrIE7cqkGZ#avaB2VVd~<5>X7% zvSlkeyWQ~`IL9%jqTcmFnn0s?zbsy~N*UHl({7%@Q;Klklgi45W$PSe^%bt2_muXK z1rlDXYYtAVffgN8s^=qmLNc|-KWjrae?TvL|YlJnfBgPq!S@ z7TcrVS9ir{S|s5z^l(idnyYojUs0gPywo27Q%`+AH#f=ME}Kvt^##_yG9o`IjR;h# z^%rNlatT4|oH7{wBuq%)t}rMRVPa0grg@N!s-SL@B5x`q@4~5eWtGd-b3`(9twwG6 zqyX!&WTPkpZYMkj&l8i+dC@4|nRRox-BH2Qn%(5@S!%b9D{H0k^4-(-U|bQ)-Gdl- zhR@xrU28heIys*ynUGu>Hg&We^VK(45zkqfRKXpPmWbhdzx&^z1a?Ik;Vn#%AvE4M zsPl|%;;lncF8}6*x6vM2V<~l6yd6y4wJdE&o$W&SaVsXOJjG06>cpoMCrLfavWnuv z=uA<-Y!&>bpVa-r^K7vl+n$ljl%1)EnEd$_>73~BG^Th5@J&{e{^^Nk5h==PFE`34 zH;c6zq(e51a_Z1fbFL~sMs{YKjWjJu8hz7DWp>*o6&NwbD7%eX`KKZCs`gi8s3T>z zgdV8+sYUnFw(T$Pmnh%m<+g4x&V|JUKHT^xu!J?T#l-9#f4eV~FNj}!;aB((`r;Q9 zTtR_-+WMqZ^^w*wPTxZe)&7uZv{kTRE{Hlq_obt$7!Rz>%Y>kdf+!J@;beUKO{5M! zbC%}~3Cy1-TR%uRIHDBBTUQ5xqS}}@(NeU#GPFA^6u*PnVonHnSE|4@mVT0KpFB7McN{o|YKXB$1si=MRaD#FAH z1Vq9Ynx|YxD(K;iCmMAt zl?`tj%64j4T^C7Xn{j>yE7KN|<%eNRPW?KMWpZk0Zxx$?>o#i|?OBQsdH0zP+02RX zEtTtOUhWcY*waO34jWOsm2Hm!?WiuQ)!WWer_*dX9xZS8`sab4l=nZfxo!5?eQPISlLvoVV&Dcl8%xu#v$Lphf58C*eoi{Q z{`tEEmh|YvK0mF=es$kkUW79yjP(1(;nA9XKBtr(5wf?+^Ba-hctbF+A&28HGS9B6 z#6Nfu&U$#^iJ6hIv4gjE$TL$e1xBVht%6^`LRe79?@tdIWTOi@7m|M)ila{=jxF%_^O zgEZ31yrG8o*I5}YSgnz6P%zqv`o^yoU3>!bVrOI*7S3C7- z>&dCdU{|}bX*SXvAQJt-=qIzCmUiiW0T*xP;;r*S?6*px;4IsjW}1igr?}Or{F$wA zPWOTY&JkTC(xQg1@aqmM+lVJSrE^@|K+yiEvrA=gCn|5@NY9jkHN`I4D=f5HWm&Goaqn zw~H(Va8PBY+RMQ*0-p&;8cC$z=TUIYmcPH){Ef!Y-&R50@;J_U`U==YC9%YmkttKcBeOywnW?_oGT2AIiq%v6ncfp1ImV zgf%Fm(n_2>h~-EYSV#(gz)9pC`oEs>fMG0ItDiIe^s`a@|M|vZ{m&aq#oVJs3auK~ z7sb<4bN}kfA&|El;TImkp%Ci&(3;3d?`#g})QaLTkE!^0j%7H-oZu|WmbFlqqR@B!P{f&TRpYhL z+*Xg9BZGP~qtJ?jH~y@W#aGZaGJ&l+yAzB2fxR2Dz&SmE$y}U^*k7CTwGx+i_lbj- zsf65iT_v+&(r)X$myIH_{0d10LoRtk6~YydA@Dt)Let&>TaUSYWXaWBM61C*fWiad zz{RfL7@9CL+aEA+J-5z4xSaz(%~>VNcTBiw-~{oHqsRACY-=(FOmscVNn_rlCv?_$wsb8^WV- zc>>~5nTuioX#t`IH*AAjNoffst&IkPfc`0|ugW}z;5|vK zvMI#l+R`+}KPUolhH*AhHY4?hjDr0t)PW6n{mQ3-VYi zZMQqA5d{%J5i3cAQ~Cfo1F0myh~NY{yk2V$$WIdr$@h|8Q3_Jv3!y;ut&ZKWj>U*j zGy)^JB=|G#ekCKDU@NpQg)9Y)ws&=Pz2l<^DfTgsk1byB{9-H! z6PzEZXGTe8qG`lN1&xgfpb&#h7ATFiMrOU3l`BYI7s7NEIF1VwVvZp(9`7(W6;Elh zsTTjq%5wPGMH{rn+AH@v4aI+VeO>_Ck6zc&EbgX2}z0WgMxpGG80b{`DM*xDz8GV^&@Vb39T*|FK1G-ljvx z+U6oPiKVsuC}+i?6uCGP=Vx!LnWiVbcZm7m>E^|wWMN@(70SXo_@GCNfNcW)_c7>G}+XtDyFN{k07vPN-^_r=c(Sn?XC1E(K&T&6H{KBCbWzl z|KwATa<63js;e}2Q&rD>;V3i3`ZNN6LvVKunsxoeWykG;KT-R0?@($b`-jST7YQ=e zHeD~ktjayO($Ov^1lhn+4JY8%i7^PT<7_^}lzu8ZCbprN;n9^jqeVg{F=fhS3L^xm zvT2XG`Ut&|Al{s!i!s<4RQM~YiZe5h5!#<+;$8-FynZ6vDR!^%4#Y@lzf_WpCg(3o z{{uFkgG&f)4I$i%^h5K%WxkYgb+^x0tTU0mC821|w)ai0`6*Uyf0!#(r``}qtQ9cr zS$Cj8d+_Mb?_#VpUx;+AhEOQ%175K_f4D@9DeX3vp50CMQMmMV=h;jEd4~ZP#@f9|2>&D ztxlw#%y$VITaz%_Zh=Y7n}U!CG`{LxWbj`!Ua>qxQjK&uMqVsffAtnH;=<*k4n}^n zV~|79X>V}9PtqmcMD?>LQ@tOdpgBHM@6I*sgOI)Nk z{;KiTQL#cH{;aX5se0$*#HCuUTwxmCF9;FcuVmlUuV_~lJ%7(NT;AN0ij%<1<&V-W z`5%+H$utBX{fU5@U0n2?eO~aLDyu<6nt&lint%~TxWq4i_j6Pg}zneP!NpMXX=S_VDz-UGzf6GaFOUQOC;tkxOv1mmp|!(wZv<=|nJ0#-YOKsF{lm6^nu zo4oA0wUKHUjGDC; z5)~6j-83e97f=3KGXTCI1(cj=#&JGEoqCZZm0Un z(%3g?5G)nF_XYwDWy<7JZ#GBFSXC8*Jl`+xy^WCzpJ)O$5F1T<`Xxf@cCvZp$>Pd; zOh!Yl2_~GH)Aia#=enI;ZC-3$bBf&{q+wM327kJ={&2EqiYJmeW9!D&Ps zq~Q~Uwi;~k2E_OYx0}>;TkyjHpT__X+4psO#8QrR>|j+vo@fq8}sgtDSE+y|9vwmjm(y{5SvWn zmCF+*g{nu~GoKXRyl(~t(ytUd#ifk{EAaZ9es9K@B$1NinB1U$&=w@jsT6~W)o+%f zHZo?OqjEeqqUSzq3Vg3UOyU!yLH9Rh6wkbY>bLCri7Ak-cAtn-g04uI){qICigrIr zT2a%KJ!AT~3!DZJ_v!bXQPYA&>hzf))ORo@;aT_PN`k{KIs8y`bvM>)TsRvDG7Qc% zuDhu;YlvU&&Wvg~ns{6*+wWX;yh5|!X3~^Dq8-gi@}*=GBK^Ah{Wav)ILH&Y{0q%V zfpu*B3g6p!hdrr z#Er-o`9n5vNW)3@lB{eIaYz}4*jQU=aq4|8B>lOrScU!Q$Aag~VtbEwk$~c}pswK( z4!&jhx3F*kV5>#?dg4RHkfxm&(#_pxJL+?>(@2`3fzguZwzV>%SJjq8J=Y$SFy9)I z;Al#wzc8hhTpyusz31b73DWoLcL*>+6l_WddvBir4mcuOivha{B}^jvsp8X^r}*aLM4~u0`e#$!{qxHAGFnbV$S(-!Jy5x7II@e@fb! zLLuUMXJ5j2ua8e&D2+jygz+-rm+&wR2v>p@b4$4!x!E-&Blx^^Jkz%5r}bhAKE9XJL8FRh@qXb`#Q-movu8`v-{o7x5YMa~0b-4gOGUP@ zm{wsLxCnxhJ($sEg2(s5A!JM%oO}RU+muympLn^loHPMf)3S4CwZ{V0O43#gVQi)fB?yX0O0`Z8S+%8d;|Sg^<(ho zs*>_Y{jmI~AKw4@+wngL(n`iIuI4WPmtB(-=8-Fe6yCenIedoWN$l?F`D}`N^%RcB za0uk?NLYS#2jpJ{qvWZ*lNsn|(ChyMqcvm|OlN;PZ$Ks~89zg!?{;!JKA&BzIF_%j zkPh=xW6{2`T!`&u=_i~2^pV9uiGLJsc@}T|`q#A?`(O%wzCmUz{J>+5ordnUIHTBh zqSMGhCg44l&`MCF{;$WSQ;pH%XL@+xP3w1g!uFwh%Ut`0$Ky8ZBl9JphG{&8j)!lW zOFYd^{5N6LKQ5la?m_pK-f?B&g5vAOZ|7#)ewsq9#l5Rb9rYGQxaY@j)yn%srw=$l znv|PJuKIE2oX6Cb2a?3c0CCrG8Pr%;hsYQkB} zM%zDGWzLr$PCJw~`p_eK=exq?m%xX*-~+V1**Nhbb5_|8M8-Kc&krb`daRI0?e6%nzwBj`l9u@!V4)s0<#5b&v0AJ)#&SPS+)suXMpcG&Q3ix{ zpqgd0J82>$X{sm=vrz;sWHdQXi@^(Q*PfOo4$gRaM2+kxx=e>%gqt^2r3b*${Yzi!qIRVU!s z4NE9f)q#lIdL9|3_*&dU(|*|6ajHHBoSND3xDVjg-kt-)lp(IE$yGMV`0ElH@isdl zN6p%HlCqKVYRxxkHv9TV-b3C;@mZgLh!lfBKiY%OY>yfC7wZkaFi|ms;!r~@HUl;S z=oUJ}VC7GpaTSx1mOfkw!;moww+mOSOrz56|Ee>lO(9XHrY)P})wV$$OnPaDd5V&H zf%BZHHjyNxKUWPHP9}5H=8j#mUZChkP)r3egvc_!+=OaXOeJ;ySv(8R+r;loD)hFX z|JNw8dTK+8Yb!nbrWR&~X|EBypo=}T@mQ}+_+?je)KE!q0Urtn+gS-`pr#hQnfxNk za)v2N(9_Y3#WR45mdG;Ok`C*pJq%}iEOtDe4L5)=O8HKD*%Pn033TsqTr;DjLQ9JVGcq{*CUIlMwREndGY`ll zAzH(y95=Jy8i5$%EDC(0OZBFE)Ub-Eee>YV{158Sr|Ki74A}Vq9ry}7-y675hXgplWvQ5}rw9-52C1C8V_loQuZY@i zU`DIF;tt%4kKl7y{kq3*(}G=3^xjkmqD%$h2HHvR{<(C=d1C!_K@USyny{!`?DI-D z1-fS5bXgNssF-*WP^iN9y{n{hgNP@XiJEpLmctUZ@$C1 zb-Y1QVaO8QWMMt!WGu!|N76wF_e7Q_*?zfiCc?ok=Re$6(frG{*ed3oDi3h(0p^fS zE!a{=9U?16)U8@Z?tkI5rTsU!e_h3=(<+FL=yY;wFt1(^CBASzuL6WqZj0Prj)b~O z9&!*Ib&eVEh=7Sb0{CZ7!B@JpbmLSew_{#+lj<35{O%^U%n2uO|82K_ud4bDW-isW zIs?r=8f)|_!fTGrYFB@rjRQX*PQziG+6&Fv->em9k!*VzzOVIwpnU{C1;v@X%^WY`*`C~oWbFG(OEi!=ik2PDNU`MN9kW7 zf1Cw=)SBp?9h!_@^yf=mEa#ohFl@!mf#|ZvHAE+e!h><$ z_En(Jbs=0fCScjdFfzj^v#J!oOEO){aZX6AM8eFDDNrzQbQ&=57HlY(N_J$lC2L}; z@}&_W0*-t4%0(+SC&ovlx;&2xNH0;l9R<|NQFYcCq{mCKtQ#On{nQL8e)cH3c^?^a zHj=^t6*Q;e#~}dixJp)846IvbXVz-U7DeM&+dk)f6x`ANZ?+qZ@1q(d#?(i(oe@+= zZTGA!kR!t$`O6|P7D8G>R#Cdl(q;8NGmiQk8zT&zYAV-qGlrI_GEmslA(OXyfH0jo z*d!MDe3P~?KJBm$xfT1l_MpIuONx6p%?hvGE?f2sV0tt4o14hy7Xnt1Zlq|64Mqc2 zws1Qg@(RX?Irb!Ye~(B$m~?n*IZ#cKoYAv$$Xox9)29EDp@?96kh?wHZ93Bt&SHkkOIvLl2(3S<#W6*BtRbhBUP5grtoy`U=B2Mspq()W zWl@OpZPIkn?>wR|k*?u!C}Nd))F@(S-b(QV(QN##4=Ql;e;DAlw3Px*w?#M2Ha%5Y z2;U+H#^yNXds%z^U60#D8-ZLOG|{B!h$FcE+`}>c;}u@}I5bSQ0{Pt+K!R706FS5- zBoxn-R4jLb72_4$(mlr8Jv7=qrERbW@�u+|?%PE>2x1Y22HMr_yvIND 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

    1. Lx3;0ZXuv9l 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

      U0K-YV-jsQ?na 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%0AM^N?!-jPlc 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 z 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

      fq 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 z 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%0At=ZHitN2z-ryLu0Uh)&)98bNN_&^ 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

      F(lOU0uj+!~u%#@`S8_V(NMY}Urp0Y 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

      ^3|h=}P*QM~dVO2e`}QFC7CYm7 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.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

      mb=!%ZE!PsSh?+&G>$1#@26vRvW zKnH7)?kTq)!z63u9a$UIXfx+h&4z5{DMkCIx>&FqG5b?Pyo)##-Lzh81@P3zYck%; zZ8VrR>vIymJ!>GNjV*u76Q3*SN$&^rs41ki{-WF_bNmg2;@X)UlYOsTINX(P(B%u1 z)RO`*kYsw~>h?oHE9$aYaznLD1zH_YQnY*dE$ziemx5i8^wtE~Ve&4!)f^cU61F@E z3b@{IWfQ@f+ln9vIDc`OovzCwr>Kp@ zIo6eIO932*&@doaHGW-tiam!pc8FGo0_#R)i4{~Q6V$@?Y-MM3_HdIeZx%47+?b`Q zAlb3BRu)S@z@ou)yPio#Z~|IV3k|{>z^P1+FPAKxQ-b64xuAu)qD=~d_N%*G@aI>U zToo7FOuJz}LUud67REjRudp4P+)QKC{{6x5_|4`85`Bf)KlP~ke0}Q!x$7~K zNP*IRE8E9Lsgppsx>Py^JP@S6gU=F*I^=6{a-&v+##!?>bJSzM$b% zBJff7E!^$P9<7&GOHC+CKapRk&l)MtKyqKWEL{^C!FoyB3+#`u#)NM%1)|qiwe1k@ zX~x%QFiC%KnrRPznvX|3Z)N@@uh*v6OwtsoxSjwM>iV`GIMW`e&rrdp0OwW0!`nd4wu^Owb7}L#B1rWJA6#?Z_vuit_c?9Q1%J}OWN$a|Ld=Q^2VyOL2H%hjr6n|f z^oL!xQ4$?mBG33DCV?X&^S>bcJLq`4mA_{3<@VL^bs_&>#V-7hDn!lI%GQO9`Jbp` za^iv4o&=V}lm(oNvUwdoQ*wH%tlnGMaDAP-8Fefh%-aTwflT@isFxx{^f{9@(^KaW z{@d%;)(2?D{CDc>TxkNFe5o?2pJ8~(BzNK%fL^t+cK->xlO`fYSkdB5^{Tl=ksYfg zkH7UIUH7+R2azI|MY%BO`GwPCR}JzhcAG^ z;I@)VS-SDLsoIqtW_Ma$BWU`^0{Yag+xktpg5{qEy>>7CKWCVoJzajn?fS0%@6^Ow zFn=0hMH*dO_%`PaJpbr;jz)2#@&ZK!X^d#nqwu{`)EV3H4T+Zh(LS*S0o`z~O}xs%{!LdDODG zNdIz!>zkW0E0VefXO4%7yUaQ_goe2rJ8IY>Qz06C>JhN)*8N|XY-m_il7WvkVJ@w=0AQ?#*I>7#E# z@L+8QX39juvX?Ba>MI+{ZFznEL`KH%wV`Nlnc>MvKr1KEwO_J>vvM zXr6&|KMgx>r(>mx-bm9&r%b!ql?Q);f_4mX6_Q|C1X2s7nHPutB#ZvOLiL-*Sc*pwe@PH(^DV(`XqTmSIT-?9b(kbbKN^CJ- zmwNMawA9tR84LSzTY-!oTbqJ@V_?H{#92|hJ@xe$-s9c3#2zG(fcxkF;KApsk?Bi* zwg0{Ub^HI%fA?SRKZRe4!ZjwWj}PTxd{$NmvoCx7s@;DO3NGspfYk2UJ0R{Q0q038 z4v76PQrBlwOF7?0nQ%mjN8j@KVq{CDwpnQ2^G6xW_ezEBbSKosl?WwCGv4yKW3aSI zETePj1HW{tLFtSM#eYx*?sarATAPlJeFog&^c(D1WWBKKhaH!_w2#I2d}N!-2W;E` zfNoZD-A2pbj(_}lFq)_7Pc(@EbxCJnRYU{iDdYGQb-${n`px{Zkpr^NwX4U%YZpQ%Ib6p$h& z9d|A+bB;$jKqt7f^PJ)9WmkTfyH1%VG)KZU>l*0*0${<@CdwBcD$zVnH_cT{f7cCf zyBAv`RyOFxqqTjzxG2)QIC>U6 z7`%PxmN%&1Cja(vJ|$L%I=1%B$|q-=!8xWksUW*r9*d=h(6*HC;8fYP1lYqPUMux| zF_o@C8A*?4rX#zcUZ52f+&=R+9zcm9RwTf|a3Glrjg}eh4FO6hF9*m~=Y%&(&T2Qv zn|gR5N@xj*j&1|26QmjwZ(CEe>)jczgP+_2!R=@OAN~p7sp?q4s6@62l*??dZ0pN; z9l0e=rW4X&fp;5gbdit*|Qrv*COmPiQCltTq2e& z!Y=kHY8R-MX#G6v_72(EAn1RzU-XghiLNh*Mi`L>{y4`7pBarD6VcblIM5h4LdF)A z@3Gq}g|$p)3f}H>dk5m7hchJ^phTP{40{+W0lXnMIAea~WcV3jvDhde`Lw(k^aOSP zvf5u~bn&{!w4Iryv|SlBs9C*QuKzTwSnM(^ftQI_BWx&b$-jzP>FCJ!S9G51DKmE= zX*IqUH9RhVX>~-XWp*X^EV^vW=3MMxjj>ba?^`rOG2Nnw8~F=vnp2EItU@(F(+|v8 zh7{vi1@xQi$mP?{euG=K=?-}O_qrlAcDb?tRadnCAI~Q1KkG`83Pjx+6Pj)^P|4gJ zE;&8jDz|jGyns;r#bk_7Vdf4E@k=hA4W#xK>Ub4uH|Xm8gv$-6$1ZdlhEJwrDLqsY z-GGPZ#B=Y9M~f+Tqzm4IJHf7U*JQT9Mp$12s*|9GW_y|dg;a~tmpCpAn!6LXrdHI4>9u|Pk4QIpU0=9xH9;=IAoww`FD*Swq z1re>Y2l;t=E6!5B#A@w3wYjf8A#mE&MU%y!qB!~%2dl8zmd|fSB6Ai~L%&zzND`aK zl`M(y%m+ht_yc%?Ho0GmV{@w+3;)x0FoneAs2{^M|ZnB{zBy$TxmzUX`nPr$<^s9o=TzpUnE;&6GepM~>v}%im{@ zWY6S;VcYAU8@-cnANdI1lRG2r$X@@3uas92TSjzlk~oY{;p@?vh$~JH3IBkg)$&st zj;Jtp*E=A|2T6fg=MdBBiHL^=lDuD~&E!LB@Icd!{!XbdaHm%z9qz%D#%s8TW|oysCLW$u8o?=r-N-Nr))&kQ)#XOUF|Sp2d3AuVk@WA^!4dj@JUDFsIynE3$uoV$IcQtfjo8F0!LYK5rl+G_^;gWN+}d(GMr4=# zBQ}PJcl;sH>F`tV>Gi7F;M+@$t`LZwINFRK1pe`OUPYMweShdCiS@LGm>{Gx*0>Q> zsF8?~iYI3wqb^0mriyKw2tEWt^-0e`6}%!9>a)JaKBRF0NmkVnZS4hCp1m%O6$Lc@ z#L0%XK9cpJYdUoFW8v=i`0mkO*4k6%om2h`sHrJy#rUnH2V+`|f5f z&}II7Ma?m4e9VI@x7PD0n;{HpU;c@dpCNCOOC4Li;`w%#)l3Gz^TR~ML)}xP*UZJB z{MGpPHA8y`n)Hfzv#NXw4fQ@LzDy$7zU-a7&*I2N5W!d}aj>t5br!(L<49E|r^bY? zb4Xg|%qQmeEXH*Mi-^FwXl?7{s4SI$d?jYl5Wr?gr-9YH-laAdPcby*Lg04{kRt0RjA9DkHwoa4$LIh-t5?U!;00)ug=A+;U4MkoAAlA`!{Qk7|@+#p#f}SP&EG z4~*;ys;bt&wb@UMp!Bf0p$8g;UfaC^*ED0ZBQnzQ!667<^I zcIe-8Awt9Lw)&%WWn?ev?j`Q&MLN%0TzXhT$f6+Md=1)%#u0cedAzC60c8RA@dQ`b1NwCZ&QL_D+4_Z-t)Suo0{ft zwDGGKM4MAjY4gM)d<#;eRa!ml$UN53rL<(FE?cXWJb&#EGs{paM9-k%^cehm2?F!d z+Kv74g`A}SZ*ivo-5&mnP7&FsEpCJry!FKIeZe=`ba8f)-3G|A+cRBT?2yiSp&X;V z=Vb<)7uyd<04X@Q53vPfcPUvZb{!EYw4c`as(6tLf zM9kI0O&4~0%I*R{rMd^hb;@UBjt=~9+8K(VJ+812D4;0xMX`iYSC)_`rwcoU)2y;tz~^ewSltKni7cm>?(=PWBcug#O{dMY7DtuPLetE_Fh(LBOa*B|bwDb$>O&5wX{-0x^9DFWFPu?5mrzQ)qv;Q2`7vZ zHG&PafH7r#s*5KFX?nrP7&kR#d#e$hG2-fW_Z5}Sj%mI2 zeZ_@qu~P4t!xbW6h4V6joX`B-36}?KpWkG0${A8BKQX-m`esD0cdDqTr!x~$M!1Th z36x$&L(FeUnJ{h0@ESetO2ah(b^Yk|_mO!6kNs>A3m(W4ef z0+)P%^f0z9Y>D~DZna&?2N8sk#C3T-@0^KVoRuH=F@h6RV}pZ7Lmq6yiqp-@y+|>* zf}C;`8N=#6WCP(RtT{3zt(s&J?umA!LHvyHryiq8%&L4#wEsYpL#g4yF+nNZ2dXJk zY=`2lQ!Ru+kMrmWA~2zPzH{tK4@H>$_8E&2YeKo=B?C_4^bT7cdA zT=DcQ|MphZLrAj@=q5cc!&e)Gj|dJtVoeZKBPtp^oGz7y*%b-!FTGZLN`?8#fp=^Q z+Xw;uM7M2L1s6ld-Np!HSaEgiUk;nbZso^>lZWA`SOzUYSLFh=RjY+xQ{zIQRITY1 zK8`>Tb!Evzs1!4H-+sjqLB*RENcd&vZIt}GLis}l(L*8h-hU!lepcv8ThKjGomH5J6uq< z^khO+-=6}nn_F`{OG;I0q%HI1wT}xrodc6urCjKqGoKz>>SJzwQdJckJy>AyHCB!N z02aYbGO@@E)-#$1@a(;2sf3;8$RUL-#W>QC=4RkyoYspnyBE=2_(12mnu&ZnCT00{ zsP_!lR~?Vrhd7Sj%xZ+xxc!4?_L99Y{Vaz*W-Iy;#g2XCzgD-2`i)IZ2<|DGNQ&TJ4q_zZ2^!lwk+l$)QMu?ZjJ z(O%wR?X;Fny0_#mnY%yScFT;5v_=<30=H@;Ze!3IcN8q$seg*uJKn}tNWmDrzGO~pG z&Xb=9qCP5F0qQF8t?3+ZP%2kw*%++=B$YV|o%srzA}Y?- z?Fe>EOs-Mg!+>cYj9h4XQ)C`-+Z0fo24nQdlb4yEU^$$$i$LAqdQ&?6;}krUuOD&jL^M<>6qds2>$_NY(QQYL$}-l~QEY zk~ETD*(w-82_S2-K{=>4$%3qjUu6Ojl*l%UpeK|}rI^4bP`CaDTz!*sC8ANV$~oMD zT%)*^kFP&HD46BSu(X3}z(DSU*v(IFph<|?M}WSZ)G2X77PBnaSL>%3sR)~hpv$9= zz|(E2qp!h@j)v|R$Q5T$%l>PH-NX~8k&*V5#m-+7Q5%$n)pBmkDJ(9gPBTlhRMn|? zR&yGEL{k@9M%17YA2TNK@Le0VhRGCpjv`gMC}&!Is6JdY{a5&Tn?*yd4UJX2(|1 zz;?F%4}bBvbVNx{%CH)mFeN(VFkc~xqr~^Z&2CXoW`V)H1g?djT?4z3)9oFh6slK| z0T@FEzA+F@W6aC}#e~z$sSJNl*oc#TMJ%#x>Ge##?&t)`MkU#{O={(cHJme1iOA;Y zToY7|#i+O0EDATKoEfh9&>DWU&vR-X2IWc)Sy-QxUka0M-;(>svSb+^E)(KbVbPk?J`$i;PoNBToQ(R_TUIN6zWf zh&-ru#N*$x&-bv>R{NbhPDPwVK>iR2PkD3)O*M&w3hBa&_(|4+%`}6&R(J-Nvk2`y2 z_|7)q$Wvep7Kiax*_GP5kjjkOq73TUcf)Vf`lJ|T^e*OBa?O4l`_yHLb>TSs53k>J zog~=Y++#)xbK8wmp|9F-hdFo3XNVH*=BD~8n(|c}Jh|(XPK-93cKfK#l7}7n{X~0+ zy~AlXdMBZu+_QWIy{peT*Qoc>;+h?L*QCDQZRu{?%c%d5do&|w@{ta)=kD{3MzCw& z9HA{#L9@*JPOoStFLIj5Uj~Le#!4ITrpt=Q$`t3-lrt#Uf!}l0&)ElQS1kc^N}Cl$ z&y4rJzN-G)u^FRw(FA=Io8D^2wmBHECLRN@tJ;+xJrQj_PsU3N1ur6xuQ5jL7t?LI zZ^diF$``p3onX---|?f&vCj-Mq4Rvq!cgC*-23)_h&J+b{8NKL((aEhJ zdwX-9Gj3eRz61C9BcQ)*JkLX`Z{{%s+Q)d(y1mCWf=!t-!VcCHg^AH89@iLV8;iR< zYNR5Y?IPk>le^8>-^??wOo$2no}{$Q=P+jn9ye+2ZrQkRf8F1UsX$19;=7W#f~b&5 zeba8eB~|`N?{5|gv?mJsb~T5}3qE~ZM2G~5#YfiREk&g|DoE6wAmjJp&#p1CGkdtfpTbt)06@-I$(`!<;PO<6uC8q-1uQa_9Mpt%R?%9;g6i+KM& zj`Kt74-9#0G||h8RFe%b6Ae(n`X?RHmN4BHPr=-Sa<#TGK?Wz?k0>}`3hE#3zMnE) zu0EL6MQ#s{+iu-I=QieIxji$99v}iD9$#3bRYi`eUX2d8K3#5lO>O~nMG~(?K|IX7 z&|{K~m{N&@5!0QPKbLxi(v?w)oy7T(2D53zyWr%sA7%CF3Nosa2Ir~kzZ`v6CI%TQ zf@=j(AthegeVcSN0*Gz7o73}(xHy(-Wxubwq7t}8GEsLmQ#DRPi>z(dltW?S&j;{i zE{@Rp3bTq<>|CHK|;~q@sftgU}YNe*D>$-aSFEFt*d&ZqN0vPq*reWcsNzD`R}Wr zyaH%32M10pDL5Fg*z26%;-czmgDCO%q`6MA4LCRyAC-%>q68WxUF45+%alhB0P`acaidiu{vDBz#b= z88uN8X>ktYy>ooGN!&Pt6vT2E-P!eEUr_*_)U37(?0>@?WhXcAYh{$TkQmJES7=?? z= z*XUjD*U>%APcf(rl3f!azy86--fE9#(i!uQBYkb*^_6GOstMb7ZGR7ur%7A&Z zXKtRL<{==nLUTGTJ&l(dm@Vg~rQIpU;~sjzxyqO?PPssv=AyX%{(<%c>kkVK^+)Iv ziGu@~0sucis16KV6kpjmMOG&I{Be4V$jOL{V&Si zDLVFcS^JJ{JDIU<+qOAl+cUQ9WM;;;ZQD-AnX#RGS?}8W-S1vU&(~x0NuTuS(RJ6q z?yIVt*%|TKlxPDSt;014{~1Xb&Q`u6I)-4s*DY5Rw;E>#WkFAnpclZ zje@|&h8@wwd3EjwFqK_w*sG(|%cYfcZg~81YYio1hr`szLyul=@@#@h?N(M9x4yxL zyiA3S8Z17lEj0`i&>K&Oaz%5Q(ZwpKhF`r{`6l*XfVxj)c8+>`hj0q@bZo9GqEJf7Mkajs{w8zzI*YpDz<+ zoKP>6zXpMTVEp88fzgpg^73D;7+hKhwtr=$;SH=-m|aZ4FaqxI3G8rO6`^=@SewD3 z+7gmzixl`>(tH}ECLKq%MsR<6A@^eyc##O>WUw~9an-U8)`#U>+=I}VKfJ^jw(?<} zRa#Yg`;YX44&9nrwZ&cPgCyeYsTZcLUss9bR5K0y%}Kw+rL%uNq%{%P&r%W@4zA*{ z`plppRBNI!{znra>!7*i#63YU*XVfipv9oUgq}IW1ayHUL605d!(~%=b|oY|^emL} z3~iy@cB+O=$1X$agJ5Y^s7us-m6(2OZ|d{l3HP(l5?YFPcDbjzIp`iS6=(_Y_1F(! znM6>rOqoVWJf3Gubc+vaTg#EjhS9p)M$8k+IVz>50fyNJsF-p|B>g`+x0EF*?%o7O zoZ-4IviMykv@J^)HS>Aj`;9Pg?_3tec&yJ*5dz>J3jVix!Y}kMNB)=R;c{`)U$;IE z%-A^o0||IS;NNSQbCtVT><+XYT(M{)&ioV(d=$ViHc2(2_f`*_B9KgB4VW>&B$i-?4pon?wbaprS^^$@d zP_uVMR;0syRB)xgWO0EQbPmE-uC^CZcf zav=u#)kJ@(8}+}^*qGhb9!U2HboIRSSIOY9cgIVVx~6x^e;(=^fG(xY(h^L zz-)>wj!5On{_Kgf0mDi{g3V_SpF&mfVklRzaH4_+eGs7M4G|67t75?n@-CQKYi2hI zX2<_R&9!xm9cqIh;zEqioD`CR0vm&3GY-B^Zj`~ALr z($E83`T4!VbM_bEyk$W_X13zl5aBUT05Bvt*Z)j06~yAY_R~^KIh7Be;+O}IYi2{N zgj_~Nj3eGJ5W_B-TVj-hCe`H~h%xXZnSCCJqTzX{Y>hKyZE;ts{;aD#1qj)j)@`eI zU>~At!?Zk34)4xwb~W%=zesae2M;lbM|icJ#FU-O`O&KP*JCd9#_c>djPfE1*z_d4 z^*yA$j{%$?Y?4J^JOM=^oqZd^TzTQI{Rvu%JJ>%Ll5KhK?7PYEJO=Y4%br_uv7xNb z(DG+<uYXe@UwjjZoPMzJ4LQPfds;}q zPE2`fKKZpzftTrO-%)8)r8V77Yg{*hlDf=!?34>jkGp!}H0RS2Qbo_RdRiZ~)t{L0 z*2U~5M0cJwF95h(RA_>As6cI_T{L7}WeadCm>6wWA6<(j6RwZ~;4wKiSrx56b; z!%N!FAM)nJs9Sx@O_9oO(T!B16!kUx8XgP*qg%XL<7iZsl<9Hg|Y5MBQZ z!FZgl@daok*UERKL*!7R96>voM?l$m)>^N1<(62E{&aU@eQ$hpXc>_%W_{2MjA@IJ zwVjdG3jPK@jG?4Y4a~y}Y#FCNdVSapc0um}N%QX4>RnvG=_MYO8McLvru$A@l^KB z7o+HCue_zeIDpl#=3nyM6FYtF30&{Xk4QPcJBQ}e<7K+y9;bc{c<`SlIaxfDNS2v` zw0=q?!)#6{$U1oa z_7VDzF}zqz4;|I-f7|gpbN(}Etfh^ql&z8Ze~t3zBrh57i+`s~Cd+*`T9$%~5JqSA z1NO-_D|BySYZ?*LkX)iT6|>Gu9&~Y3+TqKoU9RJ|8SLl77JEN1ZLK(`j5Ho)cX0mf4H^_WF1Ra2+E z?d0s#a9(~9X_DGm^=HAN&8*1q7^gwZddS75Vlhju21?j|+!I_%evOQ)L2WbsGO-O% znj)ien0;EAUVSlxh$*7qR}G_|8>3Z^@0l10LEYnZKm{!=Xg9&c$7O|ST4t4|7Ja(7 zCWOJaLa#+~Sf#Ar-gTOks8z3P!;7%YTuyZJ*V05tr3(NK=(N71g~j<2Szk`LyB+NN zy;Aeba6(zFY(xf0Z!vYhyf<*rF~{IdYPfZ*v`;hIksQqZ^Q?NXb-W2{rR~S)dsg7W z5DuMvnGBLiqD{2BYJuSuj_gpn*{~t|Fy39DD*T!SF!f!7-0`{IsfBY;2v!vB%c^OQ zRz%%+CW^tEDOzK;C2wcGU2w)->OnQfUa~Xcq9`X5Lh*Z2SE)?T;hOyZ`LIsLU3p+I zjlgET9+wLJlnqzx?i#>aeXdfZVf%h34eXfqv})b6=J$X(IJ}jS^16B-YOqQ{0gRRm zTUwfKgX)7pGEw{vDr<@Og37})6;sA~O$Ca%I&~~a)yh5lHk#^sJ%`>-l!d^CmxuEL zy;M#JGZp=XS|L$)BR|LEwxk<14-0!I(Mk5JK|pd~lXmyvE9hIvy0#3UxP|vCXqoW> z{kDg+uOhR&Ta%G3I!t$uIgkcyQPLOjx7ULRkPsM0TgWcEAu17=?vzi+Xy0`+y1UdLY^wA&J z{KYnB&q=t;V|=!QyfUgF*%1VqtB4h142ea1*7F8^a;WR#U^9w%e&7sKa& z=%ko@V^mzZaBMs8Wsh;Ro>`HfNbu)UvSz_e zXYisJj>yle7`p8g>~IvzFpl3TBRq-=o$v8G;<>wsuC$NWAsI|67_C2e1(7J6aU83k z^BNr)q*wHkE74nScjf)WIZy%m0~##dKY#{G6-vo88z-rEa&`!90f^rhLMYwTF63hf z#`}^DVBo9(#Ya-l+bNNjhx%q>8v+HAy(O5dLo#y%O!#^b_v{hkljUC{eZ;pZvj@C9 zAotuupSU{@Vdw;(et^pV5RmthOY)x*sQ7DTec?BOPzU*+RtMja_^*|Ne@9`Z`h)vE zC(@^?)8D`88CQu#=P5fnW@blfcuS6Ft6Dnxykx-5(p3R!d+V4k8cP5}qH#=9_%pFS&z(e# z%2WQ=X@)k~Ql@Bk@6tYveS{CnS^5QdZU)V+*%{)!0j+`!V@nE@CK^UlFIPpEV2#{3 zIKHhqxB&}Ue!+Vc_3bmC9%;L@J}sl`ZG+9DWJGI@m}KxiX*aW1oyM||E}4^@n^W}S zO^6W+nky?!n(`lnjLwPyr%y1=Cu3$Ob)WLu-bpjSSeqn|_--Whh0757;Ymn7laZES zkba=o)WGc5zS`Ktm}=^%$=083%rCj z4OnF&I$*b`78Gm`bQAMoR+~H|dg}V)Y8wgCSg4wb7$Vikm2<1j7+uVk>Qcx^!NwVx zGIS9%j8z#y$o)p#na~n0f=F`_hNQ!H5?edE8`-7+E!Y|8pW!36R8Nn^<@rU)K7(F# zkmih`q5`opE(H?C)Iw6LBk_Wy$l&+H*JiRQhfa&A~ z{d9r{s{PG%^B|AMO20SC)jp_`|3^=1XICm|&BLBG8UG-4MBH`gAiviiqnO@g#|$pA zLyRzJQ)I$V6WBaSpGdWXo2CK*lstfQ1jBXFpvJTIZoT6v3Q`W-UCdz1v;3a-JJI*B zEa|Vo4io`^d4LWM9Pj?SaGk9vud>i&6T=P7ucT-E5pXB?7Q}!{DN{_e(#I4N&0qP1 z+$5qG2N3cw2JCiSu-V>bFi39u&{HYXL(5w}XBf5OS)sj)HX>wW{S9DdtSb^=&E~k` zH9aZhm*cwMMuOXdvXw}jZ=}6ArqYd-FidJvZs1pLrP5-MVgaXXj&w_D`;{yQE9jw3 zCgjO8>9rWsuniA^q>hKJ$(0CtcAf3!R9kdn_$m_D$%bN4eB{P+zcr&WqbIv&T> z`k*x=uJNv5V7_$4(A`HBfJ^MDBBkbnqdS6VB9}kxnjVXdG+Kaud^ZI#yBR}}`;rJc z3motZZk7|O_p8Oa{=|6`Ch*zd=NQ4G;DITGcYmqTcSf;E&&Y889-1xSb=lTAL6hen zxotKKliljM{QFJ4G*@-`O_U)nh4B@hDfgvw?Yzc$phEn; z(tnq%3?X@RM=g28QXzTttsN$-AT!c*)E>aklq3rLZpT7t1SiJ15bDbwDc2`Vr8t&l(+id|BAo_jOH7iBHNaI zD4JRub`f4>?`zC1w}&e@0Q`syJ|3acr%v4#PyJeEmW*>$dPx1(GZ{i!5D9tr1^q`Z zrVl!dBSB&Wj%u@0$K+x@)41v4L^k~b7ppWzKJ=(C&zKtdRAj0Fh1Z<0^~vH;DW#w| zW!gk>jRqWwicl|^pc#;kXDs{r0D6o?so*E}*nXC8pIBr}1ve#d(LYi-lvO_Psog?i_Qx%O_mVlXA#K!>i0*R#a@4@fkxnt?{&o=2l z0J(Njbu90o=>Any`Ox&skwp~9FvL}C%f!!pvPy7eYDg5N1Q9IxEo3|j>Z~aAZoM|t zFi9Z3(tDJmI3I}BF{ERbzyZpK=(*`u7xDwXF+3IB304lqfse`CK-KMJx+_QUJV$f` zXZSGi8W6I{k1Usu>>`fez2q`*NV56**4x(DD@c;BYH@VkY z*YUi`G`Y$JAG1v4(CT(!f8HZx_*6mS3&Cq?5gM!300tHR%pFKB81N}<=&z9S@gJ3S zS24q1i0{h!_#4OakJcyu@6Y?+>ywG#sTn*4NZB zHo#pJz$Z+9$-_NKzxK_4J$^)S^ityr1q^VtCRMA7E8Ug?&R^P%mW$I`ptmd8T=X^Hqt1pk-t!fP*e}+W zW_6Ci$bzTWX%KNHU=uNO6%Rl72qrVORj6@`lh$O`7 zum1`>hy5b!mf$ZZfZ-cFsK3``gHC_uCNT7b*AsONrt4Dxzc!H+U2mcC^efP>czFqF z0Lo6>X0ntGgkU)1_slS?5YRK!{}!ZqEm3DwzlF5D@9_FZyv_d|TK{!ziw93!5=099 zl3(`S8Q8+lP1(D=M7Wt8MsGz=-gN-F48Dh>RnLr&-FR|$^?P~zWbp@HmN&$jkf<{T z!BLMjUZPY-EuJ2#OUi?a`Qrf7KPrSAb;~HUQ+LO1bRufZ6TB8h>_)GVaC*Q2&vGDn zW^9ZNuqDBq|3b&3_U*&zimFp_i!2)e#|HFCAfnT#<b91N7_# zYgD~Jdc$EZ2TA>@NsuZ@Gtl8d@U|*8X6AReta2fHu!MSgHXYf}t zpKx)QCYpy2#qrMD{e&+`%K!UeD*IA9>cB^q9VlPZlp_a|m9M_;Y^OqDHL736GG&`< zM49%0`CD=Ar}z9(2OK)4aGuOvw&E^;SC2VazcU(8UU=RhJCVEFhWD`U@?#k+MHL^t zJoFBsB?o-tr-vg%yR2espY6Dhml<&xxhxGsveh-;lI33(k>;ixlar2k32M(@2JGiK z=!tM#xA-E5hmD2%;>thqBMPzf3Ts_levmDVj!vA9oTRqpD5#v;Qq3_mKR2J=-wqyA zWrao#U+>AVR4$8`TRBsE&;F+KT4}hW9zzQCF7Z9xVwdF_;oknOG$O(~Ul*tb@u({S z$?dv10*cRYtvtfhxpD(s^liFRT>!JhZKYUI5Fnj3TUn4(-A?&^cVTyWK@9}FBJV98 zNhCO6Ni$qBhy))c+f-ijXbeYT&0=^3@U+5OB4gPpZva&XCQvZ*LokK{VfkbB1XaC9 z3!ctEeFo1?)xs4C{J2eO|A3ye2g-N_6BI>X+@}KSQj9kDK-h)I_zUCygUBx+ah?!~ z<_-M@sGFB;u9EZ;V_p}!-793p(9k2OrF!)@O|cYjRpYtDU^m}ldnA!Rd+=;5CwHu+ zRahp@gM4P=ZnargJ0vT}J31L$iOxB{&5dN#T;ns%iGIj00dO2Pjr^-*DGd-#D_NDA z(0rr9a3%CoQZO7HzrqUrLPr78%ok$Gl}^cpSwHRz;q%M}40bv%BXnhLCbItF27Vkm*66U|$LkB#jm4j*(cHT9jZ|DBeLnyE+c zzSA4Gecq+)TuhxzOdY;Y{Qu3=|33Ofi3@*pgub8tY>rMg8W>ce`f1J*SNM_+y##HcT4y!E&q`;Tc*qRSiW>W2-fl%GC~T z3PJ{M4(zbyc&Nn~B@)hxYb-{sVcP@M+uVHnQTR%2uhHr*PSPmr-y?x>cob5 z>#kSs_sM|#VI2cSN3=`wC;us0TTR8&*4W;L^k2LxOS^wZQL=JS>ZT#u z=VxE6uOco_)QzmI_t_)obJja#=D_9IN2*%X{y^BW1b4K(Xb2*Qc84M(kf-Ze{2a(=XJc8%`UWf9NL{#s_7GESXQxh=4>t z(u%Tg6`lsP7;a(#irZT!DVQG#FT5M0f&;+`Bx<#RDKXXSWw|q(D0aUpRxOF$A?UKoJ;E^{L7>0sRDt*`QF3_FctQ^B^Up)p>-KTHGcD6at?ApO)Xh0+w^1MO@<>qd&5lj{9v!y5Ujx?Ma#=Y}2uKU`~3~RZVxVu_HUfb-W$s zSF;TkKeQ2$C5!Nrkt}_jRji#@B!L7NdlGwcXftARpmW-%@0}Kjc2sz}zfZPKvbI!H z_F-=t#aPOm%G~l{;-s~*F1w*qU27V~Sj?QPuKrJCL%HUZmR=>Gl4{v$8RLxeEb<}y zVd$HbXG~&lQWw!swmP|{YXh*MYIbVI*x=lVyvV*7LWnpYm5-dBrq6V7bwlmo@eb$9 z>B{bk@db&=IB(7BRefZ8gk_!iTzKWVwC3#PWSkW*g1i+P?h8P;4ZHm@oF71scjQ4z zXorV!aIeZ%6cTjW463qh2vgAjSSG2>oaih*W!pTu9IN^Tl8T+*7vmXd% z=451ujd^NZw;x0CIrD_o=MgTy2;zXp*Q1HEwzcy1*C$Md~3)c_C9T_Y(826RMoq z(Il9!TRco^ATEE7Jn*>HmZFc6=*F{U%rQ4Kb(;~s*TWXv{RqcjqF76 z^ANb+tZWp<>@|~wrt^vqFEbH+4S`J?ZB0ngp+TjrTmB_y9(#wX&-%4(bBvXygLvz7 zmhcvr3^7*7JCmGrSPoI^YDZplIXVi}#ssEQih>9qQwtR#R*w;v34xE1WX}s|&~cBW zHc7CQ-EA5ozZi$qp$kh8UI56O{V^L%V(Qhq{ZMa@JOXIx(OBD07Gm`g#2>I~`SL>^ zi2W*_2q;y77zQdnhG-B4jQEC4&gYnRP;jgJ%fZ&Yl+Y86GD-xo`1SgPjBn`_dCut24SH!`RGzM02kGE1Fqbe=53tog3VfVD)NSwM3DO9b4DM@R-N+S&um$yAY$Tc^~Aa4J}8~g-(Atv_tyQu1ygTQ#h zYx+)j^VmK@QmFUgkHH5O&GxrV`YPHD=ze#LE`QcDUTn&n0oFf%Gvn=~Yz*MBh;UM| z2vi;{37_zFAih`ezOB`hPSkH{WUC5)t=J) |yIvk6y1e3O_9PD**0!2^qF_9a!>r_wvaeZ4ugB2i@sLOEn3Jq>TyTtoM z3PPzHK!aZ0zXTOi9Qr4Pd#y9A&=cKeMT7!04}lY$N2^@Mi+741OSLwL$JpikaLjSD zL+8tnC}9d58{AtfvJka~iwfiE8^y=t3vJNHkAcw|aD}=7%ghB1d4G+~{Tt0@;Y%(N zRdTf)d<7Ba1BSf;>B9Y1J};>tF6(}zHl8w`u{s1#A}tV_&o_2bB2}$c$*&*}TYFWg zsiouy_f+1+}sQzw1V zN_O5XyHeI(VvS%nziw+Bk0Z^*6Y_3720b}FuYZQ~`l~3sW&Qy{;R^EG zw!(>^%%+e}{l-bdGU}p9dtanp;Yq9QvU?9=8}ZADrF0i)!8=-{*lU8YQ0UsZ;`G6& z_!`#6@Yttp7wOdBAR*kk^$IG=`ej8){Su4gd%?=i8J=v)jVb9w6>p zBkL7FN`8StgE|`WO}`kbv36#t=s3Zx0~fh}=nlDX(lc8=0K$rkP{bxq=tf|2})66{~!AxFQFQRt$xvfJbgD8vgulum>D__v8 zjXpf_;H^;Go`r2A^#P9DgkJCjoV8A{2fNVD=HOJfz(8=lut?sb@?sqGin zdO*iOJ+FC)$4)o!P-jx*0q~0oY(IbiBMm; zW1nhSWIvfEc#hRpdk6KIx#vE3gC84x!o@DsfrwzQ3CvVe?D#p%slUXjL?ChJml0>c zk<{ZL&%afEbhI*aV19h?#ZTB{MD90-_s*Gi-0yeLGdvC~ooEXEo1@%&a*8ciui^ig ztbdm__Vf@Bwi`3eAE}N`96d`cTM19O;frJCq{V*mwo)*6lJr>$($NH_U&{*R;^}ha z&bkJOd$%vqGks0nyE21K-FsnRjsR{B!F@S9;C@@cwudP)8kDj5mt`@_Co$|72axZ_r%k2IK1RASRU*%okk+t?C0>NAdGw>IBZj&9X1{n#Ii{e69WxR@PNx6LsdJQ*|IrmCMA2;)jPvAGNM$6<~ z(71`nUHoxa%3J6W@=P3c3;dKxE}=#>ZYBk_ym7$3G($=g7F>Z{e5Iu9c&ypOHOVQjwTL0g@Z2%l(fjMLC8>&>R>OW!Q(ovtVs z59`!b4$EP^ACJ6WKKHc_$S(<;o{?)v={pI6BZY%&b82gG{M=%unb}bD(@E!hfG5Nq zh>1tSSmz*~z8O!ezRdG=}hR?6r4A6YguIB0IxG%8ZAZygy=kk`!7n zFFeE^DWbEhRDZ;3bhY)##~SM!V=W3++2h>O$}HD)xJ6x57sfKiiyMk$L^as9vdb*m zb-YCH&x?Mf>C3aTbqcEvXF`7$f0aB5XNxUt? zkD15UAg3%Qu*|Vh?;iPCmYL~|JJl5&j(}O_n5m4N7~tDv9dC_TmYC^`+l!|hjvQGQ zm}!igGr6XDt&X&h#3rx4zY$!X-x5O`qitLBz+1;ARWntb_U!xPL-|m%5YwWGpG7m3 zw(45y5|v7A>}js@)f~8;KMT@ar^p%B&JQsfmSmbe+w|xg2F@GLBUh^$cJ|Np8)oVS z_WU!0rtz4==p=|^%ejtZMVvRCi1!LJRi?3=*PY1sDl?s@S=o>2Fp25Q+YV%rP3Y1{ zs!QAc%Bnd}CE_NOknd#tE$%%Owdy{aTwwt2&+0WM04q!R?{(>-fwnXTFtmFe7(w+bCk$OyMithZ@sRX|@ zg?}{j^-<)oMDp%j}4M&5{Q8%)GL4ES$)Hm9KmFcdH;* z`Fh-}g#8~9tGv@HX|Fn{zy@4%!@y69j=*z-dI`o9HOEcSqKp;cXMH7&*wmbI>r;)` ztT_o8Pqj)_*q4ICY&~8tUkq<0DBb!fx5G%JEL{P*WE3BcoHT8$PIJtM@9pxcEvgi| zjkrx`+7tz<6}uhpxbE>rJ&f4u^8`mV%k}11a?~l|^)dHNdKeLGJ*mcXLMjb(7qO21 zh_Tsq<~uH1{Dvau2{qS_bmUyQYLVZl`^74iC*p^D+;}D0t+<{e<4v2d6L)LrTpj>#hd~P0!qhM6T&iXEy2Fp?0Z7E%F=2A0?9rv zy?6ccrsfyNx^QH8y2Sz@dJyMb(_yqSGK4bW4j4w?#9oL(_8bcQkHGXVIB$5OYfsmA zAow8uLpbk$2gCQ4w3(5K%YSc452_#j*#MfS%_-D32#=V}EdA;J@GFzqAPadPnaqcfZ=1}GZ%@ zJ)xs%B-;&b=e|Jzg7^baY+BuXXzj?OHemT@sGOV?fn0dyu5lEkF4-)h)E!;H1-Zg2 z`NmEH;-L(dEtgDphowM_T)Ar*J(zE$naNhwK*`c!{6wR&d(So>O2+%+rk6ZP^yfh2aU0{pNVZIE)eEhWbNWpRws4mMbd)p1umYl&kUb@F zP*)U&kqM;PbmjEtBiTeMPnpW zqfiSpN7gHN$ewogoiL{=T|oErPn51i3@OTbb8BCbZu*{U#(aQPZtarl(XOSk>ZC*Y z2t%O25(_gq-F1sT$SyxFDj;-@RMFCI5+9{KDU^UX6oGVLz#|yIzd3UaMDWvNG}4yy z6o3{aJb6u;dmGPKc;e*|^+V)Rhy_j4Ota1y-5T!9?Rx;%$OH4r(bD35~mf zHd2V-Va&N9ZDC~ev8wVl8)Emd^Zf+?$b|B(o&jjAZ>>Y^uj%p+e-%tnc5SjdWGozW zo&b1+w{8NFajF5xytxWPx>SF7DyHEN{W#CI!6@cstFsn#yDEPsW2IV%5R^a~n=Cb_ z=^f(20){0|%A&Yd%a=E`R%x#m8CjtVeFp+%9q6D!RA4U_6s_#!T=Q_lgQq$-)U1QW zO8oH)+Rw^gkehK@kA9Z&@YPNU57Ej(VY{*#Ngk=-6BN@xWNd#D1H2miHvh0@n?;DN z919WM`sftQ5rqTi`lbC87srs8OyNClGGRQGJX2$m0V% zBR>D^4|fc#7}h6 zH3Or>FLW}Q8w1DrsQU*?j8-K3Tpe!oq3-7;O_ zwxvIz7E<%)q2?=1Tc5?pEha2{V_c)t)?y=ghVao1-Y0&JEDGExXMbA13T-p1_%zr$ z>)qv7hbSUy7-KO+dsvRsOz86*#xxB1_UWv2InQ|K`IeIAlo@#^c5@!J{{AZfD4ca| zQ<;w3Y&go6tLyc|#Od1+H9k+P4LKT`y-4h0zhZT|tu!e!eUXTB(G8vv_hGuS7E4-8 z@?w3Xe=Yf=Ppqu+RfFI0RBl^ zTL-=bEN`F5Vw`~A2cLh-?0GMnkNhqyhyh9|3Kl8j!9I5=4^yDh4#9{|v`PO6X)%=S zf@5fJWt;-jN`z;0&NE&ZAtEe4y_**5hRAE}(9(@kZB zqW4rwUg!XeacQenyhu^wV&KPJFoI;PJX{C)K9>v)2{cJC}toAL4_c{8% zU%8Jwc>o*Q$^N{olc{RECw3f%D9EDbHCY4Z%8n_HmO8f!gD}Vesk0a97cAw?6Rt+g zf-1~fl_OZ_nlszu2WX*VknPMBR}f*=62 zzpM8p&~&Bh(pvtzWU5Sfh08OWc^u2_#oD1QvlL|_nQTJ?D+o3z0EJtnx;T?gQ^C7l&-4{q_Sw|>Q#&U z#fs96pIzC=Q8uylorY0W>J?NJn^fR zn93a&N}^GQSkM2#Nw*(R`LpufU4H(ak^e^=(ErFx|8BBOs+$Jwvm^O7Anm;B4%-)j znrB2#WSN+~7Q4E{wnt{KkI$#Pj7RqrZq9ss&z9-aYf(WAC-T}K#fUQsyx$+T0EvIY zEc7Kw{?fnxZb!-o>_TJagvUrqFL02&rRQ!(kYnJ{wqO5_)})quI=Yfs_|)FNY#P4s z9O$c$>OjK1kBqYRsAugmS37=FGi7;C4l0pZ=vbaDu#UN8OYy#m4l>t!_L%Owqi??n z48p|k6um~E8QPEhDbjfmg07Z=pP;4T6gF5w!7dKPKH3r>65CuZc zP^+2#`PVS4IwF|SN7j)qUUZ6cSEGRQ02F>K*>3qz5UW944h-~ohJNLkm+zV&Sn7D0z~^38O-odcG9vEX(n+LrclEp9d>mcJXu4gD@1cMu82DkK{th z4Thhb)|KBRlY>{zD3N@qqNd?+1Nu%Zw?iUSbeZYpjAT*wH$Mb{k+l2D=)jk{FL{o* z-zZc$fiNe8k;Zk2RxDg3Vx@m|PwVR8$%Mm`EdG0=%xbmM-#P>Q7-DIySg}V5#Js^7*>QzFtnZeW32OP@LBwD&8?S~VlZeN7I0VfrRwQe4>2EejNFF z`jb~}>1CqKQ+%CaPxwB&01=-9fQgSNR&6%4mWC2v@ZEUV<% zHlhY|`#xwk%A^Es1n2q5gSMC9&&@hI=+Cu&*&=XF-xbzr#C*w<*Qq_l2M)6}LSJ2$t|-I@MZ(zoYL5|@{6z%gY39uNl+ zBz?Uc8uomzQexjDx}h>CCzD{d6|lf~0QX;^)&OyQ-Ta^n1Cy^?ZJVtk&5l^Mgnj)X z?m~*dH}B3ODFuW)Dc~=sP{AmUQ+S9T3alTC z=cuVY^_540^E5qQ7qtyP3a5;jz^M>mPIgxcj~RvUYq@B5j{eMp+#C-2W&cPZu}r+D zUb;iD)?midcS2&3`CF{=x*1T?z*~XW4PsNy$|CBIL8~1xH_YO43$vvFPoihdT2Ou#(0A$tSN;xkPvz&K+6|8e$KL2*avw?kIT)ey~d9y=|Tabz4GhCu(? z8HbnvK-f51wSasOf@d&KaIY^YQvb@Qz-=2lSSIK&l|qnoX8?``(ah`qxlgCN$%*_h z+9Aq1=M=A$6AsJEzMayVg=OsO`JR%HUKVy#mFBBem=2Ppt5`{)H(6HUXPkNlT@!p* z7=|jFl|NTm6JSuYyC zpV7_YXyxBu^1oLzT#9u2z}gw}eGTsA6-ScBmz^H6GIL~r;B_>G4~~(}h+wCSIGg`$ zu*n2BIhlhCL`i3mn|4vhoxhe7F0X22&uC0}C@LXyJuEKH@ian8nd_j`4s6OFwUx6N zV4r82lPl*M$YxAtcv{a)ri!+#YiOpP za|rx#EG5NTqXE1SHJK^mehWTrd0CZ_G?jBSc)x@G)~HAM7Go`Ncl|o#Md=^^3v?oI zJ66!GN#Fdvycei5{cUdl?rREz{AH3c_^h}6*|)3UjZbij))@l=y7!nTnA#Zm6D063 zkAmbAWM)tV!{qEIP9H?8Vq~-_) zRm`-(ZVvDg-6lZlj*o4K?J;MMf2n@0$WQuZMAHZD?vpK?Utx}DvRATjFk2n!%QdE- zhPctfm%c%=o*v78|E@$I3m*qQzA3{GzKHX`(07OfT+IGASF{jJ$b%(>peR_mEuR6k z8DB77N2HX>L**@n&oE=Pjz94&qy07K2KFuwLCa&bdTDhw`f+!reYSNg@EZAh=e6}` zo*lZSm^O=fE>kjx!ACS|R{U8v`hMAL1ZM(EvFri9rEJeR#F}=zU3i5~i;`fS@zC@k zvF`)%$t>*$-y&YUR;_(4;HGx@Y_dlW$<`ehM6teDEVnY=1(`6}oBL35Xx8Y4JzG=Q zR}YU0CZ;tCCNzU^22;yxsM?R3G}N=+n)|^>ot-vS}Pz{ zF@ky}Oc_%VsU<0|rHwL2dbNxNz>1}{5$39x3@xd{jMX3Zx=bGo(jrmDXy2;htph~YK;jNj!|ob}_RBp0VQHM>jU@UTYr zNCI>mrM?nn(@q^@bYV^%m1g>U(|_I&x-ch6JD5$WXLY_-OvLS@j2Ju|u7<`Ak${Pu#BZ4M!6tKT+JAl}9=iWlR5*}hBLcI!7dmeoWs1 zZYf$=InZ92MH^!zyk>Yp3Ioc#4H*$uhPc8+vF6IBGwV+)g(Y|11y1$us2laG=d26z z=IPn`k>r8bK5#9X2C{tYUTkFCl(S0jsh$%jbt1O}A%s+#nKJFI^rOXfi3NA`S^iPO zbw*@DJFw(nkD22mt}rUnaQ~kjJ1l#q%d$=rmCG%i#&cq!IMl^*tEm7P>^XaMO9r5V zXJ90N=iJDRHrA}&`6!G$%IvEV&?l#0|7G46nw`IclV9%7wPiH2rK*=M(Pn>=`;|L8eygXe)- zZt<*r8G@MKlByJW5X4<^hWZK-_AAxQ_an-x<;!@sdwNEadDnPz9~8^dh)~#8)4YNH zy_UR#$9}4P|8hOUGT0zNn6Y@ph-~6LYIe7l*FfP-ZZ@hrFXF7osK)>{9TPB85Yw`F zLIT}hxc2f3;Lj`9nE94(x2=?_mEuquD50}rEDx_^$UWZ$W^!B^)|LioHaDqo1+>!b z9ViB5lx21$Gg7aJsIf#f93SMAr&ni0&yP#{bbS-|GF}!>BGI{7wpPxz9gWWIIL?60 zeK`q*%08Zc@ZfhDckZoIR^p{|QQJvwG(oN6w-hJmy%h7@b2Nc}(5=&%5c{nZ{j+HE zyhiP}Mzp!Sh|dpGlP>PFSUyMMFXwJ2GiU8b-?A)L_PHmr;k7b#89lHQY-=c-!HRSx z5~+}-{?1b6|M8~63VueD{(!~)56fq2J@$C9e$uzQ{~SjWH$OB(9ajkF z7&nI*(6ny`B{%QSesp^Fyv<#J3=;tr4|dz|q({Qfr+G&2&{vo@kba>I5;hVw80}KO z`4b3*y9Xz}uJ_q*F<(BmMf--dDL2A;$(Thwl)Nzij9U!XU=qnM3oor?&%6QM`b`FJ-a#ca-J?bttv@De+esa(Spas=@_S|FTRxkPQ);%aW}Az zcypwv^4>BIQGz>}*ra}oWrdU&R=#2SL&CP)JNxuY8C{pv^3gKrZ2N{@OS?3^R z{0J+U`q98^2uSzp3~mRd2*%Mc9rBg`Xz#gNizlpPAV6X9?C`xmxe^ptRvZf6`Pum` z^2NM}`9{Z(W?8tak|KBFR)4mmaYfvT4Z1ZM!<%VOlI*Nu7rN)VLb8@;@@bPu{1N7A zlxCb~HA$Aetx|!Oh^P&(!*s>?@#KPgYoBb313>OZ(M3-vhW)MbL<0fe*RllL8R^wS zcr7xwggMu4&D-)tJX%rRVm*T98{P#nac?Vi8hv}AJa)97%VR9{Pc=c`3?~n)sqLvI z2ctBzyO$|1KroixFC#V862viA<#hES5>2QofKU&7HqsSxH}Vy6H|iBs0;w}&k285` z-41{QLRzQ?Kl>i-a|D^7owv-VAMubak!N2Jr}Hy{TXF@0_bgm%5c*Q@IAt%UAjQ=2 zqzuPikzBOgR}dEATg%MKx>I&sHadXP2eLRbAw*5AcQ?CH3U~s-ckc)HiaBHA)kss! zmh7rHNPF7IM5nWXP1eiR@t&xvlW{~sYxtYWzzlC;=L&J~MLEY#7;JmX$~X#M>V{3G z9vvYczaNrOS4#)$onAVQu0eum3n7%po<%7W%BTtTe*I=+MAKv%{$}&x98gK|FiPd# z8!NKUV@fWx;9~VNv7!I{iA$%>JxcRXF$I~ve7hWwuqUpgY{;*(h81c1z1mi<9@S(` zwrHx}-V$a9BC#oiHZI@~O3i86@Tyl`)zY`dgK0KSN(qrqVGzqb=1fR{x*!HUJTWSa zs(MW`VrDrvQ+H+~jC}+u=Nj$A-z9U2oIEKhW*_MX|g^cZ-t0@-QJG? zqa!*D_};n|WjCc-2gctwTm}gZ7me+|`kxwdIf5t^J4<*xn2+v6d^`zaXpLx35sd=T zoL73>2)x+*S_hFfZ8E_c6hY>_7o9v7cPlkjGY?(Yh-x~l^wc)grd(?EJ|oj|omQ4b zYf>|l#+;dNMo)p3zjR1RPVR@(hctamvPzYF4{Uk}bHfiqSqz^C7;X*6_I@ZaHfhn< zDRM{OJ#XOX4QM`F=ov@a3onyspR{v$Xp`MWn|r`4(lv}-ERv8ckPS|E9V6b$hSnCD z9JG>poNfeq*p>-}^*k&yBrb<92f)VjAH|dVNLU2@`VU~z)0He<{s1OaGzbXx|8idY z=MFHh8JhV)7rh-agB<-wE>f?-6s2R2y=)vXqxsAHdbm0s=KGJmqyK2r)t291Ty+t> zn-HnO_kTUNG=kLbor7T6X(7IV_QKzYv{|^FLEQ!zhx25WJ^=PiJsr=7*1TwXI=!Z9 zHc>xfHSexfZ|8gM3+Y%%!4OkqH|Vflkn2MRr0@mqI&?Kta+;}Klucs^Dy``j_&oZU zIJI;RIHP`56ahR-@J6(hY8Kfep%RVc*fU~(h9Zi92W$mEzOUNw2E93u1dC+-k<|H1;nA>m!7(?#WY!#~x!3aYF~HEq zvVXk=Dx-4W$z{60=FINy!R}GJ>t(ip<@pAO5?mv*O7I`ierl>|J~57ca#>_Rp@L4f z2pT=vv;goYH4EH}yRhc_1!&+yGk9*93B0V?o5$wXU8ssc`eqD9>V5I zDlL{#A57s}bykg>R$<%&>hL7fti;QUsSwn7JCIuOrL#7VI1Ul?JzsQ* zUTJ$vQA)t(m|ikZNcOe6zK;lA#jqw~QuC0%6hS~UMtSLw=ny_WNt1OOMmOpr%l* zYXZPxF_vz=)eeailZ=_LIwBteDQRoIYKt-JgY&P@j~hwbsj0^$P$J#)dajo$+UG1v zx223`(FYcbtV&*KnQ)cyx^Kenn&%lU4qkqz9c25G!Pw3>R1DaNC6TrQ66$Z2<+WiC zKG^i>R|{`6$Ic4N*z8Lyb7;s}@B)V7FrtW6XwTAMIajrd0fW z))2Q3_uVD28&uGzZ=#uS>gb^I#CeSMCrhZQTVURg1wPAb7-W;4!WhGC2%}r<8WU&a z<*x~XO)*PAqL#PD8r=pTSR@gc7SmI!O7G9SxgrjF?wyCEwktbN$Cdtg$a)j z7cm_-gYjF>Fzp?^UBFwgJkIjbUK2^b2O$rN@E(%{*B>rbj*8ttYK1J-G#PZ?r?gt@ zAN5OQYgDCP(_}1pn~?a<-C?kdY9^ulmHMVRzILqRB_;N0Dtttxa_7&}7W$+dL2-WnGe185-bg0}b zn<9#uT#!r_>0G+X&dx#ld2$Tat6*{aiV$)d@`hk6EOg*O`iD|jc^ahaiX zmXO?qmds;nQOvfKkPs!4y{{{8ug8V8pYIG}EyA!sMWw9+Goh{SL#9rXz{^<~B{8}6 zu+~hIMLzwBkRT^=?c45gH2wK%WXf?BTfeJbW62pLZ&n5gfz8@$QgRjeA2Dx`dC}=OaZ`^V^sU*p7*h z#fUULLcS;?euy9crM$|aBC;YGrv{wS<2bIL(tdb}_mF+dzPd+XK8#QOzRkMda&uQD^I*(i! zKJ*B=!DU&r`>+{B2$U1ZV=^6Z75MO?cO;fd;zTf5<3!3SUrXTDS4iMrx|^$5uhZ2h z)pgfOMJxR9DWHK{OI@7dEQD1j(C4_J&@{XTsQ|e;7;bSZfupnhx;#Xx*60_Ug`H;P z_auFBRMI+2@x*j|beTw4M7N^s0nGh7Pf2!n&HvH|IxkfEvsjteYZ->AwUkOswQzp<xw zaz-fmUKk4%Fg9U2wo^xoC1t}~i*U1S z#|%T}Mf-Ecwk{e%X(3-eFnMG22!#g?zS6t46bH^ShsfjZq&|F5THAJ;pGth=Jj5PH zYP_#0UR4WI%6#+ahBb#{`0mdXh93zuIge4WO-fIWkq7M1(9l%sS}XEmRWGQr_lAA5 zbSYJw=_5TpvS=bQ3CNQ=q$p4ipU`1-MzB$z6&-K$| z*S+t8?yaHY79lq}V63GF#R2i&m`!#IF7Ygub!00dG4wH(m+sU%XqwsQ^P@3pqZs3A z+V=sAd(kf`&9=YhYGIWVo2ChAk2_N=uwQwSmin5^@~=NM4`y}U;RK6`J5dQ??Iw2~ zub>lw0P8A~zxrKhrH+d06Y|ujz7=*IteEuUVIA4r_j`?GMhcHMGd$A%o{OkUfA5xA ze0d9Gmp*#9F5-LQUr+?d-83)CFv*vyc&!x~okova`bx>!JP6~h0nBcdz3YA*8>t`7 zZMRg2Q=Pyf^1oca^K{c2Y)xq49B~vC3s#y-rZ_ zRBGC0)gy#|X)v|ALlMj%$4xv;;NPb#QiyDzFc8%_rw92H5Bxg0Q&tZ#De2Ay-o;M0 z;|Q!U$!k|YOme-zb(bX|Xz}|5^FAuKd66Hd+_A`q+qN}Bpn-r||GOggyr|IUjNotsS8+t@f?h@yqUWGjT#m0`4Ja;Cw zU)~0OC>`)@0A7N^VlIl*8h+xqAFo#fk%8{z+3&d-1;-V+y@4zH-4r9o&zEzo@~QR* zj+Lwn?btqy3WXG?w^WSA^*}K1x4xmrA3)`69r(PxXpC;kGlo8p$q3j5oaoAM!a&>xY=Qm??UKxb8WE4sTZ^pMBhkV7Vt zPu%Gbl+$-y@w=Kv(u)8Lj>Ite=5EEanT8J;@ZbOPzC2dAurc@Y5lX3V*l{8vYF!_i zeZRKuvroJvE(PTg{anJgsb^(*U*@J6q**7lTx23iUR9#m0Hk|nSviE9g#;4eBEgFW?acQuE=|AO>sO5B1t;n8aIyg82m|(-fMN3@WkZvxv>`< za@-&9t2r)Jp!%u3n=KxwV+Tu9$WS zSokdoYaz1x5y;78M zto_u7{F*(VYsqglr(HOx1^VTuQI3CzT53wmd2(mH9hm$h3DGAj5>7|z-gv?ry>F^| z_4Zck3c?anXC%h7$rD#KWl2U3C1`HUS7rslU3PS%nnf$Hwpfg?71NP<9e>%+S{p<_ z&!6sAS3@M^APWZ zTrB2ssIgZsmqKf^y&1mCf|OkYM61<$ilf&_xbWlPnk>C&O! z{y#}T|IncF)7e0_BSApGQv7#<AUJ)WbnjU~TQ@z%Jj$BOvVY*a$%y$P z`%qWhXPkQ-c1G!tL~q+j%Yix@S&MJ_fG@VO?#}!95o0g|bpTm&HGRwNEs>VHm4}%L zkZ@<1kUhWkvevQIVbB{NRvL+%Kw<*xsdgTwym0ArHvS|Nw*HYT9jNEaKwy;TX3^bA zzE-AhwTPp7C$=Lw+TWoZuiK#Pg&NZSwa3`#LsY-}u4XwJ9vVkhUiDauTA8z{aak{Gy zlcJd_%wQ!7*HY-wy);Bvqy>M`Vq(+G>o5sK7P8P&3FP4sq|+V>(wurNh=pnECEIL& z=m8Lol8Y0C6S(&nNI77W$oLVu@hXWcP_+q+at@r!g@?5lqgOXeY!Y~JKFc(LRz7Qx zTcO)iS>wvnn_(nN^b$61n9!nu7!o6RTpWI>6eHE!h(`XMAW_Y5J9juQh#Fs`@OUe{ zY#&X1lbotuS!EcC*efxYR29wI#x7j(MC8xr=`WK}PdTToL2TVl5l?7|vh1Y)vN*YV z-U5Yv;eJrj9>4tEUk{_c;VQZ%D>FD75jIt;8nf1PAYBftSWD^7HmJ!xzgwhw|L^=4 z0j}xIJ98Cxta|T@TKhuw`{?K?Qx6ws`;55^yf?}I8^iY9Vdq_9*MfoD>Za7vfOn5Q z@SLzBCNY%940gqd{O%f+70+&PxUI6DvF#G(#Qw}-WO6&SB13mS%#6Bfe`;|n;$HKd z(KHyokYW0dBrm@wdPqsLOMe=#Z{)siU)c}0B*Y~zhEwl=UXRd39pnlF zDCrJK4Fp*8PL*j8eb!zVceqL>@7Q>Zyc zyh#z6gkujma1?d^D?T}Oa8QF2kxOMeyPpcE@)nf#E5qBXA!$J7C<$%;`(N{^R>$z! zKEA_c$yP>#lt}3UiKezf#z@l{m1@wiZ1@pU@?CK$HGQHs_IQahWf6fwRe2tdJ@WN$ zV(+hNSiRnzG9(csFT<;aR&`aJGt`5&j8z%o8`VfUP>lIZu_ZK#kZSyV+ z@Gs=QuH!w7*_YAquf0+AU}Kuj zh@7z$v1e#-&qqQd)GuVhnq8X^+qP8R^=-?D<)$*2kkhu!Z5Rj6E0j&HD}le8Jx13& zP=P4YABH)YRws^xDE&OERXt>fIcYn~G{{g?MpXbP4gLQi+W!hi_2lU7Y z=Oz9J8|~z25*h2|?%}$ouydMmDM0^8`$vKw`RZ-5)r7|%WE~0iXRwF+mlP^uDj1t7 zxx#^}6z(B{#~GyOK4hW-$^-<}4b?CByE1#_5|;0B0~ucot&XmRbp8$&{cP2{qsZgk zjE{nRy{lO=IndZx03QLPFol}e=Jj#*Br0`kf4S8TWJZ5O&l+dAzQ7kXx(FMuRA^&B z`24feiRG=ZX8Wfq-x2!S#J&wU|G~q7drzxRw(R0*wZB5yaJo0j(CLJ|Mz3R_1JEL0 zg{TGdT9Ms8+mAA*TVfTnU&$v>`($L8`StfuD8tageBh^gmB5V&5sAOq5=;jddaC6k z?{~Bbt>o}S;q|!vU*5Jnbs%_L%m9yBGx3~>03jFaGvpAv5iC$DS+-qj#yKMMBkTXF zYcXEov#?;~?`G&KH0@q;T%*tVggCo&_viHezR9PjIGn3$0FaZqDDN$<=1pN>9Khqe z{0V7q8zP_>^rypP1p!*un{w@YSHqNt)K{+<)RkUwkGelFZ?;UPhupFEXWC1DZPx0Q zw=p68Q@RtiXwtE9LS7>0Sjn=#=-Fpc@<^T~hN=BFP_V;axEzGVNi;{dXH31RPv%oP z%#t?dJogKm+*TkeZsaA@vJQ_gZAxl}Hd_fdIHNWrig0?9^c;R`J7`6XUD}XHRdRZG zq71#?*TYn7W(H!d=Sq@fxDX7FreW9UC?YjnE_>vYVM)&PCvlgh21tjKv zWJcC1T~;k)jeX+B!m58_ZYX*ft6tOkyK<|NHKyZashVTIB zSSjqM{ai8sekFgl<@?Kd(<@ic9B1_xNF_5Enwc@WvoVY?z7!osOJRmkP1#=ye#u<= zBm5U;LR0k#p8Xe&b+M!kIa{owdAu9P7V{Y+I+?qbv{$~MWM|SMFl9fro{ZWV-Yk}7 z`VQ73Z(dL7(lu|mEBtcWyGw3U7{&k#pAqd?xnCY)TZA_GGZ8N0zT~?(GdjH!6{>T& zN>;xcLRx*62Xkwdo_l-ncjs-|zwfLJKhRvv4}P7Iqd2qU>yd2<#Rg74IaV}`Wd}Mz z*R)IQj?OwOQOP3-CQfUOX+Bp%m9y~5QXykh+!$Coi7wA0pUW0MG;mp${R~rJ8A~ZK zY@v=-aIB=#w_miGKN{B@Ygn)mj8h+m+TQh(UfEE#Pq?;u_3 zGFY+v%PMx$Q&umkIddjTNB^|fN|eEHK$348htCz*!R~6N9~0e9Q--8ISBGb$7v+KF zx&&&C9B*~@JN^*m%(NZz@{(TB_7hvnCwD!o-#jU2SY z-S(RKxm{BdKM%uqC~FHlcBTY6u7jUFdo9s)B$>UAZJd`7PFv-A8Xo{!IGsY)m=P zi^AOp8$Fzjo942$Mam=u!Me1{~)6^(llE<+teKctG z-qhjeu0a8uR?eW0=7>b87-63{1JuR1OS_%M?#Vnq;?K!Dv-$#AFDG+gdD7uGISDC? z4krj@8Kwy};Fc`~*<-^oIQvpR@YCrWkSm7~2RQa1$Mle9t@S&ptI}>N#kVn{(mGdu zNqDAx5M9Z*vkAvr`nnLU<>`uc-QG&)ZE28Cgj>=IDgT#XX#Jj7@vN^#2Cwp+wxl-k zShCaHrqq)y;#DjchnV_giU zP}TA_^imJ9vr6P0Zt66CZ)OH}#+#v2D2?tPysqp8$B4?>ju|Vyf)Yb^?uAh*V!WzB zc4?CjOCNpSFWI__-Yv&6=An}7Gzu)yP_$uKnE(zOq}Dx@Fac*=Fboa138px)&Uaz3 z?J$0BPZA^oObC0=Comf$jJApPM@_LK?=|(NiPze~W^X6b<<2VvDXU*ZTooqL4pb7~ zQYZ%$cnD=5({J=DqjKT8eeEh5!ic?T8s#bl{F=E#=qK;xL^(y>q^1AIZYeWX`am5G z_7OCF<;L0fN?|1f=f#%bQXElJ`$U=fZeJr!elO$o@oamNImW3MHpK=U!vs)Iq6~Rd zUy#OE@9;GDR#23~ofhglQNR^zaTCYuodi7H3yV--EZzhdF`*y)#Cn)N35(8+tJ}=9 zl^QJ3!e8@4R|8tyGoM?E z-V)Huw|s~kYs|-17e{}%ic5Yi9dal43o#zMq9JB|8sA>YOj$^BD&+nWgoH=%w*(*v zQocufyNDrKWNPo@jd@2HYB?8Md!V#myD-Lzb9JCu_i=G8k2OyHA%FS8wD_(Q&Mo3o zJn`-$h%=!ly0&e+BafxuGP`Z_;o9SA17M=JP=2CwKxj5)la&vqWPnfVqLeGyP2|n6 zVX&5`Uk#L^74L-b+{eQ;nL+7P(Kd|}HEtD}AP&~9<+h`-R+P@Ky8V`^;clQ1fLUU` z5&FSjSCxACo>rUtE8b}#W8tVH8#3czJL-4YYlutlmh--DT>b2_`@v`7HouJP80E8@ z=RROIp2QhMBz|YUf^^XliCp!+3}}(FEuLD>W@bzmixrg^I_yt0R;)C%=e<4e z1)y&pT`#tIx=>D}ygg^R(`4KIorqD3{e{nS#s^OFhcA2Mp7qyF3vS2%K{@^V zAG8wbOG6a(hg-%U<^LW`|A*ji(g;mlmqPQmpUqJMSg;eN#EDzHq-O*-uGVu3pN~rs zWR!o~5kUwL?WX-4biBcl?cA)PV};E1bLr&iHqYn{g7tfz?lm>FjzWF91sm8Tb$}?^ zo753dfE=xTv*ETfgrMo4-A@qhp6gJze8&b-UcI7A)w{+QK0L-1?glP(eR{r(eAY$CU2fO!}Bg-`9y>)gq(ZByHrq-mj$w z6)TuKStVTbrZQ~JU2)Y{2B8TybM?$IWv{%6!t?j*S6&Ge7Y)A^kiuwk*eAG z1$L2$G;~+?fWKC=8dR`O$m_VnH=WRN!Niq7Axi}vjND93-N}QLM1?fT$btZmRUo+z zcKPnp!!Ai!HkyJJ(;P?SF#B-{DQC#$Tfk7yrVBlD6`BvpSJ8mAL2Z90;NC+ewO+-- z`twE-a$k+$E(Wu4TwP}sJ#eXHD)P2aTE9*xfioo+urE5HU-t^uPrFdqfG-$`O*^Gp z+4XZo&C_lmU(ZBeAkZb5_WrWOGYm!oD9;gKWRCoxU+biT_7@%b3}mOxI&hV$iFBx+JKN>J$>Y(Z58} z4S&Vt7!ZC7+Jm7rR0^HM3-EXs>U<&V`4R?~gSya-xDH5KIteH%|3q^qqIs!4l0YNo z`_fF=b)!-P52Xk#w#?8lM^C=G_4eMHFGg(D_JpHLSpqV_UA^$QV9km3MC+SNXp$G$ z>U(o_(OAXr>A`s3CQjsxZf>oWUDFZdX}w)ajw>=3vRB4f{IXdlVoRF^(T74@&Z zyKCV1Dlq}j-did8WaFLFw(R05_CT;pTt3drI~NySFgk^7%ndoE#)_MeFSC2DRTY(; zC#QRE)9{oP6+q9R{J+LTqauR^e=Ue=(r2}ln*BfZK#-wFIc&p)VHG}pMcEJMYa-oe z4QQMIyq0K#(zmjQ(f?$15yAiZ{)c4x4#FABDabG%5*c{M1_6>4!a{iZ*=AFA`9lWE zT!c13{kQD-gGfP$;IV<2I@*Wn{$)2R(=rk&6{j4-B0CaeAya6!g|y6DytYo8vSm(8 zJz-VQ-F-e!NXWtxI2gr>Gd0W0u}r54GIhp%6;XW2v{UO6b&bSPjMR+1>p#RI{zLy@ z;W(J*29?c47YxlJEX=YkWPAk4t`32dutVM1HbCd#n$sz`M^fu8 zni`Jf-47l2G=k|9r1rzC);xV*`Y9T1XJ-=YHzgPH=Ij5{pQfS zckMU1r^>}KM9(c3+*gM`Z3kd5UK#Xw4kF+rhUh^jaUs3@k6BjS6J(G40l$(TW<|dL zMtSzXXW4)G6+<)E{~7Mb-5C-mSb761=}x zxW5~Glx6fDZ~6B=F3+EpB_>t(~8ETOooj+a26q4&|Bu+_v!q zfh#t?eTKt&w;tbNF9MOre>GmQp3}zbZVd3o{etK$asxr$AJT?pO!u8~ysH{(DLN4! zj0{+0guh3hv+H460xtSStr?Wy9VZ(xx(#|FQ>l4y#&@z$gtg0f5^qKeA?@lx} znZK`gMZ7^K&Ews(p|ZWi4!(lyUGoEQzh#bud^5A@N!cKNDU(Q7vFm|fdsRtFylD-)LTljM9~7LkX@>KjFEin;uwK%2u<9(>3#%bCbOJ}8>NdXzYbuUT&^r!YchAQ2 zkO9LPrV0C={=OL@o_F=v)ZuqUEm>S)7-oEpspjzd6oM}pHUz)sPhSUBfschZxy|k- zbca5XoG^X^VF80vgsoGql^Tv0O#*Yb0yi>uH7CfH4+R$KBTj z$*+#k%B~Zs`zQT@Kc|iKU)#^tIkpb3bWli-sL*R&42;o#B}CbG?;9yYc{MRiyxpkZ z66go|29lkXNvaZX{O+uj?hN!_U?cI?zWH42n@0TC9xV1-!{-&@MP$n&duQvt7Woe= z^>qQQDTwBZl>}1svAxbkA&CO6=SpvZ#FQ<9&-QY#<$P=Bmp)nPFx9S^Tk-mrv$tHs zP;l#YL4}6wMUW^A7^lT#878~WBxu}<(9`XVVpFfDftYq1!nJK2vwj%G818&R$s>r? znG4TjPEM$_32E~Pwu^_sqg#_CRT1SpepOovPjMg*egp#b`O#Ca$bP&iv+@`BSEfga zHWq?Aqr_@yD2cpb(EZ4UqK8bk{fz-as?U6J`d{osAp~MMTdiN8iQHGE;D{_EFgf`~ zaFk|tk!U`8&L*AnZclu}AiTamM-Ac)MNp^rN0pekNY0IKM_Xi2=8vczaK<8vMm)(e z^bAo?mAm~8ce66iSAM#HNJ&x73No_1p3T%D(#{z8c_waXV+P^*y?5!CRc-Z5NBLr1 z9#r`QzAOjr1Ae!Ft|!glsbSV?E%wFm0otktcLa(H90fm75;k$<2s-gTUd<8j#{p;m zRwwuyT!rG_tSp3rLUW=zL0tJ{Pw*>DMC*}DEWg4@qIB-60#txar_Y%{l2-vrW|2b} zkqj;TRz^`PCP+s9>88lEI#b|iDVTe5&8R}5CL>(%aOHC$VvMN-Zbp9;Gu3B_v zdH>EAFjia^%zW?#KR#4z{Qnik+B-Qqm^-+!{fjQ>|1gDrfUG|P-|0ugz^863oKd8q zo!^g9x_a023B}b+q$wF|TWW8c@9ObHB|jHZyJMU-V>lh9p3mb*10b(hyDN9NyMFga zU=}IGgtigyiKq9NS%s^SJ(w6pyz-*$enH`LUPg}Nb>{3xO!qJ;3Hz5N3oXuMBr;80 zKU#}uwNl&*xmEx`wgur@c@E+H9k`uoPVI?htD`rDUX5hL1s(eumE}_~CU`L9mV4u) z#cn>TusE0PEv+l-+G+&kWy^0iyNb zgd@8ASGBiTplPqcH2Bq_^ zl&^29m!v`p>q2W`QRCA4%cjxqcn4AnYJtVUZPVf@z1+nRS*w#c;?%^~2x8^`e^f*>Y)@$0!GX2G7VR`jpPG4^B1KUc+F6>^E z52PnNN-NbV;7S>w_WB0i2cvf%<3pPM;;YrqhjMv*&jKlZ`hi6Z7v<|rIzZf(w9CA% z=p2VB;3U`sj}RHND=UaCs%qs1)g}86Uly$#qgoYjeH2%e`;srBqgq#pCsdd8wXiVU z71@CFw4JpOv9Jie?v*vH^qNI|@9dDtiHfu+Z=?S!voiqoqq z=L0Rp6wwnIZb(;5UpJD-788GkKtnQ=a8Of`@kqZd?7uIc>Y>xPGcTSyP#YzaYos0x z-fW!?EEBcMHI}{;h&#EDPI&WK?qMRoEM-`{OWEgEXtzl-P4aPM=igP72-)=28TtDU zvqV7a>9jH|!KL~UJ=~w9j^)M~cOrjO11OXtwB(enM9MPHg2?bN2He7_dTFI%DG7VBUNp~ zf2rkM%C3lLP1ahTuD=!=mHsltW#SA}<9ziF(m=#Pmy%}EIWRV=UtM0(ed$1^TyCOj zi0w2nNLOzBRml0ypcMTp(T({p_H08-w^UP|me;8thzd(>ldAtNG648ae;ug2?~ z=2}X5<#;n;PF5gdPBK^1n5(bI&<ka7T;1T*Wj7a*k zDVjm?1k|Do;-#P6`)LY_Mqcskla0&*@$Xk{Ctx2|onY`?idDjFQGRMc-TB}EmUBKL z2=+EoyUAeGV|CyaJH|V^S7Rr7b)Ck+V zd%d5YA?w`K;$XhgoHAgfd2#qw8oa+>m}4S}^V9nln&a(lh@~5Hy0;-@$r+5rL);al zXWAAkz74?cGT*3hd zQ2MIkNk=hktSYD9w0Cne%$ujy#oOkhtvb9;+1vM;c~HZ^XKmFf9JT#&G;6z1pCu_BrX53Is$y9TieZwe;hN%6_$en*}o9W$%tKHS%ZYsQltG$aTSyrRL z@9^_V)4>SRyu?1$a7?IBYh5JV=n(NaJ*I2r^?hT#8C>QDL(lr|mK;%R$DJfye5Em* zvT4M!hfz?dJq+(VTEIB+tdEhcehZZLVLJd`yEVQ5Ep&Q;BiO#DHgKe%76j<%;vt}N z)6cujG)o4s)8EJU8zOC8s}Xq2r%8uZ2nJLt;E5bG8SnV5SEhp_cNX*(G1VXl3kEl{ z#44lEJ_SNrH|JBfb37=)k^}(pxE`M$fYrSfTrQsSE z!+1!Jtc4+5%tu>5+v6aVMW%COV_3p0`8L8?3y9zoEBf(GTv+)i)o9_IDa4=*fG*E< z=afCo>=?R@^BMgiMSdQ-)bqG+UmjOkzbhA=YwXZ_Oei-`MPRDXPt>Y?=+wONP-67n znVG9I_0U3WV4_+H_ZI{HV3!NpL&tzx-Abnw$EjVZ-oZ#~%o4=Pl{n8U{>|@Cf>7yJ5TnoEVc?**4~0kBg(|*86qfqt4kbCS z1F$?jJ;S$nvy5?dB<*(P#iLI^V{>yxOVw*6izOqmkf{cuz?snv(N;ubRNt>&q%S|) z_6K@-dynYP>&;htY?)ke_^Kmik3V%!VRrLrqm)FBUSnOaG@&8SX~^DEs+rx(@yn;} zf5h5e2>!(I;;x*UW7&sfLY+u#RcA-mFQbFScyrd+$BUnnx}b)fWbM(3$~G0iU74a% za!Qfb-y`H%MiyLXyR3nd3oipCpK#X6DHe#9OJ>O&vm%?ocuk>$5?zAli1v6h&?wW5 z?Bd|-hw08?@5nRIejn1cT|8T6?w&w)|Frvl8=d4D)+oGWN#0&ynLC@MOJ&7fLRYJF z6Te|o8N?hp%QtD7%nYYf94*FIEU!0^a6L@hQ?l8C9h!|DmR? zytNmG!*3_0GIsS={l**4yI_E(GdcC)s*fS{L56$$WG@TC1ra9%eey zh7*0i;Td8*DXbV#KN$*KJ=C&Z@k9mn@T@4Rn z)fb~n@QT7(XCPRvvMNZu;%zUE5`h>;G3uL@cFuG6B_pH4_9?#>Vn9ZGy`Hf*6l@Mw z-YIr0qD^OFGd z*kj8dpy@l(DfU^v#@rg~?0%X1p%NBEjcJ@1qHLmHhKu;53J~nZ?-89|14TC<&bi$C zzggGO9||4zmdLM#vo<3kD7}PsPZY@NumnYmJUBHLkE-q++EC1m^`SQLPM-ach$3Fh zx~Pjpl64gvEJS>d!VJ11u1=E5V#cRV;OznHYm&hu(l--gS&MkZy6DM*bKSNH_Uu^l z+x;fXL{$J6vl|AI-unl2OC}i39b`;iFHL_SLb-yu;&nsQEn^$M19yu*`0-lsHzKw` z-w*@*%dmf11?-)~4TuVdnFgD0F#Bm!)*a_9;8n9d~! z;@voYU_ZzviUoPX__~sgAfV^=IFVMw$+6H&|M|y5GJS9YMZ&2Krz#^&n%NNgDV5Sm z?UL5Dh>6_ievq9r$=Thrw3SNPe(TcFr^1jTzQkv?NZOVPQn*4;gP3}0GHoSd5-f>6 z?WNNkj(%xmpK)W`e%%9dQ@h>7*q6P(*9BF`#z0}Xz#1CJl4EnbRM9f*w3q^=+IF8W zAW2FwE6_$9LlW0+E8Hn74)F?=$Yko|WIji}pJs_0psR_$#qVi^w9-0`ht12y>XLZ1 zq}M?{_dSC_jpj(-RkT^5~*;aFLpqc<>KOkyoJ|t zZC!uJsuhEyfiD^;LUp{To`g+sJrr-;zq_kap)kyTnzVK_ETb7(V=bnK=^ErwlUm^W zUE)D3bd)4A25JV(+Ll3#4^XG&!;zZg~dka{4nk?-ck56M)=Bf4dWJt^RBba za^PBIz&hKLLtHP#Qd00W9;GQ}^J)&m>a=Vpz3RN4RC;HY>bKM4^BlDF#KwHt`kjO> z66;AGE4fUy>FhRw{`UPN3NpFIeAVknc0{M#mG^W{eGCBHiD5V{fg&uEs25OXlUOg6 zsz3cQa8JaKp-)uUtHRKuw1$7JvdHb*Mc)$uQom=rxbi=L{Oeqlfw$?D{+f%MU*?Ga z6TD_2`|kr%R?>drj$Mwe96~)3h55H`F6_(q|q|e&V+UgfeSEx_$t7bXpip`U z9D-y27S)iFqgEQFlH-gXW3dPK1hF+^7GW0aicWa|e37F{5O=ZH-%~B7)G_s}2%ePh zikC|t;ZHt}ba#k>f;($c-{*mT2}(OP`16^#`g=S{$+nOZ?Z>KX!#3<48vApnk@)@+ z=BfQ*nM|#l4&V3XhPdcUU*Bt7q;5RXKC4vaa6p--8c`Xq@%?hYZrW?2BvbLhnAIgP z96lcYtc)tlRzZHKWT&p;AF_;B@$3HGlDp8c%4u{oa7GRnytGt!P^Zy)H~Nfr(M=hK zvQ8@mit#eMcnema75MI>7YG=MPN0r#P?<-+ZHH<}Cnk1d^@9}Z)MC!sO}{6_KrQ=V z8?=DAlo%hbRQ<^eA|GDtEYkbf&UnCYH`tV+sY2zT1=E>@HeiHXKr9g=^Oh|%mETdp z>h3|^dop)UCQAfrbIH&sS-!gLbVQPHDZE6&QO04myaHY1UGwn03AJbXpPWqv*)84t z>}l=^zH+-wI};)rEj)VndjA}R)EW`k$BU{hwpuv^l~d5F8`s5(P(-L3)Fm2IjG=4f zPFYkPYjM_Mvwm^rS?Ln^Vu!(DQow%22^pKTCm42UCxGBH>x?T;U4R;O#esQgOY_&4 z0bhVzu0G~OYMKpbx96i&s`*H0@HS-OccFK8uOy>>)$-57zkJjpR!OYW+Ln8b4vc#w zf{wT~|@cs98IiqJ&-}@c98-)FOK`IDk~acyHV-ZCQVutFUVE z{0NR&uiR=iV0{586{_dI_S|}>uhdpr{0kw{Nf)TYC@^1hx~<(ha`!6IOZNO;uyW%~^C?8jSW$~fi%0l|P!@cjP9N^HykUr+#>Lw@TQjNc;5k)+<|g#ogX zNL_~Ke`YMA)JYR=-rZqYeY8^N0_v{EPX67yN5uRQq`cxI1giWkHnZ`7*xgcgn;6`( z>LE6dUCcMsgkSU%d077&4(Qb}q)D72GF3eWnxrWTlrlc=ZD=RfG2f>8yIdNPoA4y^ zDW=1F3=@JB(aTuOQPO7-j(2~*Eax$F0{N(`xLjKNZb<{IWkEe}K+_a2eqt)w5)g}vu9B2bJYD~&(_eMZP}DgT7Jfhx1H5)xSSpjz;1RzK0{ z=NPuzlqWhS9O*V1FsdG|!5{^lZ@isR%CL5ppWW4=T7L=T6=S{F|_^srC5~ddikL-Jh zJAvG+7;Y3quWJamMF@>7e>VGb7Ay+p6z?;|!mOxKP zU}=0Z&Nd-3&wl5N*{t3V0)$nTB{`_d8#RATG~rY_S0HL;E9@bI4p+CG4?XG})#uNW zwp(}E)#v*$&%h#HT}IDyog4@L$wHIz=R(<%7VgFAo%tmFam^s6ZH(^rs7RU!!&WJ` zN+cVGVW+>p_cvHv4hsEpy0AYIseS)`oIiHeZnb}Af!`K#e6De-Z#C75e7hT80&Bue z<@hh{_&62SMp7-w}mzZNn^+#oC&U+V?a|m`Gcxj8o|K_Dlj91h+O6_!RRe4QYX_bANj3k=tU$t zBw&IFXoANt97J@SsAY}gK7(Sd-Fts6t%D;s^K2%D#om>@Jqo!aORZHcj;N}Nui&&k z!pDxIf<8GGWf*BsR|rk4X|6z3z&609Ux;mDUz2LM5%~U7NdPHRflmMZq`}TO-BWzz zeu|O(4)p6`2!a|@E*M7IfXd92q*T%2w=n<%AU)b++KD7gfVLvrm6(Juw7et{T_zcx zzrX8V@^5>M%SMnh>m3)z_|)za8Vs%Vv^iZn&Cl4eRtslQ$v}t4JAV_*s4a(F#wLYhk;k$Y?Wav#iGh%4zpSwCQDi> zgQD|w0LzDowxgfyhFmEu>iX-yR1X)7Iy-WvIQf5+E*e?wAKXNDQXH2{kCH89z8^-T zKAwSPXWa68hD;^TwffEs@|Sw;A7wrS-8FE+3LS$EtbPWUw|M?7fpDlEL7<{nMCcK2&m+SYmRu6L9n8 z{GQY682L*M41}196E_!IEr95!(Kh%ERE^oUJSZkH+9{>=pSb70rvy#mbxM1;htv># z^-{X@f$SX8nCt8h49IkPTkyFNUluOt&HS#2VedZr$*|5pRTWq-qW0P%wZ)S2Xi~c5 zQj7q?8i-R?{IB8)!#mWnfEneNH@HuA;HSEfI5cELFXO+03Q`4K@P9OJ`2B}ew6MOD zzJb1@@&8A)?EC*i7D2IBA!lp?GYd%D=EBs03a~2IA+PIf+|OsZ1w;QwvuiBg!F=*Z zq}$c&;K$do&KLZOt*d&QI8u{Yf1m(eQGj6Z4(qE;BV%8d&~a(skn=&Uc9G%n*$wrz zl1p9)7oSl3j_)ggf)~M)YX^5;tdi?sR~E0iO*V3yOcq-o-QoKK+Z~cSQXua^tA;8a zxnR*?y;6jTjMLww#+#@pDpT_&5f1W+Ps`LA_qi$o1JRr#I^anM!nJ+S(0mF^-%3f-bl#tE;E zi#^)@POa^&VruN!BK~%(3~Ax~#wej3KrmyMi?yU6t$R0y^Ov;)nhZA33>n3^7+M{) zKDr!x+1|FIk?j+zLs)IVI|MZyBUP#ZZ)v8^ufd`RhH5BU(ljK373cKHTOQr1do?2o zZvX`ey-{)#g_SaD_7KZGQpWRzg{&C@{(4)zTx1?P4->{%i}8(F9aeIw-cjnp^WF`~G*6E2LUY*|@(V0KPu;07Kviw+;JRSod5Qv&4YU^op6~oRtANSWfWYs$~Dp z_NgRqE1uq%s#E|EIWigfyhdu^SNXk+wLkt##B0{7Xq+l$3jy(sZw_<#{2$dD$gP3F z<(}VTFwXxS+8*%Z@#iq+;OxXoIq<{>~c zW3jX4tck0^rQH~$K06`Y9Ljd6rml- zH-RxM#qh}+RPUiaRk(q6{WOtqzE>Q+S57LIfrWdo$=C`S>CzfspX+|wuNp};R)N-H zR`=gmYi4?sb0K1$s#3~G9m1)eS1IuXRcYy?foxsw zEH`=oS`CdT(fWy83}<16k;&&R7rgYSq6U=XIPH z9+s$-IE76(ZKfevp!_zg#?4bY#b>p;dsf8UdcV%<+#%2Bik9ku6N7}|{c6?D@^=E* zG&q>-!x0k%w-p9uMlVw33qHsKN7vIWavX7NB#kE;uKm*<+N{y@r#PHPZh|5tlt?_s zXa>buae5j?5H*W3uTD5lE9^f1rqm@ZzZGQt8i_?;Jj;KAVg7d{{x^onRCadV@=a2WB2}BSZK=xpW zo6Rt+kPc2fXMvvh^ne)EeSTzk`9N8Os@u5%9%`^Oj{WF>qV%I7#Ju9u91)?y``l8kZ`1JKiu}YwN<5QSr6pIEl7l<-jbARz+ zlR5cj_q-w^)mH^5M7W#93nT{>vC~yRMMHMTUQM6kw~6t$Rd>XWw51$6Qz$SDM0J=G zRUke&cvS_JUwFK_cOx_#x^+wj&s5w-B6gq{zqN zn8}2;*;7NiCZBviI2p7Wa{gGl zxTVf;;9L{;hOb-HubL6Qoo)~v!KQs>u?OIAI-;HgIK1AR9v)i>gSAeIEWLFBwiGr^ z%{>l07{rh|dK*m=JO#RE%8V!P7h`pX52L0Xz$k_-q z<=Czvh|}BfA0{D?VAB`SrHZ&2sN>S5k-7;mS5GG#9mTl`Xsx5uO?t(wB{w4RVu_iV!@9AqFO<)*npp9>>v1L~`Q2z>^5ZUo&t_!1`rPPkKNd(r-{so> ztF~Uifi4rJncsOWajp(1`(4X~yoVB)fy%vqXOdPm(to7I{$xj=dS#+4^m#@*eAx~& z(|Rsc%=$N+>@Ts)26zEOTS2Hvoc=Cr_Ks_3{ z=>3P~m`dKJ(%Lp!>|=s+(@RMA<8IpYC!s3+ivra9i#tQql~?+FM{H3Frs@p}V==bg z)XvXzG@%!4S)XZW5OYzid0EKDS+$!8I*_Ak`v~aXx^;yCdR-(VEpdqYq?HSs+{aK$ zNNx7ZCfx>G51-|WGM-U*n@L`6V_jua+JUP2;>$@)K2t65vOg9Nzx6OWPrP&6J}-Nl zQ>GPR2Y(hJ98Lr1uaue9KxI6A_WceaM!6O2Ne`H-jbQ0tZkNuV{m*lLfe&G<#JGv< zXDa%L_%eQ&TOLRIKh zpvz??Xx2l=ug0hfjV*=r0D#vMmmNF(33n7zW>4pikRbNv0m!P{!Bu?-0eNgoc}EQ- zv0e!&s^Xk0Y>nV8ahE3u-laKNfW#5ND7@{Gfm+dMN5Ij$tBlCx^;^|3^Sk4?qc#48 z5os}(wS7@seWv9eA0|%gaG@xJqX^b>wG{nXdHoW=buAoP``TuXo47Juq#c7`=)z`u zh1F`$E%SP0At!6dK$)KJ z5^#Uc4fhNl@FTUJ$To(&NI`8O;-TyU=zCVcO`Gb#NGvJak%V(n24cxk*gz_m*V?g` z-(J~_STEz<9Jvj6DdY?MP|U3~TChbX4J_6i?t&6UG?8O+>FFs^YE!%;B6SnOv2rZF z@q8kRcUc|q2=udX#gBClg%7`_&J8?DbPtUlIkHC)PT{5Djw6~gL-A|s=HC(`S^IuD zh1m7$p9#tvdW6aBXff;}C=S#DfKa#6+dGQ;(AB~Qub2ut7_UybiE)iNaH2-WBXNJA zbNKL6oj_@039snen2sReJeCj&kOOs^{vC$lT#z0BAV5HVq5fwD3IF=P9#?TT+#N*q zMy+8e8y$BdA`BWelOH`J+ka?I=8R{s9GR~I7~70WZx+1yb}Qc6~Hk}27Q?TD|7VmX&b z1lF3&Op6w8Vh+6dRjeKy^I3j{>0d~BQDCU!qH_g%iE2 zXapABTeWuPE|;ntWAshm6`M%ki~Xb|_9sCu$_*71x;`MdBB4UG_8_0KA@1UlD_0}% zmAD8XWA#iD#|h?E5p@pZ>^Hq%(#a&4cYYX*n88dWtY>Xu9 zQyXv7%2D8+Ytgf2fNE0W+Yi&=#5_`RFY)SAS_Vgzy}ZR&gWqo3b`g{^szU}B)|ATe zcDFU=bKCH}A&4v&-@oMiu`GnJ1)6s6;ksX&-|L+$@v)^q8-qoGw<%MTcIimnEGr{} zoNYfgw5)KgZ)81+HVgSKi`$(={Dy!UxM(8HY#DBeAeqXH@`QvE3~lN1)d@h#GUWUh zInwj77X3gE!Ih^4VUgFY&#?y5lfL6(3%)~Q>6cwSen(IeLj6;i_{>OqdXWcFSZhGcby$Ghbz0CQzLy^(bUSQlnw&ZvxZ)a}QNk8R&$zRv zMHZ8~gJ)DoH598cqQhx}pbtNs!yr*Nv2>CM%32;0puVBXaNpQ-%vd0hUdOv@qonx& zN^yU-XqHTs05iPtCNhZWz~ca2rELTzM-FPYDg{x^XCc~)l_ghfT-SyokBf6v{Vms$ zkV2L8j5;xY-|y;xkEH>uuR)V4kv+8=uRsFB^=7kFN3H^ufN`$|yN+v$U~Jz{m0;0B z@FrPJx%+_u|x|wh_he+*0kJXokaQ)*W&~&(e?C5jWf;^Vu7FoaYEuD9zRvoglG%0B`3L=3X-<9+VWiC? zwKcedMrkm{*05JpJxAEBh${{o@Ec?>n_U+sFG$z2TbYxykI2Ve=FN75=e83|+~f6~ zhrXAH$x67MF|RnSUE5qY2B^Hse= zb%{_BKHZ9#+kH>JRt;nT5@i%iMROF(onf=MMGlE+>7(^ZR*L3|sNpUVWsJv6qbKMI zh6y;o4ob9{e~s5mWG%ga=VC$6M+565JIassp}{T)BepS2WfpDep^Cxs@U!1AibqU4 zFf@5e=k_tm{?S4;%OwMHcEUF3g!pIxeLoXIKW96Pj-!W^^Szt3pXnQ6#$~9xkfXXE@Yw6lnC*@8E#?DVrJ9!|oN@#7-bs)j5gwru~Ib}o&ZR~*)EXl109Z;n( z&feB4`$LMQ%mhzQUd&j0&;Z#XMd?(JwKq|PLp+<9YI3>+RYz8ln?9off745jaK&r? z71uQ#JL>+sfPj2#zBjr0uE|V>6CUDC-gj(aICgRA`f+{e3Ea9M3^;B;gjNrF+b}sF z-PhZ9wo5eITs}U3wg8@W-llA2v*6V2M2_s<81P3}amYzoF~u%QY6*~@j*`Z&TCy3- zh?YY7t040`#-jR+1B-`O)=r*n4EohXF0@ktNVrh4`maSDyxAT(7werjx0B9aVf69J z^qZ#iIy$JPS@2Qyf_gZ@BZ=G!=pPgh$0<|zZa)ip4K!v^k?e)!e)fCwfFVD!hT1Cd z_XHHLIW5E-t~;go9}qtaNaL6dkV|k<|3L*YTkMJ>pn(4THzW+-WuXo8#W-Jnq2d2T zaUf#jWbWiHY-_D=Zu8HLGb>>~eN`0g=j4(GYfzeg8t3@9l2FU}Quzvt_{X05OIGm_ z>YeE-(~qAU)JzX70cxs_f9HGNA9inVI5&5jvO|%OoRU8)?HC2$F+VXO%{}o>>>z4ZtuUuo{ zpWke)=)9Oo%xU_u-{M~1u94h?QJqa5Efy*1{zd{@=)up@1uV0te7ybO7G*yV2Tm3KfJdhmZu{w+~ z|n94ur-d& z_4%B`&0~6SxT*8;-RhuRHrZZ0LXbYV0ZX<%Gmb$NTdMrREggs_;h1P>{|`doo(Xd3E9=v2pVjewJlN$62wMxe;zFqjautnbzI3M4yV?8#t4q z^JE8rfw3LrDwjs&);W%@yPSK7R!)rm!(Xw|`ywDXnZf**Jv4GDdaaV~aj6Rb0<~kf zpEc^#4(`yPav~eE0HU)FZJfuV{l=|RCGkVO{7AfaEnjEE;jd;_?^*H)M=yA@p`PbncizW z0yo0%EINf;WZL}BTfu~Q(%HwVm#TW{3kf5f1bxS{D{WJ${s^m~jVqg~mhq}kWwb*@ z8*7Am9j)5z$Ev!H&1`06#ot73Rb#@w?DWC%%#Gk#lL3kqCWX1l#dE@bI<`41 zDojofDSfWh)Im1_l8?>3pmB(g**&5e{=?|Tbc5M#agTok6HO!ZQ+?9`3?DQBk!>YJ zqvDXX^Kb|vCl&38<4H-#$K-}v7s_MDd&J+5697skWTN6jCAX8{U? z`8!89glu3>;q&d;w<1dOZjf)&r$9yXui#Ks3k_@E`m!6QAWOcKWYxU^Nvd|-_NGys z9#KM6j{AG%S9;S7{qjo{&GQUQ;U9u>E7@Pdb=NTFavel4D-~hThq+r0czyQj^v@|D z&^$^l3`_epIN+M_PGx?~=Bj16f5s60Dpl6G>WWaLchjYo9>|?i!FzO-=VvrYl4F-p z0(5hF!rkYG?2XKhZem~XGH@T{Oo3-?HWl=<66}JnTUXchz+&*#qLgy~jfI4JEi+!f zo)U@1i!GmsWlW-i?fw{R$+*z8G3{rpmG;>m84H+1f`pEsC77teMk>BRaQl#gq%o|>!z{vdW zt$x-ZbIJO1=$SKol9H%C#R*rvip95*ml8_sXHP%S$LgU@MT6k6^Z-y+!s*;Y*`gSb zUhG-I-eI$lUFcJM1>3i%2W!2yx$(suf5Z;|C{&~+(RGv5cy~RXE>4Xy8FVx`Sw0-+ zsah#`k@FrpI~-q5(ug1JHn=FfC>~e*yv?cI0*6KI(EH_2q3uxcErx+26{wxO!}_yF zW&VO_55!s40Wsv&=r=ulolJ_w-BiS%2omqR1bK{gII7ozI?Y}Vl?1?1%60+pQ9K@$ z!=i5VZ~!{m`~v>|sepI=1S*-&_?T0sh*bhK=4gi*)*YpGggrLhilZ(;8#%-HEP9E~ zh{H26nQUYO%98Na4-Jw_93fT8-x#FFgiQ13>EB+#sB4z z`SF1HJK?Di-8L^pm@v!-1&jbnF>Kz`cJ7K)L@ZVJ8FpIfy*w1X7L%K znytpzJP?fyLF02X;#FyE$w3w*4VB9AfXr|Ub&;SjPh?E&?8@?5mZU)&RdOJt+#>Vw zA5Ik1N?tG8ZBFHpWNfv=i#3`I@!;4&)sm&=dbzDEVfIdS3`8CX&>Ws`KZ29A?hZWE*I(EdGsT0ZGv^iJ*jDMs^*II>9Z z-`#^v*FU(poo5Tu{gK0|;?q23czLh_FUyYvo9Z3A>f<_#Sbb8~p$(c3Mi{!A(~Y#0zR?J|spsz2EGB{R1FBSkd@?{nb^KsvpAL2<>*j_BaNLOU%eR&hog!<`j8zQADV;oE zk#KPoU+p(%OtSL32P48C#-MQQ=eI0RFR2UPhqD5Md6*ESSXCf62mejRS%@oqAX7n_| zcVJi#XvGkBNc8lL@=VcYw^8p1x}i`uXNxeBs>Lb+egK!hOWnQYPTSW^<(6{TsDzn= zIUBb%sp5)Or&qtu#vSJYYBwrEo@IQzH;z-ds-N7 zv|posh6DblK!9LG9rwE5lcC^}nP_jO=*_g;P@`I-e62lqflo>LtY^ZbOzNPc3>31u zJV%w#L|=LoZjFsTa8PEcp~iUI9dIio*aPIw5kZcDQWXsk(JGsu$+-@~yn;bQ+rD`J zrWz1e5hT(@A{2wD;*C+FF+g|+P@#|5*$QAm(`1n!kMYCd6lEF`A(|u8k4ey_z;dkX zhqitd=|Nne0ViOn^PhxHxl9o`V62xvI$ReNN)i#qYH7GF44RM>e0dF=9D+J0P=zfg z;Ti|1Y=?&gB2)UB)0*lHLU~FNYc6s?=l>1bZcO;a7rPeOdcmw(Y^hw>eLV7eN)_?V zE{|VyiPSQjNgmQHcU;mT3w@_Qibl~G(8XZNTV@z2Juy37C>|ZFjY)nUqUEoC&__!P zU zg41K?)|t^)3>1e{jZUM4X_K;Tp_R=m&bCBd7ejUEgLj=QfE&96e@e}8h(3pc%pbW1 zhVrgZ$kci@7B{uJ3lE6QgmmT1%t-TVRPeV8>KsU4=wexz{ zklF?M1{M_*{XX>h>&%8`|Bc0FfS%X)w_R(IFbMb0dSWPTkP9)0?|)hkHL>`0iC)={ z96_+1z-r>YF~Nc5+cl`X_@lwnM%#}l1X+Njdm(BcCwXrg6oqa z_gpD0uq`p)5$=`bCA99qlzz!b^KIq@YwQfevouR7X6@0)z_S^cTcFgjv(Ey=70dhk zmQIjY%qVF(`E3)G3F@;QAh(d-5}5BP34@NM-zA(=h50eG@7!$vWThf;W$b0yg+70l z@7a2zs)~0*5BbV<-nnbc2JRuoXP{-aP);(?Y8Tp-4`*VSbB2iuEB*kZk_iAL7ZKI+AXGCw zvN2Ww8kg7`g;-`L`q%WiFe@qE)}L9}|1G>LQ zoAqmOYyL9G2Z~!!?rXxF$aQIken;K^%98XW-)%>HfdGcD@S^{uK3mk*%E;K^e)8bH${_ppo2}QxrrO_HoK)_a}DG`jZQqYp#XxL}(i_JSj)}RgE!0lR-v#%BuERk1S?;&FX;Y zSz3sMm1~cqTx9NJf~SG8?~Z{$Is?TP?lcRMe!ortY@}HXNxuN*D>8SeqZ}PirT$(+ z@aYtrT=D^RSOn!X^Nx8w4}1N%pTiV6oj_0iYCX`NHH;=qX(yHhZBaZIMtw%cyOvV| z?AMX7R+$YRx__eUO0I56c7$6hlfj%g0c_t5ZN4SWol@e{E4zc>BnY`eTnP|AijW-_ z*)}{hR`Hyvy^||Z;=W4;RbmdMR3+1sEHT$3@~Yevw&{MeZ`b$Crb{qYQ9{GN#!iN6 zpv`6t%{+>eR8Xys;@W*~%iL_CnBy>Y3uUPxk)%?XZ!AzJnLfbTQ)0-&hISwFG_dct zyz68SX)qP3lbHUL&^!`TDO~r(c7RDX+xj5xE zjY=J-dj8qVWQ5IQs0h&9vO`So<+0TiZ}X=Rm84i7Go4N!niiD6DrGsssoonGZJ$DI z6lh2HVpMzzt9s_81)7xCuHidQiCXcN)t51nZkg5Ns3>fj$fGkG1kJMb-9apUC0pq* zCNtW;4yN)ZcUtZeRP(>^c76hzM)4XF3e+?8gNc#Mloe66*IrguKTVpkegCQ{ax6SO z#E{z3b)vrB*{_1>ApCli(>bN1$C)G+>|x6 z!UbA8Pt3z@DxAb<-cxmctH@ZM-m;||)U0IX4TS8#w!8^8X0;jAzWS&L$7{QU$|L$X zP0Q}K&Inj)vUbeSt{J7!I_&32-rmY;mhDnLM{ch8 z`3J^{hMBneO8g~UU!aM*W}X%ibIA7nIuF6Mt)h=m23laRYTHp)(@MFpeU-AY*D_7=`dGggdo3 zM?LR@nGOq9@sE&Vdzyc592WA_hF%n6s`IaZs~0+vFHHdWrEaAg3*$53na<{Z4Vv{W zwg2$81%NS@9FSXg7=$hsMXRg4%Hh{9^@u7C6+C;2xjfd6d{xZQWCWRSYewFvG<{1y zKhvwSx5paN8RH&;q4D`QVgH1_sHEx_3C{f0I`e-R@Bhv6{G+gWj{~g}hI^OGtwvhH zg<{?14`hm~DR3MPN3%A`t)P@XW%ZNB=jUfB5w|+RaRb<7-s_ta;rsI=qc6x4sQS0d zoiJo)(rg@NoBlxL1cnWu5@Hea?#XdQ1o!x(UT-8utxbts9{CW#c|R>pg6KqX=pJp2^YK7$7DY+5-fRbe#ukI?*8}IV;=odGBPYo#a{t$ zjTNG!lCj^&cavXQ=sJ@Ca?1w&62kNZfhbP1zKJ)lTA;k>mJDofyodB`;<5Qey#IE( zNe!#`(c*L{OK4li$I9!L#J42pIs^rf$+eOw>1T%vT=7KBy{^Ke{z3X3YB9z z)9()@iN=#hgnuHq*vSs)0Rz?sObPD!?e+spk(tv80Rntf^N`IKmzm?h-fF>YFNcSB!J+%b^7Y#s^lpV++ngaE-2pSC7) zBZ0n@L3!7^sUZN=Ji60f-x6sIj-)dS56|hnx21{tEIlG4i~D)6YILaw?9Wzw!okK$ zl{fm{XlSsh8v7?T<+4^d0iVoHJI@o$HmAI)`j zDv3CuphqK1j?0G^IKAuZxr6JC#e0+`B}+Il+c|?-TL{ZCRj5V0xx;9=UZF?L;m!2?L_h&sTOd(rbh=d z%Ks9*B^Gqjn#o(z`;M4Lman|gBq&!F`2aKZYwFlJUv)0}erjGwPF7c^#A)AR)D)krjz)c@I8X zX3-uGW9yhD!A&sMk{Fo$=S*Cin})U`#+?k|7#QdCr=_A%?=O}L<;UU336|-1V=}|sDs>LYPq#@ zjXDHrm9UAW_y(c zVuNNwiqR6$awzDwCox}t)mIMh-QCG-8yyHw+D&-+SqT@9rci*7t?yq!N+})psn>C%vUk6Pf%HRkZZA^}`^r=2h79tp{PN?)eqbkc$U3y-XurG* z)SNB5v&z|u*5teSZSm)!#UM&1lkpK};?{DZS%_kdATC1Rg*M{P(J)J=aZ@M?KwYP=Soz^)xs)4e?>As-6z@E@St2_6d6P_$Q+al&bSn&m-oZ=|J9V~d|> zGFgu{Q!Z8|aX}eOh}IbfMLD9T$s4w>HQH^pX1%x<_UiDMvt;^OxVZ z5bc?u3j%;1$tq@f`1L{mkF#%zt}M*fO;u7A+pahj+eyW?ZQFKsY}*yvwr$(CefR0^ zd(Z9j*5`4(t}*^O=KQFw-K&VNG|Q-of7)>l~B*%<^s1iC|ig?b2#nvH= zCQ0M1dvI*tBDkzfJcPW+JU@zrBh67h2FVH4UC3Epfu8Zqsl{Q;0T9o1TwLJ)IXitr znd^7Z^lO!7N;EjU+Q9N+m2gz!@|5Sh(ZtEIu@Vp2Vu?Bae9dl6c;cAzWxZa-UVM4F z(>%F$J-Nnn@ZIy$ix-ljf7YF0W2xoz`wy4r#9mxC33$Vms9Hk~eR(7;Io*r#Yas{T z)5V+2FV3w^7&vnys$$=-J`S|8#q^O6dB7-znX~e!EFsKqG`rqL`(nM3!xmym;-DeT z^nyxCui7}CTxI88z@5j<+R;k# zZZL}m*SK~0vW0biDh~$5D5Rfg7AAZ1S{X+YLoXstZXzX@c(6~+ecYFh(QWH{mvx%h zQ5I!POSkC@D+w;m2?_@XCtYRIk|w!$C@UjfP_2Cg+=8-rOwz7w5kz=+0&{)D+PBvb zcqE#gk6eFZpuq74#_)hHsvXpJ@f_^+F^kKaSMts4Ytl`ufi*l}pgsWi;81W`{(Tu} z)7d0j*S_Arzy7xQbWN~{KOh3IP%e7{pp7#5Ykbc%Zpw?@3`g$w2lmF|@i@(T22F|F z1P0UIERc6TUc+`iT;q1)55VJj_sigU4{89+N33n#yfFu=@Vxu30P5^3)+LU4^_>qXFWL?zZzy8I zFP`oa(<=#kRfi{X&v*9^^#w?(!!QFyuMhqHI)WYG@AYE zz=q`O4!dFQV#<6>f6NY86RRV}5G7*oK938}DAxB+JMVZz`ZPruUBCuzcKO|Rw*W5T zYvq#Fp}sn)fGZ!ZC-55Yk1gvGo=eA~SV-O^I7xkmu;0FYiYGH|q$FOeb}{th0(6UZF4s$Tv}rLWYE9zD z+9SwWV>6+B2T5+IOxzvg!z~v6F7`*SfUaas!yN z)X|@Z)pCa{V@GJtwTS_id&Fxk-EfuF@n`3|-`ZY$xjjdDybbjl#}Vt72sTxUeD*D$~&0TQJYrKS_0>@)8wOJoe1-uyExWBD%4e6p;Vp;t-MnJI8RgrtHlRM*4;psK^h2(XPj;gG1 zy7yF#BW7H_;iVS65weR$FgYrhsK=8*$=@11AD;yb4#OaPga*@6z~9+wBopns#^TeR zx&MylnEWHjLneC*X@>{imB;7DQCrjKSByv!7u?WtVScm!>tn%rp&_9jw&Pqz6I}Gf zJ2L5a?rRKikcb*5a%49Cq%6-t^!?BOLFnWC;j5Vd9($2M#nXS{;uf~ov-*FMr~dzf z@_>wf;r?KmfiVTK$MyvMoP7&y0$+`iNCowgrJGxHs?O0rIQ_p2#`)Z@M3K5YJ^_n1 zKJU+zz9!dRKj3x8;r5(Us{8&%gVQqu%q;IF?AxMomro4Po!^!NI-Hk}a(4o9&6+fv zP2XIx-!5!(`~%qb_voTr*-rP^ae$Z{ep9}goD7U#z5zJs1j6dvaKN=~ob4El3=8U= z8JUDIW5GZMX~elKKe&+cVJ=(hK@AYUR%w-t|264WMcJ2QS29Qmz@F+hjSZKadIH-C zO{7l~ez+ipmcjlATaa-TAqK#yU(fxNcKjQ(TzX_G$)@uW2?7{&73T>=1dL?;r;OrPU*;-{cEZ9h8=f={>Dy zI;#T)lkqzBU7`E}U;p8@g}|xHy1oy?vT>3Wbt|StDG9!U@H0R{%5vNlzIL4vb&EsT z&~mb2{Tk9*LSs)nuJH&wnRXdpnIxm6{PBg3&HIvYAoIb9H0GVQF=5^ZoJ zTh__ZV=M3vYK>KLuoxrjilRl*MAxbz=Q2LQAzCv%J+7EW8n@KSJ-T6p^>R@Q3qy=e z(t?494-UQxp2rw@`bloYoixXlRP5qEpPQe~{5?N@t~`9^>AfqXH07sr6>6%Ngz`^@ za;SP?**W^EefYS$FzXoU0ez?g+CTAeio=B4GzWScLW00egiRIS3{A81Kcn#n^N)Ms zb_PyMV@m@LS@8xzeIB^rhyNLr8)>rUOw=eBGL{0{e^|TA*FkNBXeK#fwZ3=vRZf(Z zQLh)jyIHHX!MWkFghzPJDJwaIoXbN+cA^7x;i8hh=*ZQge4&z2d;LM=;O_#NB2Gcq zSEB$QTe#=l2E=cyd_|o0EfHTF!!yBhN!K;@h>YOttuiTM_%m5x(R9Wdb>rdK!;5wcO+nQ1vbB_zZi+(75VVVS9j%7N?{neWwS=09$t8`5CK@F|Z z=|$U37KoO3T=kqyj5o2Olq&n<{&$bilYY0%ZHrj+RE#^#OGT^9R9Umi^iZl*PBnH| z3Siw5xs2;#l!B%Xn(;LLBjA6gTp$2`m_Y)$jtSWR&3ycCEX;j_1?3afezzIdi*AsA z`8Ol@*!bV)(oSubiutZd(qiM zcDX{KiD}}R1$XU3q?%_VdVb^Mp+@?q%uMozbma)WbM-K%4y=CXX8UaVYL1ZikAT^T+eoraZj5W zM(P8s%c-gf(FZ3@^p%#%%U3u+vGpL#w9pwUG=ktXk_QU)f}S6AT59zVR41`_eFN|k z)K~jpx}IG1y5ZJ9s}}6p9lZ!${+;%?+?@>Uyl71czx#aQ!}J9797^W) z3g?+)S?kCO@M2+eq0R0e5nYPrHd@+|nzWS0BNN5x z0SlfN-5V{6KZ?^$3RTl>nho6;yn;+n7rqsO7K6YZg#gO_Dz1k;MAK)S+<5U_QBuRx zDy0n)r#>&nZ(__=o$P(>8HTVLv_hgm0H82 zEVlLX^h<<-dpt*n5z46%(-YMM#&iHiRRg^kW#1f3%XMWtLtc{8Tou{}0&*+i=b zTJmYTvGGP(*$8-$Oyx7lzhmQ6rynwSgiLLL0ea~UFrgsy&LW`Minkd=Kl-E zhbS`&8q2NuiMY9qv)tAtDFejCr3v>E!J~E;sa!SIf%jpXZbZ`UV__5KC*evtw-|3R z4k-cdO#qgEOp?zu6wx<$i~&=eK@e=gsBZ#NvIF!76qO~4HHp(z}% z)Y}Y;ySpI47~uE44VV~Hg4LQK`@=F(==?ZE@oZu_s7#^aHYxUz%i?!H4ggVyCPKwJ z&NlT_#hkc^e1?rrJ2Zykd9g~EgV+$u(C1CVBvZw$qY1o4z4=t{f-g=DM(za)mB1t!-wcJEB@ARaSg*Bn`xgT z9bTJnwC9B_hJN{`QL(#h9c(?k(hM02HB7GZGK=iZ6x za8^W6^{&?D0hGesoR@K?!o9d%WX6=xAzmH^2{s+sRxlD?u}_I{L}`h`l5tdv2)KxC z@cvZz1lumC_C=Uks%ffus<^HrJ|7$p)E9b#L*$+xwYV_VT1ESj^O(F!<5I6Vd4~t~>8u%q5eA;_qG#UQA+hH@n29T6b*s&tsNw7JAwGRk zrv)e4)Kzil!Bw(vk3*6xcSj6X1~I}Qi|oUn(x3MyVBUJjp|=BI%*ZWl`n$N6IAi9> z)jmg?THHqvMN5pWO(qe*N$MF~wPf80KqdQS_{xQ8{9Wlu;#T@#jX}X75Ph-Cdhk)G zVmE;yzYlsL&mR6QkHQ6UvfhY|>%vvQ-v%&Cwm)${Y3w~1dS0LGMURe60+X_KcZO|; zqsF~rq~_%ksuqjrpf{LQnpTrhdjDO-&COydVW7bj{=k#%GNBL3kIG+LzLV^uTP*>M zL)f%*4RA@U4O!t(_EQ1%WH~WrTG_djNP767-S91jZ7GLv)O_;B^1Bowho{ohXdqkR zu=RaCDP#vMfDs3K7fsmMY4Y}1olae<1-kJT;zW2B3rUZJ!EV)-Tzu{$4-Fm~RtCAg zxF?<&6@iA;hpem~^#HYFmDY3Z2BPF49(%&EFW_`lNggGH)PJYcRx1yBBJ+euZWmlj zDQ)xNs-rE9kI!vA@aN{AQcn|lca3In&7sFU@u0R@F@C~&*Bi$Z=|OWRA-PsCZioU} zrRMH{i+Wv)XMp7_0MevX5H_Z@esk(h(uAu6jt#w8`^ZwNRJ7aU za`yZl+*vLUjt0lMt;6K%=($mzAJ08DMt6*#hHaT2-o3f&V0WEs)bs}LgUqNrIoDd^ zIJeQZTf6SIP`lx_QIN`YY0wf(dlV~EyV*8%yHs;-&qjAQ=P~m&&6*c{5yVSoD9HiE zABXzx;BNK#e*ze>f)i*2;4ns-3F6@P)Og6nd^<1!pvbSt71t&tbE;`vE7qk#UTv>DYkf_Y^XSn zQM}}JZTnhG@{Fk(F0Br!CR4n4Nte{D-L=k_PQcOXp19-Zya+qFnuCzsv&GZBl*OUB zngY;*5k7K`SJozt!1GK*QZeqfp1PQL9c*q^jW1yZTv`-m20(Z+2g zG0wcY7OqtpSc$JXYM0M7u%AtuqqNnT6O_oQZ>q%0zps8^9UKH0m6N*19D6rP2>}+c zHl*D9SrneCz6B?C)3^FgIMxP2X`C2fBcB`kbyyn4;-1Ib`NreyQw6t-%3X$@(hs?X z##7maEwT4$WE?O~)hWhpe{E1~lV-aC9 z=lL?ye4w35vq3^R`H+Wu4M(x|G22XB1fiMfF>+E5G?guIqanChmzM#j96ZDziv<{;ZA&pi5GIV(i7qi2^&IrykVh#AwAinM0y+CiY^?vUl4>B~!F^2>Wx&T^?3^yC#R&#BQNcMCGs(!qyezT6 zvsTkR`om{SH`VQH-9;T}H~WExWI#UV}LU1o=n4ft!z}JQYAV5uJPpgqL5qd zY5XNfDYKm@`>n{T>D5p=X4ZABTvUUuzTauI@l;xYqjS4^6@ace<$l7^X-2z?;Mq-u(FEWxc#D>L-2!&e$KCX99FATvE^-gFaII-K=i%Hs;^QZTjrD z>TPPVo49rQ5lw(lH&!Y_pVW#$_Z6_AHio&eBtm`pi?F&MI^* z;#h0p&v%((Iqb8Q&|!MA{-zV=P%N5mmORX46DFUATCEc!j7j2xWA>S;j1;81DquHh z^Vr`~H%R7KvaR-DWy6H?``t67V;x;=`j?tJnam*PcA z^5*WG$0&X`#a3(n_ZPlr83ht-^|dG-4GcCYZXYeG*@DQDXIN}CmGzP#T`>zQ-@ zRi8s)pP*_wPeq%=qNVqnP3GQ2WBx*vdtjbteZ(xW7?2T#kGF%zF6d1LCi$@joqQyGPGN>zvj-q1ZT`U` z=avpqu-s;9BX@{k^vm+ftP|oMN;QPy3sNggCCEeIocDy53)CpueKPn}zeQW@m2TK= zCp)I#A4~{l&N*jMuxkQ?Pv2>{zr#UB3Q^F3eF5IH$X zjH{Xa=2tKqjwqEqaSYoi%i%oG=Xb_lY8;e?51kV2@csJ;*>4atFzj#JD*rx33UP+g zf`JeP2N1&j-%OEzffOjg%-{NCL4Mf0Z||z`GaJGw1f=bflILVWxsCO_wP|(74qx!_Vq+Bm$iM3Iw z*udMU5&adczx-=?*^RrBFi5D4m0VPIA$k%egQJpIZFDg(Z#w0B6rov?QfvaZocP1p zqDtj&@)|+#I^~A5hUT&B2q#|b@=Y@(=?bw@7|X|_s}$+tLAcggVOf&+wTceup^A3= z;jk=nFO@6;M+1*lN}`gZZiv`kApm&FigUTaG$$J~opmodZQO+XuYk}&ry!>yNn*^# zEG6|U+E?yWE!2*39XXfXYq_+X#P1xRepHfy(Ee=`O^H498%}mxHtjXZ zkc#yqGqBFr%J+(`(}lvjTjrbh&hrB9XHZ-JIYPho1Yi>PbMpOaavdKhds`vu&y21q zkHkP9LUdZ*_Q2;)H~ZB7O-+O_+_-FGlF|zvIoog{1(w<0WNHYcR82%x}+}9PS>D z_4>A^ir44IlVPbv$M&^<@D=EYMcn;4!_$`!$EW*mU z;5ruh0M(!&U^H7Ic&z$LI@?-jum`5>rD_6{toF2l2m=L^A3t(p)g{>%XUK;Rx3rQN zn{nk(0>9Wzo-Nzj8Iji-+f)V`tvJ2#9d{OvitU*V$wHOIo0aed>oaw_G*l@WcDv<)ih!jZ9E z<6GCJZvzP3gCL8HD5ePM)$|dF2t;xNF+6c{p@pY8iX6fYgS7JcG5LRiSwhM;DAE}c(!rqsOz}=_9HfYb~7eBicZNlas%duh`}L4)--y5 z%Pc4?%Hh2U8)EdZdwVFXAy*jjNGMV|!~sKXda)R^56a(LB$Gv+LP>OL?UltYMV<=2 z%H=la4k;9S*bVAFMiJeORf^^?`}lJ1KGHqH-;}%@AB4N|C0S*jD!wi|>wx8TN`DWa z(t0FenCf<)SH{0d9x_Dl@J24Xi>^{k+WmYY`}f(79S=`}0i5lV{~~KYlq}kQ_-l zE((PGG?Rp-H($YcVes@G-y1!xBIZS2sYh2Lq}lHE&QoI^Ws{UmuFwu zQEH;--`UqlXtojKl9c(>mbq)X17Tmlg7Zq!^cNw`v|oe?0~&Vw-X{o zNmVoykKGH)klo)m)Y)y3}A0U4I+`2XLPLz%*Tu0blfIO z%1w7^!1kEd1}o`KPI0v}xEwX=a=qlgx9#608h(7}oIyI(kiu zrS#xCE`~&M1V}SoxW;xAXM^yy>OjL^dPf&TxetO7wYm4AE$rnIF&XJ{Fwv*9Z;w1Mt6l`tfrIu$I2)pZ&Dv%w^bsQ8OP%Sb;`H6YDVb+ilc!M);T#VGu)~ySD=+A9&#}c% zk${48(cdbP@UZBS*|xex70gy=JS)_VDC)XYjXs&ke^FLb0M=Sz^}?knLHy<%`jqAz z_F8Jzwv185Vtn4y>}Iju5pMY0M77;6~bL-#YB-Q))^HMa%lEcuf$^9R z=zkxzSYIg(4Zw6EE1;hAKUt&2tR0Q)jr9!vWxMTH{NcP#hmxUVpEEu#sV8lhJ3jtV zMy|b3+aRNSZ9D*aFa2Z8$a)z@fMI;?iFOmjR6qwbN!Nw@QP;-T3wAl;!`q?T29AcK z1?Oen_l0dgHu&RE)HnZI8btW3Qr@~<@B0V1H8L8?xGynPTQQQG8+oOuM?9rElCn0F z|ASTIXtqyhbGMR`xM^F8=u$!&0p)&9O|E6Bne@7Bc{=}CLn)F}lXb)ZYCf>_ZPLfo?5Te&y9492?{2 zxz!MI2aP!IDN-hx=_!eITdF(>&9Q8K-$M{;Kww6eGQrH{2QuWn&AFPvg6rYLYl5;K z(pdk4RDZ5&#x?|5qFL`1!S=oIxH@u0_B3d^(E0kGzd_jSwdM81hgNwoJ%9~^Ir`d5c!o21HQ8B}q=VW`U5u59ZZ z6`{>n3mzHTOP%nF>Wf;wTmfq-m#(MQVS!IJUA0eME%E^RpGQ6w@R~tg5W%S{%I3DV zzJV?B?`O~zz9Q@48p_oc{Z^zStQ{t*neH(VOr|KNy?MO8hKF*tk+O{P-wNw_Iu*J9COltn(7pYJ+=M!s zT9~@h@>1DMc`@m9gpXS34WXcLL2on_v*R+=suXNJjfd)EKkpUf4wgH^`rj{M z2iTfpO-2660@MU407E|h6HSn$p1zUg{{^M`m6h`LSWviKhH;~T%nU~r0y!g>@nGJr zDbB>Oy!lwPv$7_y${Z{Taq{obus@$4=Vb=qP#9ArO;YLI%YF*o zNINE?4mdOoy12SfzYTLeE(5k5a_p25BVeEQfY|)lf^|_h2)4DJy$9QQB`FyYPjnHg z8E6wnuvTaIt-{$J=Z%D8ub;`hnAtav`B0uQvkwxPU;>(WH>nOlfi zv?sispo!&D%M?3p1xnLyQ58Z`JU!ANn!Jfky7-gejkrPa=u%QwyQFF0EOI5#>yf`3 zHYde;=1$z7&O8!vFV}UGJmaxSxsPP5UNo8zWudm*c_QQ*z2oKCZTkmLw;9xhVLh-7 z^YUg_dwuBo7f(btW~(S>)_?<|JIwcFB10H2(ICoZEI#`EX_|fmLD#bF)_ZAVIt)6` z{eb{-E*;Ds1|~Yh+}ng;7!fv7CeZlAY0Oa9vNOUSg*OEuVKxFLP>0}a#TaWqNOC&6 zO4xA}@n4=;qtw^=+@?zu>h5y5ydynkA(J^pI6 z!hRZV=#BPhapZWF!+6wiIL5?hwegDyPtvFP8bK|iUn(c+3z7<@ZjU=1aF=5t7Fviw za}rRd+J|+knVy?gsK56XGRN*f(rgM)`@MLv3VwDIA-KzXa|EdL=5|$1!1W3({2Ve` zV7V@SCZJCLDG*x^%MF?OJl*rbc;^(5?9>QLCSSP66X$lzbBQp$gJpD>q`KLzlF@bVd{p zZ1YsgGM|>keYGcrskC3m!bYx^!^m}6!fE{P@uJ9Um?lIMaSpM@i_LerMhxgNt;b0A z$yznRBhP5I<03;3Uts?}h**j!7tw&%5B~pZ5d90+YFGY|z9$Ut?S#UnlZpu!$88&x z3QQX!oy=ftippHw8z@@;EZ&7b_MwP~<1QR;+(MsL^}ZKRQ>h*Fd4IUO0+HSu!r|ek z4d+4op!%r_Q;VTbKdw(49ZjD$gfaMJ@IC&GKJWy`m@a(?cKl!_@`Veny7}s78vbGu zgX-iSEW}^}<{o`v?Uit&S-);-PbL?S?{N22j<~Cn5*T=Vq&hp4wMcH#S(@xAe1UU3 zc_g}Ihkz2J5s2-+l$g`x*Q- zE9gNmGp2cO3p(dXlzxNREJBZ0hF!9Oi$!T(8JPLjV#BN-ar@wsANkmJuBcn5THAr60b|>4XV0@_eqst0!Rk7@eg706Ao-iENLmWbsPazU8A*4y96Vwv;S4 zVWkpOD=4&6;%t!0oV4Z#7h$$j0TbdLkPDNbH+c;#q?*3v0S0iG<__`S>ZHcDLat9UeXk#Sa-ghY;i$m#Qf%B$py|8&7E|7B~7GKAyl zFM|v858wiebHRh{`uY482+OR>@kFSB9yWmcPaU?9Si>CL_5KPNdGIpJmLOoP{_^Oy z1h`JkE%Tz(gF5-9D^)Kb^-y-pHp2!tV}KoetLErxMP`lhgR9@vBY_2Lz2V%jw*;Ng zI!USmP;~XD3gD8hrrv8;hB6*c9H%i##-aMW6%CUPadE+!UCP3adI8tA@dJ;L>|EX; z>Fhx_fX;%o>YP+o<7^S2;#o3;hx@$OtMs;$mK-Reyt(kkB|sDI%JlTOu}Riyijbab)H#6`lz=5VE@aGD(TLwJgeSUq4~v zewrHo;Jbtm1%d4!7fga>3oJxT!3O+@_(hT9-|Pz~obqG5y9r9Q2cpOqH^LU0&F>1; zHUMeUgqI$>n%Ot})En*vKR%x?0S8ZHKACbrMBwk;d*5B7m(bg8)NUKiL#5?o6X)wD{7v?%(6{l&DaAyDzT5nN`4tZ zJ@mbgq$-LRk`$=JozUk)qn)8b+?T%;k-gfA<&aPd>VfF2%RnWEyCpYaAKb_|;1N;% zEf31y}Ypo%>*u1c~#Jt{mBewRl)$&dma4TE^gRQ>!?;j%2_C%gML| zo|)SC3A3h32Joe>9VC9jQV(z1PoE0JHfC+T{{#Nt2W>U7McFqX5vdI%A{qY! zBJv*_-#9m4wt@pnIf#iLF#5l4{DtOq`VxFQ@3_2b4WqS(N6G{t?wT9-Dwml1Nbt*U22&Q_mqG$qD8-TqpV9y}4AFl1u5 z_>G}DLq!Xz;t6Oji)t^SwJZOzs@!`08Cy2kyIKaIotrF`;YGAD7;?-=Xu8u2k6w}- z8xa@}&F>OG*=!dr%Yb|3z&{Zt>q(7o zb#NDh0s|ae(AUOtKG<9h1Day@b08a{&ABNlSpkGnej2=`FXqS3|I^z;|+VL|}l8Y8o(tbC{t7rjp?69}1q`my~q zH8?@YlYkp0%HQY!@j@!&m;1ZVo_-6{Im&ssGABk?O_oN^&^>25I_~}_8%g-v${$PG za2r=o#1v=T$d=kH3HqV-Bllmv_@eKK=St#@+LY{4rs@s^X$pqLrU>e~h$Qv6VBy>q$w$<-DH6YiwtEuPnJIx7 zdZ~OL)B^5H;45mV5Cs%T0Fx=hMm+7jBjiJ9R(*R`{lO{$Tmn7dn{SRwQ-2D<^Z$5J zAL~lP{lFW_3<%u*CqaqQHirM7t>Qs{p9T5rWEfq<$k;kFKafEn1v6Y-<7gq%(#DEi z(bzo?n2loe3id;aEpVdr+UsjP!Vos#Xh^5?9uAsf& z;}&>Db%@|+`-Flllmk1vmPN5rFDK-QmS6>(s1gh14UOJf%F)ViwH-VqYzQ&T0unVK%! zjKzm;v$lOiltlBm-5{PF;j`mXv+X>iXfbG-AHW1YM1#<=Sr!PHJiM-UB!a>WLe-PCBn_?w>C+)9 zFx%LlzhLQto8SbRCTtzws&L^=*)mT&spvIvB^W)LUC#KTJ)X2}!@>K+X3S4ugHW4x z&R865UdB=fY**boiwWn}!_qsBYtaSd2c-I@E5cR^Lu#4N_7|T}f9e2osm`Z5)Qw#G z9>^|qU39j>Cib#Au}+YqUftJyu!(DbAwpr=9y;pQfq1OpZICj=*N=1N{gr|IOB(V z5V~z60mUIjdO2v-jN3g@R#m9=t@@e9L*hBhN>Tz;Pn{eD2mJaMp8vvk-OHw|BZ9Rk za+sWJ7ug!CI)t^;A04LO`B<^|EGLNC)osKv1uK=A;e0Nr(*miD77#~UiGa3DilxIS z%}Q#Huv(KvT0swbiEd~T<wpZ3$iis(ibO~Ewr0`N>t>MyStW~sE<<6^a)P+kDuF0?{olk+pKixbDeLa1@9RU8nST*2@-^El+aeo}~0e>oq-ak8R_sGFE`9ckiPQwAsclU4SJ zV+MrD2{+1v2Yw+&rrm}^H%Z`-axKc|8xb0G%*6oS^PQ-$W)$?!Z7^O0n)YRaC_+vd zW&x~t6^1m@^Obf20M>(uRs!Xwg3?yuoRUdRN?dXOvAr}!J}Km%j#33gB>X!wg-NS? zIw57Z)v;W8gay%vpJ~;|4L_EC4tMM@8yV^qXrDyEr@KsCnJ_Oy4Ug;bF6-w?#G+CWV;f(NhYH6a#3 zQ@d9nxu<<2u*vtI)=+Zloja-wm6AizXvG+A*3OXs*{wJr=N6`BGFczFZfzS$XUc-M zc8<+-mbugUgZe%4E^o$vq=y+C`zK#O_7+TF5^Eyzq>N(^R%S6d8!BslsU(~U-swr_ z{bL{SwsZGyo95uoXG{2K+EDa^#kQ6d@x~|;K5UXQFDtT75Us-14oK#X(4FtY z8041xwMQ^EhZ7AI!p(GD6Z~6}QDMB^uFCFk>EpG)~GusURzNA}E$S9)Lqtqa;&kTe1Rw{5MywdnKfVVgm6 z>mlXN2>2!sk?{^quFl^gMP4R`n=cc>GC`(>WJ&WYg~7_W2Wi{R6@1YS+aqjB8N+iO zwH_M5&I)0ob%OG>0?{@@Hq$(fozqpQczxu}|$jWQ4)HHq# z3Phe-suY$^DX9v^_YY(Rh4m_@z}}Ozknd*D{EZ&!2-<7V50W@4hbBj8Han~%&#)Qj zVmXBV)nE*B4>z%mp?z?jWGK`H5o4=s=MvY@HOjU8Z6mJ2I`_+nV#M3>`KRw=U) z1joxs4;=5;<4pD+AC()jkyT|!+Y{V+fzC_~kSBx5^-ZQae>U=FAPBbmt8s7U-OhE_KO5X(LV0?M#w)k;r zWsZ}jHMghzcB{;KIL%>NqCAqp^>^9+RYkFZ-QD=ad+M z!+};=n~B>->jrmk>D&pLn2iUzZ!6dps7$?C-7Jga8-k{#*uw}KEi$PW*tg31rRBD- zf>>ycUTzG%@q%lC&8NA!zRpUFi{-y7P)Zw`En1uHVOc&d14fYht7(U+RmzWEZQw{LJGY|lmk+X6+eEXX?1v7@Ef%iNwoc&3bga*{PC@i8 z_jDw?(GB4Xxaj&Za5obp@Xaq9s)$e)CXkmHIZ8NIMu6!tReX`R)i5Db^Yl?6of&CD zcPUZ*ycO@)5#}2F=3I8WogH`jBRWnp#&9=3v$eTcfxQ3~;qs-!-&2Xi@gp*nnSs@6 z`mvp-$>+MC2w%+wZ5tM_d;g3(y+}K08zDw@gQy=DZA5s2N}lU0afX!0zjPirUEN2` zp@oB&OFj)Ulo7~a?cKubQhu^TYS@8!D9?Fc2q8&eh=z!N^>}6U;X$xRCH)|hOe|MA zfI)@gNh(u-A)CuXk*5$Kei90*%R-K)l>LcCfzPLYCe^gHVpt=M@d*QmoR@7!BNNT+ z%^Y~NR2x2?-^LXEqAOWUqh5HdVC9*$XVV`c-SHhm73hu% zZmUf-JBfP-a{eAiJ=%l9wSml~=VmYwibe6uoHQEMRJJa%5OPmOTjiNUDe%v}s+ew= z@*R4Phd|+}N_)ksikn^D-0jycaKDBb4UxO8vPy64r)d0>Q9_ZI?3_-b0U3sCY3eNl z_BBPnw)|ITInMy80hR$JqR<~q6DUt#|L62|4MX&!=X3fpNBz&3(*IWn#?{TdKbg{g zl!ol(3})}jT#B(7e*=d+@=N}@+IW**deWDzx|NQ*?!RX^3qB5g_xmA4N?6#Oz1$J# z3C({wiPZC{1p)L=>q9izyJAl;O6MX7Zb-8djO8goV@j{r8@BsI)$5;@Jn(%`XPh6~ zUvY0sweBAHRwOw;^jkHc%xBc!lps28X!_2O7JA7em=@YYuYK7I_8oGS;J}A3$P)=p zK;3YrFEQ+pzw^hDU>z5CVnk!UHDyve8Kj95T?45$7AZo0y~e=k1*K~kgi3HOX~;DH zkQ$vrvyNJZTzGkE@Jk#edwz*%@zeWGAHkYpXze?I?i?zqu^}^Cu3pk!vMJoI<2R=$ z{v0mF5T?$8Xak%#%%k{hET@`}wrK%*)i_L6-%nnfHmIc2wu;;c&&81^oxZiSt2CB6 z3rEM$!gFhh;3kG2!k3-pYfwL-U{gX>mHJShWj~EDp6G|qmK2zymnvGykH?~n;!@eC z`W*IRRi45{n73+M(l8$Hev2^NN3`ZPxbj95t%179b(V zD<=_EEJ$ZlV7FJc;$(jxC^!TYSNn&Jwg3LoSE)kEB-LTPHNla=wQyXp&khdPbESXG z{IhMZ{yvg4YZ(P}G@O@D;NOW%sGdFRT{GMK-kFXDjtG(ruv;cDq+j#|F#nMOWYo6v zxj_NG)<6LeYPG%{A7xUMJ?ZuP)3LI0N8` z>5s%yI&!Ka)4cRKiBXUV$I6rf%&DGrvkzLKfSZ_|`MgE81oU@eI$HVV-My)MmvOHa ztDn;@H}l)bXmu~?#3%Q25yoGR5TK#kI-X-1gOqic_3>WY9%=#I?LLJESOf+zr_wPD zUt`XUaJxw4?nyu^%B`dbC=%S$cB9AThfo~*%=jKwq{Wk=>dblhAh1m+h-KabJUM~qHOxjjkZ46>u3Puq>vCg2pp>EdW|dz(zHe;Kl&{+ zo5*O1eBF#@D$}3lfb{8yyCnl#(L@7wF`Mrpckf)C*RB0 zQTF4M^&OY;V45$pua49#NL?EnX-e8dL9$9Q6T~_hoI1G+0v~B|JK+=CFdL6TdX>W? z%8;rKn*Q#=99-NMN6l6^jFGvIQeB^E@*b!&@bq4;BbJp;H~c~3_Jf*(T~!HA6%5Rb z=Ripg?)`r~#uIY+S&F zPG>V74YwjS*IkcU5gIqzT$uYxilN6g<2)liG=TMxH3QDdbF_num^Fg}EuqI3Wg?E} z;RGR%g=>qf2Vn4VWYuOWOgfO<{&h%1)@l?Hp?7ROpR(hIP1{`nV?D>Lv7l-mF{Cg` zw!P48ST{e&BZT zZL>bQ5wZlII;4V~y`wG#C=)Rv!o_R#4sii)POnLM$vUrliBCZp8+QW}$fe4N@~U2^ z);ur`#rV?DT#Mia)7-`2EAP1Bigmj}cXCrS&>o1k&PC5p!9xc-@jAZ40l^BM6K;~* z$)K6(%x|X&Y_6zQ+Pa{$ZIe@^2jk~05peg459=g{W4pI)guxSx7H1`fxybYjqOYUT zQC|ocE9Jqnrkhn9i~+G8>L!7oDBBER3*y%`)4sk3OwaD4l7T^LG;++G2!r z+N}VXYNS?cecjlY(Rg2>#W7wx8UpWpqGb?yHnn`bR?}+WCX4Bk4`G80Nw53jWt3W= z2nYC@_&&?jZkZq3yftJ)bI-dlAQTp=uW`ksTX*qz4BO?XbEy5g)#!ZYz$@$<5SQbu zD%HYACxnFDk)(R6NuTuT_+uI8-Scm*j7VQmZ-aba{M!e?8bmeXybA$*UM~K8!+8pb z4-;Bu=JlQ+3c`Nu#&=WEN0E|vI|?(cA$z5$11^91MK&%d-$pO3)9 zQPz|myE0{trB*@@Pz}kc&`2U}G{jSl6La%<#zpVy{c8~ z<f`*GoRzvzG>*y01}X=}n%U!x_z&!%z+tIm`~ZqPZDiJp`rJwzhlBi&9EPrj`5 z>~vPselMshzG$$b+RyK*wy@!|JE5nMath5=R@rKE#+se?uVzu2{9wH@FHq*hVi4Iq z=0xbDC#_4JStfpyrOZ9LnJ={{=5N^v!DrOFA62R8x*asw9Cg(B+To2VavWYrqUYx} z?o_8F$fcBw%1gj=oIJ16Hg}NH)o>JjOH&Xpak28QEENc%W0VEdVmFFqgcF4 zJZ0NPubcTq2fO}3+Iv{c3aM=@*~XjU?uD$C$O*p=*Pg^}%q|P-d)Ali`v#Zt|NTBU z2N;-cekyO%CqVx{IS&0xdH>J7Rej%UUHo$mT3g>j!|GCjK%Z^o62DQ$Az zKPx#io|(zgLVYW9=YI|U4D*&IaRl+*-PB!@2Dkbsm)l|+sLR|1TpQdg8*rP{5`_m;jix#5UI9nP8lg1;_%3i`HPmfZs zAF!@Do|z0ykVZKOhCb=iJH($2+W-{CPn6cwJJeqmBaPf~2d0{30D8>|0N+6qFgK_J zSOfBMYz}C_U9Nn>!InS4(ko9`7Ir?y0{+&!tUmHohq_38k6-f>9X1F{an{pZ z|32?imt{KPk!N~KnB+3ilW=z)-7K#oKkS(hacO~T4Q?*3eUC-ROXuH12PPf%6m+{Y4X7@Mj}6(6rIrqrI+X| z9?)0a$(dAOKbObc`le^Nohz20b=6}RuUO}Vq|9B(T+F95xW6@YslI1&y-94Drr=A! zf1RO?!6}~j7jE;chUwLuc14tnc?}m%PTzI>VLN4BtwwZDMG^%JTv3=hlI0g-$d~L< zh;fS_Du}IA*p*-f3DBiQ-xO6L@(qzaJ%JImX)FUoRt z30OML-FBGALzd?hgyHErdn7XjjEKGwQS`;Ud|t7Tc4jB$On0{2pVW@ui6bP)tXS4b z6WP^{58{(Q_;c@kpo9}El9{H(;m=LygamSu=fvpwU1!GNea~hX+c2+x`i{gX@*_~? zi)T&?Pc$NTDTf=um= zh~Y-gms`nCQk&(NQBc3yHUKIV1}ioBuQLBJi&-L>GGy>^Awo=Xo{&yK8rWB|y!f^R z*~R_Cfb6vnPCvWHL`Dz4aHG?ER3yxBUSf|zmcDsa3ohurjphvWEd4#DesRlSrQ~VN z;Kpe{u&^+itZ{I0`k)YVUnTu3q8!*0<(>ncqN7vA&Z*7Xp@I5cMgzL;IBRZb8+(&sG2(cX(kBy4^v=DZf0)(<|YU+KK(Rgx9njqeL@dz5jZeA#SWTOCaaiXL;ROvp*y0nJi0vm!fN2v{-WeZq;+CKkq9J&6?S6Y zDTp7`+PQ*r+PM~{H%u4?{@Nz5RKL#w4%SdZ!K5v&z~o+O;w^E3a_2m4rDv~++;daz zxWx!-zahcs6`YjtiwT2V33L#|7Flwy!KHYPB)YLEeC%yzPckcwau-)#Ir2?N+_^#Z zVuCwkTAH8{iV8^Q{n3GCqh1afANCKYI+3<0!wE4I1&S}J#k%q`UJsASP%t_6K*Sc9 z5Q@n$zv5gg_!FEKv)pfOQ0Vy^_aZ>KD9jab+FB8%D*zq_#ap~Y8KK0!6#7&=c`hNg zVy$L*oSW>aRlKCQT>%NXxxN;UQv3AC7mBB;dKejZI56Z0LeE_%j5a>(VNSKz#Ji<1 zSTVhaV3%3JsF>*C5s)~48_a=t&PZd8vHw7g2_R2d5@=529LSZ@nc7-9SRI0l0@A1F z(>w~Z1Ie$O@epHS0(wHG_SPYpJJJ6e;~OfH|+0q9sg$6DV2G_ zrCpPZ>D)#`@Oa1dV2lG6j{D$6aMN9lc9Uzi& zAd0i6y-W7hevbz7`&-f5QUY69{5*AjmyY$FcXnE;z5~fsA)d3QARNKWAZLq`{t4qC345fYA7B85qu3wwiPq6w+p-UwG>Aq$> zoA1z92FJ_IS{vwVts`W3p$%NShB#{@F2OBzlYQh>3om`m@9f>P+ZBt*MtU^yeOmdD zXjT{gMwuT5$>twXbJtJ)Qrh!3X!(5FkN}FlaAY)&l`j<53lKl6n%S*C7V^I;%<5{{ z{Q7k+`z(=6YbmIQ0@UsPRd~Zwu^3pLcv0R~bZ8qgl#=#3t25iexH;`#m%(DXZJvXq z);d{`;5!1~%eBSoN=J`Y+XT#ru9%kE(#-1uBi%dak5hKge`#D&5EA(mnXvD zvSOtWJpl7wZ_>!}`&se&ZyeiyPF|M~F?bZ85*hyKVEj)qEB}(n|6?u4Rtw48#|x@!jR#qe7BSFR zAzM^thBIk?@DI@oE67D3U~4>^rJ#v_=nRG$`KFg&m4O5u{^mtVQbJ~0RyIvjQ$D%p zI-*c!I?7X$d~}M!yzBIuZ;UPkV!oytbetFP^X4XhC6jp5=4@tzNw4G1qJ#G5M zdRso4b&J^0qlA=;*szg~h~)?*G0SWzLdJkzbF7{WjwUP@7U%0=zpJ5eJM8I^rD}_$ zd^&AfQvu>^e0Xz4>r4#ZCb7t>*{5T)$*b-emB4i@p8`vsD&a17x)?g+klL?^1x|oN z?hg?;zOlYY(0W|`N|@Ck*aU+qUs`t>A<`1pvUn?a2+(Ie|S)@poB zBy$YW#?ef#aqB%IcEadQk_dPriH_HT+yu!nf|{i|)S_4}$|782H(?|c&py-SDjzQw z(WCve)i6_v5OU^W=OV|5QV;dLOUM|zyS(FQhy)^j_usY84>h-W1S`j;T56mr38uG}25A)t9IGG^(cTyZzn@w-coRx@0lY4MJt18}>E+ zmMp3?UX^du>)`Mik1Af2lw14zn%7!tC5Y))P@p@9k~>LlE2kmi@g!5+#(v+=0LfJa zSRe6kL1Y#xmNRxw6C(}GVmHw+Jd3sl!Xs^#N z=X1dC&tBtAs!q3QUW-nTF^OG)jH?xB16v?9xlgvjpoESs`tj8`$Jzj*m!-s$Ot#a6 zJnip6h)!C*4A_cu#MZ=N0&j~kS6K@2%Oa4BN^dY_1@7ObN}?@H^dgVVF#VS^Oes9W z)gTc`e0R}U_XMSF!T&j%UGRa!m3-dXr(wasME-+Y`@e+e{~p`_>*s$x?SCf^c<-uX z4*E-ARe+4lVJQ1pjSiBpX{lp(T9u0U>iHTkKC^u_9ki?-YaeC5XnFgJ9N-VTHKw>P zjo$936nelZwQ9L@M7Rq3wa6!_oi>G9w-qI7Le74O%cGsIQlq91Krys;+en7 z!%RA_JeG7C8{KK8e%GUg&VV(iGGH?mT9H7XZXh8mjx)L#SPEc=H(tu4g(^Fo zaU4OznRm;R9;0e)X-%0V)CuXc!vNG>4zwm&7Bg18 zG5Ch2ab`w%{xcxl(1mnDT<7#-B8`_&_Yqvq$~OjAQ=0JU6f2u~#TE-}v0m9sL3gp~ zxQd9Akxp1)hMavWT{*|0>s087mV!-MwsOqif(%4s#&5a?0RA=a9dMlm-c;i1REy;} z#W2Mb+e~Am;Y@1$Hn|f(}zmv|U0>24Q5q7;0L>EYUF$wO_SjX(t@dSXF&2yX@aaudc$W<%ZqG_j?a|Jra)i1KqpN+mp@992HEZ!mI8Ub z>028XwqvJt7hH~h(F$Q~{BdveUq*QDnKxVwmy4^`Q07kS-GhoE(Wag~fFyKlex0v);4l-irX6n1G>E$hy%fhL=`*65g+A)B`@q#Yds zsV2>l5*5h`)IY6@@ zdrVGIr3Xq@6wV`#hT10wYSLaf_C2O6zD87T9gKXjk(qOzFmW2*LzM}xa^Q$Pu4dXx z8T!7I!Zw*0ZxEdnt^qX*7=ErtwF@t&o27;@?6$p-!z8SmGm|54y>l zI|E|n8dDn4a+i@m`T8`A)w0V_Qc@b!?&6P-0GTm~jC{mgUDFhgoKf7GloH&vDD_cB z9cSPM|I9;YD-wi0QWtlG&cm5yAHbvCW`=YPtr)r_K4!I9+qr7%0Iv<5XG7X8VF)aw z$dYF|)hr?R^9$V#AxzckUAw1>$l9r&T%NudEMS`AJ;=X%G~<#oMd{;CBR@1aku1ir zCmsF{SIztE{(QC8te~?cTqG-$wj(av?jv-c&mdoH ztKTP5*_OB<&ytBgY8klS5LiQ2PRhr!du(?OdUj zHE*ljBGpGRF(z%TF14mMqW=ld^RXA8KO5KWO1kJLZyxu_mKc+OkRz0EoF6iRBvALM zG>&lu42w(+@oW;|dEmsxabBm!wb97aLvU# zw2vaEmjb{1?VBs{*SG_jo-Z0Dz7#TzCk(JO_>V`Md;FwPTV+b7?$i6l+VGb5mC^wnWP~khqN;rf3(W=RL#X7fte>6zLoeGJcjxu*w|J_`FIYs zP15Cv{&_|LtrN@u;%^1X)V|e|c}U6hyPnM|eH#^?f^+}oo*YFXvn0cDHcOf%XjfKm z>8ha!BXvTR8LMd=B+#-xgYt5xD$@(z#eiPcAmPqeNsy2G6k*Yme*tZ*;tQ2C` z6%0*O_M2RSMW_U~P)L$+N$Z%EI@j1(_O2eo6+zllz*wb|nuW_xFwHoNLbiUU*jX4e z-QP;Yg=~Xd0w@NNhh*S{il)+3pNwj^ZVEz4*MT=tJ~M$5G{V;B-Q=#s$I2XwFyrID zh7nGjq>O%LUL7Y73J&a^eA`ecoFmRr;Px&NylesApjxftD2u|Jlf^?&MYCrh z0IkCc9d@3XMaZUc07rS*2EL+-mED9b{dx_5r;&O=y=m6$rY8OVA!rr}J{}F~3@^L5 zAwQixI~?l@U~Bj+_v9{>9nrdZR`XU!L=|bU8<|mrQjC(ov*N28doHn4Qt=&cfwy&b3I?F zvwaLG3#s3@f!?kw@B5FJ{!mv$-RHekSguTahReO-K{LoLAW=s79aYP;5|QlQ734!l zf&Q=2+*lrCu+T|}#lm+ctG%+}TAf(izmem%&7f<7TcK)rnwPwKl{^foO~@`(AwL24 zsMVQ=Cys5&3oZ+JHl!E``Cig+Xepi*;RCw*MI_cV)pE2dO4?WEB7-x_>JgN%X*JVW zO5y8t>|a5f8{C6cM{qQ8j9PyQC~E+ER6zDD-6`6P6In|UfT;&Cp)-C=oxGZ3kM16P zE`A?G1M1ztrcgg`Co=AHD-TBVm$tUbC4SXD7T#P+641ZxIX&&{mI8La^PvRO%1hBt zHrBUO4SMRWuy`A^|jYi(UBeCuWs3SVvQ zZt7*~7H|k<7A$1m9{q3`mg1|FQb_ zIE6cZ@so9?Ax1Ytpwhz7h#0LCiCcI54dnVesE9da{us_vhOz)qUsE-jmZHOmR^ELV z9JI(^4>3 zd27(;LT|vaB}jy8+!0<2Y$CpJJ*%V5HW#^H}qBF2JL9=9#P1uVi95w1cCUlT#JK5~HC zs7eaH+KTyGH(VBite6{wD+J;jSr*|59YNtgV|CHAVy-3wCB3f>9{f0#S>lI}O{+Ri z{0D%;jSxpOn(^faVV_^KhX#>NlY~uXG)W+5$)Hu6a2hO6Aiw4KA?h0 z8Ec@V8fu{IviB|{vfnGA_mto?;ltXp!jk$BHmABe1oNB{&m(8$T!;e);iYb$ds>TX z?~hIGza_X8jmMC7v8x}cOu1yZyum{>daPe3AxAIw^upN3q9)e+QLgmrDn9>-50dSs$0%OCsH@+V_WtfkXfa2pgi11XvzaDP`>ff!)F?Qa}YSa{QsSA7PzZ}$( zet{6+JxQOIgU0ia-b*1bsfzeI$+hP9+94TzPGPsogxS6o%(wx4?tfEh-)#-D2y@j8 zZh`7#J@5K1)mA3baGrfjpZOJ2n{7^9kFHa44^=o#Pw1@N#yJ{}{)_z6QPJkd|5Qu= zzZxqMpVPDS|Fc^DH|;?!#CTmC*%vL5zG7S!{8ouO8>=s3Wq^M}yQNv)JLO@Vfwjdy zX%_k}?;9^=n34t;*7+He<-wz%|1-i5Si$C9t!#70&|WR5L#$|KEDNSy!`T6s^pihq z=DJan?Vk?B4y=A$_)XJ0dMJkuF4&o$Eaq#VLSU&YbC}@}aS`EQIbw2@1k)4_W;(y= z!)mOE9d%OB@W5QU$1nVO*hjiZM~ix8+S9Aj*l1mj;MWMrOx*(9I>tj+ykTAb?+I4( zKwac0FSWmIbz|fYs28^7%q*#^mGk8JkBdB?s+pkp0;m4oEprnlf-cIAjSY-yQD-SI zX|mox28nT3ROc+vmqnJLS{kBpjs_<>GUkaWrGm^-b-OF2(N*c|`&8BHSrw=@R^LT4 zBV1-VNxliUEk$0cB(Ok-d-3YTPi4N)dD_$GKzzbWtEGU=h3zD;9yy8$d<&&1W_%2z z6OlR7-7u75l~`My>w{t>fI=m*-NJlHRI3@xdJ7*5Cq^T0ats-?;B`6a#nw_IF8(vK znvHh(!OR$5Uv3r=%Z6dVs*4T|cs^&8HE=Pq9EE_FnGr)wo-RX|$c>)!mn{(Wci|4$ zW81#ext7aAr`1I)GwEwcQo-hUN|1*wq8-$mI8}6K=}*TS4jk9#?V{kt{Yuej0m_->)m-8HWK0Ck!`{mgdIat! zabfbVo=4(wVfx}PSmzdv0ii)+NHUraOuf;CTZ55{Lrs zR}o_jzk&dCPry?GpP8Ke@T)ehV`7T;y=&f4(P*A% zZAvPUeLRmt1aACfGtuad7?`X+yEOK1_Hnd2y>|>@%Cd_z&x*3+XfJbZT3f$zZowqY zs^}0QH&IiXk>QA^@J)3r`JK1>EB1tI$FvprXlBgmBcK4Itu?E~NAQncO44!hmFD#hKp?C=R@By^a^t>NKfshpHW@yWrW>i8{>gZC)v1(#yqQ)uuftGY3 zk6_dAUw~94Y*qaL@lNvZJWx$Z zYl!7=+~XEWN}VPzd&*C7dnU&7-+V?Hcfk#@AnAU6UzSA73g*~t2=POOu1|?LGvwf1 z`NM$N5GHfB&-2nY2F`-FQ)as59PEL&4>$C8P)cot8VVw8#0-Kwnk;r7EL2I@NFO!^ z_|qPntrSo#rA3_nrcrJ=o8M z3ux;3THK#*5RF>-CiYW^IixIRYf373=7$kPPO8OJAzvXi&z8gEIq%xZnug?VyYO6k zERYFedfXJlFk=EQ^vi%{I~dq$+qhW4$G;Ud|8t%hLFt{;7;_4?p1IINL1OAA58o#bpL2QM4t9jUIj0^3sU=_SeVMtc%KFED{eP*XI z0`UUSy4DZTdiaz58kvIN3leeuTf4HZ!+-5NTxT;BFPSHd?OQ4Cwv^Xxi${c^eRyY3 zwz6f4$4OGN63lPQU^p1xzdI#PbCD-AS-_BPp|5ucm)emNQ?5UzD!%53@qwOEvn1sK zS5;(&H{a%f7d^a{8D)~J>i(0*Hv>U{#9<_WVR|H)pj4~i&cV*qJ^nMlM~sH>!~>lX z@CnIP|CMO8Vqj-ahH(RMOkUw?hJv!F`z!c47iJ>)2O|oO3PV8|F`iTjo$Nz!B#dj& z^z4Xmh)#sMdWSugW-=8;k6`Js?nw+ww!d|o*P!|27&zkrYMm6~nJyb$de_83+Xvs3 z>|S_QOGa!k30t>8^sByA8Ug(eN>~CJ#z9%>f+3myP4aFBhGDYwoY%`u3>;hXQPW?j zmj*J8T;uwzp8AoJ1G*VW{Fn(a>;uN~nl2&>z8XrhGF^m;_g^$AZ%W~mqJqr+LZ^EM0ypqOw8NE8W@`@2|p=kld$u8jzK_k zOo?M-3}xNM;4UDr_CQ&Up2^w-e~tsveKlRkD|}5+5+*CwSjXB0IJ_b(0gdqtQl8Ea zu?GIZmcAM@hOuGb4^zCib6t2N8HIY6;a@7=-Fm zAjKkEss*L@IOf=6nRP2Q);HG3aQE&UVe52m@L@~nRui_Ru7Dw>3~BWJeY8nJryL53 z(8I$6Q@8mk6W0+6ubIwiu)2?aI$99*G@V?V{{DB@D&STEUpD6wWmQaSCq3@^TX3^8!#oW@ykQF_>OS4jj_L*HMkeHr&h&p$Grhl;ZF z`FE9sug5MDxbuGRt$9S%?<{1!7~R+NGzbyCX`fQ$7SV1LzWSJ0x3HB=VxSMO(2}r5 zx{8?wLt*tJ<9yol5kBqt;#dP1I3{?|L9i4}*LKFjrl={S%MMaO{r1-K>-6;l7aIM( zXdf?R!NrZM`9^;N^P6ran6^>2i=aceOH|V=W+$pPNQy0-iM6UmF_B4Lh3kv)PTLKj;J4ahHA!8R; zXCo8W|7I@Et9|{n_+Y)iC&J;d-X3%dS&iG2ZV;sLs@g8hRM43dLG$CwspEtO6rDaSm-1QMs|PQ0sBy{Elq`hgkDO)@aVU*Q%)Q`Hk$e@1^4?bk-k^CJZgHYd%c- zmy>iMZ=ZnyKc2~_6nx-p{4^#6bIe77$+KueYXM!KSZl9UDvuUtNURu#cJEtuUqpJ0 znOFN7%41G&ylxYgGYsaYGI*t=MdZZ4sq8t}ms++Y_DdFa-2Z;>}@Ks&H zQt#Qg_0c2gIU7@~wXB%b%(-MQx|SXd`Y8Y;;?w_$r7&*AePmic4SRY02gL}$B7}Yl z{#l4kWc+Ed{2Go88Hfs_9bPRVXruuRT;HL5$#wXxOI^^>_d$A;E!$(n;<=&Zavz%*As^zdsCIFl z0nh&<8wVc;hLaL#|AvaE-ZyY_!=?|(g0Q|-SYtI}EB ziTW&P5vb$q!0zFw%L%p=TSrcw`nb^Gjad0je0TRYbMuY))kiEJ?Z$pr_ouHF%>z8W z`>%Q2bwJkT`NX4}1=54x0}^CBPGzTihfxwsK2Z}rlk;~U2)!fNn3w>j=yj!9G9 zI>Q6yk2?5IHW@t~^tC$A>NoYD6xVc1*s{ixnbQcTHxu@V&z-YjzH(tEF zxb|-z{n90J*{aJK;tY4{tL_L|hlzWRmEyNfB&^@`Y1r z;L1SC77z&BHuZ5BL)ajS!u6CK$}{8ajn0H5!m~q0Xjk6LBrqtnbG+>xqwOo`JTS4; ztx7X|;_D}%7cp8IrY&;)-Xk_{i0w6Cl!9Y7yw9W=My&tucbyR9ot`v1Vc0=zGhPB} zKgC}p-d6DC^LJOsb}(>`VG}oZ0K{W`S@`LB$p!d>biX*@P(-yU^UuD1F5!ei)XVg0 zXI7pa(Uj`y38Fy~y{yDFPdyz;Hlq{aVn+x?HY;!n(&&2BaN}WLu=oE}7l_h;CR6H1qvGYvsQN$%SOIf9SL!Jy}>ceB+hH5 z?SaCT$)13NElRG#Tw0m;hp?$0C=5+$EK)g3mfUGW5_1+}LmG1)Vv?AQhzxXf!DO@c z)}iwH`QOMJ)-1dBm?u`Zp2V$`1~b5R3AtiI!aMDDfO=CU28TdqONy^PdNIxiA9ias zbqFruL}M29tEZTC(4BA(I;!-586>J#mcVxek56_JpmP4VW=Z_iw_5uEo9uB`n0p zmL3lI@)?z+ow>OVmA8B|iYXphvBRL-Zr8)DgTJb+kDE3(UqUCjDngpxrQfVcgGj2|7%d2=q72d5<)$Wqc#^Ipf*8HFlvjK0?J*%SNc5U8ozgF-XXS|2w>&oY%S49 z`V@S%UXyE61_2jLhqxfK`O=%_Gf2 z@MQMI=VkfBrF(8(GGGu>l+joCbt3QCd%*&bDc)p}+&c%JmtPQcR&X$4apfA`2bmiS zPhCEIc*7vDgvB2FtUcuO26_E$``?d z_9m$A8Li$TXW{@FqQUItl(+P5fi0ae5BondBh$`>rz>PBKv`A^kR;w^987y| ze`B&>-E?k)o1RS{3=V|FJhI5EVC);%SjZ7hvg}12;$S5W(ntE^W_8zih*TL7@Pgs_ zB}0dY!>C2g7BcK`B3%Myrc3RVy3&~W={HdGp(sNhKu&MFRUT}BZ5+8^7jV3N= z#mnn^J<4LV0)ed@0XZKpjt=bRm8%^s_C6#fhL^#q9B}HxMDGRKdg?^6bT?+~9Cl8f zQuc(Ta60wv8A{ENt84D@UhBf%Gg7p96?46=? z36pi*s#&(JS+?z2wr$(CZQHhO+pbx*ZP%&ZtJm7S*H!n)i+}vLIWjUbzKG|ISEC$O z0+K5n>_%nAAr6NX9$5DUX%&}|v4I+#(FAA17|D3!P<_`gW&eNxq06kSqxGzYc~C)N z*-Ca)N+W5*`XE|MaJ7Nf*7uzsNL6f}*PrN}Q1Xs9-;n)_P?`hO`?q5#A7D0Hzdt-> zbdhe+87{ctUGX#T0O$?5ma`m9BUSKQDs6?EDY0-~Y;m{}=mp{+Y0LssGrsd*(*&8m=sy`Y}kQ zCgj;y)HO9bbI&g(H{6&E!JY7;Ja8eYiq@a?a{7ln`+dC~ukZqPhInGv>_`y65J(6n zhgHI>J>F6*lhj7TY+JK>S?aBiz&eLr%sJJ;!sz9n2;1{srq0W+m5Rf!&sd+wJ96}4v;xl z93^6gUXi4T7{e5Bt@C@DohaT-in73yAf76L?wR2j|6za;-{X<)HA8mA1xEaL)2Pb^ zrT<=sbq;v|FWzf#?5Twu$3GPePy(Y1)K({sVqwri>a|?AN0G01LsW`7G*cEbSpm|* zt{S;;vry$Scyev@-10|C!eHG~g&KH5TI63ikSEqTlOH1ZHoekJ$)=EIWL(r-Vtknj z_YjI-n8}hJfT_1+?5WI`L{m1^NL3uc?S{JH_6Da5It8fNeFU)CnF6rcy#%MZa8A;#@_O}m#k&o9cJnhBvaP^zxbK}C za#%l4L=&dK%&U__sG-?uMiE7mj5aLl?%yKulXFu3);Rkla8}=2lCSf8?Bxsa0GpCKODsUD_b~D>vQ0Sa@^?2c&-G zYOtr07y=SyljxZ(UDIV5SP`U5z8-+Vq*IqSUOfBgf+^X*AE@%F64!LWn^YhxD3mKC z9~a67C}#kLZ;DPGbDDK@uSt#HJ7Qltah_JrZRUro0?iKDeLdpp9#YP1JxIy}VXPViVS-H4B_U6q$>vsMV zBJls@rvDN7>i_K9`64lqKocTo9Pq~~8 z;;&*K%_lC`JOXtOV{UT1vhDK%@&_dcy|x#*42!JyR0K#f14H2BWVK{UlGp%+{AlE=^sh9Hi+s5w=Mk{k)Q+uAxjzcZ57wnO-A$#H`ufcfpf8{dE(+i^h+9 zta|4KhwzB|^Q!inV`7Ko5eSnu&1qVXJ|HSXY8p4uQq`b^2zE$D=@Xkk%f~+0Yg_&$ z4)$(`(dhMrzE&$Dp!{5$@$|Ct)_{-mHB6q?rgNPoco*lXkAimlR3jf$d3k;no#v zRY}O?l=5=hoeY}6{E^VbBFm#o_}2ZDpxx!=fW%+lc6O$qg*6ABc3IHWEkK>k#$Nu zKBc;9@~st>x_CyxO2`)m{iY=7ec}@`=o8DB@OSr64NV;oMHf;+TlM<``6H}9D#h_+ ztxwn*+{giUU>NB@gY)+SD*^zYV z<4Lb17WZ~2R#n8xFa9U6p0uH0$2m8prMf}UYdst7$AQ@U&hb5r1T#+|8Ob;4p8-wWSkuAE2?dJrmo{D5bFAxbp> z1LXjO;KBcRpJ-gXVE@4z1~9$V#}EQA?)OC;2LMM=^w_DxWqSs(&%p`k`U1DC4!Klt zk@vsU7zO|ZT;qa!<$WguLvLFngXVpn-n^Z3f1X};9?-X1SKiEZRt$=g8#dR3W2pPC z^+8yVih6t4n6rO5$hgOyQ8|^^OWV-!f3CC|x>?UA^DFQ5BkCJN&jZ#&qK`p@ilv66Wib2uaDvt<*vBO)vQMGVWgr!zN! zP3uF1b^BzOv}@S-Epp%i>k}H?02*Tf8jBQz`HHTXl0ECJ@1fMljoEJsnOZWSw+2eL{w{t7|67U_6+Blo6zQ*yv zFB@;zAZZcN-8@D)9DOLkmDVswoW}cy6Ng;q*lq%eU(8whDn>N~c6haEW2}>-%mEsQ zR6NU3kIV@wO`Mybrbzp(HnA}7K#y)zmg0i@<1VnDsDrrjIo1lNc9Z^z3eHPH0B#oq zGHX_RK-x490hBH&bC#b2M50W5w2J7IO`8cv$1g>0m_h4i42l08?xLwmzU4AZui8Du zu$?aZv_Fv1Gf&Lqghhc#3_sEzGvg|NFVwk!CF^`zeLRe%b>6$%s|K(Z*iS<@qk^Btz>iFLSjND3 zD<1aOepAgu>jvm}?rM2~axhq#F8S~ZFIZ1(6KVZm-3%0o;yeKjrE z->r=Sjb7a=jp?wR{Dp%z0FlWQB*YoC;QSN`c9kd5YLQ)Ga$nS%Q69!Lr!R+O?tz$B z;imqxMLxqguJj2-#u1^yJn`0B26X9Y2{i+v1x~kdRIohd&HrY89G%*rU7@JY%|NIA zDcmK9z;c#5jaP$kQDxXvhfP$W1S4k9*q~F0MBaw@L({q0xvO~sMQd4^BhU%Sj11i6 zA}(xIWl$@w$yEiSf74^$w*q#i@KOg`(?m;H*Wsr(05Np0nR-=GjqBRnomR^;`NE$e zi?i3eSN}N~G`uru5k3lktuLgCHJ*Ain(g43t@7$$Eldzqk??<-1BLWv>``v0V}k;w zYaU=$DI>QRAV@%s!Y)xjQSbizcGNW2{Hq$cex6xlL~CiNVr2DGNqHjO)IIL>c}I{k ztEOBH$NmK3#ecCwBX(H9elN`5dCxR`bm_+kwi-}CD5hgIcJV*Y&j#qSMTG8>b4}fl z;TpJN%g}L|MVQRq|Hhc!*TSL~c$U`7fsMHap}Q;~(`h zkNyjK4*HvjZcoxJQ427gr#U`v!w}=khV^q$2rY*8pagDreXI_nXMhca({YKUX{BjH zfraayUw0)p+%`h_kHeRGYgY8mZ6}69Q7A4|$4K0_L6yZth7@C)rLselz!(|**=z=- zbx;3VJq%@rFdSJRCt+U3ig}G(b!$Zp&s(u@n%M8l5fnpz3qG<;{^Qs`@^(R6P2rQWGuoJS+poSTK@ffKn3}Nbirjw}8ohN3!CdMhe%U6^MY5Rl2%Dk$|eikk(m&outIr=p> zDYExP1gWj8iM_mT#~6MaH>%-5coll*@tB|A9Tfif(TeV+p4<{4Re-j(L}Cb*)<0I0egXR){dN?OgQ@O>WWaL)iW zWAmX0@0N6&uQhLmTCKB#!xj)5YTWK@SQ+x}r`dmc_DpvfVL>=wgkS6isp2IsT;z~V zeTOaVeg`&IUZd&1pP=n#15HNMUC2TvYb+7QNp6*WZs+oNN;H&ziH`N&Q`Mk* zCV!!r5DQF+BpwnEL~+kICPykqGEbrG(_*^JukN;lg^y9{ksFQ_Z=n${L~$#yXfUHy zq{lq6Sz!$d5aOoYt=5xDdz{sq;CftDpuyT!ORX&2NbLrWhQ>&95Id{wHaZ~2RI%F# zz_;z_i|o3D`F@fZDmTGNpxAyAA1&&ClTOwgT5gxf*O~fQharxih`fv~A?8 z*%b*f+RQ7J5FxI>cU*z`XIQiMH?A`5M9xfOR{k&jFSAZFEyGXtEB$E%{Qt>*|I-RM z{IOhs|3bFkqf2a?qNh608JL{JuBuuc|KWS6N!vUcejFFFAm`=Vw4C&eiQwFBMsj+7 z%of1A&w4{rnRTaq-GES`Rhe|hhD21a27lIwduckWHI zGSI*Oa!{U>fdyALE}8*%Uuo6FGOO#|<5s8Z!&FVcje<3uoN9CbtM4y7+e8H%VM3Tr zB#9?tX+W2WM{N3N;NBt=`i1Bd8lfv( z+;4JwlHlW1#`((4$hWM_?bo4kq`fnI+Q&<>S5#Nkz)RaHN}_I=RVMoeJKb&@9YMo2 zSU}?$Dbs#K&U4;>{E`nf5bUm7I@0QBy95%>kJdd{3RDBdlNxYN0}S5L3)9+HK_f`U z0ncFrQ)oq7Oh6yUOj0PPcE*p&?qBjv_Sw-oHP)zE#eQB-H2PgK>Bx5+=w7}h3XCBk z09?hCwhM?q5M#yh)Z><7IJqsFXUc?g`{yK96*ji*n=$*s%Uz#!DFZK~+h@&n1nB`p z^75m=S$xjIAE~3wn00#VeI$=>7MIS+ltq`_+8FFCqUdbx{9w#l z)XQx|NY>k%e@A}CAWS>>FO{E3&zz-ZP6j7=N&W4^c_>eI1|$CnjF2NsA%U(l;84jA z1P*9=e$KcLJNvSr(~%$Y*!o5Xu+tNe8D@nQuu9&Oe!g}@lM-8T(yo?VK+3w3@VddP z{mv{mkWg&y`bO)0MC-kbO)#keKe`t!3S`{Smj6407P28IpKKiuZRoFGVJXde4!L-} zQJM|-VJx_<3~m?yB!%j)h9*hB-g*>2s=jbx7`Dly@-rY}7}k2;ptktob8>`(J7TF* z8=mCkM#aWrMa2f?CDit`J3IU)_rF!2`_h^Uc&DA4crND@=VfOwN{>PEN}E1hE(r!J zeg}Bll2f@y8K=uSq6<8qI=()bNlT$2>0I-db(tkkTnO17G$i>SI@bNO z2>Wl!EhzbCQ%h#Yfpx7U*o1V-uR|ka=+5Wy@G7T9xeII!HIBt?3hzJPWxCWh^y2it zvu{Dpr=NMfA8~vU(;>JbU^XpDZm^q!>!NU=Iv}9+ZA`7dp-y75FX5)RgERi}AsQ)C zDTW+rcWF=k>;~ccC9{_oBm%(|1xM{^__N5veDm3@l}ru!Hk6Ku*fY-<{L{Hw7+n=w zQ+m`IBInvs-3eD&Rm;9VLBnsrFe-?DrUn&EQ9v-TKY3->i!lcUm_XGua+6XB`jE81YM*p?}zJ=Y80RPZ z)(x-?xyk23Sn2l4)P)V>%L+C)4^69vStK646L;Bq2d$CMB?(zctGdz+eR)J~n{W2c zewihI=**)7AD5^3fT3O$`qGH|pSogte?f9uV)vE$s$wiNOe_#Er-@B(5t^AyElYx* zK%VQsk7J=tM#N=`^gs%S#E|yYx)Z;1K>@ijj7l9IcdlZ%jnyZ83@JJJE9JT`7g5}v z|A?T$1u<4PdZ6HB>4(6zwcLMOkx1g0Ixo)6$hQ`6cROEB_HQ0yZYfHkh$qv*)LTc0;sy!OK4S!5v%JG@jEi3jJS_N#To8MB?ZFGp$MljCHW!3G>C7+rA>lt zRf1i?Y(h|z+OACXm7fv<=n3RJV{1qYzM3?Uy5}cE>)-?nT!r)mrx~I8TkF1ELLmfHUL3DFyyT#zVw#Z)(2n52bPt* zslk9SBImF4ocgtfHl3uUbfYVkhr4u)ms^;x|I zUn?YM{~j-L5)dCh;i#}*Q5o=H>67FTOh)SEY8@C23=XBC-RPr}4J+zjrUwtK5KAD0zp7MGK-4G5 zVH>j*$Y+D4#B!0~#DNZX!Ik;hl%i0;U?Xg^#|%r;vd7-HleHth-2qgRg-Q8GPyWi?a>x!vAgy4B3p=;nDrBL}ip`iS( zA*V_m>dVszrit)zcG7c;nNr}Z>{I3DgpQM#;hW}mBa>u34hl-@El$R((%LpkQq5Tl z3{@7C@2^ZNDsAPf>_Zm_C)!i97vB9dPFK4H1&`;z+u$=4fd`ewWcSiMRjCzJRS}Z6 zR5Ns5S!wB!G4VWRDexH#&_mdBX-4D(7xvWJOIrdrCQ{8E!lqq)oeunTb}w^;QXbez zvj?C;WT*vWY#a?qa?~~G$-^-H8#qT+LoCb!I7iWOC=JTI@9~$l%FPxn<&ZNi*|AQM zka4X}&1tho$=UE~Kk7jX`)&!^NsS0(QlgQ_$Z2Z73?#E`n0)$R5~dM&0j^*=0(!wi zLO)dgfhOGPRJ_AzRlP7%V#ijUnGWCJd3|@)VQrBT@Y)Cpf4bbjb*L1iIe~3SC$Vz&2T2^j{oq8@I@O zfdH-wzQFOn3jrj<*Z^`X^KMZ}^R7_1V3N93Zdf|~u5AEtkpc6A z03LGD|FCl*`XbsD+z^LB5K*9rG;V?r{Xrvtn~|M`0LepqhD3h8-3ir4_TyJM1NzW_ z`R*gMzQzLnYVT!p45oMLPwf}r`qdXP67)st3fUWC;u2cLHrHm5}uTRWcQwP0bCnwH`)yHV}86$(CKB zje-scygN&m;vY)g)bAg1Gjpvgb+}j-k{+T}IkM6&mD)X+em{;u!B2=QaN4ppy=y+X z`{->?%zzY6m0c_+cgl|)^IRBSQ^;yC-z>&vaP|t6xHYrVNH^LIJnE&nQ(XDTI0chD z5DU~<;3v=5So#*Oxlf=gxAg9~ewp?bA4+A$_y5}eXmq+$iDI|ldOSHILnqtVUT8gyPwvCcwM;Rr}=Ich=ms}vWGpr zr|Ey>V9ICV-|S#20+#30^1dTI0jofo=hh<1|M<-h9@Vi<6KH7VW#(jPPJp@oX>9)X zJ#PtI=2`jcoZl65sC;C^MeT3(*(U8SS^aArWqU0I5%>VzM$|$U!%PK4p@e0TC|it%T=;geK4U zb&qMx_gu11V?wdFnN6bkLqhmNXGJ$hX5c{4DlxWy@zkilG14KQLs)pO8`OBNkOW1V z5oHg94YND6mx|8yRC2>(#*xK^+Mu=>J&}HZvd<8#S_2VW_-d{b)_CreV3VL6v1YzF zX$y+ly8C>_5YPV(VcO0I(o8@AfSsQ({`bw&<>y1#iwj$B;jicxIjYEz3*~keB$d=Z& zG!`z8iK$kKRtIioD;~-WY+X}lH@A7p@pFuU?4j?|I>&ft@o~@@4D)FLJyDAZr@x1d zq%7BOCFYx~*BMr(!-80j=vJowdb;s???)yICUaI$#O)e18aypyMO5KB9qnn>sezC% ze_*)v$$h&UQyzSstpEim=d{QeY8+l+R`2>L7n4)8`P@j5)(z9domu~KD>kFytcE!I zf|BJ&PH+1DW)Fsl4?y0-efYvm_)~(Fs_GrK2HADRP7ow&_goec(HF~62>O)3Yrtvv z9?*D<|FB<+-A1L7_QD-s8WSof&ASPz^n?TlUp5#}zXIP5P^LUos(K0b|F&9}6U5Jn ze<(zNA2kcZzx84Lzfb(1&pHXj6-xwl#D{P-Y1v{$sgkZBpXpYMtuDg(Pf+ZDm>yvb zaZ&w&c!h1+&(+3^&B(Yf^1MrbpLIPYuBS7W<8m~W@x9L~qw{(#!UH(DZ$W|*p>@%` zIwG^vK^XB#)g6BTL<6w3|kcf z0Mmu`e&g#>g7ZF4*G3I7ZYkkJfV-Qhg`4WR7g1U0 z#~F;oC8QY=tTtqd#9ZpWFk z7cQ!ppl-_|_d@j3HLeaFgd0#+Y)Uz9KJRxthAcaCF5b%IE;}PB$)%IRWpvY|_Y|Q? zu$$2CaC99JnvfW}S_{xfeEDrRX{izzp}kC<#+66saG2gs9_A8Fnv~wAl=n2+qQaY| z->oXIIzMS;-RB^YF?1Pd%In`GgkUChY(bo`9%aA2``*D-GV#|n(8rr`c5hOhWsSk@TsT}*QtofD8UNLL5h+RmYm+WQ(RvvMPH@lH9FOl^9x7gpaFVOIxs;^Z728`IlMMgxYoE@=V0hV37T1KZch!0<~NApf9rmWAzb1A;B5bgQ)o3LBMMTdEA0{ zHqWlI-xrRj#(u08yld9?04At1AUWkM&va7$D*n8=s$ru-XOB?LGuzo z!NFdThs*!!7#@hwHxrFK=vB|FG=PNy|7Ch-{yho_uK;SxGQbuRR;f=>kv4#tTpOMA zr`|jq*~DKai`bO-B~Y}I;J3ViDm5bC@-L^-@7h7ZG<4vHoho;n7gPjHzO1+l!t@Wa zG`SM-5D*s4!VPmQD#gl?TU{17XXUd2w%R7lI;L?uY8qpB?QX;YK>5w^`@ zWz7xg4yQX@ZEe0xutLtYGNluz2j=aqVbCpc``XTTzumHPGfaRV?XY<$8FYsCu@qm} zJ6@POlw!Hdqr1$}-xtB3Do(Lwp;n93OG_8pvXXvtV4fm&oT~*6DTiCaQ&7}9{2e7Z z6B3aBu*~z*8LhTs*)CWgSvsZBgR=Oe;C)Um^;(6dTe-SHF$a=XNm8$M5qNN9lSx{y zr+iO3jW(Veux;ljTdewl5-p1mHfR7wE%<3{Rir1Ys74Yjrk=K#;Yjfb_FXI;)k0?<=8lDfNUv@Qcby^mH0yhbYMU0MMB7%A~ybh>T|_uxMAU zpudZWmR=Y$%ma_Fd9fjYSG?1`w0xi5uLIncRiQORZDT_7$^a0qHWlm>dWMwBb7CeB zzZ4yV1z{O?k%2TZ$3o~&p)wTB&WNVW4euhDR6XMtIaLHUrv+akIN~q;G5Wh@9_05M z;*v-YU)!6aS&5L$h}Te&I@d^0+>$ubm{cVC9=eysps&#dMQt)Ga{d-E(oH^vMp>Kv7|wM=3Dw0?B9%G+JBXobIECO-!d1s2m#sd(gf%^rS$ z|8(tdb?-OH*>5u2b*(D*5;eP&v#Ij+raex+4u$)Uaw(I;HkDKN39II=@co$=ZRXN8 zJ`YLwoQ}^zPY*th2APS&k{FP;*A`>kF1K}5=+5u-bXx45{bpc+l$y@sKo*tnMU+B3 zH^28n1r5gxBa^ul4DLnmcA{37*SY%p{?mB-C7O=S2miCxq?Lk0+$EzU>XK9PQHgj| zHfA$>4RZgNRy5a3F+Q^l{3{(diQJ|f4{AR%iSUIhCM~{)dJ0vEDfi27X}?%%v5rec z9*>L4&I8PSl<%UqET_Ge0BNfar{xUn1X)hcqv#TVB5H0{6cWC;cxmz;%9 zc?E%VkI))j9Bc%Ae&52lqZ2jJi3ag;pn@uYuwn=uYCd(WtrT9k7}#UKV-2cQ99tsD zvAuSS9vs%Iv|_GVeE*C5=O5jy94k6!=%4uixyyfV!uQ|tFKgpq=4fVP{m;rfZpnR} z17O4_d=nEBm(j)uo$-DgTBRCImUqOuw1(NZbBhy(D8}s=nCh+I<7jgsr5ErGN7A|D zN39|>t)C+i@BDdEE7q3kXewADB^;xLy7|k%-cZq2myU|*?M$xW2rXQ$O7TPkwzGDw z64VMgS85=%iFP0=&o?gJKl^^Z&D*NtP&6lpSWH1kw$&i@p>9t5<~I_%&ByFhP6jO zuX#A0I9jiPE@T!;(r=NM1&Sz61O*xi9FM7(SZ%9#B8h2&l)@10zFr>|@%rR$qKwr{ zA|Vd3;KtvdUVwZNc!GL-we4N|8TNz`5+FT!@wjhK?KHsJUEX^t*Eb$ZNG4!(V!wv} z!mMF0rp_5S7hHj)vK^=e*@HTlBlLDfxQgyE4_p1&gqg+6xg64?KIhqmiw||#?EL$h zn!J*VnezhMgDdJSSmzh@rnwCorm6=31XRn>!NQyWIE{CLsv!!bVKB*J+1zlc5PO~q z@W3;WIiWF3c;Ufz+t0i&q%i^2#BjAIIhp2SmeCs0dS8?&@ypbtz+TeRezkAfb>s10 z0&MdqzM8VayWLSqne^-Ii4j!H+u_V$@fhr<@^8!uf1S*3lm z3ur;@=Aolv23P6B6nZ1dKGRYof>bdz)Xb?_^eLV7X<_$H*g!{Ac(_3T_jthwA?4qor>HC(K{9uoV; zLM%GRpio^N_@!Qo3v_hpoCchJ_2JwCw(w&I#rDlESj?Os%9+kvN#-?+>5q!wtV55( z;UEX~!g!&mXz7gjix>)-YJe;?SzVb1q1WGNM#II`AXXs3w#4<7PDzz)-QLJDw9jx4 zD28Poz6D{~C$b3|zvQ2$?lA;J*Q?|m*b}4SKLVcG4=ly@O$sdZjpS|q>6ykt6({VV zXyMuECVxH;Aq~_6g)R?ssVxFs`OGC*vfLGsx&$KPE zbumygC!;AuJVlD7*w>!L_6H zoJ@lYsYRq|NS=sLaB)*U80fNx5Dvr^!A zx?oAWn@5EnA8Ser{N+f350fS~+Ha8%8^9HS)?(=~Q!jgr>Q>S#<%8{aMdS%PN8|~p z!!Sx5E<1Kd2`XT>oD+y;8^K3kc8UH`O{TKtk@N*sHCfUY6jWO48kCGCuW}OU{cD}T zTvk#D)E?$@lmRC)B&c&32&gG4igNI%cvoE=8C}ys<3OG~zahd~@{7Mv)9rO3XgTQl zE}~44A|bqxsslhlrLb6MB5!o3<-4mDdioN!>^#pbjtUwSLJzUq&xRaVM;`s-j#nj^ zDEjgn$CH-(f@J98(Sj9skY;43upa9R5@dzsPZ|{;(=$L9Y2VRvhg#^t(%;YOgQ1IL ztsJIhSrlkv=RW$EQy+a9M3)vUx>nbX@u$_QpmGGTH{<5mE5h|O`@6L@2_HDOmUX?G zBOdl|ZSx*)2XHGHcwsTIE$$Ed$tx4M^@F9JnPyvF&I|6i*ny4v**Wxs#Lu(auU%Z1 zfc{O_w}tT>r^J9{Yzz1ipQySO7OXm}97K<$>(9^m3lZkr4(3 zNm5X)KdB_`r+v9-bf*dJyfwJ7?sPTQxsYIJrTqmW-(D<$e9>we;;>`dze+R#%^b$AL5K-hzbmIZW=x=?6?bc{V^(YAu7eZ%l) zsj@k^@Dq35L`G3i?PS8tMq;T-_L)(3uD99TTE6OQuw5RS>Q;u&ZDb_Xe%iAb(tfJ32 z6&4kjq~(uCYsz`RVfaiF>BJIB+l&^ikD~O^Oilr(1XV=rqVFr(an|7E4APJ6D)o9t z4cz}kLY;4NuL4xQSd^KgeCiJ(>1$T{no>r%@YiZ3}0@Afr>Ztzw7Z~UtrSkoxF&Wy=PHy5K`kv+A z>CgR3CRcQ`{io@5R{WAXmI`vvH(?YLJflNflA&?4fpOyH?2>94nfM@l>s7!5%8$X; zidWGd`*8-HNbO3C*=3W-Q_lC-0~XzQT~uG;0P+F}Hwhyw^&|!3G2M(mL&UhIBb{o! zsS;aBdouMJO0}vZnP$_8Vyp37k?p3TfNo}`77s$?g>l!NF1ZRhNhemD{yf%X$);sn zycirwg!Pv(1%2vhk;70QijmCKahKZPj*g}t53l zWM`R`J^wk2Yks`${bEXOF*@9^ZY00D_>L~=Wx<1H+5mjDNkF0THL=~ zhg)`F#A^0*+BC)WV}DONCe2r;h&LY6G$hLqzOV_;jft4Jcm=FkQ^t$Oq5PB4L|4PJ z$FAm{u215jcY$&m3c4_Xvnp-YL#cEd>Bd?T2Q{_L$%6IXC2*Z+YM2h zCDD?#vqkbj!FR7#vw($N@;JY&o*Ja|x5GX{`ognZ-}3mw`N9$ZV$;FzCcFXbqXop@ zhhJ`!sapbiIv)W)DP7PV^#1(-7F-U;rSuIU8&n;?Wx|2?yqk_#V=6_wC!TQql;*>;{GZJD7Z| zoJfff$dREmq$`F*|BnT;(dBOe@H9BlCad}A+`~_)f?oYZ9-YBsbO0is;nsOu{1Z_tGX03aj!H$^W0@~S!fvtEh@ zvIo$E4(h=<+_v1rEjWVUxG;0i*4JEbZf>^P%5@J&IWUX=ij)CDk&Bx<6Kot}yOgHJ z;ot<)(rqN2JD6D6^F+~#m>(NGm~&`WKB9!p(K)V zU-Md1v`w;gZ>`nNyj9BdNP6o%6&p8GBsN_dL3uj2$R$rDq@XHZqi<6s2+xSS!Z47?eayFBB8Q)KJPpcm>mppowOit~)ScWXIqR`vc{bSZ_Gl@M%&w zJy!0lY(dMZyuG44On<=~0n9kNMY|T1@US(YLAgTwfria#MqciBnC)@NvoTj0r~ogd zW!o8;6Z@(?wTzIIOD(QyRj>ivTK73vK*8M$V8V15;pd@kX8K(h^=12n6nUM;j zKo)5&;d(iHa&|F0+rFy>1VL~JOvO>piL29|sJUC&_x7WvmmE}G7I*dsR;Vp{`D8kT}BDu%r{U#Jw$KA zI`u{p?A>UXFG-+_MdCMtQy2YauYbRU(I!4*kSR}hu%y4E;76F~p{UI`E26m*u!a4e zXn(i_hDUh{ZQ^j{Dq+v1kL#R_*O{1jae_n2Z>yLmN?61AaHQ#BC_8GxBj4yq47HYv6jptU#SIVOLzC)l z^QMg{c3vA}h?TJi{2mR5Nh#!f4m(b~;&>|bVaFolu|IES8(+PXM_<&E%n248P{hV1 z{I8$$Xx0l}Y%OPkZA}=u7|2A@B#}}t+2X>@3eTV4>`rx*k=|Ry(YxW$m>}w0MkQYs!;eQ=(SJeIdrt zM5(lT%KeYb)`$L&)I|PB(Uf6diMbthID=uEA!iVefzS3|)h3 zBfH{Vjo9>%ULD+p`tgEu^$Pg$?#T@1RUz7KM5MQ)5(eKDuc=P(LQU!}_v!$Dh4&zo za4csF?us)9e`xLCsUz@X3D^I*sn(4n_6s%YgM{hBeH!+81AZqDjfW&Kv(4G@#)an^ z6%h2<2-~bu(-T;R#zp1wm$8n16CX?8nR6{=#ZbT1;OH_xu^}5@SU68ZkqY5eW0fz*#kM&?Pe!-N`1QJ7 z8bVH5oO{eUV#rk1GqxC~yW{&sK{ZP7*v(QjOVI@NDLa3D&(+Ke?YQnDB(WWLf|1gm zFjgPStdYLX0Hn$1ACe4SB6sfBcyVp;fm`#tqF1GSLuoikB<^Nd(TT9b=?l6Fz0=tj zTOw|aoW&T3k_ioeYxU~<;v82CEK;8Js#95c7ZFOmdM>+-%xvq46Z(eF7e1@z!{7xc znS@mLQ&mn{ZW7qbvCzOcO&HVg$MKl;W61&)il7T^0kK+5MFxCbaazXYo_ArsO@%*`9WvL^p>^%l6M)*+Hbgdwn z>tQPVTQx?7tkf3st0Mw^yN_K0yD~y+@{Lh<0?0#;qWWbWICGCZMb4shYX+R#whyPT z1Z*#f?EA}|BW}mFAR_OHnPUS@e!O8oWIMKM6+THoGF{A|R#mBNry%ehGIX?t-`PO6 zIx$GSMLB*k-hus7K2LhEf9eg@(7)!@l%_0=J3KVgn2o0tW30H=pETB4OpekFWb}Ua zVFtYaI=}34dmD~gD>*8|a{B)M2#I^dmPTm_M|(YsamP@Es5r<*4DA5KgK7=-@I^gf zc(%ujH2`H~zCmXJ*cBP0-04^FU2^;er81`1=y~U-VxKbkfKjKy)nZtYkQhnXWsB{Erm>`PDvt5};$7M(_ARxC)H1jA4`As2tjm^>O}6(fW@ zOa#jIfC$?xt9qSR{5g~9tZYu>Nxw#X`?HhzeOu?rpr=5SxSQ<+;(|L9@qO-3QXiOV z5(tU2gxG}&hB@5@-8r4hNcRGgA_jR#-8NEdL`7t>gB^O55=KwXm40RfNut^@@{m{R zEnB67IeU$+J!G*a{GzAktgpiQ!U@xm3vbmBM+s#KoP#@NmR|I9VnH<%heY( zHYj%3hB~OPnuw4!i^1d}|B)U0eOolhMnC_R0fL3vxO4I?Me;qWa&BUM$`V&U=2_)& zf#r^aeKuPe^Amf!kX$NBBbRpM^I;^EWXaLz0o1^ zGo@-CRnGb9wD=Hm>>bTeGbkLJ|AAsG3mJtDi_k}X$YX2%mPWC>Ez^&3xF$1-lPIz1G(>ky>A^~Q z-nr+2?9AcenI&RmVKC4xGa8oHV*yz+oMtoS^}M*SlYhTO#o1Sg1S`X}A|rhH6(rBW zy&L@$`hM%`8wwWow~wtOor`10)e*9088@rnVlgdhB=l(%*qiIO3~9}w(^{2-He{M{u4F=6ZjD1ix;=epRQGL)8K`Q>LgC zk$5}$kYW1?rlzHXBWm{WA%OGoHQ?9)vE`Z3Ej& zuTWa28u6T~Sdzrh30cR`s*==m(9Z-ok*Reu@1ksAwL*>smj3r|yn+4whg*o@7a}Cj z^u(D^g#_@huwkLjkZ1j{B%v+TbFWUk5FX(|TTOZUz0MHwlrZ1uVtPXpJj)aG|BteF z3X`nil7*|ww%KLd>auOyw#_cvwr#u1wrzFU`13t8|2gx07cdGK%TM;^W)gY^hP=#d^< z!QR0Qzmk>S*w7tv%OF#W8vYTl!VE{-9{Fv5npZ@sD;|T;C@eL3fchoVDZRB~&xi0+ zqoI!!VG_|oq&ZPXVpe61>ucywfRn>2$`j~2rm_?pj~=Z$y+k9Jr^}j`k2zk>n~tk| zg+p}5c`;S&%DQyz<|=bS`cF{bu#s5ES4Oit6gv5D`U5lViJ9a{y|BehNRGt7Lu!ag zh5|FpIp(NSEFOviW-AD82dMV!cCy-1eK|&c*{A6m|E(X%{*{MEDk)%oX2Hi(jla7` z($VJTvcED9rXzeVS5nQ+av~ps<%|c&Rcg3BhrR>+`4SFhWZ;&&^x*9gD?L^TfUV)b z5&qS?v(uDZK?7JJEJFhU(f@bafVqjaJwV*Gu`#eU76*L)k6~p>#l+}99M%V=f&GZC zF%@K^ZE{ljj7c`jV!zVp1lHzR4UgHE_d^WgARJ~yf=@?)c#Qar*MsHjYXy)THVcL> zhRN%oEl?ZW!|}%W(|`dUN(edBB!l8CY-1jxcARXoJzn#(dR=gE$f+Xb9KUYe=2 z(bx#()$gvmQEehygyQs>lPY){@@*A)!2FI){Z1z~fZktTrOQx$u@<$v=65o6ZrZQ^D=1I!#Gcj8aMI<1$m z6_x^Sk-Bt)m3U0tirSfs&BA!8YZXRT=e?{tNn~xs_GD~I6yI)D$R`JmTC==)EaLLH z74DntCdW6!pvUlDjb>{e*PJNs<7@|gtj8QFQ(JHWT8*#bwfi^hRGfCl;r99Y>leB=Vu4H*Cwr<5D$9XRU+^h^P??+wQFGe1!b z3{NCB=hx`UnZWGhMDn+Y;^*K zQOt%h_~XNuAh5q+-U@X!jjKznG8G7ILQ-DSm{ zgmm>CmA1WH6ZQ+l00F!-#APECnv9_^m?zcgyN6`)1E}ka(YllRn2npvzdgP>BShxn zl)(&U5%r{gLJ>8g&O<_7{aQz~%{ks=f`qcoDi5oYD(?ML{BA>VaEDZuCLYJReA|)d zkKNVj8azw*Ie7zB%t{9GAQk9WP?k)>L;IuPvKZW9GiVM? zYo&EIi{>dA)x&@oIv|cojZ!i^X*4}RJTkA&xf~OXY(RZk<#mvU%gO0GsS4(F!~y%& zq@0G!eA0Glq-|=tP1wuB>X5mrF+zFC_+3)??dmF7yXkxy8kq1au7Ko+P%DBohrPVT z5j@HhJlqc1CAUF`wEKR+ymvbtm$luv>~wG`eTMLHYq83n=k4*Y)bfa%evv6z<&qXC zIqb{^3a4@%okOC7E>v=91@SH3iy67J&DC0{*wV`yr*S9pDA^)nZw{6&j}&9VfI33K zEGuB21c97`B3JLplHlIZ76GJjzwTG=0EgYvq&dC6sFFd4Txu@YJ=;INLY*l>3p+MM`D~c;=QShyEpF^MNPWtrg z2gD%U47c~>Uq$byEzrm=+nXDik+?_(AVrD0qN5n*Y@goph@=fN7`81pi4G|~%3AC9 zh$a9HHvYu^OGwhAbE%*|m*OEwBYyEj=_?@RaIJFU>JN*Kz}N}fmqDST*ltg*?p!%q zlO5bFg=1X&`D!|Idn)DnRR-@BjKT{^o`NU~iVG3Kg`3)=QS2wk@GOmo;rL5c#9|6| zWc*LbSOTY-svcB4Rq9eUl%7rc`FMEaWIuee!`st6unEjOA@E-O8>Bw$o2|gBfw$J+lww zJvHg)y;jKH1B3ysjaI{8#we6u+ajeXIkxgkvPb(_M%3B$!9kfN6-v|-(xe3nLfUNX z=Ok7gE*_9j1aQrp2nN}_^+Yq_+Nx;z^d@c^=+f@4=I(_vS6|~27m&FxBQ}{^zxmjk zep&F}xgT}L)SCAg(ql~ocUN`hs6--9bUONxr%9)6!~=2FrE-sAdKQX>M&L>N-78dzQR^w920;Pd4)?oV;YqyAw0jS`q8_d?g zzMXMvANqL6v>5QqUJ?q_wn7Ek{ac}_0vH8trmRr8y~d%LqF`>Z8)9jG4o7dl$oS&E zTStF?vzqf8BMt!zg@TFJQK9BJHjq$26A-dQSQ4VEs56CDB~7=5Kjg4HY7LX3=~pvS zg;DEC&SQ9NJzMR36g~@7R5y*Soe@TBL*n2MATP|ba3LNR7J>S zzE+=hi-WtBVq3wSmtbEkG!pXSe1llLIi#>)G$l2IvmL~=Rngkd9LAzT=GI9(Rn8EK@l zEZD7N13N8di)uY!0w0>qCDM9Qs>7-ZL|@hfLz-icFJfi1FtGb0)T1)S%3I$`&7i^Y zzhqQI{oB8b%8y%zqj#WoP}c>`H)K8k`u-R3`5#EdKGP_B1aP@F0Hpr62}}RZc?Re^x%b94_WgOj4P7?Y5}N!lz=zyrPO-oG!O`H*|F&sConZ_W}n~w~9}NT>5i- z_XrmM5&f1m6dD`Eac}^V^=Lmm;_={xd9!CQJ17q~$by^SJBK}d%6n}DoX9Hu>W;9$ zI=RT8HK+}T;jKMH`qp{57ZJ;D-yCZ7&?D=|?!7rgi_j`@fQR6Q6~m%Za%mA7^w={2 z`}@sBi>ZqvpNUhYgw}#CLX`+hH+?oF>mO*6Q;Pz4m-B%nZ?(^>aD!DU?AJ<3kikUHvw}I_GqUl zSR8SpFn?(7gn(MuS^I^;lA%=3YZ%okQ;|6}P@rtAf_&EyfQPf4oe^QFi^BJiql=s} zIJoy?C;zb>w4z4BiD&Zez_`b>lvn`|rGGN7g6aN=;M+-1sRM6Jlnh(Dy&Ca-k5Ltd zP9~yD8U?YJf3!z3Nbs25goOofjs4{poyOOOJC>CKjes=hgrS@TrG-6aZ{*gFk>!Of zf$q%ey|5|eEthxkpRTV7z@xF%2r7$5Zr!$vhMzvwA@|;Ua1w0EqJ%a64gtYbbUn z-b%W1pLI>Vtunk-R{?$&ie*=^5VIXVa+>YV{}(jgJoKDpMyCb3buh2?ETPmeq>_c* zQ^C=sy{5>yYAP~!kU_OYsYRB<2I0z^rA~C50WBn%j7A#u8WUXc>O47-w4Dz6$g-Fz zk)?(Mm0mTgC<%u6bp~JBADE3lTqKk|m#*`^SaN+nPKk3cfZoHOv<mbPMa{}5t3W!%Xpz`zRZCXQW& z4?T|F4zxrp4Kq86$ZQ^ukp~gptp#f89)X1ld%np+zcUJ~XegH{fco?#)E?V90iT&H zp>?E;JQxFF_poP{X}VSDIraWTy_)wclr!*p{#f0BUoP{VC5np zWl3vTEJ=F?#0{9XlKqlC%BUy3V>+>t2?LKWkq@3eU&xXz3)h^cl6emgRP|mR1vbfdx-eGb0u^=O1bkBRIlujMc#0 z$emPI<*l_#0k*%v@zR|ySHrneZ*r`_>u4RSmfD~^c*aG^3&~`lm@L<$7z$0N!ll<) z>;$Zlx(A#p@5(8b(lsS%OI7Lg5N|ewuksZt1%1?!BNZ5b-71|NDl4pH`aP#ZGQ9Wd zs2YRShpOxAn1kfYXkl&l{M!lM?)chGaOU=eR%nH3`<5VO!#1{u0oCY?9!8mmA*sLg6;hxXb2p5G^dflBMH~Gc`id~W- zmBD1MBs$e$;$!ny6nC2!rkTUc$7btI-+&N~-JU8`?Buu6{rylV|DQlRePvpP{3}Du z-)~I$?cE3H`Ne9g={K9|nD@e}wRIVQ=yfRi7zsV$)?nxs_4JU2=`b5&3qg=C%CT<#r2&aIsh?tBl%M2;m~Z>Q zx*NfWz7UKaG}IT3Cr*4Ydx@O%5D^6G0wae?BVJFvY#9C#fa^s!ikyj_zP#Ia*6*gJ8^a6ui zx=KZj{ACU~?v8?R2c}j1Zge=usN;=K)*F>{lk#vE0e9M9R|ptHB%rM;^<}(&{2ORO%4_>?e62lEO8BCI-d3MG`RM7*aA?vkSmsxj8XW;e;d?Vs4Xr@}DgdN#JvJQ9|rC>TZ zb%VR5a=yA8T@pq1cq95)%=a_-sag;&!E8bJg$L`t2sjA$Es#umrC5Z+)gNP}X3?#*rB9kYoXg050P&)OI?H~kR#UA3J z@Q2%hjz-eVX$~h{TS-K~gbf2j#l-21L@`^KNrZK+V7*ivODqx6$`c^2TC8P^R<-v= z{(>pKweKjWtM%(rYNy#TA46+8Zcc70wHC=%kPsUuRx*(?8yC~jx_!Xe zI_k(N+3xC@Zlk$-o4AVg^P$3akC^2sQ8tiU@4<%1z&*DwnyE)3ugUH>n$*D{t0Qu) z9_#{R#FzA!suGb>3~#m;iBqp!4qjHEeX(UVI;ac@MQLOM8?K{5&iAx@E9_5S>&h?v zo=;90`1mfX`08}Hpg-FH=7zjnmwNcJ`&X3_%s2$+FMydw0x_?ndp zl{L&xBoMJ!K|1D6T-WsLh*&H-lg)d|C$g3myKeZTJ+33j_7&AISKGw61bFYk_WMm|jC(cI9lKU8+a}zF9at#W-G+wAJ_S`Nujl(v zspk&byS%IWLFJXY2N3hCtoOCIROS;=!2i6<4OIyXDn9y&?m6e8dnqIj`%L5A*N=@)E#R86z zm0V8MLc4l!!x{m!zN&VT45<@jvrd)*B43)wE?G+=`_JH>nxwxhgHPZG;~3Ja=YMv& zi}&aPO9sBID}I1D zs;vJ0y3_B(%k7K`>96>$w*FgU+iSmlA&axLcpQJN+P6f6^v5s*{w~%evhGzH$h(C2avQsax2txYv*66%~{mF zw{jqKv;e_@N$GI|Yfs#aHF^93`z4!GKAhLaZ<>J?-x-kXZBS=VxYMRS3$eHEx`%ZY z-{1Pb*j>^pkK|8^Sz&N3F*1fF&$TtWQAEOBEw-|sw%IUi{WvCYk18Ck3&)4&dNhz$ zg2@F900oKjJ&tT`q2rD((?Ht(*f1dKuyw&lK!9l<=pSg@+Q@|-5ZXxnRpGL1L@nT# zVsFg@d&BGtbwm9CW_sg4drT0i0D9LZR&tyMsUJ6i+;PwOa(wCR~eg%w6#+2~$swVm-Yg$*BtXJR+0>UQ>~i`f@aagNiE3NPGg;=rV@Zl-8L-k@{xaf_;%Gz9VflK<_#d8tXTr zuB_$bQfdoo5tTY{Xwk)$8Y)U>miQ!70*cDbNfnv|#7vQNluuDyb=R{kyybu+cNCwb zQ3t>F%IYeg_DbTuX`s%pMCTO)6*(EZLkc`;t2ZJ9nkCB5_-F8#h9fobT2)vVxYTG^ zQx|zQ&1bKd1EHl=BNEg4BB;_sSt|$8)JE_u=Ho6b3~l>4xYSM8Ke(>ObeMIPGNJDV zhQQ6XLa1djTKoJq8}X|mjW3nW1KVbR)(4smjLiNT<%r|rqvv5Y)d@2E?=2;|fj2*H z%dhO)-RBmBKQV~hu0*?ueE-Fe|Ic{Oz2Oy?jfO4$=m13%FZesJFCeBIK5Klms z(wBF+jfIwng3n6Z@w*SpC;M!Thb> z_s1K#fA`CpC_CM{J8&wEc8dd;8m+RmdYNV!ntbV=(jt!zKi?w=8#tqKUtRRbjr5Nh z^c(FTGZ;64(HOV$@Lf@AuDc|<#i3f}>Nhr<(WXBF-;gYUVXA=zaS-$uhcSt;n{9^T z7D>=+kQhw}O-{Mdhx32+&+5>?F+XG_%kZ7Rn9iVbatw)oY$ zTBw!Zzp4@*@}!tfsTU=V21y_8Ue)M&*esmnZf4Rsb#P3|jBg#@!ZB_y^wYT)a_CS4 z>s_1qk}hRg?AGiDj|h9$#H$F1VWh;KnP!&ikHOkMGU{d-y3GJ!SkKk ze0*n-!TzVp%!dK{HlbpzhLE9xETy!AC|WF$;mEQr+pT!-4BC8o?R=_768OK+Sq2II zMCT>lOix)p`nhCv?*=Xk4%=_>V-9JXNiuZRabEl1+LMR}aYA{;*!=Mz7r*28Jr=}N zkgt-iX95ccLFmLqWt^73rV*i)=13bt9h{D7nD1vX#dLMq4~^I*hUFa!8tpmWbs4C; z%MzF4atC2X-*&!1-!^S~RX+fob2ho0&auCN-!{>w8_Xm8`_@3I&AC5+a5z2YG{q3> zW)NEMMZ;r&nUcytGs8@S5^JREJ|H7q=h!&-GdD4P<5asg zfae_?i{~9EhvywSgJrAv>dmm(?sz7RE-I5hx=0#YL#_j%w<`sq7vE~9bKqd$Zcc%o z7=AP6DM(qqNg>_bpF!+8r0*R~3A4lTl7jn!CyCxuI)(u6J0u5-V28g9?`niFxNTz$ zH%QCrkeC(krUCP(Ss8X@IbnXUESfGv zhCMvbY!sH5WGiuxf~Bez&eK2Xd1Zulw~IliTiUP@SD29AiPYMg=p6COwtqGYk%=oN zQV-LX7Ebo6csDk6G9H7ft87iLasLU`w07xzq z(0R1NULqjxj-=hrwdQDioC`~uReR!{KadpVj@cO)q3V{lR z8Wy5e0~)KsN^!^69sji&v*YVgQ>y*hph0p9zJOxMI$(+t)YzU7q!ZBKD3&&(clj*FkMi5 zL$3wJ<}M81vH>k3F|{)P8`@;;QD`jn?)SQ-q-8CEtTV06!L6)aHsAS8-?u3)%Fd!s3EM>l)OP{x zREv18vNO6|-^JU%CEwQHBEdZu_;L#R`5tV2-@k_Eb??}{+QwxgM8A?&rMwmz=BP}n zpriei*>2-UgUNYp#QS-sn|76trGuPoY|k7v;<(8+uTs2t&UNM59-7{HE_`Ra`l#_A zN?`0dTl_l@1)R1*7wFl6T41a-R!*L{VR>$ z6VN+*2heDz|E<9L|6Kh4=n@yAD7-ic7nMwn;|9sMj%gblsSdPq#-t6ZZq3jS)Pq83 z1bKgzR~5Vm4?o_%s!~jkvjXrwA7^U)fZY-JQs-jsO}av1;OSBr0kzP?CLEY945|Yh za^&u5GzJm93nr8LEy3+fy8S1l-UrF;^AMX5GuGJGDKy7AfIyKk;ZdU&u(uyY2+D+FNyE&ol)ekbt#Z`|Ey$$ z;$f=>#?njS+IMkk99%4v?#q=OeMuj8;g6L3eOOvAExjG~$@Qn4uLv71eR258+km%t z1{5E9Y*IV<49Tv^s&QS|JXnBTpzmuQL{?f0>W_1s=sT zf=qGDY$QbSXL>13?3CF^-_FAzeShFZ3NF;!-13{^Hj9^>;@f$n-Zd8+> z(#`~4FaUx|Ax%8d3c1apX*(iXM|v{PVsC3<1ZrEOMVsp24?vg57Ko$|h=hW?% z>l_$_RwW0}qmG=SQIl-wgj7g)<4P@%M%GR-+s}Y$wJ%s7Lnr%qnH7l&2l1?JZVVio zRg+^9mm}G=9|#kq&F>Bj1LJZBtU@eD>-n+kE@PFGjovQnn&Dnr*oeNf%jOM0VK}CU z1z+c7DVqXGFQUAf@=dEz7kbMg&FVM|EIBmI^Wmbk(jEfQk{mUN>Smb&EtJCWkI+e2 z3%-Q_KXcsGroKjeW(k!Pkrrt-cTdH{=kmTzh;g%v@OZ1QCh37qB7zc{Sp~}^)7qXr zL$FGC>)_?v;>hnkY7D&toQt_Fx$wS)&Q`i(1#M#5+2xD&7xbO>7yJo$U;A5PUu5^k z(UgtWAj0Sgcn<3h9xo~Y{C_48j<6^8;oVJDe?Eb-R1 z3<>sXo^MjjLJiYRfMvx^RoU7=JH4K~Qn;Ckn~~gi@LM&}RX@hAyCt#4gwm(vGo;LA zXDDQVuaXvND$%8_pBAU7M%46e2(;KWALpGfAR}578-a3m;PuPsTtcpol0cQ^P1WuX zNNy-PJ()?Vlpj*?aDa==nU!+(FT9w-v`lqO8=Ficax*S~@u28kMI387gnwwACRk{4 zc1(r#dHJ?JmqWixh=Ha95)d9cX&n^!iu6WlbJ$U15l|-A{4>;nL&pYNc$3^Oi;?= z7t>jiPc4}J%r@hGT*w&cD&NXx!9>olX+MaPttczVr%(M6QCZXG3RfnNmsXHzDSM(+ z9G)W?$k4?(w$W@MW3sybTQDPN!INcMF;SUoYbkDQM3ni3VL>;+uIUI??O{WDMX9A= zraTXLzLnSJ)9(~kRCzu{-P&tP%h_vdndu_Cz8v2V^l~G>bBI`CC{5H8Ef_%gRQWwSdy>vb+JX87i-sQ9+se3N=>>4OKvm?C$7Zr(%L3vb>ex>V9bYC51QLMp38n!^-eM-tn$I$ZY0N$g}!IZ)@ z2c~K5p_q%%Om!!A+}LlPKas6BHzNELM25tKXfczcltZZx75a9#5Cw9i7~YeUZqtgl zb(?)F-nkesUf!h~5rxZf$w%{y%*@~Y??~jF8rvkUH8ft^lMCj@7McOfp;T!B>yX-u zVh%8EY~s6GZzE5bJTHZih}hGvE4wZjQSzr zb#6Ut+MmpKV@@uVtLmK?VQ|?x^ZZvjrP0+7A-CgrU?EMbvhWx<@k8qE)oD@baO^0m zqI~Q&p}=tH?a!gl^#T=r!S4)`kv8?IBghSV2Zp$+-J^C*xt+^eCBRlLmIr@moFMfV zUJ);)uVCt_@Fo4t=ft;f=eHj^7ql6CUQS4DY?leK!bUz+97NR^y(w3z66gge@vG_7 z=dT3s&%Ux={6c{%n_EpBDYy4PM51v{2oS%frt+9FOck@{wa(hJ)u{V4*e~NlD=))+tzlRA zW5NZ>&kN&0l~iMR$)6Hy7>lb|-=h;!Xruyqpl0vW7EtG^I-Z0jc^9yUKx@x78nQ&d zN*iGC`(4mtxi+YECznMgA$1!S#U>w1>X>yDD)VFDLXOR zpshNjYi#a!QDri&!e#H&d-Tive|L^bIRSALOD!g|fl!*zTNa{CoS#SdL-&a_f+=UxQk!w8VI&p6LOxyFlEU zx?fd#(soN<-!*$^!eBG@{vDF ztAJg(Vh?AMWJ)S4XOiShHJQw)$Qo(aKmgUc74RSRD@{c+OQMPGQZBh#ju7Y6a;(zF z++MOQEr)U}F4^WiwslHKwP;-mSJh;HyKZ!I5lnrW_7mZ9ZQf5Qdn7U>GE&6{MT3R0 zS;@%e+kR1kO^``TR7p-oC4Zp8#akf?6$04gFH!FS(Px*s^=ud1N=K>9GKrJN`GR`a&qj zdJ~YV5e-P-{GSc6|GXDO0hQx+jvoJ^P(P<=l1qxKH~DkQ%Vfms5Ucq>QV9F zTKZ|Kuif5paBtVLd7Wunx}!?nj&o`uA|8S-cpZ8Ha~4o@pMk>Sdp^95L^fF8>XjX{ zU<1#Bu(l}$F?}LyaoTw`FLm9wq8lzcvRXplN~7!jqtMqGs!Dgi(=%FPV86I5Jeiew zGV@w@<@R?D@^VA_hSbv$Z`bhDR>0r0YR{{wxjwaQw0?Lcz5{H{68hB+6K3Vm_clEa z*UxT-9Grno4=Og^87!<{!JEwo#B9>okyEf*)-V(7xQ$y@&pdmRa1cBT7jJ^Ep`Uun zh4h}fN@d&jVeK)#ZCC8usT#AHSRd6sOA1)JY@x(2uiEYAF^^=tmr&6w9PW@M2?#=%HLvUmgw z_DMN-CJttWk5&pFYP<^GilO)PfIlyDUZ;Z8&VTCM@SGX=xjL%D;I>A{|WDV35$j;Lh5XzhL5J_B+jwGuV%~X=;yq!49V@{A&JA~K@ z%;C2?Wc4|J!U37~0*@xVtz#^(U&J!nOp8l*E=hx*6yBCMp0wmJo5X?X&}VEIYDgTG zBnhhNtH8F3cVTPlw6Mn77>=p0Jj?`j%khZV+7-(auiL&~P z%j~PZ4=B0@K6aoo`TOAeWr3-O#|>H zO3^8{u&W2s)=(;n1$M5zA+Gdnb#BA%(Q)$Ku46!BO50&Vg1TegF~Htw2I$H;Lpb{} zGA+v;&{$+Nb7-*pvMmaHX-ZPSHSJKKuFrA`6tF zl7lGf7V_w&{(!;Ln4JsFinH2c&Bp)v$uyy1wnPHgjm>oUVz{}u_nQmKxEBhy{^}w@LelKQGid;Q7_PH+v*U@y~s$Vi_ z{AU>J^cccYwXH49*>wq1qLW=_iB%AXqyWmJKJPr6)JxvxV2^j*z<#)IP)3=nh5bD46TGWv^mU~jv&)lU$3_HtIjt_Chb{_hbd1VYIrJ!4a_qVYy*EH zgBjQ*Gd!9)s=h0xz@(9ubLeGB$@Eq{zxM5 z_T6Nnb#BZnmiz?CwNhKSgTxr2nWp@}dTW`S0sZ$D9r`yvc?(lzOT$*VfZ3DUr!;yn zZK6NCn#+)hOaB%!1}gkPn0E{n?w|vbbKnwmL5hc$n4-kDvVRnQg`(Tf|tdTwM}(W%%Q6pNzmj+sHK11^i^ zlgGhc#DI#nQd>;I04hA?W}nP#HBr4%TgXO)Z;76;C}v$0_l*v4^B7gJ$qXzR26 z=AcgqggYcQ{kztUnET~kc-bAQbB7-U`j1K|V!pxq%{=1_Ayr$xwC%HCliXHldikdt zMFZ?!HFpBE>AOz>t2)GJiyK{V_16=LL~c4nd29BN`DcP zts!t1YfB)1c0VA5h(M#I)K%35szLiDbotU&a$!T;-Q@p{MFrGJ=e_?SZ|2?8(fAB~ zhk$Sri^s;PvYB*WfyiR{6SJ)aeu&YPEby~H_dY~tZjtYERIn!?GSobGwx zQoR0B(V9q&`YI46kUPsNBAlEJGzm3wqVbDGz z9zsO9E^cHmV_))eIG4FssDWHl#Th$lM1+N$wRPFLxaeYWzVOK9FZ8O@K(a{2 zkcYq1t8cd!8iGTT zHHk`=5Hz_S!A6#;t)7sb)`xdh-<|abi_04=3nlc5EoCsW9D3qY5hc|ij=4DruRTj?n&*O*q2YNm~@Q@l7|tDle>iYqW58Y z3O+}W!3x42u(Lcdu6`T&(L64}VL;T{sT;X_d%~&-@I(?!B4TG%vh!hdHNZ=!sM*ZU z3X={@&MH|3!Tz=pZnHkZtMF#0`QqC@-;58~4_rB9W`dWbV#qG-;ktG7{}lT)+-}iB zXg=g4s*B@Co{kxo)C-GB71I_bINBBlzJu{fqD{1~m?M%;vUoNos08YV)Q0{n3}7;6 zwen__gj!;x7+&Y%8ae$ETR$-`+}bJmn&Js0gMFBRb9J3ZXwhN9slw?E&TtPDf8m5; zd(cLdlOpN^ao!i$=Mhd2i&F+|zYvbU->;97$n*A^fODlE&7)vvUR6D4P#fI=DGDbg%?Z(sP_ zDthaGMm!YZ(-$79C&mJQTc#bsHg0(1bY zU^Eo-zQ63lmuBmoKh zA*gR#4Cs;A)0>jxSQciUB+Y){IyAjwK)z;8&RF8V&W!yGUcW`K5Tg9aq7MwaEh;9i<#j)qtiXauni615 z5wc|Zy(Ab@#uQT_8B@N&QGUIbq&aBOoZM*1ezGVqU1>>Iw$fJitB>@Nk*-qCQN$^=Oa#&%)vkXJhd2cS&PVw%i?*gKj? zKr2j=#%6WgRA5P?s1tI1*wxT*ja%WTcA`kU%3-?*iIz9$RT8I2{7rjoc!{##DC#_7 z>d?2&B^iywR}SwbDUkxMVQwD9dq9f0-xYtIYaB%^P;!&`ZV%>fL)?_WC-Q{Hhe(H^ zU0b{hbE{c@arml2qo_g`mgkX25@VVmPfy9)r^%1_E^%A96U>oMY~27+kZR;@a_cGf zE8td{`WqAe6XkOR#G@e8TSA&&G)@G2_>HF0FUU}LJ7`y5x#NEPI3ExXJ(}pr#Tq;t zl@3zUHZZ!QSh6T6V7{+iXdM5)J6{~9{?A|yBDy>nKZ{*GzZ*W>3oGb@+qELIYRw0394cFH?PMJ*vb!nK%_nk>i=}g@y~E2ZDDKm z&r~Jv2xw3EzjIYgvjC_9W^iv<_OlZF+5C?~;h{)?ahyBL%|Y}>(IN=${X=Vf?anee zL!TRic>E|9Oem%s%bq!t5!GoSq+F3NN^Q3oOUxB)#$yyqknkrs(xJx}D z+n^2Mpc!EEP?kz8o z?r3)VTSEi|B;zgW63XS_o(zIQ4;0nV*DdisKWr$QMn3Aa+lwLza6=XtlCW0pG`CeB zid^=d0crot2lO3S6Bd}L32qNQgUp#H8ZUx4y4HhIz*@j4TZkMCcor9?4#bbnw6Z=| zWC0P@#IV}6d*u}hz7>LQ8GSQQ*7xURDgpj&{J-&0ur|o;$0+lRjb_8+N3p$5+UK$E zoH=SN1Kz`G%y0}uN=ubVe~tw$)RzV_Q?Yv6Lba}TjDc=0T`kgn8t4t54c0FTtCr$s z+Ge0~Xitg+c*$xWZKWwlEQGLiZHB6Wav`fuxq{-mmDE;dj8Y4*{2s+1&k zdtG%!HwS6AoNd>rSej$1)O44qge52Q=6Rkgols6TVX6GE+LIG=h)no66|fwQ7vCa- z0IQrTF3HM+o-FYwSGj9O|^mj zi*~_>{i8N=b2W#CzLL_}VI&no#YLW7u9<6Mf4W%dP8B#+&aR|8UX0I?FbDB9u2(P`B!RbkU zf!~q(==1X(A`S3r&9vsO1=iWJHBx*=k@{;^-ecpUOzLq2zjkh(%{=finf4pA(3`LL z#U_R*EenJ3F12&Li$i+fT2||1GhLvU>C^yR67dy z{M-E4>exi1*^*1W$aDktLWN)F8cr^RK)sM&$mbxPnZJtR%2`D!Qngl(%m))THe=a&Lajqqa;N>ypXQpYyz{jD(mJt z7exGUh~{}q*8Q5`>n-OOKMfQ=$UhfLXhhW>n4+lF|lpi=ESybPHaubww+9DJL!pSXJXq$R)O z=F=?@u^|MzWcebLS8OpxEb5PDq-*v@%15`jt^8nHFQM;B#z`0rfi$bP~J@ z9@)Ch%8Isd;~R2O^}x2%nih=RCch#tVHiZ6MParXH>l!w472KWP&Beq#9mTC!|Uq5 zqP-%!r~U|^v`EjVjwtPaqRXueoh*$Rr2h5({|@HGsT!>@qKd@?n`3_-Ba=(}J$Ae2 zz7~cuIH7=*JiEc%411Uj6F&+U?B$YONa0?+!S4lrJByJAm|;X30oJKj)euV*1yYmE zOIan(L6pMI5OPk}I1kGl@vy82{j@E_j+f)k!@8d{ULJjYwrz7fw|hR6mYPQv>r)OS?&6@XL%@ZYo~|<@POr{w0e?=y4r>gP9`35 z$n1=aG^{k;iBcjUk>GA(39uBMsBS1Z8>|Bu0iu>osMi^~Hs~bp^GE#A+o}0VwiPq> z@FP$tEPw$s9`iNOFpLP}Vw*w+w0}mrq*&6E#RpD`U>okBD28z|-kG6Q5Cn9M_}eAO zlOR`IV=gY!4N9+c08c|KaSug`F#T5#W^~XYXhq_J@#4`xf0KbgKb%wN{In~c&ruBS ze`;4kPEMaU9F(06oj(Vg|9f>gD}K*)Rq9jUn1tpRBTK!cTpE^rngGrDf?_o7i-w~d ze)-thziw62pfS)S8E&2un6VM?clv%i-8TqkWzl3F3trZF{4x!L4^!Gu33;PM4HVX)( z7iBHUJ+@oE!8oVf4gALWtqZx0fhW6drL3}i-_~nAs;WY-cD>zo7W%|qmL*d`!G6f{Lt1Kn+9oqrQXZdE$y%l3FgHPwJ4ui)Nei0N}U`r3yoFmK*bq0Fio{n-z_~ zeI%=R+>^i7i|wU!dS*cI62#YSEOz+hk+-1idjWn%kTP z!C>!Nzxw8KgQwij9=i4MdMuv&XDpeJehWr!fgb$f5i|z`BO(N*DCQS-M#g{uop-Ew zuYfojUXnN({@>oHS@_YMGFeseOpeZ29?wxm}Bq>LmmM7<+d) z<|7p0cUp^wq*t6J4s)Ku3opY}0=)$K>$#0IBC+-)8g^)IGfH|@ZUtn&F@{KDz&cZ~ z6uRJw3>|As-O=N@QLyO$ZToX+oSC-g(+>4NFW9mDQ+pJ1cW^ZQw8{TIst_gD4g(ZK z%)EAJ#EDhX28&Af`BLhZWP%3+?w6s-Z`}qQnifX1ngIRIu8f(|8R(iri>whEe;S!Re#|m|>S*nC z_2q_FL#-?Ctqr7SmDojy@+J0!5?ZU;W4W=D7CoO7PdvA7A(DgZG}y|xTNL_QHfi>{kn*uwgH=LfrUhNJYRZ%rw$)JFdKefx!qVe2_+RvL?= z+1X;wDvr%Y)z7!Y}oDpTTVdT(cNq8-$N~H7+AY2knnfezr(NEP@p&{K& zV|k4~24-}AB1>(WJc3XW;%zKCgpqoztwTI&zZV`wMysw~J5H#uT}T85adk&?QuMKY zC~&y^NOdq+(;phBLurQYMOgrolhB`&^=(zGc6=c($JUu?U^QDaYofmsGgg=(C7sj& zwh^Uny4b-8Z)aLMz5sf0L)snsG4i(9B-f%<-XpEyd!YkSwo& z3qk0HO9Tqe#Wg8NPGXMlKnJL>CSwI{**gXWIT|i?%N_ovKwi8-bUET=0}&fvQ%9h< z2ck40)Btj*4<$sy4MOEnDk-JMq?wPR8$osq<*s3QO?OBVc+PMMO$5%sNGNMPW(Y2j z*CoD7lJ7))BH5QdZBgS>%KRUv3rVxj4VeEWU3jjlVGjCLf2MA#Sw>uKLrNBoH70N6Ic4!Q z;=S74-k`{Hqp@3$6jpw5Q#EtFV-d@*9 z4Je|vXSBs9Ld=|Ga0g{J%yM59W3!QgW?hNJ_)ooD+SRcAH&<+AHrg=6jWg>y%3122 zjS6XtG*HsHV zQ+S^eFKFTRhY_u^FHRDB(@Lqf9OUL2?Q%;pAhrs9Q+I@S@P8^i>`>kXQfjIYKzXH0 zKWyx{pV;Q*kMW$41bbezh@S*odV~GJnxeN@Q7dJ9t$D&{J$faS zvQM6Qx^bJ};9(()h|RZ!05MwqEizUGkxAjYv!m=FFIHpNCa`Qsiei#~WK6 zh7fcnKhKN4E{uBis2?`#6FM)Hn z3?U3GX;#fly^1+$j>lN~Xx-fG9sB(?c2_MRro(@h?8~42!u3znnWUYAi}T-tcV@z# z=PDy+&?JY_iNVtbCJ*H&DEF$4OQyWP^bZbB(QTyi0IkDfHZw`L%o865&}d>B3$#a-8?67pqQgepD!ll z<=P<%&U$#IR(A?%Dxo@RCGm`6EdxZNHwjc;X#pk}WoulC^F1spG?0EnlB9lT(VDU7 z-(kg`?qf_CpxwvZpVjCg{;h;Psv&8NW(}AS{bSVemMY-#%k;Q{#ip<}j1E|!jZ0RE zVSn_alZ8&XI%*1aK2C3NW&rCf`(ueh_&w31KmnuWRS{pU3H}&##;+-y|3aLmV zAH+YqZGDITW^G+JKgFA{S65vk{3KojRBq>zs`|w9n!)5vKh^_JS5p2E!%48Y{E!+@ zNGUXoX$OtPjgui?6m?)^d{TN!1ms*{&aXtrJ3CD8S#v{AFcUn;I0Q^^m=dM29khpY zP&=+Ixf6HB3MjX=JPALoJ@^&1)Gd}hg!5GLse6@Xw>oXS7Ij0VZ$Po*GG?`SBJ1hX2+a17WECU&OQ5G2qKR#-Egd5)#^1nVp|c)$X?EF+Qu!7Rz} zq-&S!%V;t~0;?!!S>dXs`BxLSN8#*-@P_NG=)2ravXW)}KD3tT4`GGsYsDjt41e`8 z2g|Uz+0SzE`qR(;qhQGYtdHbeY>iAE)eLQ1{_kdH(!UOI2_go4#4Z0AavibdWV(g@ zla!WrZt8Y2G8Ut1)<)05D{EQAC|PT@a%ard1_Af3%x&GRK zA1x2QB^;JxDqDhI6gh?oxi+Nb{0qdHAPzm_A4JAKGiDtHV28a$NZet8?{!6De#>SM z!WcNeXvt6gE-COgJp*4RBAeupb`mPF9F2al21VJVZ;KbZ$L!lP_;-&7@UdK)HOckz zAc?Ys1vPc=#}1%c){OhwQG5X~T~5hk_KFK=cLe+`6z9tt{^0*Cp|?JjR{8#ED3*6H zbu|2(F8zClk*N&sy2gu{S-l&z(~+3QH1_#qQnrr_gpst@eF-@XdY=LHEDmf$gt+(+ zK&494CisI8-eUV{gDYWSlZ3 zhGg?RM1b%y&J)*vz&?z~-RR?k!^C7|G%-kZ_`QV_Zs1Db9{c}Mt4$3Q6vSKYo z?6x01SX;)F;{*QFCa~I#h+Vru1tys`<^z$hX}R`Uc9AHKAvV3@u5JshnMNlF6l-{n z1!HN3GYc~7(bx14hnI|6Vl-HmNU zG0O2vDij#ti>x~VgiK3zv7dx!tE4hAq^?j&tUwD*zg$zQgMj-)G0uj2{wwP>`bWno zZq6m4{h_lH_6^1tkQ-ilBfxe?eS9gU`I#*#Yw*}xMHxLg&GEUr%rzB9+=`~m2l&AU zH3g)GbUY=T-@)8nz3oHi3H+jQ$Zrc9FSEfW+e%xSmBUWX<)!u?dJSqW`nI3n6{zSxF2!N z6a?FPdyjH51VV5_ITM4a3{X(YwAWr1Wnx_%ps_h1knZ?}nC=W$r_Juk_zVJ>F<;OF zGb7&xFR9P;kuq(`$ezK8i1zzO7opHQgR3uDfEVAaLYE*Ie5L-(3(;LE-W`3X3ym3i zfYDcEd|`np2*VPqC4EfXo}}~;SobG$6Yh$@o-X?EPJz9ah#$=wzvfdEO2|t$XD6lHc8pC+ zGs`oK@^?~KAIf@Y+e=peiSzB0rnyy?->lFK)cQC4?xxr1U#GpECwrYXco@L8B~ zLj}QxOmiX!rWbqvHH%YrzE;q3!Um z2fJ})nKcw6uFU7B&m}5GP!b3NN`q8sscre z{N-T+E$7v;JX!e_HfPMXulk<14U03yzkPrEBlg9bE-~g8FcBsG7zG$Ah0ZyyFc*|- z{?0@k3}lbMPEIt|)G(Z{At$XdTtbbt>~tk3X3CW00AJC9-3;Z}lOw;i2b#Xr@@6B*!ls)THdx7aYBb5%Q@3?nK)}^wfb~i( zyyvxp%!7k^sR!>Yv_o`d`lOD?=eZ#6 z1hQCV)7?d6C$n~4V*iRgPlam{$^>&jlRGnNCLJ0>Y5u`#RP)^BjOz&5@pEiR)_%YA zEoel|QPGo{bZz?e#Xa3x*vM0A!8Es-IL58TU)>)HEX($cT3DwN=dR9EYc>=md9WP- zyEg%K|3=^~#T=Jbu-Ap)sCey>RNTXXb8-6jY^S?xvX;DZV9P`<{3S*xxVP2KV;mlzfpO)Jj=8M zf?2|x3E#H3mOw#{nq>rY`T6oEhEM4pm|Ie_dk?vpbHSq5NrFkB+i20+Uo zH&xHO`5`VHv<`vu_n-ybxXW#dynBLI!*~O@0%EQt@pE84l?!ejg*TKsq`(j;t~S>2selSGfb6*}W{4EE9$ zcHBs~Wt}5(y(Zx$v7XUp4iuk@{u6*C%|YH`{p;yKvP%jJfxh*O@izwZbwej#tqfAP z7BQfTA9`qR_r%o>hR*Pgdcejd&(?&D+(7b+@-^~GGJ0LPK%G(5TBmHPWnNECi!f&* zw3DS>>YjE&4N>jL4nsgUbUIO7Zq;e5^q>zob1m{*6iuKfrqzv>SIJkBCK=y5z*(K4X)qxh#rMdw}oAX37G0vrZHgV3_VPcQVbo+w}s4$$mc3k=7 zWG*eDTdg-RG--w;-r`#tXL{PwRBqkUEC1M-;_6xtApQ9Y6@0c>`TznvdUIO)h}wxS zmZhY=R-q&xFFTj$kSe*^b0rmUT$7l*Mf2c%j&0$-0f@6=yJ&UQpNVkH1T@whcHUk& zMtww9STSprhphWYCAW&!u$uH zOy<|AC|lmU0LCx5uses_pomL#K?gv;V|vIZTtESuXP-EsXFyEl+j?}b>D{V-0JdGNrb`zDJR?^}7{;Lv?200|e&nQea< z3RvliR0S7d7x07_Db_pnG2-JrpIy^a`NT_3(DfVFk*{MA-R@n2ef?3tpMY9^AUzCN zIR3zm(TfR9Cx}~F!XK%!UQt;i@B0~H7q;uLj`Ta&b= zOHfs{kez64);;00RhJC!o zo`c}NeWgnb?30vYui8~0_L!3dRW6DZQ|hz&u}n!Nmt;hrh)#IK^IzqRT$4<4~$J z&D%#9m*wJLA4m0HA9TBakNMF-$9nXc5TVtD=G9^9Co`%hGm9i!<9-XtL#2s?t+}My z1lHIReFtC~Qy(~f$zP3)dc&ywI#>i@_#-ahBN7wcL6ws*y~&2gay&T?0dqP}PW*Uw zq%x9w(;2n^Yyc2gn|AvHvMA=8JjJ0hN9J&iILbVu-8D}WbLnyxE~9C2sV^xPA6tPWo7sG5g@zq3GkF@_c+iQu$zMWi{2{wh?_q zSr-Bh4(9nXsIph;zJUCguPo7tuIENoDH5oh zHgj`vOIRZmI!A^yLu46tIRh_sht@}tS30ng*1{FTwU*N0N5~bgRqjGp3=M$-1;NQ``R42oAX%SnYQ-q?9M z{TN7PD&A;$a{UN^Ug~>dcWOIviSia$!^Cheq=C{$_UpeDlZH9ERydyk{qAR{`;P&~ zf6p!c4RFkg4{}^(#0?P$+G+c2ZX-WssYEztxgU_*&3QV{D+fCGJ|(IMEys=`{oZ}K zkIr5&?EN*>>P-%7hGt4Dt7zA66AfpzzZ1NngTej6l4FTCQ!yCMsuT>)JMpp{Nb=h) zXQ+{P&xS+T%VJE-Gk9*GC>Wk%fZ+02{l>n#tM=zA--t+{^$1{RcU|~??~_qOEg|N% zR`V&Kr=V1SuHnSTu|m_rrJ^-jr3$Z)MvCy%T$p>^a57xq4{U>@=Q;5}E9E*n$b40$ zaA^GCN}Vc4RLT6N!_bDx6-O(yEJXFCeqk@2)MQFUJ&~>z{$rZX#^rhz}8Qx$h0bE$_SL(*e#f<$;lFuGeB>sHD}@(r*;O z!P2V;%GG9(iF%d(an+ku%|s>2xfi$TCD`gOI7NZC$@kaUxxR;s^qo&WMMJq6aGGDy znXGON{mZC*c>OVj`>hmb{AosFz>-J`VvtDW!=fVj$bC0Z7r@ZC>G)%#sCdXNK-w7T zSZCk{W(tC8QO5|iEZ!nHO}tC|1dVo)t`11SCnce?W8WcWw8F?rBFNzT23UQ9`z%;C zT&ex>k(b~Uvq$0;KgjDBhz1fjir-mEPsRTVzoAXeIRE-=TdqD|tpBuq`J1stMfR(L z3n7YawB(2&v}i-L@c6w|V!Fw~!~18(o@>??ws+WdPF|#Z18H|)J;bI3#dcvWr9md7 zqx<$X^}$kC=5Qz`l+C{1o$=8 z>HE(-?C!sQZDBB+JUVqJ992zAI*_2i)R>A*@5~c5p3{3rp zw*2Ai%7FuMWr8Zv{RNlpmhwjFDdpU$r)aobYkr2k^nf3JX4>3kw>y*nHvwS~v1Uv7 ztSmDGe+(ii9AO>@#u6xpi9LY$_Jglyt%;W-UfQq z%@}1@q-{%sCbQF;A-+svv4*J%>D@Yc*gOq z>DTWqgYYXetTGbd?*0fa#g^%}^3oOgHWdXNL|lgoV0cJ+pECcexzzaS#Oi&TOZR7R zX8fmaqGE4tYWH7@?Mbo9+qgoAA>HYXNUH<-_MZpDe@rh|n7N{^QM)?&cZi2TxAC|# zTd2L=zOEOT_n=1H6s9JT4BN1b4Kp(Q_9prqe2r5On6cKejD*LwGe31kbzYw^b8_=3 zWTr)QH1FtgoII>l;5}@kUgEO=Ir{)sa#4`FdD)VwL_6!c(BiYJI{cc(r8FM3W`j7u7Fs+N zz#}ghU00CMgfo2eW3;+@nr(8_UliOsTmNpHFA)|bHe(WQLS?2wTJh#)lK0FOzB8U} zB?cV$7!{VNVE;k;k;0CiKnl(|7il$BkB$)PE1h_!0ZP9e3qoyuL1MkQ-mlsIP9K)h z)Ce;t`Gw)`F&wwrWd{cyJfhb2*_V4MDG#ZgSv1<$Tq7|Jl{Q)=x^>rWjI8v)a#!GQ zEO#0Cj0VIfn?U)=+Wq5@_V54d{|kL(Dh0)(NTc#~vS;-+nyizko}8l>?F34jAHt)M z^Wju(&rW^Y%!zGn`Rzq^(6+H?pVRrJCN%IH-x5=81Rod?7$iA_gM>pLlSMwH_%71^ zCvLfgNrJtHNrAnSN{D@sN}9fzO6(bBoL;hdi6ZOxHS`x;A(m%Vv6DDlSKy1r5ikLz z-+{ZT(F&KlZdpY(m@7}!y6LFtQ}Nps2aU~ZTVma6F>|@hW@W)9&|zCTP&T+rg~u z$&C}wkda*KB_H!Xf8YKiCYyW4a+WvZz2^h!g3FnJI@k%gKs{fTq*_2Y8g0bLzbi|? zg8L+<>bhHzQpTKN&t{{$4EOpVg%M;eSxkzt0JrYTd`UO@gz9}MYopO@t^Lt>gIA6ADcK`nq&&F~8G|L| zg)Q`aIAv)P%NA>#`eeT>Z;bFXt1&QQ31_s+`W<=zY5(0!P`$TMu7Y_CE_Xsiex=OSf;^M>egy^h4GM|U}%Chb&b zy6^4M6btWX7^ZKjc!~>CN)4jo0oDi zSyKAsB|}LoC8S94kcLA|3W&Mlyk!arl_Db&MMpf2#KkI}S8B=CCZ*-EjmEu&E0W~@ zcyUmWeyW~Hv=TZB4}edjIMRn^DL4qd0^(t>`ODlNEB3d32a9h5l6k~j{*>p4g7HNk z8tF;bj7K}9fF9-5;Li9>dH-#zh7nLu5c(PaL_UWN|M4W#zx~S6)AZjZ!+*uXEG5-X zt`0M^(Nt0`HSP1kf-j=zSJf%1(@{QZ#IPD!<9{GMBZ7Ikz}WA*j1lMIVbMA{*pS}< zaW-6ohqlFDna<1A5K0M_ah^R?j4Kin{zm1gx{GvQIz(}*t|-Wvn;+|-(2Mw!nU95M zOZ%R=(Eax}_*HK^_ifKL0|~tvTM};5quNv?<3qisD0gkz%utBPGY3|S2EICHo@^*h zTOQ9bxCXkJ3Vt)-TamVP#w^@*nZ2o_S;EJqI|qi^f&1m$%E-tV^*6P$HpUhK$Wp!Clu_W?U%-udztcvOYeYKZ3CgY~H5| zX~$6HuMKO;!yY^ItgP~SnOsC>LBVenzEM^ec=Tm!CU{y4&r2-~Q|43Dabo?(RO}() zsm_Uwgoz|8KzA7)61HQ$w%DDe%vB8437*?=18%}-7-lpNSJ`tqrdVt9d?%d1QP(em z6q%gfL7RM^()4@2y3D(Bl^FU;7=xi;>Tmo9fB(X;7atw@7siYvXzb>9XsKQWh}?LR z&IWaZi_J&S18ESrybES zAqbpLI11Pq;Ts};t7Z8 zg_OQZCV@+$km@3lioA`a-Jq>y^UTnYdYrfD5%oKX`v$R2;_aa^^H%q|ev=dX3D#pT zb6GagX*F(vv=ok;XAnCTc6tT;_-ls0%(XF^|IF+LpIQDNXZZh73PweXseuW7!uUUW z_aIsZl20AnGzQZjAIEmA4nbR#QT2aymixXO@^*u9{eu4vHvmsgIyTf97MQLam#VAB zRf!QVT&C$jU0Qv-K(WnhhbBgtM_YX=wZvhEo7m@DN%fqwBdkGVi{K8Sj9eZas)X{2k1*0rBo3QXsPl@^ zBLvp$b0gn>OujNY>k12h7X~#^6&CyXUTF+RotjhJkIDEJ)_^rnm-x(sZGDn{gJR{Gi`wh%r=IsGD8l1S#r^6rlh=zt~QS>EbuvB ztD>Zd9%?NiJ#o1Uuo%p&e_zsOTfUM|ehg&xylv9v6gd31}grKIV=P(8N=DVqohsNUXKjSz=zYv*G6j!A3pUdHtng4(&cCJ z>AT?S$yOR&z4Rd|)man6#mydngSDMA8Cu=Ra9h-uy*w_+mR_PzOR`xt_}R7!0Tk9d z-Q|vvqdpSJ^hH~tN!RI0dZ8JTKWTk@D`ChYh~jyFT4@xtPuB1Sg%l_{10go)Vfb^& z(>y~Yd<7+cZESh%k+Xl9m(v(VQe-Vl(oFYnDnd?Q{#Lc$fL=u&(n^BhVBsMe=8uCT z*(K)P#}IUZ0vdGCVB-Le=8Nq46m%&vsQ(r)B;C^-O(Or3S-e`wfoogZCxr{4y)_>r zh=ksk=EWc3RrIJ3Tu5T%XD^f?RRYwu(mf=}-$xt8J+5bee$sFY=pZ1}|FA&+uXKbu z(JutSgc!Vqku`pbb^+p6ZR{1m{V(qAaXpvpw4GOy+&C%cz|EkB8X=N}X1}jPgAqN8 zJDE5c44MY1d_b#569dOc*(S`^JRGkUC)H$9a%u6VhtoNl(-oU5ENx$9l4WPj(pXX_ zRQgAe;-XZ`^qJaPm{X}6@cC8Z{T`$kZDqaJNp?>Xo%;Y$VArAHQ%mVTnuJIV$x*Z~BdRS;RXsfCv zx@p~$r?h>&qaE&)gr0@>-qL2l^&tWh9^iNLLebP0M)e7G3@gnR3RBdChh2`S zz!;F}Ge*n3vku9cG7NHbI@d=5qjc2@DlT>E8ckycC#KcN5Z02=V5)d|_L`3Yx9}YU zk}OXr-UbY0jW)rBS0y(rf#0H{a#@mIMRMdlbnutMQ+{`4XWry{9N(J`@ zmM1U_97@y&0RW15iCBi`CY|vYE-od5O6sb1l0nhUC6b3@7ZHtRun;cK92&L4(J;3U zx5M%=k1Zrt9h!aXEAS}e||xZ&;NvRhMjGO^@JDD@SwjT9Gf(pa%W^}TIG_C76? zffGWqOu-+y*`?lU$J9S2W;#rqx7?ADJ+xbreo(>=?{84OyI`7?Qrax1hc*($`^Poy zpTfJmVkK&|uxLf$U{4xCoUv`0k61#e7QJ;~d69aGo)r}6Zn*2ACr^5}9DzXcgyP-b zFhkf793Vk~VY{#Q;6R`fq2-C;nV;|+x<_-%97gwF9K4sYQ4rdMqkh*%;JL_3?26~# zNl6JY6g}~^eT(5jcTX&IpU}Vff{~8mw+!8L+FSKUX zLMB)Fkf!=*8V?k!<`Zx7uWB;9!6CA|g((!5q+99OiO?Gu=FT3nnSO)FzQ z0{c=PrAXda`ZyjJ`rIC~9Yk)N<@LbLd|G!F*gLMPw2_Cf3>T&1`5|1w_#rO5a8x zKi{R!N&Apv=?ESdgPtpX4%`+Bt)Igyc0j2wP`5WY%B+OfP$}`_k55YkyEKrON#k9G zaSNF4@Wn-H4=bxos(FenVGY-Z`6CUGw6ZBQl(eQx;2MgPHao2F+*^?b0^%g}?!a*` zGWl8I>@0y$DIC6)h>=HW%V96bSiu-ZPNIekZl5(2S)TNxmNGgFLfda@YVm5XznYf~b) zj3~T3bw8&YEUVFh?=9iI9JBppB7YENH8-Z6;%}>+rN6%nWj}*vL89R$3Gkl-3Wo6%MmP)@`$%k(!z*$%?R% z=1-Bsv*Yf4?iv{}`v=pydh3%C`wtM^Ck_WxRn z^>W+ZwMndsR6c5IDPoB~Nl&{eo0?o*@7@?qGeIN=4IWOHf70exb$a9af_bYBvxyY) z&eL~Et+9F;3Ywr5#*&BX=8(=oDmpgRuoUeowRX}cTO-^TlWq_qfyvej9mi=Eh!d^H zIRG#Y#|gj)KuVnnUIa{3Q*z#WCY)(MveCKrWQKBDj zQkkY>QZN+4&yL=+bg>2bZ2EGebKLHZttt57p%46**gC6cMZ2HLiC@*mWA_P%`)i-% zaU@R+Mw(QWYSiThq|N)c4iP5AI9r$Dneh5w_CJwvJwSj|}Z=e78O2^I?p&lxh#cZ&Zo;l*!a1ks_^Orcsjn zc)vhN!VIf2jksAZQ;CVpu9@jmRm_-hLKWX|_lf&(QarR+NO699qZ`E0tJ2P;kBd^7 zB1Qbr_(Dpkc%TF@6_i#gOA9=xT{9NrjD{Xe`qDk4=w+pZcBis!wdysIxja=GQBlrp2hFfzBTMtm9`CfQY~qlABe;IwC`wZT z5udc!__!(4{hB(!N=QU(fN>%?-oAW;S%2rf-x^HXt4GZSp)e+V|bT+uc zLJ}W}cgfi^3Kjg*e+w}yAggc&8VKv02d0bEM%7N^Md{U6d#iN+{jlJ){IvMA8aEfW z1h){k0yiJG4EGmq6>c7G>AUNQ;z;tyH0A*1pz9==2v;=ccH&O^!8^iV+l)MSzSQSW z{0{N6ocoW5SgnkWtu37y6qG%jK35r~{{88{YPv*KaIYOsL?30x6YCVL=ji~aF_rzc zvBBI=VQ9Wtic#B#V!U_%7kNl5p7tU}X%YKByi|T4FRS_>{KDe{U^3C0{J$QJSAdaG zpkvoY6Tl95SXgv)+em|9U|p1Yjgc`L{fE|0%$=dl(o$b?kS$Jgjj^E{rWgCU!3HoO zNCYUDzXP}&7+{%v5leeuE(m;ZJ@!(PQIP%x)zARa}@xkAodjMz#p>pp|0B+Fbv^%f_rTs*d8a z6vUD@$7c0~4B$21i()r4OS)jD2(2ICK*LW2klU)*erRGzFfrS(paMcSyNsKn4ee=! z0BtC~_fLybc-v8WFJmg`XEOKvVuOBDL`Ob79)$rkw?P7L)O8{l^;8fk_B*`~I-e@E zlC;zuX=SQXMuYh#t;-Q-qo;@yzgv-y%LOjch8}7Z0tOj6)EgwMMx@>Ju$Ntq<`TFP z=YU9C=?vrfGJKWSvcN$(iYn}SE{uMUh%5SX9TN=aYx)PS@E_i6;e+nX;l=L4?v>>? zKtuhQZ6bW6?1r5Pyl%rBcA47AWOA%|d|sK;=|ZN7=o*}eM0 zBF6Yj%Mh5ND6>zLG8scW?iTK0c`ao08@aGp@YKa+*<5^=if5YIzDFLqTgC@^gOPug zQ|mAvmg+=0ZN(k$yVuM2@}V3HU*$cE%)s0BiKLRYw-4e&(CKKxP~auUI?K(uPm^tb zlPyL0aQrs!7zB*{QX_rOBqjFKdp6dr~c`iUVa{w6);HhEGvmrQNgZIIE=l zID-=MrP&pp72+dkiRtz|2cU`9VmhVkbiVAmA^9!yW{FK+WW+XrsIbp!w24>^QbxL# z`%vN0yWdbeaUa)hjw#93I+`cX6}bpV6*M~mwTPF3c4!0FjfK0+^qfQ;oR3jU#GpZ*2++L-8|%InsfSd+Y7pNDDd=N7ov*+jgcG zQ@_ZjBJUOLy$2Fxho=Y1h4)wfth+rj^iVH(Oi8BSQE|vlypQqh%mEc2PQ>y;v`VZ} zMp2Hr#AS1$S;5nA4ZPy3(u0TCC|YG-r0p<+rA8I@vvYM)K7mvMD?GLxJdx}ITHFGe zlu8y!tP~)VPi#dB6c`pXkxdtqq;etclg@gIg|}}NGy9G^uA#$<$&64>Ig|(LX-WS60nvU%ctfPh1T`LUIc)H?#Cfkx?_e{ZROo@o02GZq=43N9 zNADG=?9yD_{`V;p0!7w4zg12`JY{0sXO^MD1znQkiMM5?CEb%ZU1B<-3G(ZmWe#@$ zp3`Rf{sQtU`PUbQyl+{Z8z;Q)5ov?X<57NJ2&^DTY+md&0Mkm8QfD@GH|pq6qZhD8 z=d#pVUg}qoqBD|3#`@`-NDKCFE=G79w21fbQ4vnNENEN@SS}%=oX!j0o z(RUqPQ?dy;@W0Cq-J@z~4=yyTR@=_po|BJ;NY~uME>Ay<*&m>YDC)71$xF(c873^~ zNo%EjaMJIkB30dtC^^Hot{)jYgfI`V7LpuLe#w8x|A>aepn%n;n9nRmSjz754r>}; z4y#LPrL+0s%>-Haq30Tq`TZheEkUK$b$cTtH_JU*s$dn{)hK!(N2<^~$lhF>)YT?1>J5M1oz>?kuE9}6dyzm-jbxkp+{fnZxQ;e_BbH<;v?1jmhK~EzSL6Oc$FrgKk z>R(QH&)1hRjhlv&3cU8S?x zqkoluxQ7zf9UouMD&DQp;-IYuV{xqfQ7P1QK@iEx%F0r`VQ`Ycd570BmwqLuFokDd z>)~y1wL1hH8LA+!+ihLI%u2;uxY9#RHI8tixhX?B^d=d!3-j8mADu}A{2#{NDY~`* z-PTRAV%uD?ZQHh;tk||~+qP}nPF8H&$xWTwb@tu$uur|r*2dd>7=8TyI#M>Cnigi< z0PtskIS$y-v1npSJFAtem^<$Him|G z$421DDkG^^8ezE(ILnk|lkt{HmIk&Q#zs8Ve%Cs&qccTkhHemv*xcpT{94%IE%31? zzg+fcThD3ZLo*TGBA;Aa@x-bugwx_LexPtVU*A3G&+Y1O{lGmW;0|9wU~m9}5|(h+ z%I8Z^g@+43DcE|j(FfixNIcH=1{mCLpGWt zBmq{sAwt<^>)3sv{J^XnH5VR<@I`t2W!^W4_s;eGdV=xcZQtDCgIFN!p+blZlleb+ zzAE8=3WA-_PGes<*ri&AwJ!3)^sf>qMd39#B#;2p0R#Bt5dep>y|JIc4S=G`GE~+! zvC5p*=2eg5+b2fpcnD_77`5hA#8r2f(z+vW*@7G4q1a?XkybN_k`#^X(ix^_d)cF` zLyif9tK|(518x5lWC5@oI?js6DnXv+V+j&ABlyhe%^A*}3ol#~UK9HQjDHYHPuY$+ zW+OO`NlZN%369gS#~7&M2mqillWizI^MfdL>|}fez=O`-Bel&t>ew8R-pxpQ0Gd%r z_(|?chrfS0X;Eb@wIz-YDN7V7ksNd-=hQ@zu|bL?hKqvtA1Ls}`Pdc(`c(vC;HTI@ zq8G;^IMa>e4il9_L@o5?#(K)w#^(wg5+=v{jOlCq*-z{?%Ifw}CY#_ z%M0bC@q)=Eyc75>Q{`Cp7MS^RQ5k{wq@XnP38eTZ&pOE*<4T>lghOLK!{AhIj6*LO zW-@My3xrB;7!h_t=mpQ?g;%;0EdrXu;MVcwmh2S!7~;<;o@U^9zkWwS&yR5F``>W*khemTV;=GYx(!e*T2p4 z7C5!EpMUb~R@9{EAjI~BxG!&?_}vHrf+Rz`7cslQsSZaz6e@Kj$wS& zsJe;Cg0*d08qkDPc-5o(`RF@i;;R*HzUpj@@$gJniN8oT#hAuag(o{<%*;3YH~TN2 zkH`I*UhwEK3L11Rrm(WxcyWIy3>wB{ed7Hy3xOc<07?=PRha5DH7#ZTbBg!iF$wE( zTgjjeicR_5YRG5kD=aSf_?q>{Xu^XLtrG58bH{Y!W3vKvCs3V5tCp>_YB(+%=1o6I zoz@}+IH)p0=9Xn1l0k=8O@Teff<5qvVe@LnxwLHibk>Wqc0wu~i^R(}>JD|qo=2nn z&&p-Qw;49sOPMaOK4(g&5^^;(?G>}^>W!-81w@hGFKaw0c4~B*Rvl|RYnJOj7*?%B z;n%V3#+eiu8E%(xt2|`!jj5->;C&Smj>mRAcij@qsCL5+f!{7OHnWMW1f$#p9$i*H zB!w2;mn}M1G9#{`N9Tqkl^~S1y5pycCtuYvj@c}(O7OB|8MXCypOjgv&e*5!$2ZBg z(Fs-NcxP4AHnaA6Ym5$uInJY+vb><6AV-e(>$i^qvIj8OhrwHrRd5^U{-zQf0&OQI z#hk*@6~mPa>CBe-@K`D4p3RDt`;gc+or-qnjs?fSXF~M(=RL6ln5e&PhG+HK&x|um zi%rv|yw79{s21v^7vXA3qrz3@H=}#>7E~$~H$os8%yHmb)s!~B;_f=0#|*;jAyFa- zv71(B03&cN8rddGhe9DYR%xKAU)m7w;#%kwI3M-5-o6=w1_!6==xti&tm;tVkOX}nWCyRjML+IS9#~CI7ySNm(s#WDmdJKj_F$E7qoi(! zETeT3J;I3W;4NUqiK5@JCB_lfU?>|=96BU@9Ulgoxm3a z@3$qJR~WSfw_g`*zb9N`ULG}UXD$<<4_qQ5uTrm6>XrEUaEBM^go;(Ja4nw)Ho)4C zn&QBEX3bMIsJ&qBYrfg^OnPKQb}~kof^sq59C7QXv&v+$&8kv4`9-+<;^~ct@Yp)A zG6OuB1)QCu3wpQhXP&g_;JzI0f7)F?YIw#IW-ji@UrtaV`;f}NB@f+e%Q50#94C@Q zp2!$`_P0=_!No!VaI$Ufe`_Xt|D}Yz^WEKGCgBO~Mkx@jD z2`yoB836s6yz~I2|C)%4tvYCWKEA%^oSkVwH)5mzErNkmWJEt5m})dGMQY-&j$pLn zVBqUk*PE}-Frf@x8?T1KY=mZE!d*vz`QgpDiYRTgvSBiEk!-0cs#?V>v-7ox#*yt8g84I zzZMbn%*boLt031&)Eiv3y-M0w0|Af8I6?4RS0CKSd*Z@SZYIrJH6My*~*ve;12j6)y!7i{@rNHZhB%S01?wM9ldQ2UZcbD%e$7B(c; z$7=|W%C|e>uDb*nsuqg_me5_H^-%76cReTBwg@OL|suJw&Q|3i@11}{!uPSlAE}4llB0VfZjiIBl?1j@z-M+&!DkRp)tC5RuLss5?!P$La?9zVV?Bac3?ecm~(sekbYO$LInWUCiq}eAw z9XQJVK|K1K#qGLQDP_1>BnY!KV*3N{TB}pO?{Gq~h)VD>*O)+IHbuV*Z?II1+GFX<|ls6h-*u|6|amWXjKYMEGL zCd6H+CzfvED%tEm5-Pl%`D6BGwDWy$^6jF6Iv0nfjowB42RH2y*F*s>?Na}Tb7yj- z9<;I+n3fij=Dcf!7wnX(OX1|`Xe9R4b9q%G^t`1iS|Snm*G2D=7Yb5&Q2}hVQFK`@ z7TerDb((?7D1eV1v6Md#fR!!G9i#E3{AJ$jQ3b2QJ!0NT)xX&>DNAc~EwmouWN zP|)rO`AIxeRX_mwYnZ-IjwBcv4NCCzH}WPbnT0{3cre47+_HXwZ#TD0Tx(3E z(4EeD7I9M{lUMxYP|vA7gGYE~-v;Kjc)#-)&cPZA`GV?=qHmdRz+sV7pP4>CJJ`de zL%6eoT)%~ioD6D{)=lXF{at1#N+vGtD72z&`DraxtN72>WDbc(ay)ULxC9JWW+f-# zEQ1Nd1Yd$$nz*=$#TE8ImahPyPKZa4k7KnODUpDsvkKGJcV=AO5yG$%ZuB6yV_iTM~;61@f1qb`^6ZZDGEF$ zS(VkypH<|aReaB=*O=QwxyfH|roWZ2c?OT5y?BcEsw#=I+(=7#xtDeqQ$IFocv&fV zZGE$!GaqSR&!@jVvwirI26=ju?4XqsVZBfn^RO!EZYRHiR&^7Uci(<1)!?3?u1C19 zs4OZYiWc1{f$ADVC`JGL*TbPjQ;bJxOKVB52$gMvMe&9ttErU&>)#vP&A8-k8JD{P z9e7w>^&wGDvr+Sk*_X_pR9z{^GV`Ra5#2#8Cuq$;nB_c9vX@lA_r zd&5=&EmE-P?Lr1=M#ep<_KD!H0j~3smL{nxmdh&^eu|J-Xev|U4-be0Z^6Uz{cDQR zS?D+_UanK37E|%qDive#(E6dwhoE9e#ZD4u%7GdJ5HY|6fPu_iR+PP{``<12%^$P$ z*Q^8xnV(G`sGm)r|JBCp|AupZdwYGie<3TQ;)9$wMbLwK)J+(Wr&{3~1|~C^GO@K% zD-Q`JJ%EEvA(PWQO0Sh>|18q zMl?_gXWEA&JJ=oVQw^#k8?l_f6&{IIT%{)Ge($+^HSk<>r1SXDxO(uxJ1jGK*z?PE z{}D6&%c5ODex0GBIqmY$zT1lR_R(&Id4JrsKtEA_O}4;4HJdr$U(mqa@t4W#H5uQ& z-%_0aE8k>v;z~qNgY^tX8&U#o%0#W^;xboyF&L!y3K z60{p6M*RT;GRE``AfCxfC_a`=3_Py#;B2>?1VG4ZbR_nmF>LcY@3UpwL7&}HLjf!)NvU0)#2 z!E%yL%Yl;R`alD@0SPvUg+O}XJ>DP>Qqb_%Ok)Xxe~ls%0LQ*$ziicre|&_0$Dn;vpkcc?#d1Vl9k1g7h6AhAiu`27E>)_=U3 zq;10`=09xr&YydG>i?)}{Xehff2Et@#(@0*=pb;P!<7IE{(%EqTX`UudRev4$JxU< z8&G6O9mt`P;Xj-QQL&}Z0+U4?Od9oc8tV0Q&Nt_v>{(V&8bJ|ULlS#MeUizbpjt<@ z(^^!Pew9@Sk9~Y@OwtrY(-bIPg$n-(J1lS?2Y8zn8b*in#Cea+7S9WA6W3Dd#;_-B zcG3w+-r~v0P0EFya#5(fU*}r^2ve-3aYxe2-)B*^t`TD!m1j6St|?<4liy!tJiQ@Y z?_|9rfpp6n>DpnV3~2}y5x>XW?9cl^>d4I7l*KP|$1l)#gOSS1f~KN~B4My&@D}Hn z>zP=c*mKg0E1eMYtp3WFL#dZrG=Q*A<&Tg+i6_|=C1nv=MwOR9Y&aLeh_@c*&fnSo z%}zKfOqC?seF`wsCMpS%@6_4eG|{9WRFeFYNiR|viI5#5!PvmP0U`@Qn;4R1s+D@~ zye@ZdJ|)K?+j<&^@(2|oWV-c&KqzcjBfb$>_lG+8#|49yr3mBRuFL>C7>OA_h_2nV zjfPXDhy&_IyzVbGr^s?p5=_6>h=Y}~X0}Qig;e?+M^pbT;+0Nm(4vEV zKW0&e_p%A>00vIHU~3htHLL*JX&eKbU~{-gz_sATul1{Ne?EFaQ?Fd6iP$ck*e>X` zOOUmx*n6JX1o_kOM+8l3$|Q$4@d;tncVfZQU@d3194WeQ9oes~><=A?)X2T_iZVs{ zizI=Vl%gz}JHd=H<sqm$ivK@x1n{S@{8T0J|cVjP?@=hn#zhUcBU0MI+cV{9rS4k{&9oTC#$!Gw(D#_nKFZkB@Y&Qc zP&Z|gcW?Jtp;2oNaWjV)W?_|0Pg$x5Ls~=_yVZYZ_D47UD>vx71(Fu0AX?zE8t%)i z>foy83C<<#ZjYqihCChu4L2)ZAU8Wtmm{cH2PIeeTMIH2U4~bf2k%||W^_roHk)>B zvx!6%i>jD1zUg;K`f5d$pGs+_F&@=@X9PX{Xx(m=Lm@nI3=kx_-h*$X#&*D7SOy80 zetDwp0jRj$awp)WevBTJ_}7kRZ2BxW?NWKe64;UtVxJLU#u6Oag*l}}=!Al3;VVg| zza79jKc)cm1i!!x?YS(!fPF#F^$o%M-2UB`N|uMakqz~^)eS|dM6||}xf4-Q(ujz8 z2z-0mecPXKO;de#tlKvJn?w>;S<@oa^7KTKY1O|!w?pWhrh3U^f|)$p{=wN}UHIuy zNAR(~VnV#Rc^!N1!Ifw`vp>?k5%bvz_s%HqnTGbqHNr;JbM5o=ZtLXG8&k$z>4}_V z^Wv`!>6MtMxxg&qntq!l#6~05RV0nY5svl_#2Ugks}8Ds^gohN*?7Bk2Iv{rRAaaw zLYr)A8paph0!b#-z@(mwD~gH9R|5>AM3M_~lO{)rx~q+HR}E2$NcYS3+)xOv-K4ib z*`p4@dC$xg#cYYAZ$>}^hQB0ApJ1t+DOEpPuK`y;?9OQ@9fVq76aaCJpKFZ4{Cgdo{GF3rRzX*_2-7kG}}Am2@q0#G2Y9AjPT=m=8niR}9}8@yL(o zeCm^o06hLV^XU_v)pKx{EMYH1T;Bvk4oI&+FTdKL0YLJ}l4M_PioS~hn!zfX&>EE~ z$RMI>y@aSs_^rT~{ALzc34eK#n{;3rDA!4DZEf2J!~Ey5;kgRoPoq z>n5@aH+1xx#stTp+)9WN7FH3gxq?jY-;jyVutgY&E%cRTeQ64aMN(TghPZa|vW)$8 zj&kv5;4`S!&Q!6j{KYDW{dGdWHyWC2Vg*x5Cw1(m`VxxvcD z)h2?te4?X~dy1fUT9))ht|ibPj6RyY-aZJBfQ&>W;4Uxz92#(zQoWT`Txc5warnqv z5FIq&45eC4OE{4Xtzk%$cYk(mcuV=dD{7p2|391%!WR-Q%?g^cZq8h7$ZEklww{n34i)PWbZ28lK_-Y7c_vBQT zdit08pdN6HMpZfGdHqe1kF3GsbPQi*yY7j9zotWBO|4(wDZjTz-vLILY>C)o(QFTd z?e7p#+|u~(APWwa&+afC4x~{>HRJSX7Kgz!MIE38qA`lGlAQ%(Y+FT`Lmt5b7_c>? zJQ)z8p%fKX($!=vIQ~W`4JgzBTkJ1$b}e&wV|yHjiLc=x_jLoLwOp+V?&-kk00^yVWqjPJ|eScBbf2c}D!+M8v#tak?iYJqoegr-VMU zvR?+VA2=9~b-Sf8hd!D9bl@q9X~l+_{nLf(waly~b{u+kpv?F&bnpQG-fEXQzaxhF zX|+c{{ipf#|7fvSB{0X{i(n6Jr^lqF8EY^W);Y_WFEuk*?-^y*`No#L(+P^OA(`3>eWD)8PzC!8ZW=O_UZ#VDcMj zBSgKoo15F+5-UrFKhqwT8lU)9X}Y*;!+T1QES8%ZI$2Hg<&*~mzT0;8PA z|F%v?qnF=^88*@=(^1`*f2AuISDB9B**6v^Mep?Au~!lwm8#>(co;Sge|kAfz5Pt9 z`>d)H52q9l4;E%3QYHum*GH2uPp(Ei6;Wbjkya-G50~hVmQZ(6Q8uQR2pejQlkw~? zb4vNB5iw5SASqGGiMqx}FC-$5mnqrf(EsFmGk@UuIdp1?FkE)#JN~uw`iVT#{mep( zg4Qq{SuDJbUy9O?v7!0n&u*=j(nw02RH|?O+lf5z)ap05Jm_|Q@?G*Oi14L%6Vk#2 z8K9rHdIQS$23wfTqD zcjV?-u{9793dY6O$Gb*s+Q^uh$RkQ?_C=DcEA3lc4+Jz~^+I_8Xr4E}@O=*f_^3mT!53M4G2oZ)MZ1Asfql`4Ef*=G z^O5<=xP2KCf0d4wD*@f8rwrQNW21$8!p@}JcxMV`&fo{%g%ZdRm5O6!?i}4uR+;9C z;f5E=H(ix>QRbg*%9p4LEfx3`Bm=l+%0UE|n@UF;$P=dXVdqUGf`4qKL5ajORN-sc6?2b z+Q?pc)^5XWB#45jtai|c{`PYfpvFBLuW(-N*b(hAGQok`(Ekq1)p+md{0i-5!{WsQ zzgy{dwl%apR+;r0?LjHCwVQ~+z3s@;D#;M>p}2rZUs>n(F{Q%6~@nMF8$Y`{LAXLE=+TvGDgMXwutOGfUhzGeXNx;|I==CG;p|DEDR6!-F zC@vk@m<$l{8aK1bd|kN+oZ2`8@Pr?RBUA433((vj@8D&!)2SJHo&n3m%H2up#LV5v zPw-haz{)|OW`kOo6wDv6Y#ht1QBinaYo!5mY1*VDfQ4E_aej`7V#}tH3*vv>~Vec<4+=x4}yhYY2cu-ECUQgNBlg%URuQROs;3*N&o`+8m@4gt#kpM zpmBE<`gH@;#aKdHXC-CppyX*_c{8q7$4$Y*siK8L=`1>wG8}Hx}&~@qp>5HATT%y?I}!|I>dGYn5S~?8y&g^$w^qESZy% zT$)7TY~s%eU&EXy&Vp;pD`WAO^}a*>)WLhY7LyN=i?%yko+r~$fz==&?$80fWwsuK zZ2aLV@CP)dTeQ;)MZ)6%ycvmoa~2Nxa-2SC#oYXb<3^(RwF1ueC)$6vjdp)(^JlgF z;-nurzWvCN=0B><{|R#aFEu9on7=P$2K7*DCRdK?n~0Ex{OmN@iHIwUmc=9*j#=Rq z(9Xd&cC}10Dg8+DDVby^82biJ!dK(>aORsEX4n!Z3jkm)^_WDD`QFZ-ukecQP-JRyLKlLj{`;a&5RC<+Wm)r(ta({ z(VwfKZo3UlLF}?(KZ&KRo8&?rHl-kbbhcX z;&pzl)H#YWDRY&(Ncd_g9F?Hh8g6b^!sh3+y9MIHeh0+M)Jj6vMQ5fPo0jQLF`IQ0 zjz=zAy$MkR<}KcK%M^^HLj@)i-;G|7b>k@)Wvc9VZ>Kj0ftJ91yt$%Wg1x-Czx)y3 z0gscAWbaqM#BOm9#2t!ith&t2yeceYFuUy30*_}UYUeet%UFCf6*jbXn zgoZO|R(Zu{dk3feH;8->rc7X*D!#EzWPH1s8cfMs9Ws>@i>D!NwWbIK;~6r|BMWGD zj9-&KVk$8!hpKbG+-&`ouu`8Pv_dW*Jd>n80IFCP{vQyX1pZ$fB|RdOA0oRRjigg) zHDg~~-1o$9C49jwxi~oJ1QTQ=hD?n7UE%g^effLM31BL%?Y_o4(`*? zPt~($1ijzK3|_!ukfP6GxRCB(B_3cs_*M<*sRgyE-Z3Ss-f3!bJ^yBYsleJZ#n>+W zQe9lK-dPTQVRtTid7d2wU|e9t%QfZwAuyZrq<=wrkbHUQaxnJDwGy00lnZ@|Qc~ay z178)~0|baJ-lhV{o*rOqb?W)1lz-?c{3frd+`8Z&bj#?nlTut?8bfctaKy{4`~J7S zFyex0&%#e%IQD0!@_#>){nwaR*1+7@(D7f5;iQBm=Y6rCBiZCN`i+6fdZ2;HRwihS zR>lXCad{#<@#!=d4U^z=uR!C!USUDj>H~#wm*rHbve8}aPlv0zg}r{*U=fjZ6=Fex?6Ajd@%yE@-LrNq?OARZoyZbBNbcRa zPR`X0vuhmCR;K4!8v*{o!R6aG-j*zxO#x9Gz{~2Y!J5BpPM!}cvUv$xU^An!V2`t^ z9Q=;0z0|{?w%FI8P?VoyFV}Yw`j{EpHume?H?=)9VtGyI&uyE>+ z3t?$j&6*RCqBD^#G-gCfa8Sy37&U7GyDz6pzZvG}fW=))n3Y`qrriJakBrYmZB$Zt zPQ9Kku^q~`*~)!#)=#YtP*;$+HExDTEaN4;KfJUs|G4Y|FJfHOoef&u&a=jJ5Wj zvW09zGNdvvvqDpPHY(XxWD_PqEFfwFaG%1CF!Vg%1m-t@zO<*WzO*;r_*>`$r*9tv zegwciXR>H_@Nk2_GQ4`aD*gkBXZRnA}q9%1!7IEn)VcWJ7AG!wbr zekcLuOZuj|lh{zmN81e9CU(wC=-!4)8|C`QOH%zU)%tL1SjuaCCT)|BvmL9_v$4Xf1UgxQJq;KG&lxQXUJ2K1aW^z&uK`hp3}D2{advFgpA1B*zi( zfC9s3aKRF%Q_YELv7r@{4A_jA2vwcApwepy!h!dZz1VXJNj3Mr039V_TF=U3v?K$E zcGTtiYrM|HQ;?6IzHDIDkE-%7i9M^4;Ym` zzQ6B9?-6pyp<$LMAV3s5Iv|am$tKGYz3T;nuM)yh=6P0f0BVm>R5N zY{BATE60eu#>^VNBy54I8>HGtBAEgo86e<=EaWg;Vwr1R_71#W+a$GF8*3`77tPcM znvLXKRfmY$^`UO}_-uxz(1Z7qRLiNWOA52gx925k4Lkt*P-$i{ndzSib(0Bp)KT)} zG2yD*U_EsK<%Rw`9qNfDpn^70JKnlt`Il%}pK^~iRXqg!vR@o6c+*zyi|4E0s0WbV zZOaY<^`;W>MSgvOdjDu>G1tXHaDj)tbf>6g#5Mut1vdsSqLej?na1HpUwvytP{P$UqgL&1T$o65V z85K**LDBtEj25(lk>Jn6r#+|eoj;q{YeRRR zmqzF?90lHl>L(9q38faSu%cBajSMG^1s+!Sg_cdJY3C^$69ZT%tjRRRnW-foh5bEM z_Y(PJn?0K{xY$ic319oSo(pc5OnXNOc0TGyW^;Hn)Nqv_zrrq*jIPaE627daTPIj|%Sea1-*S=oBR&CSwd86Y>&B6~S?cqh0>Cud}5eo&IThSnQd6ZVDu>eYk>G?LMt$;?I#$gS(P(#bd% zOj;R-9M!CwxuM05DaLRfC__*Q&Z^IaR9dm&dpCh27(MvUA}HrG9){I_Vl>kisXgce zeMdMT0Mtm$06@v)gz8XTLE)&A#?ekB9vM3&E*Td^$(8hYPBd>Gt0vDjM$b3Y;Vv)+ zR(nli;}YZ<>;-VcsV$|AebR$R+8t|V``Z^6J0oa#!vWk-C3+=aM$4dLe`k!ifFH>Ebg8=|2 zBKuEkvVW@OpE5z778aeoSMzpH)&knvvE_vg>VUbkb@|!TtC&hDTuA=DI{StB z)dc4BK>QZ)`)#~Tj}H_{kRL+?J(^bpu>ix6pAJ`w&W!(W4!Ne(MC2sN7nsB3d&`cM ze6o?ciV?FRwITNiXa?;1U9;6#^u^oez2WwTANHI4=v-eMHmQt1h0Nh(;Qe3_drGw( z@rpfRi#_RcF^?F*Eqdb(GS_{)>!W9a3leXq*Lcd>cHazbnR4GjJ4|5HZsFvnpTZqv zHf)oZt<*GqPYSf1JUWzd!vO96rU}KuQz|0FfP!lRT~IO z>2eH zH{e3Iu@L`sA%c&MA|KxACju0~>v=Mo;Fx821rM2l!Fg_tIRFt`1YL`%8n)<)jfU+Xm3W&8tm-GRp}7jBWNk|12Vw zr`rIxZ?PvcS3#7P_gnp;$X3uh{O3>C-I>de<>i8OsTDqNa)1li$km|*N^Xpz~rgggtCmf4* zJp%?qZ;Q16qo!zKbX*3kS`H6pir{8{%%KkU*I|iunPIwh-cVLrV-Ckj0p#Y4CSC#5;n-^3F}xD2MBhP1eYV>-SAgQ4H7} z=sskbVYCz3Db?#TINHqQRnsvNf3+OaNY9G#w6Jfd^vhY_pA)KLKEfl>7m7$R(R}wD z)zqqwxGIH!y3;k{a@lPu;74QDzW{~tI2VV)9ZdPc{6S1d1}u#BB_t2F7HSEIx6U2Y zAuG#3S&H(v%AbmsniqJjQ|v4qLB+HZ$6%n?ROynTEf{~|^PVZ;Rn;#4^Oe4)^5ZP; z(1kU0l(e7(zec} zJDl{h;S&D^?0Xrfc&Hd;8)JFDf4o_12`wBexgl*^Lo3BO@@I! z$ONo^aspcioYA3va?-;t4P!vBb@KVPTg${%%jECJR(f=0 z<_rjKLmOY}&3C0C_YuR4EfoSL2Tr=vYcjP%v(0AlCnN|flPyY%K(MKP2LYMLZm&Z2QctQE|Pb!_v=yk+dSlK{YnNppLx zAUS=Ns9c;BjudjMfX119_g^ld1MBhbF<3=8><`baW1C)?q+A%igxN&Kxpes< z^bdvnnA~RZCNZ3aJ#>|$(DPeu3kj%I%AjLFjYeF!M+gMkjfL_g zuxqUcTo~4O#r3v2ZVUqBTo`714?wi;3=*0Q>rA@Gd99JRMwOBGs}nr?)2^~4qc5#e z4@U8Q6<6sGEbLQKoG#8}n&lldX#$GJ_g@uzm6s`5O`msG7XHWW>d-XHE1b77+ug!*1iXf73sJAzlsQQmlW6aufRvNBMA1mK6 zxX-&wNw<(lBfVM+G(3`y>|0(-)|HHU>XRx| zYqq*PZbst>gBTULwR;F7ssJ1l0k!8HX0s!$EDx=F`l;31ICWb&$Q6r*Rj-_I#_3{JWIu4r^sFG@7K&lBtRCtB9d$L05R}QTsCYJG2t!~@e`4)+|AGIib#MTEb z9a_2aO7loCWU>2i$OPGmWYBL%c1bl{r?;(%?6sB@2W&%oRM>f7g+7&Wu98t@SHlCe(7!#=XU+`Wq_-v_fCq!5b#=5a65Zwti3c_W^b~lB~&CQF_sc z_SruCSJBa3cU#+C z)ZqM3$Xotj58vX3-)$!k-8^E~K6^Vr6SC=l(^S$+;FM$)t?J!!WsXrpBy~u(76w~5 zGdsg5ZQ^2GN|Rm0$KM-A!Jrf1Flg}{nmzk}JQ<7b+O8EiXz6Xu+;-;eIUzJshhZ-I z=Tvjitn>FI-^SzuvDW^0c@0PJ7uMD+cbJJ^YB$)Cu8rgG3)ctqEkjwL%IKnuC>Iea zVKkLzdXE>VE5|BBkd%(g(UE|Rld2y!LDRcmK13BD>c%4mX0)=C86rcHwFq(u)g2FV z%fLV<(H{bewjIJ-Lp)88TBed_tM&hx3DGGvWRh}4Mp{n1VU$Trnr<@uVkBA7;d#1_ zJ^myIOd3|kxO9uoGiNhg1Rt)5^BWN?+flI|ppW#c4r`{N$Ms-aH)Nf@%vtbHt$|ZH z#bFUkyYg2uB#c+qFuyX^Iz?8Ef-=XfPOl!CDpbkBgcKx+jfd!;Wkn9Q*H!XK!ypZ@ zMRU=V-jHwQi;}1JRJmeJJk-F*YfJE;YRL*Q=OH%dCo{7En#PB>TQ6Li z@exld&L#(cw$CAEHYlI2;uJpKy4^R}iWWcFG33-skQxbz0^qur~EcC%vU-EcL0 zdU@ZG_0bf(E!>)8lePFNpYD0n4Rlx0bpJy@{XikL(;@K8xb{rAFJSgD_W}I&8eIAm zX7gDR&vb$Bo_Lly`$#Pv<*mx{DF#1I@e(}fnfaCMX-f2}CY{YK$LB4VfJfo)>40WW ziyy;?L7zhzfT;;T0AG0>bUp(&z}#$%e4j>#sjsCPs4M(CbEcrwpEcyeW7*ID*aywq zp?2nYTNqDpaz!b^fsr0Nm%hfR)7G!qpxbE|F0EG1rpij{0(%)4wzNmC_)DVdP4f?m zStFD2!>)L?Kxt8CNmG$4Ne}jh#|-FmwxGKDOu*}MS_-i^)~+^3Zvv1R8tA;qT2tB@ zMh6>XTM~Ku^J1pev7=%7rHBM;aZcy?#K>2!EF&yX_4TO{V(#A|6juy_K1?4^bsgM=C| zMg63$2+hs1q^Msk2ZYRuKN!kEO9$Vjz^#Z($i#%)@l)vpMU3@oO{$3eFzyQh`1`Dl zI~;+-^DoCEVuLH(F0|oH?o$<+sgrLsX~KI(bE*7Rb=^s`aM9EA6s@=I=KZUQ*6D1d z3e=Jq@6PB}McKB67)VoqN16C9nO{*dhOD$W@9e&_qjIqIv(_mngM0L{E7W%8CgC-2 zwM#w`TZ0YWUaRA$U(?#hs^PCy9Z8J1#L1h65gCjqeo~zF0Vjvh%kjap7tl~+!&@v-iYN(8q?t~FNo1vUftm!9IE{H`#HYl3&Wze}^tiJdk~s{Y z4PuPQc};U5`4ikc+=6v?#6qDK@N=D%#BIrS_anV#iePu#e8l3t9^*OC%;JS0nzMx{ z$jlwzp9}#5yzu^aarlpcT?+liuh<_pLJskNS{(il=c?%;{mg%m^K1mteflRS!`!AE zr64x^WrKB^!JhS~dQE?J=mbZv5963HF<&;eXvs}+@>pPqVLC(vRGHGpn3KzL?N)^5 zjmT=sW*bfPSj=b~B?|~vJm&@G4NkI?wI;+VtCwa4=Y%Y3VX z1rn~%A46pJV`L71d<65}tUS^l6wCEdC2XLyR0vfgw866Cx3Qao0_T~T)iJX_V1_^tjb|l#*3t;TpTcgAp${DLADK`uv&tR@El2kx7sdZ@vXd2d& z%x4IGlUJ1wvqY2f7&bTP%ZLk8!X8&?Y0{Gor}oz-tIV&LbWQjTkS{3athe0dj88t$ zGJ1!5M^0m_F$C%yIqUgwGIBOJD7v~3{tc+@?D5*3^P7&FyWo4C>z=-y<^i7kO*Oqb zd|z}sQiM{f;k(|0ko;r{7VRAA-2OR})Ll?@gwab*TLB*^j-_9T92C>9km*CFAeMS?0R z!Wrax{fVJjLFwX4LMqb{(28=fN`%AwE;@%n@1yc`gQw;#h}QCwKyLx{uZafk>a%D0Qm#^Iuhw3r|# zZ*dQBs}#G@SjVo}d*%i|8Fq-(X3EyqW|r>cA!IM>a$ODr0m5d&3n^U!NHFc|S_klo zg?k3vvy7#&OnXl&topPv-wQp{-$x8L0verBoshX2LMB*_y(hViVBmA+_e& z;>lJ9=(K@mNBPk2FnKIfXL9pb?RUsSLcWLpCr>Ty?UX^1>@N`J;bn!%0{YFtWT7*@r z`3nUSq(Y01YT{W&bTtUmBWI-|VdQ^S?p;pvkF3GD?Tn)vFi4L1s4lopS4Gl@#=}j) z489EmiT@@#KP5NTh+wDfOPCV-xo+B|l|F|$8SRu|G^=3Ln-Opjnuot99z5>q1PTiu zI=~4{H_3<7>eN|gAgAH*V#2U*K#m9BEQyC$N8NIwmj0F057AcF9)28mvO>$NtK^bJ zWf!?rCe4@ku#47cTq%$lp8S33l>VWouasr9B<5<6()>bQ*7&XBEZ4h#!`0t}V%nA% zY&nI-yAO345yCIwK`w~ec})&Tx>MK->*`NS4$Uw}SV;SfftcE-9kohc3)KPgq{q7C zzG-WBmfwtYL&PPB)4?}GXjv*mhmEeALYYRSOD~Bl;!v=+3zI~xKA|9N*3>bSD}|yS za4W z<3z(wX?uOIF;`uBw~zoWLH;vOit@TMDlfr}9er1!-ki*d!w0fC;-6$#qs(&=X5z@b z_mOTcl-JqS?LmejK@kYb^X)iN1MfG)3pfwz4Fm#JeT)y?J7+^k?P6$p zH5w_1Ox_S_B7${WXG>rejB$B6Y~onSg@6PW=?y|UClY)A5v7|TuqPZZT_-ms%vkN3 z>)HZFUZ1{^j@mf#r@~9TgQ~LLyD=G!g&?`4X+t52Otz4k>L+G&verBBH=$4hi)Uy7 z`xv2h9>ki^X(+Wy$?^Zk**ita+AUqewaa$xvTfV8ZEKfp+qP}nwr$(iE_J>C>F)3A zb91`?9GMr-7awOyMnW78kfJwQkhaD1j8Ev8_4PLSuX0 z??XCKUb`QVLZ{Z0%ib6!;!H^HmL$~xyV0D;G`E|se?AX}*2&Ky!?x5+#iUJhAK>o9 z;Xv<{U?ZAOBndI1F0uS{7J%+-;06-%4I4gA>|4tgS|p?0%Um6Z#{MR(cWC5=jc?k3 z>R>x|`AsXK*+@JwR`?4?g{UOVXA+T^lqxIgw+qeglCg|?yGkogdM`k)!YTj@o3CwV zD~4^@OSx;#Yi@W>FbWsJxA`R1?gm>j-50L-uvmR%F1?h(53TvQ6OiH&={=1T67 zHHR$jnYD+ku3mL&=VhJCzbR@PpnD253tvaQD8Nl1%3;v)p7CPberb1l!LtEjM%Zp+ zLfCH^zVNC5M~6U2O{`%8BuJ(d)M+Bb3vGyIaZba^S}?^&{_UXPgw}@|fftox^#N>t zfRIqFI9ivic$=frp~kQ9_yWCpG1`9msFXA?aZ-wnQTtX*=-H*DT#RY>3TY(i1Ple) ztCQF061baza?A?6`sCJAk@Jz^B zTE$M3l2tp9$z_$lFl8P5=dc?|%z);N;sGVXEtw{=whOYhg~JN(Rm(*-e2tYWf6Elc zCU|Q6c1smz!4E{?1E)VvGn84b1LvQ(qmwOejVrScI%Cd4w@J=x%bNckHh$&i)F=gf zVP;HYe5{ZSz9g@&k>oz-2)-y^#XhIuvvF#pX}UpO#D-v#lNWFvzTjY!{woDRfkgfY zM|C<$OHi}AD1u@k>*8zx23o0mpfzl+{1kY}k)ov@Oma<>xl%sNq`@BqV=k|<9Z6hN5(7z`M&MoLT3 zOlwQZ&U0%xKUK&0_>-l-Jz*3*RkZ4d?!F@taVZ_~i1T2^Ae|$9?67iXVL#LKZk%&b zJVU*8$G_|+J@O?IE%I?lQW~s2%9#3KgEBMchkDu{@whx2@~79(Ey%8OnrK^3cH2mI z+W^*vF~)^0(S<$wg)Iq=EeDQyKgLt?5t38|AGP%ILd%YlhfU7x2Uoc6R=wft`7@%X0vj#ufxr+oNZKC0*EZOq$kNVC)6i_4aY zt9+2d9;VBdq064Lvv_l(HGsQ0o>RF;YmK@}AkYQe30RlozTK+;C?ak{(j0$pLLf6b zHHhoD(*A)7WN#wW)75(3SyF*AC0!NTRKe^Qej0?K9C0X5^fp*H+hU#mzAOzN zcC@?cm*EEM%!b{-$h$7%c{vDeh*(G1Y4JQz2g51E41%W*NhE+2ra(d5s1!>`hpHeY+^JI$rgrw{?jZy z`(`3_g;0>Vqx7dc$>by*JrDWRVK|ebCE=8ks+|KvE>zIGGNG*dP;bO$^R+Rd|3pwU zJ2H!#L8OZT(^NS96k39{d9epQXD1G_nC$-i1gh?W$o|G9v18Xd0Ns++5u=vD!U)T8 zB|&w8$LUS>@xo%X?4@f4Gs(k?ecBF3(}6m($Hw18%O4e&P~S&lqEDsJuf%bHabvtC zhEQjQ)M|!69)`p|hD>>e@H>X|F@|B%WhGH>uD5HxA_H?yrPX30my)%8+Uoigh*A74PU#2}!>#dY}N~ z=cA-^DolMGQmev-n(cfE^IT>&*$H9NT+xp3kif@;jz^VXlgzR38QH|2ca_#69*k{h z;=S5Lo)6s1^nH9^6EJ--kzc5l6hWQ0-~52kIWu zeZ>xR#dicnTOOfh3>TCtqJz9HsJ@Rwd{1Y_*S@`wx`7lH4cQ2J7bsshnsgf5=A@K4 zqfge4VO&&K)DMRmvXrf<)Uk^MgsatP5SU!5+$(Z=FD?5qyQgU$B+qP{!~TIUgVT>K zAd4+9Cm4ZGF*GM1k*6M6ke4AMC!N!kF%Hcf7GuvMw-+H)Uyt{;JV5)QPBHPhA#)RE z|8*9Di#jW>6BYAR+eA$3s%i}n^C;-TUVe?4oGBfbS)eqdSbm~Nf;z85GhKC)z3c{@ zA!M(<=s{I&M9{Q z!un@mn=_389FYpgEfQ|-)ui& zZ3nvxlugG74@@SX>L%$D(Gm=(E*V!zN`UDZmvm_T*rv~YYW$>xJN}_bKCQBV>#`+w zEtkj{Hon!t4~~Er4|Er+3a1$x)0(ba+;dc6iCqr+vt*f6mt1Va!{98R4#IrQsnf(h z)xm`p0slbnT~K9dIg;!%K4x> z)q+gXS!3hNOg-G=!U!fHt{}7#p|lZ_v@zqB5mZ-EG(x-y?wGBwrD68wh`}4Cs3iBu zC{QK^oP9UfAoD%=#i4wT+J(c4;0;2R!{WTl;I&mhmOr?haiLrM>GWr}Oc2B1)Lygu z0*&}BFvvZTom;wu+i-|RQU zv2b$Or_njIVSxE>mmRa`!YmgfwRv0EQz3-Wio-FBz#}J#BN&Q9>G=EKUPo5J79UWMhm!gCP6r{vL+a~tP5HpC+dw#0Pyj;b?4BkJaUyVI zqV93VD?J|*C#?H#QMdk2m~=kgw%5mP-1u?a7fT9On8Hoh9D_vl^D z%sXAbhxMHW(aNy4s(EM=Z=`h~0=q>A*jzguTnNp0FKmST;w96)A3Jwom9?po8&pyu zn?w)rIMYb7oEcr2&22zQTO7739auTql1T2xLLPFqC?B~J-lkS?9$K1$r-b`F3$RW6 zYIWXl1!zkfti04E9jx-6zuEgbZl+9Xvx3Ak*R>Ec>AZ?ZE0xN+GihHtpazo8?dUnE zd9BV0k?&*mKsd2^CE$+!4i2l#PF7P$Q_jt}Q-!>MFpg=I!`+~7^?&LYn$)6hKnyu9 zOc?7s$M|$23Coh`XTCITB+O>~G2xLqIr#AH|J#06JaR0-s;c}$Uo_QZUF{%P`mwX; z)G%0I`@D0K^HLy#_lO%UgElXzZ-1Xh>ReMP=&AGb6?{l-_xm8S&k#bC%qhGM*82sf z7A`u$F4rUwt#$x?Ibk5R+<1Z%AZIdtfP*I5xWBZIo)LHRdS{a3yvye~hThPLXaFMg ze#GNc2etip7LoG$ayRBM!DygQg=Rbp)Nppb5WIt;O0zU**|97+j|4rKmIht8uNbct{ zuqNpLG7FGIe@@|PC2j5SQq9dbkX^N!?mFpmyMJ1E2l)LK>2uhJIME+oOHm1N(H~q( zZi&7zEJMe4eM#}+pSa%x!GCti2{xVQkQi%M`H6I}$PN|EWNWPjY^Vi_uDafnyj{A5 z;nD}(W@p0%yudXM<@F%$%A%9GqUXneU$n23#9UHsi6;GCP)U)h+2(gkkvW-^*5(!a z!X*crz?p)9vykf{8e`?VG1to2?SR0>HMOJ_`wFnOP|{AeDoJK zpn;iKYv_EFD8EWtRH;6ZGUa7{ynCsw=aKkh}NU+cguy)S?{>-G_pHU0}~FY!X+k=Yb@rvhWku-1{}HL2YmB&eS%NuSk_ zE4c47r1A&!k3otNW7c zPWG$U_E(bRF9%+u0a+VH)|^SGb&=4&(aS2bYJL{p_iV}4Q(1>Gd?o!NYmE5r)Obxz zaaO!gvJHwZ>N2t4<5$ks;3ohsA{TJgPwmGbEzgx6+W!QfjsbZbSE95wL~$KN18-rj z;`nk|!K^Ay4>>4@v(Y?RydzpA>GRzmIDJkfNk0)hZoox98)Tl^&D(R_BuZ1yPs_MF zS$qnSMX$u>&lF%Vvoc>w&eG$~v!QTBC)(F=>yVb$Mgs~dWbNVrylFdkz30y|9g0tN zXwRv9Vl*~jOEJ?3fx$I-?Y=9QP7In77H z<#LZUYTtAoh|YXA9{9*aFSrpI=WfX?9Gcc{J?B>zcWZZ{vql}W1D>d5fa(#trL>$o z=mP(9%fpTF*eVo5`FIPqg5Jpz`O;qRmTVqC*^>q_Ku*s&Fv#u9R+rHx^|{|wlehJt z#f=+(d;Ng$0oo&a3-L&n%}X~f;J1L+_3o*A+j+mhO91W>4EzGZPdN#+_JMQ{&ZGu9 z1522vY%4B#6o?M-v`vRKBl+Gb0D>IojRQHIVkS#)rwZ&dz>Dw$HVNI*R>F74+Qr6P z{O~**YDD%W4Ae$&y4s4-d`0Y1zH<2A@X@h(xVtQlqRO7>Ftmm4!nh*6S4e9z_`95$ zhPR5;3hmTHwKdu0VO{Uar}v9xkIN3kW@Gx$pm(~u1E6^iN9o>kO$4qNu(MxJ^W-6= znDND&FMLccABbq}l;WolPSBGCkE9O?D2>a%u(2PwFkWF#o1-Vya(avVNXU4Y<-;@- zBF?I@1~yJHoZtumFB>`LC(tED9%kt#94GM@_ZW^C(41ixXeTDwE2t$0wwA_5u1hxyE94k}LuH0lZMYvnrQ#zl+C_UFgbTRYiUupC?N;wBw+fiU-0;s0UC*4o>P2`&8wjhiJ^!nK}L^qk6ymNotw*_H5&<^zK-gB=wK z+;BwzdCzY57SHjPEb5qO~vUA_er1eiaTI1~8R|ITi6Rj_9!Z@nu5JoY(9I2^KUI&bvV`++nN zl+jkS3mWcV@#^402MbVO6Px)*;;m41^z_Q=@wwUEgR`sa6A{n7l>?j8A0xUXU;*A5 z2)X4O>i-P6w6U5b-hG681j*bowpb9Zm z%@q7efz?=Bl7aCOW!~IxrL+`-Btn;Co)#Nk9&Zp^TxT?}SXlgMDKzy%@a+)hEEvKV zK>j$hFl1wYc7|+HH9R#UHAua*Z4`fHe`fzD0JZ^q!W8Obhcjlwd#kT1d8s2Pi!#f2 zKWTa)n3X$Z7p1ffD|+Z%CPCNcM9RO%Ai;UW0r;=gvqyc8t~VBk9XoP&R~^?ry5yY3 zhw)`i9xm71Z#lQ-s%Y6#Q#HgTB*o$BkyetD5M!}otgpX&tlC;mJjWcWJoMR<-G^$w z$9KjnjDrydsvv`1*X@Oxw<^Ka4^cEFpNq5;HjHVg_p$dv%QbNZni>fgt!Atw6)juq zNvvBexkH^7y0>n%PM#Zsb$%iAv@+3KGh$sP=3)P7fs)XWnW8mvj2ISk`<7=6ROBo+ zBbSur@`W70312HyZ8?2&*0#$VFyQf^B;J{73LK#G3_=`wHyCi{&Ldq&K^BUTtkzm< zno!2*SL*ph0z%wrvPeWw5=&+^7mEJILX(3A=B9(+&(UIP7HB~sf0UA*Lyn#wsLL#0 zoy%J9FDq;R?HVpw75W>Qm6fq`NqzP!UGA;BME+!cVOce@!ZAXy*x6VFU_KV7UG`BEYiFU6M zCLR;i(u$sV@1@MKA8N2?PPV(lw3PcOa=PNx&T3YZgXUoSeNI8{E;MY!w)d(68br0A zBlq&+DfrVXL6Z_g4P+kLco?V^H<{RLvX{A+S9`^do_40FuBfpw09fyFY(=hF*%UR3V7=!O|gS z{qvJ3@PIU>nVIzn1(P1+C9!!Xu%1)Pk1;))cJ_Ao+V}GUz_T)JDZ&*O7w}p|@bJ3D zEg!!6xB;)XKsM`vHZeeO?|RiiD{!UV(^l%BZj7L}k;BipU9&oF&kb&moaKBl|j_hQ@I^vjum)5s*d257E-Fc8b@1pWNzxd zzkoJZ*pW|Oc435`UbFD<_4t**pWeYfu>BtSwnG}1iov=GKY-%0^_*{2Auqw`dAVbK z_Ba#8>jQT7iopO)L3O~{az0-+uKc;)H!sI*UKaVVY{T$UARIuZlsXfi_x215KZC{!agF`8{WT%oUlsH zWc@RyuhVHU!wxTH$nnGUxJ7ebQ|mJi^UL9Ehm?J!X5ab`Zwk5zt{DY%5x#>GyJTM} z5s4`3i1)7~@`Zx7!!1-Bg&lme{q#mIp zyCtFMoUqy0rnj_?ZfG5CNk7z02a<&-Q>VQ$k$MwNB2!THNFX36b&#f_WBc|5V2+Tf zzoq{SdP0mLu^hD!tz_K46UlBT^5VIT!)j|>pBm(cUdQLRc7?YWk?B}yE*gcW7YJ7s zkCIhvs79a1Uc+N9XBh-htDITaRr64?$mAel*33jm&!P^JoJSZWJQAD7{w3aBr6k7( zOw1=Q2(?caD!_NE7lMIPnBZ_?n*`u7`3Czhum2D1;5f1L?EeEhH~<3xQ2od494Q+^ zeMfVf|EZE56$_H^13Coupr9QYnt1zovdyUE^Xj3?KVFiS+wg!$mRe`wlfl&^ET=t1tdF*aeDgxUe3yB@jT@fd@gk)+_5@X(nU zG*k@jdMoRPF7hOy8S6nnk*MQZI=c>??M49WVI!z*ulY7z4)I%1tM;^D$3QOW*I$r> z_k`^=tJfomjeUX?;C&Gg8cit%W4oXV|E7zLFg-n=>(`;2-$amAD#T<^CYPNLy9mFm z5i{%HuJ72q%2mRy@1e4y^;Wm3BgZn-1_{7Uq05`3_XR#nN6IV~WEwmAf@ zTo>NF8`YR!xQ`ul6Ks2WU&9aO&MD^+FA#l%j}xw-!_>NPJT$tdrDgk=7&8=S@Zo*Q zMa^(8ExL_W8``$GCN@nTPRvewyQ*J)7vK54U>1M*y`!kher+qE-k?^7EM6|$zd$xn zlm-5!gf2skoplW=ykiNj-h5j13PZLfC2@&6#HrtujD9cj$tK6q%LY3zg5rLeGJ>3v zlo@po7alXWM?9oUD1Ks567%m3eKl(4Je zj~>ncw&lXM2EzJB9DJ!5)6H0_T+6M^kvXCD21)MngmOecA;l#-5F zk76@dK`9Pe^`5HjaJ?mMZM(oky;3q4hh|RMyL?_w!<7BpeVa>wCk;kBLKLNB<{VL; zlarO{k6^E=42sibl>zR1keKf9#lky~GS*?NH;0xmOp{%-l3k*qGSPZb7OQ~k+Z;$%6Lo*fPK|TEJ8Q_wfKR~9LE9I0`OVm zgWp8kRQ`s2M^XTl<>1GD0;Jl3Ko8q)4gwk9q;CdE-=_>d2HQI@d^4TJta#5>LQ+*E zI;$jgK75v0SznWC~aQcEU5uo=Gg!+QWT>aH@nutl_3;k6c_I`0CzAi>dnz{nn(C=_%w{ZHB zb0Fk{TlpDTP^Qe~&l1I2V+Gl6we|37Th*MIQei;P5hW#>%^_%4)rI@w*$ z$bVAE_X^SKLGCzBjw%*v>Q>)Nay*Waz0Ma!Pn)?CS{q)#(_SM`^G1_ceocD&>MICi`M$Ikrc7{q!!tKci zgO-7tnF^JpSbOhSiO|#(EY#f|`BvU%=c=3g>;h>Ch9yO39py)y!5%%eAQ4+^lCF}x zGty*2ZS++`L*XOgwome{5+>)HCNpBHZ@)nUvS=nquvSb3o*3%;vS<5S(_?q&`n|h| zI*rEATIS8_tqi{AUE%`Ee+MPAb*{Q-HQiA3K%L~@GUNoAMjvmH#x~Lkp?y!8evRC% zgZ6LLWVQt7QzKsmo_t66#;%1*lo+@AoON7A*fwH?lLZ;Dg;3eEAIgvJv0SU6jp-vB zvTu$A%wn{3Cn>;=+k^06r7s1jK6VzIaLxUI`6T=!NL`n7Q1H5y3(xrET$*H^fG>k3OgaWUNW&0fm zOHg@c6br)6t#qPGe^Y?5|A8|)s3l2AL1W7GA}5*K_O`p|7H_+ep% zRv{YIzsr~bA5X8n4u~+bQ~>W$v0g=mZ1`&kZw$_Gqp|SuEuR99ttZ@{FI!!ZnHw&dtl-e)-B^LJeZ;2y~ zpjCFwPp}RC3AX>4bNats=zrk_Ns320?_$W@ibdfAJKA{S# zD?7Y)Tr}DeKwT;}v9RCXcXYpjXG5dO3|`UvaC7=!v5H>8=_nrLP=w)^UBHPIb zO5qCdBSnH=TN5{Nm|#ZsU1t6CO z;6EDKU)_T6>CCJgffFKQ_kuMLL9&dQl{hH;A# z;;rdHS!9M3+m6JjCmgZzty#cVshMaT*k*7HuvLEtV| zxpCXmGi0q~{ZN{A3_^huGPaa15y1m8Aw{e=GQC&NoAq?%!P{YGLb-P5O(wT>y7wzb z=bUg@+#**I2+4VsljV~nTODzKGP_>pF80V|HjTOASvQ*<7uD&!>5K(~hjJS{N-O0*AMhfeq&Z40cqgP!@-@&v`Y zCz&!8fB1RMbWSQ!=mXg(y8E)*-h)@~DZQ@_EOs9?g26Y-EdCWd>TW#raw|Vkdi*+V zmpnZro=u~MXmbY}S$w1Y0Yk#kHY`cq8j-mc0(N4GAwHC;5@qEESrM1xYd;N9{{_RU4^{v zIB+QLxbb@b8p6~|Yr}Upe_24!k0|pleosUA3rkT|KOpcDoz)VQjWqleI4oS$HStz{ zMa)Xgc^^0yF7#&0}Qsna$e#^MEFU4_d z<1_JEloxna9rRRbHU%IclF@H=%4m$$oL_qfoGx${2mtrrILCE0MN2b&j_3O4c>Xi( z(SJXl|Jh9cIh;j4v=N`3wnc20ly$Oe*=szJ$TYwr&al(HqJxYE;5 zK^E&~9)hFU+%05>*Pz*m>myC_2~$t$kSAH`HG$Q4y-pv(q>E#o7WAeojzo>EdG?j- zOo-K4*fwl4nf%z6Zo1qrF`+RBGryI{v>iUHq>|ba@A*hgvOFTRWUw^Milkd#zdvPR zTjcUI4$YuO*tP|rl=nWqp}?`tThQciGs~G1ErJ|;PGm#I*H0GmSXhcJ4#*8t8nrVv zY_(7zQf7EKSig102_(?E*eyBzMb7K9^L7Q8f3OJdV{4dlxDL%-aQ1pl33PH^_KQ+zH ziHETPo5Mt;Zkb@^54L+G*8oaz+5>=FN$;f4HiIgGX2JG#c27@_#rNyQ$&Meov%l7^ zLM%MeFLdd0LkaAKa=HS@2L9tz)j5G!;bc#$cQu5?E}JyxVZ_1eE0S$Vsnn#f5RQUB zW1p5POIornz}c1RRFH$l>T1jr#a%RJXx!cwmwuOhO$bO?_eX%43xMY#z_1 zjkm7E#mW6T;+0M56@ND_nn=`c4r*`2b5XXVyDT*q_9PfX#8F?XKGYj4F}o`cNhnWs zRb+Krop)i;yNHJcn&oO^i-fY4!Xc0#5=c-Drj9$!-xyL4a$uh8ua206Qa6L#ebMOzl8Km`J@K8z>b= z;*&d}-8anq9m~EYN@mR>l3mO>Ju_@`mywmts|=G-PH?> zGYn2g?o@pEY0h1OTD3cA?tIL&z|TzsoaMMTk2K-Ryb^myZTqg#*cR&oP&SPXhiq0d%`ULL&C@oKW)*Fy3tN6G=#xqm_ z!ip76BR-c$*8X^4L2$o;ZE9fI=MFv=hoeIWd-XMY zca5eRaS!83t0Vvu+Acx=nr=p$rOjn@DEYu30zm|U!d}ZV>%;)M;CNp5`cnNQ z`v4kA(ucNLT3HJo9>7}363H6iA??C~W)$9k^felTq6r+6aJ)2uBJvQ8k*Ty)f}Lt@ zoxkCS`}(Kcq$=7X_vsLdCF0YECJn6XYAWWr#@8mWyu_g>Fid@V^yrjO#k$~X%!X4u~0Qhua{?9{Ymp!lc9CHQ2{^FTbM{1 z1urDb@=6)4pmI#+>9`9D1@B0{Pp#`l-J>#XWh`*&Y_)ebKc@f>tpMzrPYfy?rWvJT zqn-T@N<9jmx!dXFb75y32s0x4L*g!0oM?upiZ8>b*SyeMt%H5V_RuZ0mdk}tHx3!9 z{I?1MnmcT*#-boJY%6;o9zupd(iVCIDYMtEUjyhoVRtM4T$ItT-@msk-Rsb(jhhk~BA*FX3?sH&k7s)jGy* zx*OCLCD*!j*$GK=EE+H-!^+{N6DKFcPLA~|aM{T9O7tpl`1)!|&4ZCb$W$J}^^?lF zdE6rif3ZMjgQ`3s0lH)dU0zNI#{A5q@xTXWwlQ2#Pa4=g{waR56f84_5-E#TBieaW zs^1#VOLo><+DlC7Vg)I8aP&|?&R-l9iL0f|ZSeSbGb zr9$ErPN0FG34j>c?avuUn!4r-{#LDXE?Q-m@oQ4v)IO&LahpQ6*#aPat)PVP>(m!v zn!pjZOXdu}r_v>VD-j7q5Oo*kPGI=s%tn-rhFst+A6Wl8Tv!n-y-v59P#06!LHn%)o)iQWuxgos3u?@r=edMJ^@C5^;LvI$cP z)xPN1*aZAXnTU?@4DS&7B9$1~E}(7lH^qG{`D9$Bke}P+&CVAp8!(@2rkt+flMz!U zJHtd=rM#(hyqj{m%Mu&2j>N=FAA2I59}FVvd@l(y9WK}@x|Spy)MFa_yca4HHF7IGNsi}(fA4b4#d4`du=F#C#(9fJc0cDdZ&P1>L$X-$8YDxtGlUXdVslit+44??52fD8iEX z18~yJa(fbw?CenhfP?Yq_yuQ5oN>8(-+P6{6>n@O_ufBhu}mO zO_SqgR0YU@JvEmxVo^pgeYFXXdy@J>^{Qxz?~2LK@ySV_0}q#h-AGSU+HU9>3|bJ^ zwA%7fClks3C_>VsOlZoA1zVvMXU4tspVh~C6%hnbnzn6wciI!H)Y48&88&)Z;fxmg zo$zWcHon}`$9p_{HMFJS!{AzdB1IOehw;HbEUaOW5lSY_=f!(t3^VH*BqGiO3x`w} z?d-{sn9Cgsf~+`D31~{MDNv#8RyMfcpX|RYk}uKuuW7p=7{wbxr;p9wkjtx z?fESwDIr?4`hW!Fev@Mk#Mkh8`Iy{PYy1(XRJ1>p(S7TJJ1R`NE0b4u6$I);++6~w zK~Nzb{|k?Z5fyO+1NR91gnrlUZKB=O7?t_5j1iC)9PmqFs@pQouSl@% zYr;*BAvtc0qok2wWm8lGwuwY@`?2J5M;UJ#I{#EKQsXI*EMeDt6JZE7B|zO>Nxzy* z-4^XRG{2g=sNR<7%0U;vor4enUdWHY90&`GUnr#bIW8vOh`XwOJGULZxUY)4v}o6v z7@)G~X-VXyL*n|9U&FkWouCJL>F4=I&Fr-x-}}7%!(Y8gwg+#2(QL8~`-wLl(I*j? zpY9ak2ZMUgDmMF&Z?Ku{y6kyG#;fZY5+Yeef~0lFGuql~Y^Bu3VC+BG9GKApX_;4> z7GR}3t}0?sua_dNLgZ%n)+vx>1wL*#0JmWWYsBH zREUnHorY5%6xUW;^T`fj9g2SXWi?zvHFKZCYx5(D6!pq#m3jo6eilnG_+68ibl+O2 zUIwN&O#RuKkPpuW55o^GPm>wfn-c`y8c_YmZ>waWNFw#0YFPOR(y+jt>ta}AfN|xA zMbpH#85;|8!!!hwlO2cIlqEH~51P(gMaj zM^c?DT+ENk5zhOTUs-8wY_wLV)Tu1o&>Xb00z{C zvrasbmfABpwu8E8P4e0tCg0QEmC4?t(Lp#XkvfnpejsFo31FWDG&u;9*4kFQ75aAG zn;8NbK>qTaHTwlc&je{={s&oVA>Z%jM`y>9W9S<(dA}AKE%F_=piY}ZJGrB>R!gOy z7r6r&&BtC-v5?#!{lj!NA;f`gm5*wfar7*V=&1>VwUJ_rk~k_pF>BdExZ@tz5iH!3nlJ1wAtu~;OY7Uq6p1TmyEpI&EPtJYUAdBp^<#|-#na`v zDObc1YLR1(kQ@B>D)WPu2s8&smhID>v{1IYEO!z1xTZ{ajG$K5#$_#6K6PcQPg^ED zAe&F24Fd2)Egja#Mu~?(xgm&~2ZRhE!!LwZE2(!)xjC8E39@0Ln!|jMVrtg?>nO29cZ5yWd^L&@>MRrg;Lh2&?=}pj3d+moOlJpJI#oOT&g$?U# zH4n#Ui#I+*R`TV;0q?2?-{qcX`*pM}34hOGkWh)0nCGUFX|(7Ygdca)6%3K_)4Atz zpYNA-bG>6+aYNmhy#sML^Q^0)ak9Sppboq7mulq_Vn{B`<>#AA04G_Ns&Hyx<&6hX ztR$j(wgb8~F?vp<^C?|H%;wa058)0Sp`l=z!jn1yX0h>sfu#XrU?UotIjW)FFvJo1 zBcni{l;Vk25@I18>W9`K>5muCH5uQclY3X`cAdB{S%f@cWMa*>R`%Q#{fd;9IXf}W z2DYaUr3)k-{rA4N5KjL{(GS-3kD@c%|4Viw^smb6e}R%&iB1OZBJe>wsaL^elgP;f zj{$UypNgBKn!;gJ!b-zPk7UNdK#wv(OB%tpN(cRuFQ6*#E4)2l5PIMP>O`|?f{5De zo&MKM?(?V81u?Pr(M~T#T>7?KhuQlY-39k9RH6stX?;>Nv>4-I7HJ?^=CG6$6$V_o z7_tyI9_?iwaNvYlb6Xv-5Mk^Uy%13s?PIK;`v@-2YjJ%L)ECL)k%GskeOy{nzm5D= zyC#tL%7dO2<@;JTB<1%8xvIVJ=9A+uxn<{Cm6e>^&LP|a;HJSsYDNQq1kKv8(D4s~ zkp+0ltNF?&<-7!?PM!!@wblKjPQ5x}`9MgJN|BVajnB*epeGBWU3N-l6xG#pp?*M! zSj%eAo`aGyEoI()@ukhS>Xio{g{QK#x>%yjpVkEUdt%RzF5*Y{aX=f0m5Ta=2I@84 zYKoHPbF$iPy1bRu&+NRIz({ge5luq{dMe#1+)>c=my+o?9+3-lGP)KzNGZ2b()4>~ z_kN8S|Gt9la}dLW5P)1uMJErJ zTVNCf%Ji#GY#uz&q%p8EEjH=u3up0xabHj>PWj6x^-=&m5(o zhBokUh0Xv)1UhD)e#{k1HZW2d9#NHnCpOZWh=wkEP%#&>s_>R6n;$FC^lr1N&dXlX za^@f?c8>BymA*SRl0y!LFdFsflDHEZ&rkK10^`?VKlHDUf9pckAoCSV{FuGo&z=a& z{}0pu7uw~XWkpxfdCm?9HZ4{m9vgguMv5fRn2d9U;=5Zey4*bZmd zPIuh)hxkkOS?wW6b;6pyD!nO#IO00Gk{BU0hkclPMyUFJhfDJ?<>#8*g9z@^vc#2e;zjbUagk3=#x|6pVXhO2TUSLm%|7RdY&gz>_(GTBI{HcG|XZqypc*D+_pNN z-IXVKMo5ktv!!Ctr3UP80y2G7zc$to+4hxc`bAYXPIt_q=wIvJfAN{+F~Id$t}({8 z=`tHjwN7hT28W1aU$QbNn|OOZRl4roX5*gQhn2#m)T!Pv%h21|EX`E3NC(T24D4?^ zjvHpHN0OBrH99YE|0nIVqMC^jn#B;g}QM5@@3m6p? zOw_^%9j5GO`;hcE!$ljjy8O>|4BWlS`*vReERMr%YXB)Y?Z@{3qXWfStTr~JmsVkS zJT-My*~ZqI*80*3L%A18)6knrzT?Z5oPG4HBd37zK8$I5k~yJT>Zx+^iI0NFzEOU< z7Mu&(OtECqn4n#zg|$*@N+F4Y;sg;@q8;8eQmH{Ab{1YpZJw_}U=iu`d%jl!hiiN< z;Lwb+0kzU3p+BqOA>%>La_VE(-?C|8PG}iCMW8mmRjz=cv>A^h+s**ib}iQQ!M|#V zG2?WKotT4XX^(?BnPSEj5@AdcO!^0xkIZ&DxKW5co9;YNFwzJa5LC$RGXb>@#f_3P z;debCILs&~q;U{FdV+mkx`k)w_H9zT)^{cfOiB;aDOdUt2wP=38Mq`RGzV>K$9RI+ zFu_@_;d|y>1GkmjTp_057bZ3Pgc5g9$$#B~8Jg)jeNoYy4KN2JUDNhZut*XkewRbk zd7#>e5Kp`*dzc!hb*$WS3;?;#_F+QX>{AD~+`;Z8hiM;}kreQe^;fx|*G&Lbzun^@ zoZYj{O+=B{)&398-YGh>u#3{IifyM-v7IlrZQJ=`+ZEfklZtKIw(X>1>*Q~o?$bBj zr^nc1@0<5>jq$F%p1J1aj^8)r=x=wM{=G#`W7UuKoq>wL`^{=|*q;-30bc)hV1wyz zk^-u+>2`60ZEx`UpPqYrW8nC9O(DA(-oqgbw5mo_GX(EaGdvoTH2}Uw&v?E_O&F7r zi&``dBot11&_-305h<5~(4ebC8LRP(5ov4k<#T&&i8QEBsF>1AmD*?IJ!c#eDdZh5K4 zOf7JH)^5?-w3U(LUGN6Z#8oQ{E5?FXzhK{r>cVM~Ll}}(3#&EINF#2UdS0WK`0#$cV(4?Jpgj*n{3fgVa>7OP+5xjj@@bTDG0RcgQ~+7WNGTUM6F%xy5!gjm5INftj9$nr1s` zavG@dorc|ocqVeCg%5E>^SmXt?AfS#y3fh~-~#)CSwK4OY_B&CTF-s&C${8iRZTAI zaprGI=lL%wrC|TskEN=OOx?EV+(!J8WnHG(*o`)sc+T3D1Y#EL)4@G@r^>T`)b_WH z-LYrqxx4wK*&qw4n^8juXa2gm^%D=4ON|uL%!FsrLBvx9;z|%lesIVm(y0Qs@-iKNa$3&WWk%6_u{lXYZgVLOs7|Ep6gPOIBR;wEM7eN6NG2sb&7sQ#*j+*EjQ5*cv z83nOp6B|`h-*p}f+qoQatJ#>ORaVH7coXh=__-C$ijW#V32x;M*_AfS23QJnA&1fm z7~?irUu`IciqW1AYl|CJF#(#eCUIXc|<7o`x5nI^Zm$ z+(&O9=58&F<(gzVArI_xBbQmNngu=JU^_9XYpK2CL;>aSiYA}*W ziIZH8WiV(}y^tIVY#vWaWLTVe5FPlEU4)9Ml6XsRibnt4RE279H-&~Nv!WMG1mFSk zk{4M0=IG0oag40Y`A2F^u0>|Ua8Mi#ulo-DcmvdPAzt{MZqL-=r~?G=!`fpcF%ln+ zjoL-+J5cPUH;eh4&?omg$%^iUQfK#Djzi5>2j{hpyl``(_XyyL)F(2y0$tF^4NHF7 zz&P1a@|(Wq(6i(V?!kPH=eLFO3aU;6x2>4j`9_-8l|8P{x;u~?=+DS}(C?9YP}MP! zCva+3WbsYAEWYT^@UFvlayz^}jnXg#wwRi z%^&%^8pz8oA-hwmoyI56@?r3#hH>V$uD?S$e1uaQWN}O}8!VBsVIUyG)Ygzo3#VYV zj_Puz-4`(wZ5>*fthlWAg)R!Ps5YrAS!}tm41SW=OOsYy_tv;At-8@em@cEnv^$+5 z?>k5Wyk$M$ z?A(Uu>uq{%E0m;uB_n~EOkg2be{8GpoUAwu{rvGYnaOcCscUJy)o5MNgvVOpPgSuieX%=8l;&pkw)L{5;1CzWR{0p5q0DxzDo0<&Zw6_e(qKW*Q&>P(Ez zH(;1y&!-gU{W_p;(_|EW*6=pKuuB?q9zU=>M6#|feXx*`lA{p|M`-bMB#Zp6dWr`4 zvbH+%Hiu}<3{06y%Jh|!>uR%W!1=|Yt4q_W?9h59c`=3f^-;uVJt1jvWhG6YNmV)> z!)qxmg+qmd8G%2BF>hA;9B|Yg(ltA${)^I5M;bR_JJVYFHe^k54R^j;Sk`kgBb~(K zCKRG#q=M7BA3cN9`n1`4qsqk7<&w)TN=xV5XW4z@A=@G0c;iB(*<;XJ*Rh0c^Pjb= z+q4d^OEdjO!5*)-+Yt8nBRqC;>z+HYXwfT=#YD>v3pgqndS_O3v9#1pe;Cni5_Wxl z!D6O+?L;#M4Hf$(wNx_c*1R*wp;1bOdXlD4)-%|0o87IWP%oKH;)kU+h7*`puS*T; zfePcwAw7I=S}$K_%$Kw1&DT|a?kT-Q%~MKKu7)vwZNS%${~@8+`Ib=73F^@#e$Ni- zziI9NRzmUL$%u^kH>&-AlUcx%&s2YfbmM{uF#U&x*d!f)Mw=3t2omlFUIT%|4=&Ko z&EQUQNuHq2i1FRN-PGG3*N4qLC~p$d!6=1TvJ8D@nYASQ(j;ldRFwVmW9f{kGV%Jo z`m_2HNR;YoAoet&)?8Jn7cloX`(a|Y&Icw|0-Nx|jkZa!$4y^7oYUjt`|$MEhxi&@ z1@9K}h;*6p`bWW*kdCC)7bTY|+9yW@d6`9bqR?pkam(Q!l+ye&e;=`D zigd(y{2_J{L*MxwZUF-aE97SQKhi6L*BAg%Q*h8ga}dp0WtPbXezVe2ki6(ZPC&qK zm&fSEu1B(?m4jik>Mo%(A)=_)65%AiWN*aK_uzVdyao)8npQLSNwn^EWOZfcUE~1C?`KUKqGWC2WME?;YU}VH3`inj^S$Y6V_+p~Yy97EU}gMa z^13)uP&ZS5?j=LLIq`S;r9t0DvZs}d6{Xmm)lOb=n(q}C?O$}Dl|gT%*8Nj=_xsNZ zBeiUUv!g`{2EqCs(~2p>Ly7sZ3tlO&$Of`$%_S3;yKCdsSd)TSn&d&uG-|^KA9Ch;s=;}i*&-uZ@(2ds(3kg%q+h$EuI?XIsdJe`3k&5$Kg{d8B9Y5 z<`LWc^;Ub3!>K{mxx6|rCz$c8dD>LWz&ep{JiZW{DT4(_Q%A0_%(9R(=ZXyR6rcb{G)TUDS>w#J+D2vaM7Z2`w27&yd2M;o z^&G3XG@4y@;SO)OboUX%@-b`K=dfYNK8=_T?Q27%_%jFx03o4BLjWP27bXajFZO2u zZISjTVbJ`FGw!_MQMC1u+dIeN1OylTu`Fzn&Bl$iOVH@q3t<2P5GVAciI3>XB!Ap# zT!$Y0#AfOldvzu8A$q_(-H*B&Q6AaiMfo`BE~p`8;ZmuTzrUc@)3;R`C>9I>KS}NU zeXho9NH2O7L?ifDo=J<}AN*hvCKhMBHu5m$wgw4IJcGN-LogvM33Go&2oX=+Ku~Na zslo$Xee0*Rzr}kMBPIm_Tzxjj!T&1DR$cG`qI?g-y1y|u$Nyci|JQb#IZmlSUI8h{ zROgbz(c`>vtM0Px8~RLDWqj)$tUn_>E+7vycXx0rSH14`r$CXhapiXydJ5q{@gUN` z40FkQ^bJE}@~}j0*%|$@%t0b=8F7q4YlH2vz#Q0#>}Mj1$Eq)6f^BwWN9Ph*tzcnP9TornSqxZ_S^4`XGl z5#po{YU8iQ$;l!{Ns{YC=&s7qYh2aR%o=N}lnA+Ai6HXAS zmq62WqpOr|R+y2k4$vi^u8x4cIN~++NDW%$uHoQ4GR*FOkF6o>6Qj`6pNk6W^6Dk> zh~T(D=~tw2RIhSaEd0R}spi&QJ68i!j<izU04 zxYw{3xmU55x!17=f_R_5hr&fiT}4qvRfYY!$0@~jvUwnAi*2(Xy;rrDz1Kygj%*CV zEzhmYt;ns)t-yVV$F0O|>KU^av{$s3wAZ*7wO6^9wZ~Ja<|U=(EGFfyBx$L_g4Lw# zD$JVX>Z0l@2%=P%K-jGgfO%}HJ(z%{_}69Jyg^r7)9x^;5!_Rix09VPnKgg7=|%q- zQK|YJW9TsEyW=y$2-p_;{vDc_U?*Ocft!@Lq@|ei><8Eax3D6hGE}+0H@!5n@d)<9=nCX)4sT`!y~m!ThQ1K9`#M?kS<5vg(a(GGCB1HdZJF@V6o|e7k|n zNV4g;o{asnu=69vPcM?qLYavAZs|%%Z6<1tOW zF#HwFJ+fUu0&&l*l}@PoW>9YU0_=P{uC-^5{eKxTe7JD7hP-2)3BrkA1715~Y6|XX zSsNQaX+YJdhaSef^kM}T{$>AUNc-W$cAzU^0$%lg)WDlH>lW|FN+ zL$#jM<3S0bb(ITS5&dQ)i!+7e70*70FrEzN4EY0Ie7HuZHjQP@1U8vDa)%F7K213B zm17hRm$c`Aeq@AF-=rxJt5AsN%Oqz2+&Mm7P-Mz*^`@@ThTLVW2cYd2y@ShfbXEG# zP^q9(1XiA(s!!FmW7RZHYcBo?#I8E0Fd@qL=apEsT6LjXPYpny8}$wlHgi((Jnkop zIH!zg5OtL)ltGtEI1uYEWS_0{SvFSLvz2;B@LBG;l6dF+l0?JP^*Y#o>=^qKC|S3KL2d}8>L z+mnCl?$Nym4DjvckbI`$YuV%W?Js9wr;Y28e4>Am?Q%W4LT?vAeu935*||>81lcLM z4v0TPzbp40@7$q?*-P(rUvHy)3Bf=ih1T3rnL_@2k|Z4XgBD;Y9&TVD&PWve9o;s0 zth@2n*L$xE7E46RDq#<*AtKIb5z0tugT^NDO#ZGKK4}<1*d+N}PXLN1J@cGEJKzF+ z6@n;UD|C@~ZSWk5);?ep_J?9{au0*j2EAFrp37?j$yJ<@?oqr}?E*01L-`NQl`zt! z5I&4JHGa>=Kr#*kvXEVT5Qz2^>IrY3 zgZ2~w$w~7uFlVj<4R@1^h8PwCe-nxp6D~nnY?l+L)>jV4NIMwm24~`5-4jOPL$Z9~7 zt$S4HM%e*lVD^4J@%-z>?!A?DPl8GUMg;0c^km#m4wLn9pABcQpaQ%>Th z&<#dlA_|qUyGqq*#U;+P9L08+%WN^)p%Tj%!N3!W3Ge4GoEXVNW@vXa?uoklbWY~q zhSKx3ZkpUep`LmK>6nWMk<68`ExCfg?ne;J58TdC>>(_ zJ&bQA!Ph03r%NV+Higb`*PN~48Ulr6tJ5IAJ`i;-&-k|kSY1UCMA>7@R8vbniI`tb zq8D0kL*9x-9Jb$VGf1;bLC$8)iQwxFmCG*LLU!Kt@Vd!4aSQqKSV~8(WrO=z@G4#p72s(XPUF zcu%?6lfngEHNQhgq z_L_43!_inUxEo)aP7{vcg5s5yfPYkjy#}YMlrKZ+^V7rSj+Zz0pX_!}!M9pO-5ZgM zZQ4Roi4775g2S?wlLHu&h0hXrw8<7wPpP#a)Fo7=7QfY?rd(-&?m^^vMtH8OvW9er zGoKvM?t4KLldkzUwc|@=$zmE}YRez;3X49Z+)P}SYojYmip415Xh~IrgD|F-ngh3g zHO^f9vM&l7AI*buPP6evn;SG{?-RceTMI49-It;JZfl3Vs^mU2`AkUNxx!Y?I@aL? zCF`0rVY+48qdW?83%wrQ2-{<=6AYAHPn|+E(;JPM zs?JrAMGK>lMcNitOnSNT7Y zylH8a%68gX@#n?==@26cyIVUO4<0+0ab&-y5H3CeupD9uMrKhphI`v)A8dP6MmwZIj`34uj7v)C-T}G-RQ7ip=N8 zpgH-*p@aiz+e4UXFV~(7MXDeE$Wr_}{)vVNQetQXN(>OGkcM^X3Y`zs^3x?-kE}K$ z8d+eC8!^rh9|CoUItf9%248X?moy+cG@Sk&>m6Z~CiUQ-PpDx`>$7jwFCRJkm?GIFZF3JgJ1_YD8v6 z$6mf?W#3lJVO476Nb7CI zsQV*WcRPODq%j&>t;C7TQ^u$!H@`INpYD&IJd2IC4daTN;+UQuAco*Jx8>o z@SS$mE;oi9Zxm5?NCZ(|As^|jh3*kL%AD36-j*gH)?!gZ-bwY2F6&Yd}$I2iX&5fT%qw zmxx(K_{nr@9*I-tNtB!%1p^~>Hx62=vi_}#+nrVp%qB?d{n;rCOa&!H9c9gu^F5qS zNza<5GG?27*HN>sike}TWE&HS-#B!OzX6Ijj2dH>KdvkX%>s`c9nj-+$NJn ziUBrEx6lm_9~O*nKk3f~V4Y&lxl1PUqW47p#AeNknEb@vOr{#D2lx_o?PugmCBCud z3W1)IaX(q{JNbRMgS|1fGJwPubpDN_B9&_vW;;VU&$& zD#EsbKliB-mb8+(*yv-LhP1Dm@aj0qw!55cbc02p zaTNQ#Pw8u>J^aG+^SsfJ?D;4Z<`jP}M`jhh!{W%+m&rC3$~H{jkpY{=;Eus$8OQ!L zD^(M(vckW0O)>JHM}3!OJG%Y{7yDL8qf!t~km3=AXE++A{+(5r4!(Y~j0Ns$C$8rO zk5G>;a_R-lT6>%~*&E}Et3!U!$L*qz4BO+jud9KXq;vjS6b=_Ad(DUdI6_sXW9RiB zH7K_vx(-oWT~jDq`QZ$Y;Q4F6$;l3)`vNm+kYY-yRdvJ0CI=_)dtiqHcq?3nXYOht2U*yVBO!8}%TS^am7$aYkS)?)Pm`g%wMem8$y*%B zg2aJZ@fitG)t~_Mk4BE@zg2_%pepD|(oL!yqzEyrR`o2VxEw@lsWFLS){(H%7JGkZ zW|Q0+l=C5m8~j+DtbcPYQ~X*c6(zi;;aZQ#?C zMYm2HFgJ|lavYKMpyu^% zX!NKvY?b}5oH3TdTbVVG3OPko@)S%3R0HofH!yN4J#y>^#@EUsB=^t8WbrVq|Q?v=EiR|=i zMeAr&UlD?+V#c>~4lZVU+6v*R-MO^jn4dhDqPs-IwtQ7H5gcE9WSC#{s9(Mr--Dnu zUhj6UtN@+1_S>2W?Rcrj)@Z_^)uJIH>CbLMiJ;QQz(Bv!*m0^Lh1r%4>*rJIJq74C zCc)7uF(=*19+kMAvoEUBTt!8t6Oeald>;dp?pmI1M>JnMnDLgR!;W5!Zl?iRH$3n)o*hc3$6h{YRVrT@wxB@41?dglJ7i>%-T5jirSk&YC_ zv>GNSXBehD`{epH;O$XbOqrL3>U>b5-b2Ni$&>kMVxTuDl&wJ1zwA4 zqbYJ(pD)aUHU6D@RLOkj8StiRRv@{$6pN!RWXBJ!;a2K&o0dT>|7;Td&(|6ac_wZpNA_kW=ZvV7%~1>ew&9QOaupw-FU%0$G?$>F~U z8~*E{wJ6EN=o=&i=dg_0D+7;M)raJ<`zQe;O?y;HMas!z&-BsVNBfNX%lmKePvp@C zu0|<@W>Q@BS6p0o|1MtJefi#CR(dYs99PV1sD&c4R3?DU9v7uR7SBbaoZe43a|C0v z5@MMW4_B3W8M$=bhkxZq1R+e!j_N$o#_VIY7SWD|mj(x1X73pGq4IwW2K|V9up3<=^m&ew< zg>=L9p81AL2+`^qjn~TPBRoLx=(@*#=;b#n58B$3!6BTv7TQ;Rew)N{}K0B1uLV*NdJ|t_^6haR^ZD zy^XUf9F?(wW{upvh9=`ft7GHRKNjp=D0#qGh{-Pkb0)SW66g?R>9(JxdRSQ&w9Y{x z;kK4edHXUBFS{~+g1h^dKl zarTlU`=Xc$kiwVn)p6w}?HF<^E4gQc`c>aX9`gdy&^OZ-T*2ZiyC z&58(ACAknbs^72_o;Yd~@KL{F2l@@_K9v;x)mjN4gLiP}HsSFV9+1;Y7x4|c#*Sd} zTmON^!{;y&4&A^Q=LZ)Ct3Su`-fz>Rq{+t`T+jI0cEOUULohQUuh3M&OB)h9t`dD{ znH%HMGS{X6Uk^^WD~(s9r|E3!Lp&XT95t!zQ7EK~ zz?kWw*QmhO%f^Ah*WZczmV2qeq&(U9`$Ls@L2lkS}bIpz?4!qHqDbq5USByYp zmF!A{i7;`PU{$kO1AP_6r|Ir>T_Ca3kNxZipQMM`FI2PQuiNUyuoaVT2o>w(kcO61&KRWW>f5;P)4D9|Jc;-jQdq)bgT{>3EevnT?V zDAr~%xx`_zP9pq?mk|x=2BjpGB^Cvrg0*rdBwVp^K1WA|Ci-p$=F(MXx#dSJ8i{ z5`*nfspt~Fp9eYx?6K9N@Y}TDm)Bs(laG!sNHAHR32(3*IkOziLzRg$rKwGjXiWJ=`X)*o7x5Il*`qUE-Y_nKygK z%a<#n40mg_@Z!%!42v{^zqbdeD*&lm36;rxK|Tdq`H72@EDFjiyC-aWh&22zIhI;hUdsmPL_mrK( z&4){6kA3oK?13z--1ts550Sl>D=XO1g`Ql=^m)Ymz$A<~znF+FLDDAq-g}8$u{O!Qa zx~l<+5oOf!WJI}F&VS+lBs6D51T^PW>BrCZiVtnF!hU)VSq>-4?ML^eE!(i+h%H4eAbkWGByj#%$}8$=bjUuvHz;w!NzNNrXep2&^iTqwj}QaU>$$4-5jrBP z8!YK_3^CTA0uuF#hB2pwZGZbYOcgHd4~^xWI>5=D4qYD|w6yJsXFR!T*mD~9YtGwm z6lM^uiK($O44pf$TIcN441P8^Yvf==6b@e(GgSvw=_OxtP@?>KRA$GRbDJSW`VF+k z6nXeP^Z9@{mN{3qkO!ed?^|kd1L>PK)^(4iez39!trK}wmB7H&LJ(OSf;Ww8J&NU5 z)w$ANVhK;by_u|U9WHgG&4lZCEyK~6IMK%lJ50M_YXEV-{8bksL-K0t`GF!^ja{qy z3Zq%5WjOdCnfJ(ncOl3ndj;j3=*IY0N4MWm10K2l8h_SyKQIbw{?cEA zLT@xoUYeVHDZobMEe`iNm(p{7VAAa#GE8sIpx<~(azkZFps{?k!d2dosLc-Wmy7%j z?q)u{_j(i3L(T`fXihxskl?(<%D<^P6bW;De!5yJubv6nIh|G|#wAD}ilHOPW1A`=iagA88dmBy1|(Ux%7jjIFy~mpu!HD{JZUGLId@Dd-nL zb^4Kh{-CPuOjb9bg;}IQL&vBvI%qh%aO2&?V5u)N$Q>3IL6Qfi|&o z#yL2mnRx5adFwFE5jC;Oc-))ddE6ldMoP{oar}xaK9VJ4HUzNGcr97=O*Hte_LtNC z@=~xcRX6*7{lvsG#KwAVTtE_Cj%*%LJrDzS{i3%|uzXjFXKXQ{oH6J6Gr( z#o9aQ2g{6i#&}}7zbnoX{)}@uaWkKNC)$m~E@j|tD4HQn1PS!X?IIWqc`aOD77X=Y z%1jj8Yz(7J0qlmm>-Vm$Cl^Fa0ojQL4>+3$--%c*2qA?}3 z?A|V$wcIp!v1{m`s>uVpTcXScj4U<{XySoJ@x0JzUphspzWPz44;x~&-b4T8GOQQ zL>A(!%~*`8Xj(OG$O=x1^v%&`eIZUouGse{zl1TH<#XF*eq@BU>m=W&CjH%+?Ocxai!q0q&l z=*+5Qx&Pz!1f5$FE$+yq92VU#OF3gGH=22Kh#^e9m^pG8pILOspU|yd7Zr3NkcM=t43E`XpB0F(YTHm0rEG+<7a zsmJ}_tdg9u`lnqd;9jC+uH}VGk?<*=Y-MqgJ&%6%;z^~FfW}$IWo=Zl>yW^H*}C;{ zvO8{qss{Uqa^Ioi1~yB}rBk||Ys;+Dp8KhTw=u-pq3DOej`^_M^6}i6r_A`*FS2Yp zNjZwU$$@GJQdi2X_65QR*>-E38K2fI8^mJko#esa5Q>h6>T^RpwD4^LL-)zhC7Jim ziyTQ=3>4(|OOBrCUALi(Uqug`kBzSB+YsYz)ASOs$tKs+w;QNj62`=TC=QVGede({ zubbLTixKwns{5Jc&+t%3BxiMCtP!8CIOyvy0_u=(W+iATOG+eC3m+kPjEy(_VDMAd zq1F$I=~pcUS+(pfyaZkR%w=vxxC+Mg69#gnCzfU%)D~LG(jy=1`#cCz7;+)408=lG z9m()4v4MGy`%abaK_^Vi8ltg-=ZQz&MHOw+>#giq)7;I8vZis_CDXvZH@HVw3p+El zj(f-MT}r_u4aZ5{%K(?W`PM0;m)h|fG!p_n6mH(M(+tx;Kig=6-ddO{)#|zzUYBX= zIfjYU0P9WIkSCX4a`-@A$5m25O2r0V1FX9!J?`S7;a^aMC%=0mD!lH?bl%5-o{5>- zQ9|sSR3%BHVfvQ|8-f}xh5GuI%>%tOjb=?FwZmHV-<2{2O>~IHgxoYD3+ff)W0iWP^DSCFzn1I9x zPTW(t&U}b=6Lb+gOFW#pIKx)%1epj{0zZCw93BzNu$zE{`@=#(qa$HpAVJSSv1k4) zg!=I|7x!_Jzn{jRZx~e1j*B$4tNm-gmm`)zB38L7$jk=0)>*995@2ei1FMnX}pjb3BX1`|H=3+8uRo#%Y24;vFpOGtHD~2BX-&O_o+F! z>BaZ035kv37jI#}dl&FYOf~_kL@Eo8b@0niUDH~=2tZaV z_ijy<`m4B(*Q%@_$YVQTqAehNd34c{syV$@ZvVg*2fJXZ+<7&bq%DF)a;V}*q!nNo zSIRq_U(S;LN2J&=03$6O-ablAB1xkjiUD^7)yl}52pJ)ofn2Z|%8^*x(zhxg>7p?` zlHxM}uk+B3CwdkBG2F`$3{u=VTVw&vqu^758N|;8+?!5dig*ZIwaVjH4`NUvye>`N z50rjJFFQ}CaHJp+9puh6*gw~{3Wv1%M2QUYx1z@D5%fP6W5bvK3?c+%)35n9Lb zW79Cm({qu6ZIrH{X_6;e3Zp10V>UHy_b&m?`4lbYFoFFwQ_k69b(%K$A{Q?WYE$6u z3Iz(7Dzd_AaP`2AQ#<-DtId;>Ct_`rD|DoCZ@i27Bir9PPE(8y21_*M4SlW71WX1=SzXFUNkE7c#nWXe{*Zm8f_yQLm;mG<|8k5b&j$ zcox?+8p`K2(XA~uM!?RYiB}&U##E{u7a|MZUY!LywucQdwSOg;cUa=6LhgT@&5Qk( zTpm>K>(!Z&-7km(QEJO9AQg;U)huLX`v}1{jvE)SeZpB^GtiQj3eDuxG?k(`U0GFt z3&KTrHZ$kJ%7=pi)`%}@na^x#znaJr0xBAx3Aosj@bB50vZtEoW==4lDCT+$^JxhC z6@%*{AsSi2(5;4qtcHm%MvN{d_o-%3wWkuahvzqj>eK6wE6vW4^Zj^L%Ls%<-NEh2 zcs~4FrV|$K|9W1a&TAoTrFrtiL89u(sI6;OX-)ot!oFly@kP=IQz}hWxt~$GNfLes zFIWnC`^dC9c<>wlj8Aa>A|u~iKMqV+w39(t+j(<(fW`3|S=fu5$Tb;-Qm8lC#wzeME{=E6|xBvb`N6?$k zur=G!3imp8t=(Ff5iHMQ=__IBD>#%l{z?9Vx2_?>q;E1tOmk1k=AJnG#d9cdNr^jT z^t;IC54fd*Zx!By?9zc8`@6KQ58-rm5BlWscF=S*ruw36!4}UiqsI3rMrVQ*x`d_WmwD9VI5!5XWfm-Y4Va4 z$b_e4Jjfn62Vt=eN*1Puj9F2p^X-`X&CQ)jQ6*K`G7ZTRgKn%RyOd{Yo6L-r()vH= zgA5&z0Zo$-^*0zmV1fxNRncXlucs@WN;`D3$4}gheVJcq>x7+uWbh^~zg<`i@0hfd zZ8j7s>Qzbu)_3uVCa`|K6IgEG(2uae-}+ZL16JLrwY2n#IGdM(wXc?@Ofxj3%Lf$3 zn>;TlqYC=k|sr+k?>U6n$Sy3a8Mqri- zE-4Debn?=%c+of`CBY-5)i|ZAx}UYrbxQVkic6bQX-cuFYu8=X^B6IoQ%ZLl0y(9Q z5%+ahg&5(APmm*_=acBQH;zq+&y&r9bF8b2o>y9`mpaio;|PS3Vh>|}i*1UaBrRc7 z-q#XU^~nc}Yxq&G*T+JlFOL3WUgbJF)F8Vh~1Rs9G0?raw@Q1QzUB)|! zb2@X68G)S~2tQ;eK+Vk~XUn6hUaH;}=2N)8M3tZos&qHIX;zXb7bUohep?QfgSxA} z6seS&a}VDsORbp=*E+@ez4t~`5E!L=Xbh~aM7DT)`%?CeBkMw+r2KZfy80+DTWblr z-=3J+#zxjti;1$EeotS=TTWa8{~@ zx+l?>?#C3Sw?zLj+wJ(e1s2RD-K*e96Sjo`A0m@SHhiEZ2Y-qOHDns-7q$eSAwj|7 z0hWa^jRs!(7<-f%H>e3nficRwNnMmhJq#*ea@55!TkS{(GJ9a^*m{T1pDMV0ovnJ# z1NR(6D8|^XCiVWv{B+NjK&ZYDuY*C(@E<=3GS9asp51we*%3yZ4%rJf0o)gNQ0sUI z0?#Yk%M>d{b^|d<3?Oy(?H@41^}E+$A8(W)px7dGkd9aigOqgSkG}t7wd_B0;%RXF ztB`MRj&j8RjYGVZt*I@&^!H22$iT+tzkBndMK=lv|3nhTZ|k3f%#QP>dTsd*mg6${ z;flsD*TXn^w(@i}j5#C4a#{fQn&2^p0Ru6h&wvI;J{j4-G?t2miE5}Q9cIo*3>?f% z#e_9fpb0anB~l$sSI5LPRI&=Qt~EN;N$D)i^0wdcIdM3+v$xwjWTs@lbIJ}(&>`WG z#n68BIy_x##!b;WZg-q}JMa@rAs5Q__Pn{r=@5yEFOzp5hRm-VaI(Y$-07@{gy6C+ z1i1@|+_vx(xY5X%Gs6Zw(SFP1b6hro(yY2QucZ&K52!tmAjXi*tQD3zs*_mY8@{i} znrcZC=PeGRq~#$0S__2=ypGHsCr?)cJ{VNVDztB9Gwhr}I1IRhPgD_6!=$Z`KrYCk zSM2LK`(z8Cy-D~pbNOg?-RMzb0 zcUAGy<%lP+ff{-9DQ%}z4z)*ZCwU2LjgB$Bbg5pE+|CLHzTu~?EP!?h3*zB`{QiZ% z`lO6A>m$Jq74rB0q3oTaD~qCa-PlRRwrx~YF;;9;RKbdE+qP}nwr$&Hg_Ydwz0W=O zp8aszIkU}&)!KR*ZH_kQKYH)~|6#<}=Cvk4pYWjEzHt`WCpn0{DD+F**7*`x?N4x= z{h4hAeBH~1#Fh9?jSj6I+g+NG3MEjWljE4>R^OgokXbJ#``wATCgzctII2xn)<4fpEK?`ZS;IOZkDofSE>h?0e_n|FL5gWFXhB+d-A=D6wF6n0x=o&Ar4L%ZRL3YplMH0mC< zvC{#gVlY5n#wdF+ct3)1ur*B)4A`LQ;oc81@L|&2`%@!>Z7sAc*yqU$5UGKr~5<~y=!ip*6sJ0pp?V0KLgz+ ze-xw~*gb9g3k%@<5=TcbHhCMnPq-p0=|vOA4I#!tnK5{45UrE`A>>{l$po(vN?fjk z54E%_1oE%vh;eD?5MtEhGSut0-RLh0v1c>Dq9I)!BTY}Qy!Rkgy{24SpEg?VA914w zI3ixsH(Z%z)<~zr`p?+YSN&CHRE=}-5MUe?vPYPmsvDzqnSFAa#bS5)m<6KE=M7iQ zQpsx%(I%+F0L!!~otfo;afgx%zVH;h@&fj#y;|VR=oY0uMTM~IfwIA4)FYqt<~&Fc zTXvD;#C}>_QcJu_D&-3`jpyWA8ku2qebv#_V_j7e!y`i@K^8&bqJ(A(eQi}!)%5Bb zLE-xHsv6Sja=o)N#+vsy7SRAL>DLWiQpXdJ;LFR=_9;lrn|4u)3@2O(y5W{)JiB;) zm%;#VvhSD<*R}SnL~5kNZKrwsw^>8goAWh4WAmig65X=0;kp_C{5X6M9t;hm-Z_n|1hQ2afBklxpjncgRzi2h`kwPoVH0uDi=V z10vnO34NgTKNI+-^Rpe&M%`o%JTdJ-dD|p0upDSoY->K9?b6(}qhsh?ljz(cDqd18 zUZO8vf-YVo@W`X_DEu-8_c3vLtKuiDl*X=<2C`U#JB;95CP=U2jyCD=+Vq@f=}i`B zvF0dOW*J-NXr>$iSY0xZ;wTlB=xPm6%305~$xf-n{CgL;ObnGK;QkaY^>MP;ixbw* za2~1fMhnkG_4}a_1*bN_(&h#R;s#l9sdp`M)67zzg*hy7yAczk2fF)3Iayq7Tb-nc{Q{L3vY>v(%d@XpX!kb$j}tlcoKc#Z0=+2=lNma+*x|1cpAj& zLH8XcMO@kGagn+DrTT_7X;HFl8gw|4#i>z3Y#@ZX_9p;SVK-Paq8o5Z;2(pA18>Zx zm3Zddf2n7Tr@w)6S#`-1&meh2TnWIegB;NbEc)5#^A52Dv^!kg^@ULl!d0^2cNZ`h zhmpv?)O)m9@#1LP;xGwH=PL<=w?GDShrt`N=`lSO%Y%D>(|;XbN>t-^mt6BwELCK- zfhuTd6)4@v;<;Hd`>L$HyEzO`!#sge55i5`IC1w*jv0QlWNqgsvt+Y5-)PD{-SF3~ zs}?_RQ{8HI3(DGg*J=ae-1IWEM%lg!w2`r z2yPqOVr{V-*&O0`Ao?-+`a-<{Q zVjB*=^IU6ROt!OA8X(6LGQgx?a{>OpN<}4xB7T@}hyw@G|A|yoPM{PM4y1{r*npyS{hEh3+HxrL1r4GLZQL zVLtNsY$_w}^Ygi-2ZYa8&vG-!3-j-H=$aqlW>^3w(wZx3h=(nNgq7nywm`I2EPrXf zF-h&-F31mBJkH=3l;5QrtqAM=wNZ4;^#~~Yz*C9-m_^~?0r>`5>jK|8h4s@RSnte6 zJF<@K^I){wkh$HS-d{z{b7wW0yhbXIjR7r8Xu zjgJ^3RQC><>IB;dw=`AJ_58uQ=s;G3yCa7?svA`{X7#?T&hrA^Gf`kQmWMNFiy;Peh*yTg7 zIYu%IGA~w()5U&B_!$k?<$eduY^>UrtnxCbnxG&o2u7r&wes-a)p!A5KiVH)3n&I* zb@4eRTMF&y6MQEmc4=MO)mld{iz~Uu3NK-o>e8nO=ttoE=!P#mm9r-nv@iLd@&h{T zVtVg`PB#0bUDx{QkaUMEI)^WiwtF+co~LrQZa@Ff5Aa_9pzr*iS7)d-_TKr8Th!JP zl#>`CbL5?iS}eY2|rb)OyZeCOBO6_EtP>mx}{uZ?+m7Z(&m;OQ?<;2Ata;OWOi z1FGzB_y^0G_XSQ*>t(pF4Nw=g4cVps!+PW2$6)Hyi?!72{_pXpG0&A#g4^?dWQ_zZtjZ4Et_TJq;b2+s&TkzpcZ$4j!In2^c}8A7 zgrRQ;~BmoT>E1EN&URTydAnXK%lHi0rX^dTV!v5}1_0w%lbL)zP#Th9r$NoiraS zl#BCv1HcGi|H-Is3p!~mA>^#3EyBurTpLU)Lb<$G{>6dBmJ#;xt%2Yc!gO`S)sinG z$2PG@_COsuJBBmYrgs(T7W{#DX}QI`4n)4C;qV=#QhT|cA zfhjnV0`W2}QQWORqWiolBgCX{>;DGJlrWy>TRl@ZCvXmDp9!tdPIGFSpk-uWcW78$ z$mW-XDo+`H4tLrf)KjOWq$OpE9%8DD{ZWw1!4NLK6i;&m#2D)we^gL?>O9XD zw$K+T$Kx6M~w#FRo)XzN&s{gXdOtNXoy59DBc>;k7EDA48kfy55WqJxlar zD&v_DPvaV9I-n58I;Jgxqe2ng#!Cm_P}K?SROSrjc#m7-(OMNBbEs4Yk%r`gSIc6N z+E&k2(=@Cqe>o=$IPr#5?so3_NAMoowM6>P*LwlBKHZ=x|6YaDG#<9+Y?T8$?KzD@8@(l|~&7oFyS&US_M zGAEV`V5>!=HvI1N?2*>_^>PU5Yc^RNCoYfLW%igS;OEDVjxcUa9fckYWQ*@L1v5mr z;|R72bwZf)>offR$3)SPddF~ey}Pn0w@u>3A3&$-fuEEy(rPj4)>;}$F<_XwZfIe! z=}=!?p5?5qgQv&Y#!#QkZOzlp=DmAMA#b`&h--6DZo4U6fx{Z_64B?BqJCXy?#~>lX1hK#Ms+c2e+ccVESl$9 zF>@&bPRERh$_kcJp9B-lOty8gMHD6D1Q2-H&(Ol8w z$YnHaralNt94H6l_?I$N8N*@-)lxq`XwxGhmy#15%*?4Eh30a#GYvnR7 zhnUS3q>p0v5^QmMABDq-YR9=X{LnnD_mbL?*)a6^*c|NCNhTP$Kbh{7>LG;wTTsYC zI8Amwb}&ba$q>*Aeo`PZ#q1C^xxZ*xE|=v;S%}t9E`uex%Y_(H1KsX9!wGvQ&Hhsr=E|}XA0%pu{SKK1r4C&jqUDSqYgSk$&+m>JoV^_dC%67bAra;q zyo+f1W3NHM6Bft6$6xq9!3RDLHc5PTuO;jB{{4F9e^pA!^}on4VL?DpzDXAUTe8l7 zZfX@XYd0xJa;m!Fr_JG^sgJ z2|O_Ui5P5u%H}`gJGEf zv7pRNx{;rtJ>TT@b?=gy2ttH zQd~p5_8Z&8mGxR# zY+O&{&APl)SM9dOS*la~z3ed-9B7JjjXVc)LvQQ#>L3u;f~T#)Eky3B1f#I1kH2eoCy>N0`da!uYLIM8@E{AmNpX>IS7ALXFS#9D35DElVXsa_ zlR&}+`MvC_82w3P{-p$Sb)Lmg3qO*OE$OH-*fj^`H!nDuM?(7hAn&Lbl(8Um(PX$ zsJIC%CM%E^gc^Y7bqdqReUV=G{rWE!d+*baGoad1{;y)1*?G{I(%u5Y0BOO2Ae>rlP%Lfaxk64c3@Oi;JjxH^J2LP6Yi{+; z)K*`HL@8q14H&VfjJLAE8CU6jtPfh-hx0`Hh^UPIz+LaPbk zT-tKv$T44FbFAE8+-PgaX%=v34pq7STAw{wXxBIHyW%K z4`EIiJ`9gWJ~g*7%C^jy{}p<*Ks%Nup^a>6kbwgv6F{B8IOr-22ThwTG%Q`RTl=zq zIZzFLxM_0?*0W}~2sPinqogZgdy>^kjjb=pqqxy;;Iz*FtBd#E#m=a?HsP7fAg~cP zOaB_?F%T|K7O<9>QPE}NB&GR}LjsJ8#WRrAg{PvTr-?d8d&s{VW;-;j%~!{@7$sPxT|P2H#&SC{#j|w)ZB2IB{ULQ3-l~Z z@;jVlrm>%`&S?!im#f40Q~DN`1%IA^V52nVQuwR&GNYqPI=P}mTa0e&s$fD9;5wO( z_g~r?>jS{atNci@{mij#(ZqoJWpZ#FrUw(RjoklO*93yHCi8jSC%GHJFJH-j@eT6x2(I0rD+i9Y)yS6RsbG z9$X*d+K>6wp}%rYV<5jya-h6Ub)eWzm`vs%T)cJIAqplchNCgX5}p)SWy;^HJV5j~ zI4(qT(JbPZf!+-Xr|q**^MpRrVUg`Rd?FTX^4E<-NY^QRG8Q~d&u;BV*B>`e$yd=3 zev+2WeG(S(g)MoCAO+bE6?+)fIr*YMg)nbgj&FF>CF4CYXGoW8bb~Rq;y~(`xTD@q zP<-E*)DklWCnK9N(QS`gkSw7TFDgPnXCimnKiS!fo_Bb6K#s~9Uyc3M6J)~$+!000 zqpKT{S4fC$%2&b7kX!tV;BXStL5hpZZCPuLg3uh>;IFpa5i43}TLDrMVs#p7Ec_aK z0*CF)j_Eg;hM#~{VEM2nzehRH;JFylPo;;jOksD-QKCa?aFIwTJU9kf3S^Z0+)xk=4@^EpEKBSF#)ig0My zPtX|v1sE}oe`VKiVXt1o|9Z+|dFNFy&&dwX>lDr^Cl;qri})zUf#!3Ai(x^9fg+#` zVABS(Ny+?a)ELIDORF;wI2cl-3^kO&FiE3iO=IkwMCD3jAY_r?19rPcLGJTohX2qc z?fz5t5(nJJQVZ{Ckm@%t)1VsAWQwR4qO4P-Y|u@h=*l%hwM@RKZlGIH4oU!N2{+W+pJ)O_VUIW);k*>Mp16ixpK zaHJShpk!4=)uhF#p`8G#hS8N{s;hccmtktF6SU>I+bKUCMdJ?Za3p(}gFY`Q5tc6T zsaUvHa^8tv9hLD6vpL15EK%qx;&fJbcIH{%7Q2sXouk~8j&zpj9(z5(5zRqqhzHVF z6<9ltlv2@2{~$(IVq{2g&VQ{8m>c|ND^ zptc2cdz-_@D^-8s^oxF5Ajo@&X`B#5Kme0dJoeG(lbP({j@6z-cfI8Pc7u|ren3Zr zeo^V)t+g_zmyu1Xh^h<5St@;?dy{5_`_a9P9i3yeDkEr(;ylWlni=2vgwFOf04CLu zF(Y96Vq-CA;sh%P(%y$$j=dNHD(0d=U(m^NQ2I_*UrCL`hN0Aq=ta%~1(^|I5xxZe zSBU>`MZR=ac`#(82s5sd>S^_2P^=(bf3>_5o|6gYdUu=^wxe&78&f25QOxu2P z!Y+;ljWr3%J>=lK*6Cht^mjKi$5!2ftY)I3{lll@&9@&5nC=XPAW?wjM!$}YjsP3X zAdZb;Cc{!)hmAZ$bqf#XpZggTyXR{ZR!eNa)>mjSZmZGObI$)t6I{TtEY4B|Na)Uq zgPt>v^fri@`(hy}9E1!>t34#AA4}~FJhBj$GzO9f8maMV7-uI{JEXf|%3vO8vuZYL z>Ms??a}2c?XCl^F(l&E2Iv*-^q}yD={wG#hi z&Mz|%$)5r0V1-L3&0OsP9G_>hWnk=?1#K&rk1EZyWAL(8=?z!jxzH zC;arHm1Nl(HhOsYmX5Wsd3J!e;z-|rFtR|Bfcm@?;G3S%>bLzxc#f&*HZl@jSX#AI zX_JUyj;&ir>A=2`J?UE5w0NkSI+9&@BNVk5TO#c5pmrg+Vr8&)S|KWCg5ZO>rn}gT zH3L#f=*A#M8ADeapbX2>a?bH4FFBvyD;Gh=JFHz zrQF}?6d4v|#iAG5v|d%@@aRwJw9t)bNk`>z|J$yaU5mzEDF<58Xg6YHB%^&8RCKDS zWZK&CYe|YJ{`w_`Bsex0M6Woe(HSzMHw~pU4EJy}HuxAm!f9KEtM~O0DCOkAMnel@ zeRR%D|Ds%s4sJQx4jq3HrTQSoY);3N=Rxr8@sZ?=eCG5ay z+yMYF>U2GrWKW~O>$+d9$GokLexmxyenSPlSKW2PvPNoHl>4cp#bS`w*}E2$B1g*1rv<^TozF_i1!9#mImUd1sF->xRJ`>%3Gp z6`)a;d#YQFqDfY6oRoXJ6ziFF#kTjJ(i#SnVbG(G{`>ES-%8g(e0xpCs1Ou=$D|e2 z78a{K=CPcA#mwcP!j8p_*YpQj^K2|*vh$<5^bZ-3%ePZ70u$slmzd~;hsawBa{gY{ z$A_%o6$}5o{H1)aiM-&cy9;b?;XlTAnLJ(v zvVpEhGi00PRiY@>$1*@Dy?%9sU%o#c^erjLK%7z$;jgGHJ|Ur*SUUq#P@*lxYine@ zboitoFxmptv312(`oIP(TnYA$lWDEABTvcJGEL9@q?Rf*ZV`jI?vewZ)bG}B;OvBGOAFcEKl073NWB(h?cj*zN^fDGE3xDP-Vp=T6 zjRLe9pTY$uL?dv4<#io%3*Hz0w#nVH)|W^yvLTjv9|Dc#(59%_fvjqb={<#2t~V6;^n8(o+d=o#fd0A?}*dlugua`6A{)PE}6kZ zIf(v_HUui6L2r`<+Y93h3c_a!s@g0E7B9Uz6GMjibecAsXuh5`Zws3Fx>X+I=> zSFb0d|3U!f()KUg4UG2gq6^QAexGpu+PF|LZlpC=DHe@EmQezWaN|$Rc@r)R7ANhi zSC%7YVF;{|aOD43_KenG?D>v}Fx3^f9NY#lpD&j;-PTZ*9cVFoSO^=xQ&t8JCXilEcrjK1d_=~6rGLd>KhZ-aD8opL!iLrO9`9HpB=0o*}MEkSYj!QBsX6GXEB#qeg16e-r|b6LfY zc^qD6k^*CYP3ROt;R38Ip@WWV!SiPM!q@{jc-Qrr`UF9yWFA;x%gCAFVh#2NRmXFK zvmy#TQIsH2Uoc7$*zl;BVFUuk3}Au~icP`~;=(!UL@QLSw4c~?gnoyZEi5M-0nG3Ub+l?A zt{8Ud#_q*WbK{O8W)*X9(RiZbP-*U4hRcz&Ff;{(v7(@TtIz*1HTl}LV#j2Jk+X%V zP$mqZpR*)k$`tS};0z4h@xncMkR1^$u?n<2j$Eh z*dcaRrV8(O-R69)uq|usXEU8m{qKLmx#I`vU|&X8DD;)BDlW|?3Ijk~oPxZtFJlOn zQvHQXG=o7d;M1#`aEJ(VvzJt}XPsme?TX{h;N}>FU7{4@|4!&V^H$8Olk(VxA|NTJ zkd5m(AV|}k%jY{xicvf2lIrBaqvF8nB#s8vcGIlSefUHFU{*?Mpg-zXlf}dcIb*T; zjW<9mH*rdXn8F@uZ=N<+-qepYKQYM;7C-7Z7VH*PSZ)j?$#C^MaQ!L7LsceALkVmw z%A8i24Ou|gMOI;%O{~KIvHBB7cW|tTHYbnncn#=*xfvQpFf0ho^IbwYpial^&1(nslA4Lnmkcuj zysdwI8t?X_S*~wI|-uk!az!(sUqU3XUllBs*Xs9H9F&0KL9E`&?dlz|U=y4CKEa)RNUxf#4SZCgCUw)Jhwc`>Mvt+kXXrKX2fF>l$N(Cma5tG0W$d=Nw!lwp#m`>^JdCSy{KnFiM=N290TFN6U^+Y6F84WNF*@PY>v6`)N1)t&kn z+5g@8D@G_yjriR(IQ@?H;P~I=CtK+|nlcF~ivR$!-@jCV8UQPk{|VBIKQbT#q6g=o z$(O<-Ik~LqEMt^)d>F-h%NECtt%5xV@Kzr5v{8|>Ii<|qjJ^~8d*9Lf1QExUL@pu` z3LS=!WtT7mAm?#NX(j%pCJ;Uh)}77L60U8q(1h9IT255pF2h=E%#f$GP?SDSRA4hJ zY}~9jKFjVbLg2>P!WYLW*W`b_mRwe%Cs%*riK5q0sICcPcn;Jvd z)M*vqw=QCp3jz2sNzSD*-sY`w02#q_dgg!JnvD9359yG{-Fmls2X~645)W(QYT1dT zZnt22p=)`W!1nUlA2#U*Q;BuO&|Oum4nxm8Ky5 zxBhPCJBbRxWsHK0Nn*MsQn|q(D839Rb>ykP3%^Uh3!dvY1vUb)8`*eRV*{oU z9P={3`O{9t^k|`!SR^IYtoarL{kPrfh|Tf$);Y-5)vNy{#+C-jO5O=iaSta-7Ykn; zwUR4fk<6q-bkEPnITQ~^n+xwv>Pn3{MAw1~kC`(sj+dF;;YhPfC->7=;M=$16uAXOt`Mmn3#n8#G5U#rn!vYw#sQ{x_s@0c23>)T&FdCu{|2@+0 zMZ)XVbsfvhD`KQ3OANSXUR5%#BzZ@W`3vIuDA&+A$?gVqQ=IVaBy-rYGdG!>W+!C98)>}&ap8D2Fgbfv6WFJ6R3qjfz!q@~b3M)P z9yu$@hP+_y!#^vx@n)%)LtwgIw%X`0f0>6B^Q(7G9-QbZ@)jHHb5GKjRVR;eD#g~U zPBir|lr)5yO{-|4vzYXYnN6qEKU74s=D=roTLf_BMNk*mR`r5+_6J`%!ub(0ao0(D z`O^EwVO#hrgG5+lO|cnCrRi@kY1|+fSy_;He1s^!N+<)cE?7nm(SAp_@G#)}M9Bu7eV2?~^W#2w~Y(oOs{bmS^sUS)&{X4A{1 zZB{X!hUo_1TiT+$D>y@0XwiOpnx4xK&eQVHUuzXB;>T;I{eGG3-n(_(Yj_V1I0%}t^UkULdeYc~f46oX+3<{$eh=(247Af; zz92mihW^y!(&pkNQB_#iur$Rw(R`3xF74W`4!GvKGjyymhdiCP$kK^8U|-XLY2 zm?awTVD-2M&lh?exIKgdGNkg7&x7Ocn#hje&BaJ7nv-acv8-a=xj<;LuPsSa6FDiE=Gkqk?h_*{R zSA9e|wK=YH+r>9(I9lR4b5B}BvUAA)BJwMs=TOUA_;XzERzT?1m-PEN3D&OH&iwk% zHiy-QGZz}MA1ZktDrp`nj z)vFS5kP`Wj5^0eV<&hFek`l#|5?PZH)zdt2)I9mrJZaTD<<&e%);z`5JXzN~)jw9^ z0M`FnE#(0#Ndhay0xMYqE7e0iaYQ}&L_KLmJ>^9`Nk%=zMm`i#Ns2wiialA2J=OC)am+pWe=O{t^5&i-=bmEco~-BoSss~>8pIC-1f93D0{A}` z_3x$W_1WiNQO{G%r|O$LIJ*M7WB`Y#2#3r7hcFq3Q~`&$A&1-nhY%VEAb~?nnL~Dg zLxhb(x`9K&fkXbGNf5qCGNMUTx=CiDNtmuls-j8UqDk(eNeHhAkkKTj)g-&oB*NPy z-O(iB(Io%wBna&!8R8@=;UqKSBuwQbRpKOW;v{$CB!uMzNO2NVcamLk65(=^ZgG-u zagu+268!Nb8S^A6|0FZ>B+T?ARr4fn^CWlkBt-NC$axaedy?IG5)pWk?)j&mONdJL z{mepjj+wuz|Eo7;Ww^md3IV7Mlq?Mdw2Dd=iUJx3B`XI3o#c}FG!);Kv@IXTuzKblWJR$n<R zKbnU>R+l+imO0j@JzAta*0ecVwfXPI*!OlU;2Ue`9Ifaa>+t;Em}4y;qctBW5Lhs< z-^v7{YU$~_^>ccC4fXHK!{}H~?oeg=P@55=Es;*Knj#jjEs3`+1==l<$}JhoEs4u5 z<;QCx(`zzOn52pUYDyqEMPgzh1)1g;Ko?FaF+Q<~RJ9DCgFBy?+*m}Wa|Y0ZVoi*T z1d=MJjcH@nCni+_$+XtSbdm1qeEI;chncjA_#=L$-*Yl=enaSOrZ@!acRHDC;rwd> zq!fzyQ>*b3@z9^2*&-4HNSr;_-a3RT6Tc{un57p|mF*`I;xFVTBlm*id8?V)>V(C0 zvezLg77GruFG|vhV3X2z+0#l><2$MarW%jut=W&JubE+J+O`zuH7KuAhj5rs`IxT} zx8`oz1Qk23tO~(owrg+xCButJr3dH=SjKEl*K{$fCxO@=dhNWHR7a-nhHRW22?xc$ zZP#w#T}68oXe$;K&RsoqJ|&;)huB!A)g9=shZXi04&kherD zre)u^&7-)?V|y6^F3Beu@wrZ2vtxWnzNVz}O)5~lwT)+`){b)8jFmwg|E2x>O}mJ) zA{{hFd9mYYR{LRu;s2VYpyc##Kt>a(@m3RQ>Ca<;m-AreWcVr$jG;h3eyAjChFRQ-F@xu8YbBFryu;1zNQT zXIP#avw|{aOd4ier&{u*FmZzezia7l&bn06z6$lPkwdqt24BpmC11PbG6Vy2cq~Sf zKjwed9(zsBa1SRM%riCf{dE{C(3OF=1P)=2)iJPDHzX_T5D~>-*BU4DN72U)Q&R>P z4-k`ku+;OK%vRdm76r4Q2#|&-5wXD+1;Mq#LZ)3jh8!k-e~~kH8$b|>K^xEBPlEtJOpje<(N}^5jZh%&jf zOfdK5*jRB9-L9f@Y#LMSX@&2U)xI>xh6~iEli)8UB(?7<$Y^x*hr@U36b7yGW^fp7 zwz}QG=wV4Nz#c^RW=so|1*s0-%rqM!G+;gnj&7ILiFvAAbNsh94)alf5!gM3PjGs$ zmbrVX(9mB!eDm{zXSJg#7GPC-$^kgxkj@y3^0G%bj0K8iSxzZFlc1inJhc|2XFk)x z#J!1ng>Tkxfet(w&W7cNmUhC=I@cVW zIp_x2E`t@@Ixx>#N3Ew?;QrRZs98q}Fq!MCc@*q&C7c`fUKhkF$$>iSd=1r;^l&g` zNEv3%TY+PqzGJ<-+g&`Fc79PB6&d2lE|%N@e`DV8JZUF3A+PNvS|0J`3TG~#P@;$% zpTN+3=H>{thC;Q}V8qLhPbs{Z_y4N5>J1d-+gKO2tQL+dcxoLRb4%ou%G)n~Ve1mG zU`O-FX30U3fH^>=!Ig+c>PcjUL8_W4GN(UW$EU>#>#`6yH9LkXxDq(Y0ZO8I)J=aE zGxkLD$TREm5jb^gI1Mz8A>QwiAur03JQl3t>#~8o&S}ox$(r7c^j&JQrW6DK9(*6s zQW?*f_m+UuQ=Dw)Sr^P2Hk&20J$vGD%rSmzB}R+`e}oL0vi)`;xMYLeFyZmr6}Pai zxox2>kD2R(BO{?`|19Poy0OJX{G^$m&Qf1-*@w$MM>IT32uf8BI8uOc?l z3&Jd6UvI+XzL7b-6%3hv`3WaYu$B~Jy=_#UMhdsDCKq7EUZW$H6EF&*xs;U|3p%~` zmbiN;s^04WYRq3d&oI~Ex18`w%8Xsvjwj&>2lft)w%&UZb$7FWw)Dt9%12Fc5t``% ziN%UIlvT)p{DC89DqhRdS1mLGkpPv@LW*;NDrlDc(yu)@Uk4cNVBYV%!-LwSjK~TB z5>`P+5mp`_izYaPPWJplznNK9jggsN%TSoA-r)D#?rg zu(WMe{hTdmL$o77K>|uIN9BP{y`suM8W{<~Yxpg~xKlbPtLXc>n%^}*$U~kOUGmxZ zv9N6z#FwEl1V-Hj)JN|N!sQoDzfn+XqjHrx<(snTY@vrOG`}W<-*ACYD3kx$S~WQa zYTK`w)NISo+a^9GEDBsGEe;I0lI}KVO&a70^jK-Gus71EgwMbV7YrIe1P}_i~n*1}S z71`wme7D7|{^t0r8xdtSh_K_&+7Mxf>015>rV$;0dp5vyuWYtNn8HcXTKhIh{P+zl zXNcV4f+S+Uop$9Ih21Rhc-L-D5H~WNngNr%MZIA;|6l>kV8a|1t@Z8i_}xMOY^WHnSf#=fX|&`>5xQoJ>CO3vnNdiLj0pQDt;B~)A5=K zAsOfH2otlXkbymB8$KE9-4ss7Q^d>xIcuD_O{9E+w2=cKzWPk^}^hb#|h)< zL9`9xY6>Ng{)xA8ZevMjIu?p-f&kej*RieRYb@UlPM$z>FryGrpp5mn{h6Q|PzZSR*Q(1= z4T<>j2>p@>{Zf9^gSpEQJrhXG_|W*u+fM9;9AP0evwH&hzLEG;XMku*LygMwsGNz& zfm)0Y#BJ|**)y8%ieUldgw5xP!Iorpoc5X)aWOb6SCi6*$7DmuwR-(2`uIe=h3G~_ zzD>?<|5Q|yNy-)zh|BEp#x3=VY$=qM0Ca=mZ$d0N>`@m?M8&LY%B}y#^Qye-mGbZl zHyUh9I*SUqr_}oAn?o$gQ^&;92 zqo-Zy)tu^Wms$`!+qu!GVvV_u#t|y~l?R#ZFSib>W+7vaEzg_TqB@}(H@vs=4dpH) zXN~DgN#hlpx64p&J-*&YE|I?kkHQ}udKS(n;9s;W&lHq&;GwA?H(xA~CAG-5v4h+P zIYy8~_{;rjrMDrJPHn)~TZ=UP9Id18&;>fdh@LeNu21VhOVz)JQm`BlndSmk@OzKeYz&%R-Bp= zLJ}01j<9-bg9v2bp@F@GMdqOQ${T+qf_T#<A7t;0TcU=8U~)f__*I&%o}UuzKr) z2;|(sgS`YrKD;v>J&S$1)(PnD$E3U+06$&Z1a$Xe)ZY$NKS!CSNlt$Qzj#CsJ4`^1 zkncHoA+`|yfIvWikZnWN35QKX{h{6ebcFXckoP^F)gC(GTI{~Bo6QBcHAk(=ErOvk zsG3ctGT^A1O#z=xtWz=t5hn{|K_IG(9Of6>DGkI_U<>rewAYmsVn8r!l>F^at?Iz^ z_hcKda58;6Q_J<2knH?c!l#<0FSFIkdHK*w@ZEV+EldpYV)U)D zD}`hoSrv791oXY>kW5B^-7^`x8T^%JBRLTR#;a@ECvkoPdxvYKsfZgc*{6O0E?#1@ zIBS`1mvZ<;>sm?H`ANYGMSvhU0uSPJc z9d!9n)~e8E&>r74#q}7+Z^XCy8BO_t+^ABNi#cdfmt*rU=~HHq$ygw+R=7~T+}7zL z=A-oBqc|j!s1xROH!{#JtTE4A1s5flqL9K#qQ(X?<4XJHRLUMUoIuA$=KO3@-Hx(e zTVlz@A2d`oG-63IT98aC z+AHDbuQ0sEB0LXihLll`$6h0?72@IuuY%ZR2d)wryKy+qP}nwr$(C=1gXi$s{*-9_r(UHO3AX-m zaTAad;>W^)A@u>$%6(fyixJUhGm&;R;0k7OUpyzpLYrYk!T=4;`3Lf=&a~b4sFBgfpZUSgbZ>n0Q8U%nJB&<}kxxje^)6ANsAFWy<;! z5u`4whNetcR?hTg3cTv3)g^_)Vg^3Rvm_Bob8G| z@ZW&F%}2VED`jKQr^*4>L+CP zv}j?sacH}TzW3NX)V{H)L-=d`OLBm`Mge#FXhJhF~Y!QTp ziEAR(Xote0Ul|0Zadfg|LRn%ZZE1oBicpc4W#U`Hhz{Jbu?petfs(_W%4ELzj?0QN z6aus{3R=Mdjx6P1kdeQEqE>09K*pcb!*RXS2qNVwHq2bfikX&lkr8FtgxTMC7wgEe z22pm!VKkbPalwiU=X?iCj@A;M{`qy5qm>Hr0-Qu>o|<7$gaE8Sm{IU?@4GaGuQx=4 z_U_QA`lB#c15_^Gmjj+2t581hWX1#!#Y_04>>wokQeNDE=?rXM8h!cu9B1hYjw&BKN!@yD=*`6ZZA$%*p_Ugh;ubyroL zroo}q`}-P=LdEM?XeaU0F?Z*Xv}U4aG245Mi))oLJ2L6w-!5d5tt|0pXGP;@Ao6By zOQ6fj!Me)PToDHN6#~RA!_pTqhvncic{v=hABJqtgV)ND+>`-c<#4Y`ygLOyZ@91s z3Ro1{SR`Qc`ivn7?S)3o7=rMXme-^gD$xnr%ho>3PY{bi6=K-=GUiFg`p)YDL!mW; zwgm6Q$UpD;!G3HzMR3*#2_FV2J++hn)I4 zBw9-nD38doCbF-vT`>~nm=ERMX5{iu< zJX*5r?FguLWXl(GvWsYGwx$p)O9Am44p>MX-9!_rWZzdb^_R4y^UvFih5f*yN6|T# zMH5gzKQ&3)oPo3|b)NoEBg|m@igR=oU&`kFy(H4cM;4?U{ru;#+DWd?Ud`~;hZb+z z-j0!q46Ob+4$$lIId{pvBLXf||WMJ*tOFYus`IDz(NG$yFykd+o{3NrA43L}7{i|=(PN$XM&%-FZkvb}9kKeLKe#CDZxA! zqpgz_Vkd(ZfVwk#jm7FjhK(=9epKKQZ6ZU*QevTxTQ^J}K0Nn`hGTJQKNS)SXT_ilo>MTU$DoxiG9K`7scK7)hF6|}FviNFOrDWA zaA%X<ddbr6+7?pgypo8hkdTo5zbeTc}|@n<5#40CYDjj$s%_t_1LUauCW=4W@%(m zzalQxq|v0zoswd~zF55>C~0-=ocY4LU4uT4`w`=u$`^gJ5?g%yk=`WOo2Gg(X_5Q` zP`%Py!1`fVzHDDMU3OZ}-;B+@sCfv{v1^_m8r6AjV8qI6xFr{hmAhy(a(nJzgv)F2 zH;2XQoYINhb7Lzzhf%J;Z2Iwx^HJ8b|0_wC=~uWm4byX(s&KU$qubzG#7=|w+{TKj z+Xz?mR#R-zYo+cO=5wq~S zbG>wK$wIBv9u6xjkgRYkP&gVxWOfd=PFVXYUv}1@11+P2+_H%Uy!kXQ)oBi!V>YyB zVu$hBLSs^sTay>-)TfL+v|f|tZH}v|&Lb)3 zw4W8fF5YO#gJ223wt9^1YEZg|QouPD21navEUzy}~I z0#8OS;`xvMIGlUIJ2oas-utC@n>wD9^FZKMs78^kvK-QjIbyo$%{!n7xxzH?&$N1r zBu0c(mUj%LlcWF#%TXVtblLM7ItwFI8(*IMxi4`0yYLH5YtmZ~+mB4=AI3-Zai%Yu zuDl@!%fj6p;XO*vJw3J@(OmD(;Gm1|#FK!4y~(LyaY}+Fgg}zRx1@M{Lqa90+;_44 zt?n1cCuMfNNZ(kb4`8bE*s=oteC%&bpEGcnV*Gmg@1Xc6=8<{&G|@{35SzaGCPcFZ zGVMQ^4y+~&dcY~>K(CfT%NZf3EV#Y%FbWmv1+AvxzMA4ua}h)Jn&BKW)TpPHCI_0d zRHjzPhSjE#p-r+Ec)X|vGzOLQ<<*BkJaY6($j%OQuCD|d;XkeealP43h!%d_l!)+) z)G!uhDA$(2O!B0v3&iWRV4;0e`kHwc@3Gc|qW%RicvD8@{CrB+(xA(p)_vx2U;NlV ztUWj)XCOf=9?`1_s(EfP_$sr!MoW(wN3=H3DNK8A(>PObDDLu)7AVVJyh@6-!#29=jeDaBcp6=%L#Q~g;9RIZWD zu2~m8$%~1knhh+IR8Es5W&B}_WEP6%*4(mogP1v0DN&Z=j=UD!EyxR{^k{)=LYcS@ zM6?W~aIl8k$o=~!_0I^nV!VHY&ood_lxZ#3r)?PCT1#$?V$Z=X%YTMcpZ%MWEr31bXx<0TG`FcE-t^2rvSgR zC7b}_Gaw3YE&jS;tWDwo&JWa&)PRTPw~B z!9FUmzn4-0Gp7E~8poxWgsGaAt(dm4nFO^M7r7cI#TYczm_*^3R^^yv=^A$R=oefL zk*p?D+JY!;yO*@1rroTVhHNIJ+mf5MH>O|Dn8kGdZNEV~Y2Qr0y)g{%N(;ULMr)7N zxZ*P^{|q2G&q{9SQmOkJZ6=aABiRB&y(w8`cv)XzGi>P!W3>TWWy0PV(>>Gi zf_AydZvAIS)Y;I8YCXu4tq@x3e0T-M3|q9G_HivnWj%*=Ex=_xK6^c!cP+SaExB?% z8XnjeSu3^#_{*dZpOdQm^voD*l!O{goB9mfUb_Kxl$_mO&`~cA|MchxR#sx?aOntH zR;uTCswlnDn|kNtqCmlOT7x_#kxT;)f<=H=8ex;NeGJ6roU z_Y~|GiT(4nZTNQpH(hVD2<){uGcI^Lc^(EgBiYRAK(EO~R?>H_;zg0F9&C4G(lx6> z17mnSjLOaTtEt=Yv|>yLk>40SbjQ%m%e%4L(ye@G8+BK|7PM3G)!w_k8_#ocYxI8q zMbw>+L8js!)Xhbq=v1@v)xy zyt^)=e8Vr*W2LOtkN&ZfnDvdG8J}DANXrSZyUVWObr8Z1|L9HPn*39K`MUH?eE6FC zN8Kdd?Z-0%;O^aiSzQ*jSk%AVBWocG}N+DY{t&9a% z|K+cc1IA*-&Basir9`ymiQMvQ!aDi;KywMCMxU$@6?_@boht4VJske4v0lbTmcmaV z#6s!1*#1>xOnD0$k^XCvFcZ1YdGfr3qlT;~ec}l+{LJ*Ofbjv~Fi)8vo+2iEWsca- z2Smjqq0tA5QOJ_pBbI9!VYnz39stM7f1k!(Le)5j}W%bh$<9z2pN- zPt=)Rf}CQzp`HQ~d^f_;e;Pwcp&SF|0W{9?Kf6%7WVTP&cb4~xA8?oE+{0G$ZU((t zU2Hz^-nH(yAADJjdR=ti059Ofm-Fxje(GI(-w-ci!`O4N{jrhkMY;aDD0ag9p!~Eu zX}(~qywp2EzHpz92QugAd+5WN^Ys1nk?f^<{qJhST647qemY&G-(X)Q?$jT&Sx#DA ztlw}iZo`{%w+4Q@cyDtl|8(ZWUROfgA>rm`uW`A+3 zNN^>$0EThkQ>Kb6CB;DMP99G%9}hvXJ8n?c%ply>3Z@B63C}VXOD>>MbmdS9cNA|A z;n`KEW!^9gnH~JgIzS($ht>1YuerY3WCwFP@YiMFaR@pjl24t!Q@GQ*4GGN}L6=mQ zS^KqLbRBj>X0Wg1hfgr-69c1F=C)dM^Ty* zG7(OKvUp1VrdmmrP^h?-P6M@iL;kQ@OO;wEyA@A^x4M7stXgdag~|Oqkwr-prh4bY z#HPtrD6|z&gS>ij?%GCvMd&g(l~4k|c$Z<%Mx9L@n+e7XJ3e|&6xL`*)a0-UaV2)rI=jVS?TL+ebHWRM zi-3H5zREna30Kys0GI6s>&5%9%R1LppW~^8fV<#26uz(EEX^6`$5yHUd7*rNik)r} zZ%%dqTTK{VA{Hjr$6Dnj=w<0{YBS@C^E!CHxYcEydc$h4b%)J(cfN=HYtKgMh4`9$ zaCWD~+#|VvqX%jHXV3h=6@nZ1N?4NQCa8|8uj1^;7NQgADnj-qxQ?sOa**D4xCK8U zL#~1!Z8#qI23PaT4uJkpV(q>DIkC)A+yR%K_zt=>!)@Dm|v*m7= z2YNcMQ^npZ|JWk^4oPe;F+3Q2y)Ai9DGY2Ai)9+GJbzqBpy=8Yu?2~Fk_>;mXyC}& z6SD=)i(ytXdawM55E%w5_z zrXgYO03W!PrO%T8R`euYAbl&nq}u}2T*O}PR?)GocNLO+z`o1+#gi%(u9fz-H8jt%2VG+@5Tqs|JUE8+O}hSvMLS$qn!g z`-OjSU>JD7C&#V_Tbe6`>slG{%3q-{v4Bu08jd7a7}u>bHmYH*DC77DqUkbcJH`kRu$mprn%N!#tZ52lg%UlM5CycBHy5hA*?AwuN$=@YjjNK8t&h+_e&zU#HPnN!m-BG&R zb{(mUR&O%9P@Xcq=UNiA$Lv0pXU*RwcFk5F7yr(&YO3kFYK&~G&Y$<5ae88O@pX55 zZgu1=0W9^Mg>H3*!O)`RSsbgpiMtuQ>gQ#uKEuD3tqoUDG?cvX*%C7XGS-`dmvEN4 z`e?sYHKElbfm)(hkX9znR#qfikv9Q0v9@OhaED&{;6&Y;?8)nq72I0v(eK&zu0?kZ z_H7Tc`#Pg~HV1fzy!>CWd~$=m!e4>$89oG{UlH+v_^h4Lpo|Mq=i1@BO454{&D0Lj%NfbK{@63yy2KMX4&!Yzq;}_sV$%#w=;N(On z2yk)+B!O=+zNPnYRXDt(OWWJc?ptDM%_wF;KfrXAgRAWn0CGwB@z1QDphbJnXpuC! zf(im3JdysjJvE$MNiWt`fGC_SVQH*8@B_IJs=okt=InO$gtTa@o=W)ZUo zyq3rA8GM(BXc5e?foT!UsDWw`PxPQQ4JHKLV?LDEcr3pz5~;|+vlt>#f#B_lO9~Uw zf=q?Dn*}XzQRGunYf}2ibN&yntpAsmi_X$1NY%~hkPGgY zJLlf5Z&SC)w$?6F!P=wHiwaLdwjE2efY#PnA+|`n#^(hXV>t0r5_tpu4Ui;jKht+s zrnCp2Ny+qUW7if;&!yLGhK2smiak?E0C1|dMZm=UUT1&oUJLe{>rtOE%g0WD+Pjsy z{UGX>C`-nwJl0|tKHTf)Hvzpyqsg;B`t{wdUUmB}vd0WIp= zKDvAtT^rIfnBoq`TfgaNKUrpdHU$9!tl+Owi>Q6_qkyerW?fkov?+)>8z^(yg7_L! zVygeUK2zGCF%)m9y~Eov`akqG{+N-Ki0*+REtLXvtwK>Wy$yqL=h_fREh@dMx3p~= zP&Sq5Sdukw7yqnlEv3);G#%g^Vb`FV_u*9fE{Ivi(1DL87!;6Yz}l^2zVSLTkQ|z{ zGkKM8x}o(oC$-hVf~PiVYhjsNbP5izbkh?C6PqI4A2v)WIR+nuVU4}()^jFT`~@>4 zk3bIm%N{Fe>mm}{k+kNE^Xy64iu)G>>Z(s-XqN+MVH18FC#x*flIMzng9)xwtmMlj z(jT!3!^Y*Q=DG$35CrX`v)@ZUs*qK7<&|Vs$z(EoC|iH0MD#^2RhQF}HuD7krm&r= z4pLirng(U)SsFMu`MNX>rVCua~pl=?H3*^kUF@*WPX=KF6= z$owaED7pbV>~v3*{Vo!J8t1MCJv_Apf&4oMpAKkOs2E=+@OUb=r;ig%)B!92{{yqY zlu>>JZt_)85W3sgGoZlh2He;6@X5=GKN7+Pk9==nK!(Y$17-^ZZPFOA6c3F-XlpF? z1hV8_kbVLz4b5dwrvTtQ7#k!Bx^?PbPOLJK^x?3~fnWRB9ub@=9@Q*w)if_WPiCaM z4Dc#EZd!Z(=WwF};{XBg(bN4h7uaGHm$zdj|{?<0akg8wkCgF9$a_HXJKI?z9QgTs_Bxsz4u;@7W8U+BaVCY66?Rp-WhuY4Qm^#CFCx zPwg-mtY7}N2}-5QFih;_pN0coD$Sd$Y(SXMCrdRstE2JQzvj`$4G9;#JpGHVzxogW z!2&6z#KQuk_sWPh$DT%7k3$|n12aI>T|#fDrB;%U?LMroWVLp^ggoptZ6%yLQzfk8H+oA6JLFL zf7;Rhx<6bg(31S_@Rfa&iw(1X&Bdil<4V8gAE1}*MshpzU_>?2YFgLI19u%935M2u zPBnyr>$;d7ElQ$|uC^Q_rSj>iRP_+YDqX~o8bmw~?sIhE0z<%lt){35zoW6Xe(&t^ z_5FGvjQq6jZQEURE4yJC>);A3-Q8!p-2&`wcg}8`pL#S9$bnF`|6)XyJA>hp$4dAaTPl{w0PI*+YonkI;tXVW z4RkgJc`8KrNe~fz=Aq8?BhyiS^r--T&Ep* zM=n8>Xw)miV!N7{UZPm7h@=(*UL?UD@#g){4RU`mw>k?Ks?6eb&s%>1KfAYMMs)`Ae{zfQ9HS(3T+rCdIB z$cB7Jh_ZcY#~a{JSQ^-w2dj1n7YCDS;K?{iPfM`LGAzlGE-WzV;^WQr?^F_a0v_M( zvC5pQC3(lAp*3n52s)i66){$R8mrGR(9~nagD_O68|n$c9q^i|{pNKlfp3Q^+P!A}6LrGwV$)qv~+# zL``Hzg&HdXkD+esv)A=k5IUL*6e1EsXibVII07&h96MV&#tDW?D2c+Tx{)wxN<+a& zO1F}MQ6{Ao=np+9NDD*&3JXM@FAt+Y5A~^LCEsXhIh9dGpBmf=S!vQXpDH4!e|Muh z!?e~Hmq;IOkV72b3hdQ`xK4wN{qYSV6ySIw!?AZ*8}c3<65#$rL)KMlvIZ@ z9F>KwdztbIAb@Cp6|DA6nQA43)UcV&iL80fAt|cl$t>C8k0goJ$V)HUV|>hzm)(Jf z*EHdRC!O?Q(m#!~%M>?V0e*n+b8#?GaWq|tZik1sFG5p={uldAtPKw|T=M8>oq%nj zB)3if0Ny(vu}X{#cV;4#+As!cf#7b)EKuLo{fs;ye`JoX`iRo*6URy}M(Aq3$}`&~^0S zIT9TPG&EvpNO3bnAO>S)Vuyc9CcYmW+kmb>>)i7DcX0&5cViCEG*@_u&FO;9dnN3n z3NScVA+Bl{Tch_EQ6n|FY?7bkQib>ubw-M?=iwX7!euN|bSx7pffz)DRY8|sQ5P8z zXo5I*Wff7RPF-DRvh-7#|7v=rQL{*>n}OpqcfO1-1VX_&3=S@Z?DEduqd}Kd7~1bd zvsF@TqC$R>{MxZMUuJ(+n7TA=jtR+xxV%}snDS~-B2W^y(PHm;gbfe5^SbusP# zJ!xiA#zpRnyo?}G?`~PbKM-U->BcuXI_#K({#>P~;>Eyja!Nrd>#&>>mmb|9T3T9G z6~rtc#Yni=woFaEqH50Yrc9)ud^E|xiBcg?kU|@RiWJ2E#Ho$GGEN=XWBme&1=`wi zS=EJjj@mV7d31C@5l!_1JtpKOK!ICZ#YJ_xtCxqhu^E8)D%H1z9%gN7X7tbvp?{sa zBAp266}2ous#9?UWM{oGh;#PY2^yjr|H*X1hl&^_?mtQTWDl~WpcG@&+SKO z@M>x)W$g-Md4=Jd7&)WcdwgY#Vh|GP`?`Fklw8dWiON|ZDW@a00t1-5U-dCcUrc51 z9UV2{QufJD-_mx<(@2fqZ24gHaC`6Z0eU_nz}#B!0(vb0e_ph}w){YTT0q}AZ!zx1 ziSOKK`+C1c13NQg`+A!J;KR~&nu`~|uD>N2C>G42tY%1sfVjQ!UJ~W7wD`WFgfAp6 z6l%@JL(fYmT|!-mqDAoJcmv&RTt}9vEXq_^+`CixN-<7Rl?G+G%X#Mjht*0 z+KQ`c>8Of=z|hzvYe0deyiAB2T)QYVY!ozMvgOUqK_w$SrZ3EakqS!H^$8B1I9*G| zO?GN?mRF`?efAFKoE+UwzO##Z2%>8LERXd4>DXsw)SA?gihzrgoa`((YtqPgQl-t z2gET0+f_l^>$EXA~hp$B%^`OKC$;-|aE7}G1)CP`xI2bMN@G7&3c`Y}=2`iF36 zGY*a8QwXWeiUgm-1o5)_3W_# z0rjoyow|qH-H4=z?#M)^5uNIU66J)S32Q*SIB~f`fi$sAm2kd0Fyq_o^xqr@fblAs zxZJlv?BZ%AF6i(x3nVC!nSE1y%0Pum<(^wW-0`rGgFi>r^OU$!P;V=ts8jm&`3Irk zIL-5DPCNiDgQyuF#OU(4-FU8wb)KtY0l6ZGN4B>|)-f>f?)lR^8&Nq4a%M7Pz}h+8 z4G%YSNy!&YiS4m9qRpbvqb7jzZOSA_e7VxwSL|zKetMkwDnSi*?;<+1OdC9OVL!~w z2I7`~TS*g{lEt^BRm`2WEe1yKw`1KaZFZ`fQ3ABAZhBI zeCu-pAs8OiI@R>dOj}x$7GBl{AUvyc`uREdo>lb6fe!`ukO~EFZ*vi0?I8x*2JP$} zd>e8SAqabTxAW`C%5hfd#(*VCG$u;blaZ{?-I$5E_Ep6LE(hyB^0cX7;DE7i{hFQq zt1UYr9SFBY(ww{uUzrX0K7EBji@?V#e2FAmyg0$d0bGByUz*2Ennz)Ud_=`a+tv{_2w^mss?PVc18*M(^rL`un*kr{XZ)a1a;5o{M)H z$DwFbL6t1oK%*qnr|7TDwNIV5O`aZc6jx*P{n^n47{obDFJ8DWTwDrLUfZElB1~I> zPo};BR~#4k5#1y%SRp8pZtvCA!3_nkMY&8?yr=q7*%$ySYuEaMT;<4~ znwC63JhMl;Arygr@IvjKX#Q&9j^)F)Dxe?<(uoBK2T{fc%X=ykB~_qnX@m_e^adrV zHNP%E!Azlq&#;#oK;`Q#&3u@e_Gr}Gr8kc_%SBd&3_1`GeHbcUE>ZOaz_x;L*;IkW zn4O?`_X)2Jo2cel?CVfegg`%(y*OC>78w*bXGeYhL_maMNyN;|QpkVJ0%&IhnI0gqevkmq+Qk> z#2>kVotd?JEF9S#RWw}LFLSUy)&A&fLcOFbd~$-vqC^^}9wLulh?>+Ia?#i$#d_-( zPOL-l-#FIbL+1UuL^~9w^J^b2*cqY=r4ap|)G+cnl7M*mTwI}MI1D8LaP?M9o`r=Z zgKdu~&*NjIE;R&UqLQE_5s6IGMeIdv@*1!I9=*Gul!C0Dc{|%N8$#u9rg^cG6F5kL z#3cWXx>E3hOl3J60<4CL$ec|5Refdm$1qz2&I%z2E@eEFMGy5T0PD=LS(^;g%NP|e zT9|9hg-ym0fEcqG@5Ws|XNgM#R=+?U{=> z<+NQxfyV`EKLj3+uVrS#ABhFQLYfGn!8$?07eyjS@ho$_Nt!%qNIOG)4JXdRz=<8q z#dC3c{{rW`T053`_t*a+&ZR0%rp)-7F~IXWdT{HoQ#hJLtZWhX?+iVcnFwTh#6#8N ztt9LKdyyRAy z^J|G}yd8hS%_H`lZkIXQ|9<+MG7j$4Ob{Ljf`f1-T zPH_R7pYugBLpQs409f|LZ|w&^NB^)yaKFzWmx;cGy&!BzNX_%FL|ANdG%$Ws{0!^@ zIIP=mX7P`9cA>}V>BJBBC?{@svGey2cA(o2-rni$)T!4GS{J{u<|O<$QS>C&iyh1h zzHedwFT-2l!|(TqXqXEVjG=`pZdJj8pzdJ9pO1u0bZ%PK6{8&5J&30Riie3@m@1Rj zA_|x9+QiX^lGB(@UiMNKFV@jo&NV#Q!qDkQ3+^LYtqlO@j&r zLX0Ki^IX*AW(~TyS5y|ZQ&O9!6KdIyQ7oZ|-WUvq)TFDu18XR!OTubZ-Av|4P7m2I zD-e@bKoHYe#knmmL^Ygl2W<(@Ye*@_QgpNvIez%_D2A*`dJG1*Op&a%JcCh-=D1 zQrVBISh&o!XnEs`q#*_+b5gO?hga-!r5Q5R^f9DtV6D5 zEaBn85$_ly`x;Hvi35ofk;;WHLKIuHi1U44Q_XcN$mhY+>&^{9=LWLd98Bx*Sa_1i z$PsJMVg>)@y>uS986zYBjLys!Rq#W}fYM+C4ze4!UXs!&mcWjhEsuGc(EMP^EGIT| zk-6vu14zW$=8r(iIWQ}%HP$H(HgLlp-HuV*&TQaKJfHX@Cd7wUJ4Ua^Gr&GdBf&0# z;|6nZ)tOLF+QJdo#O_M4Z4&}pURb1tx4>3v#fGLfTq1T@?o*up@rOND+jwxV5H zWtpvOK?z1y%-ivAcJWS~WZ8~0J!MMaCdR6!J0Fotd`)ZnP~?cORyviJD=!QBa#G zU8OFQQ~LQ@ zC2U*K`y)79!wN+Mz-Ja;Kw%O&(XtFiN$?VJBLNR~@6%AFGAi<3nfc^9&srO~py6Jf zxKQ@9v`;hFHOW0Fp0Qgy0pg~r2KiE_Z;A*AE;;SL&SA%uR!jN%Y2I|+Dga&+pp>Cnv#6a%anWgf%Mp8HA4K0 zbaoRDCvEfFh@nQdUC+>Ma-0g3mUydV$?nhH!?6Yf_Je}9gguQ$EI;(tBCOvSg!h+I z*S+>G=a@ywlx9#hKeVZ@Ths$%PUq}zt6B`4#ET4~_Mv#u)1~1i8zj-Gm=`^m;s|%^ z`gQ?B%iS*Ik5e?y3;n&gEQ@U;(q$WMaQ$Oy1|H*$<}s6;vd*K>g*jX}Ys72LvQW8? zShG<%@&O1@F%l)HB{#N!rSN*Fih^P06*t(t$c&7;%-*)@Ul=KSK8F2^DNoTR5Qj2M z6(_cP{o!BEkhFTM!ku-8k-@lquH3&<&Rlg9nVp?-?MtF zuQfA}@GHclV570d4GB@->i#?vj<*)T{#pk{`AYx-eRcO?I^-Z;XSf(a*Rlhm-)Uqw zLN&uvr>Wi+)rkOi43&D4CnOy^*Tj|XlR6K2EuqO=Xj&yW8qF2Y;^@!`Pf_?wcp--w zA?ELtU7pzixDy-71Y*m_mM#dhE}apN-D{88phEz{fShAP)CnITWUJ@eMn>ZkOE<5g zCFNG~7*DbN^|%t`)Gu?emT{UzIVy@rrXIDfsFIqL_du>5TEXe*uz`T_V=%~1OX6jl00da{4A%%5u-N^ub&JSTY~o4+L@QI+pV~`$ z4FB4Vm$Yt84Q(=Qx77c4L|Nx~|mBZ7IkCk0nwi-D8`47szND3j$`7IM*O zN^+DV)euspCDe!3&EU~JxuWrU=2C8Bj~t+tu@^a2WtzDM=<-R~$sVgAMqCA7{>Ycx zDYq#iiv0Un74I~Xk^Ss$z2Ux~8W5K@U?5jV>QQfH!^ea1 zdsznAv@FB5=A3_|lYOjy8mMNq+9xr!I3{5$GZ2{%bKWfxW)tJMKdTYFb{=ELw!I5e zQY~v^sYI7(`4c*L%=BySB{x{Xa2a+`SQ9HX0;(&A>UK{2GHv3iB25vH^!6B#y;M4^ z5dC~)iz+X(00$t(4`S-=bLyvv6umEGTM?kxh2H`Zb7~Var{g+7tu5~kScz3F} z{DC&$g6ZJoe;&~zaLI-xXDinYo3Rz~a2|`1$j+j{jbry&=;5~HBz2lkp_FB-cc2>p zD>Q$mwNDZyT=In^9%nLntE;ZHo9r^bN~CJ5WA0bNMRq3B7Miu04R+9gF*e` zD6trW+h4Q1%pr?qsG1+QZ~Mps9kUZACCTGwn_wBdN_E{tT!YtoRi!-Oi@IzA``7&b z&4%y3zmk+*=iFwO(an6@TCBz4Ob{cvlUXMb*H&j;te~3x-pF0%=fVD0EgCHi83ygW zIDH&nX}kA{!IsMEF`QwG6F0>LYkXSEmfuz6#K@>Z73*YjBk5WieS8oeG~3$|n%xuX z7A-O|3{4~Fc{&AGX4=R92q0W3o&Ev28FtXeJIG|H*GZ|#2UiAvBiX8QTnE+7u_nZk z95~mpm(x8_2PHOWa%~6qTpuO!%0ULz+nZ*QI4RLX*<+;`KRPj zz?|Pzp}BR@f`|T`4h<^Nt+7BV;bD5@yzZaxXoJ*uK5}$!a%Jcz0Uh1q6TO4SBe*kj z!mufIhl@b?>@U#&fFb+;z>ttk&Tcti004r2$$*DzE&0 zKELe%#29pjnQ%}!R7C*Aw(Yy{0c9bwstW!p**a}h&$R7VVb4Hjp|=s(#}inlTTERB zF)%GJut^`%D0mXe65-OZ8c&)|i>@WPGG-;H@^@~D<`SZKh^g~FtMkPZ0vF!J$VgKk zR8D9tGQIE^Z1-KR2EIZTQ{Q)yRi!b}@+PucakW!h!Cs#kl48G_7;g1AsW(KDk;3$l z_ezyBnP#Y&aRdR%2tIEx7pGQ*YnAtr222JKEWA`$T&PZz2H5}yUZWfB1grV?)9y&*}+nXPmOogT4#=*W2k z7*t>GUc!~N+}2{N?LOR0Msb?^v!)S5^_;TaYGdNNF}ghu-kYN6BPju@8n7Ci4fiTP)*q3XjB?)QOrgx58w?O9*ftESlBZTGt+&C^<;MRmNmkX5^FsE$6+ zNUIp8&=7AeHIo~N$r+RNB$f|b*q|T2;~1L3I}{TxI+L}mu0z=cM6qLWB}7X}p0i8~ zxc0(H6hzVH%9*x-OFjt(O2Lh4$r&C?wNtn6@pwwj0BD+o*U#=IC{Z_WksVq%#V`3C7g)WKYFq10`3^Yk%ega5%ig6U_!1fWQA2ff1l z0A+ashl=$TaCkFI@)b;PO%@a4FZhBUk~{l^(?9c+QvtG%8a!UpJhR9*{{ z@z=94rC|sE6MWlZh&|?ka5M}b_y^!az3A5L$!}Ao?Cp^`ht=GOtLo@#Q{snif`U6J zlAocY{E4}u)=~QbM~Lq*FH^&RI}7)HS@%k4zV_v@;;2z)+7q0?Um#{H#2`u^<)|k; z=0OIF;uvtXQHwLMWFG6t@mlXQ{i2 zDbs3!W2;Cg@5LDO|L)A!%ARtke?ibd|5p(7|L#mlr~kGt4Ifq!0z?p@=Nj~$F$k|x zZ;+GWzY*Nh;g$fL2U{5<-ZpoB9M?2r^Y12&N~X~ zx)1ntCI2 zvjOi~!TbId>7Q>u)y0+Qzb;lSo?oMBj?LPoWYuaud2e2MkG_^H-(K4>Y;!e=y>*)0 z&#`HC&g1#y456m#LASg)H`)rP7;eR=(WJ&DE-^JK_33HQsb<8;7U$H#WT3HgSJcYK z2Nk^e2%xRzyFVXup-H{WY3^_KuFfh5_et=CVVdNP7 zM{UQ&Z1Nb5uQ%4SKgEDo-ol5GJBu%WhJ^l~MzA-wpXxlQj^Tn*#wr$(CZB%SjY#SBZc2cozRcv)`-#5nV z`+AJNx6i-xd+#yVTx-s~<|XsSySdE3Iyoyz0FZOja`1(<=n(UDbAY==*-X=ks?P`_ zCjR6EOU>szg1nW%1V zHwZq4>->N?IG;%d>5N1MxT%+~u#+i?k@a5=3DFaK86>cnzjJ4*A206uu{<1|_}sQc z$T9ym6#G=-Uj7{yaLY_6g~);8hHJqsz~;^hxu+gm!C=N+y12mSp_TFZNJ$^81EQTg{VLcL)@Q^xRU!@_tW*v$9TvzTsht z(WEFgZe2IyIzc1`9E+y16OfqTnB%<>zhysZKZzstetqGSK4k zCk+;VxJ1@p&iiNUd|dt<5BGMUJ`zY^6s;zu3EBfn>!pg(UV!{OslaVKgbD=mg0$ve z*BNYX@@d`{eAcXEL?su0NqvS5Jmoq!baz$X7Ah39O}^bGc16rs6P#T|Fio6s?CC3HPJNGN$A~M%_Bn!lhZQqAg9i?p0kajVfg0IH)(r0EL&K>9?4hK7nom6V#IZdmjdmTrVCi)Sl(O9}_qTQeF_Bx=q3l;Q9euV?yO-y(wwS{6eKfY?SPo@O!0 zs2@EyZIq-#b^eg1t@^_WjZqI>gNEvBI0pD&d$##H_Aw+hHdHR^cc@(^e&*Ia_ba;1 zE3+1x9b;|$hfv|IxdYuSLzSQVr*D*YGzpEE{!Vug`=!cAF7!1>D%QXb5QjY!hip7^ zqhku+G-IzPijDz02Ish`oYPRbX|~cDr721O(8Zr&gcJ>kS4_hYRTcqD8J1?C?8~oztzQ@u0g0dAtg;yCKd~GO+uOOBI=PrS zeT)46Rls6cg@%BTLooTk;?#OhZ9^!n=H&yO7kr7RtJbS zxJYVoohTghpX*TWjt=%b90Lb?vmQ>v97#ER_}H9IA%6jc7QyMp#>ZwM1LXP$)xW%8OdOvrISkdR2km zqYe=#vLS{vSpa5gP4(+7R9W=@11S{2T>DyrgN~@^ECPuxgWWihB z>LelTcw;AL8&Ph-l$mr3Z7OvpA-SdtwD5!bY(EUKcnBBZ#L9}(c)VXdh!rIoG3}h% z?XFf`g>G0#AxqKOX=3{dOUo$y9Xqba4iH<9q3OWPsRrk2FGj5DMrktoc!wltxefoK zS2$Uc$;W4Epc+G@jv6*GNDtMTS2|NvO;pQbOeHEry5J}_P^}E_OxvAavVzpaGSBCW z4u6``mJ>8%X-1+Z!xXF8TszI#-Rgd9;I4Rt)LXL7k8~ z>y<|6yy&Gy=sfGSM(F(8i-XWP)=LU3n>21Vxyi~C1HufLY=&MVGs0OXgr_PwT4_ONK&V`(o!upS?6268DhbUCZdpZLFwY-D7H!>#C2S>z zn5T?bZCiGLlADr}vhJ;VsR@bUCbSt+Eugz1r-B>rK~*NPtvG{2&DvJWTTDy7 zmY`o8jtyQ#&>C25OQCv;hQ%qUdP#wEpmBQVR8f%I%5BFOgD-#*gD+%8=NY%#VMiLH zJFq6=6*y!b87s>j!Dqj}EfbmGA({DU)tm^rWHOafjs2nF041rjmPO9 z#{(f>d2(pm&#D6VXr(Ny#r{4_9#!%m=0?o6~up@;b8V9N~P8B5>9~KzCWWP;_Y^LM!2ZMMQ^F}3zCa6vDibFLLUc`9gxz}&G z{F+D3km}4mKu;->A+9oS<11}=O}8dv`+oi4TZZ%*FEl&wrLLYGix*kpNnnx=a$kB7 zRQCKMQf~pDFg@DJLUJrP@uy=^&!lkzX8G^sCgI4Q#t(9@zPBgh(E(y(hE~e{p%Ni5CuaMUAIF(rD@oZ_{`6(csweP`kYHamkoY zu^W{iQrDpRi<(@9x#ef>BAQw^kLdxWX#A69p%hd&CYKy!*X|b$IYO4^h1pc34Rs2VklNCzO5 zGVbxrQ(wze^QdDep4RtkJo4M!Fdv3n?Z4v%;8vgq4d!;hC~Ted)@e2mz-aZ&Bv3 zw8ua=P-VD<3wYeh6O8X)SPiwjg8vUc^4xBSpQ(5P+or4Z5)tBy}?qaABdidYIqLXhn+!#pL8z=I)XIkfEA&5M1vLz7v?eUF{4J@5I7x3 z$6QSA;MFI!AA3K3@5pnGE8RSLKWXpIEy2HXiAhD~-nH*3l?)UR5cj{0@{lofG4&8~ zwX`uYbt3uSKa#eF=Kqxyl%2SkL$r)K(gPWGxmoA>6p}Mm^&LO^#^wOw1&PfkdpEj&k2qm0F63tS2vee(LLq9z$i0D`T z`PNtG7rkxQIb?G2Ta0aCfq4<~nbe8}2p05 zU9Zuo`!Dy#4=v3wl$J5XcZ;ZkH2=h2bM1`>7jF6U5a!6iX)(=AKE#&*zPaBRt{&sm zOO2CNhDRR5u)ee0!@>7OqpOq6iXjdBP%f}s0%Y4@Yn_9v{Be&tO@sh+t0OibR~7p%6MmI&1KSFef>MZEB8NA75PI%XZW1PgNm zmlFLWOlIeo67IhZ#6QywyEzTW{#?0TlfgWe|AEz#rC$(SU_6%7>g4TK*?f9F2_@|s zusPzGJPaR@G2@gmsvlq};hscd3Mr3Fr^hkLC`1_H`0F4vsw2mhwbw|P?Z`2~8Fr`R z&^lVol8RQjZPoU@QD)Yfnh`j;SUhUkl~M_=XY~&NbVjq4C?{3>ukR~)p2MVUgv%1W zxaxU}K4Z7>M(KwXt5VVJ+tU@sPv~NW%z}}4H09e63>^)o9_!R#6D=HXR2lif_SIk}=49eF-j-P&QFuP9V zDKoV^WEfywT~5jZD5ToLj0Det9F_*ZxII7*w}_4^a0WN~;ZgoJ9>6F3ZCrp?`uhid zPG7qfyw?WDC7C8Qy_Xf@I!$brgrY9K{-qyX3B=~}jxd2%Ai_jCCc-2tF3My=F46>6 zKA&R8ZTvks`r&KgBlbD2^L&fgd295P+XO8ai<0rRZE?)?;ed8HU615|Y&u`CZv2UC zA71*SH&AewJ)HqF&b_alg8dX(Gkt{no(wsw=4WemuTi}~2#czkQ+7;reJZwinRDpR zpJW6`Ymzc#!(z>hqexQiCzA(w2Do+n&~tEKu|YXMx!c|_92Z2Y)pb4 z0P(QZtjs$KVOT+&FHNXF@V`RFVSP3X+INOWE%blVe*B-1@z3_7N(J0)lLOENLwVzv zo{rTIIiAhHoK#s;^GwZJRFA8n#m%fM@T3xtTRY&<>v7seetLX$#Sg?1$jK3!%E}R` z{&<_QM*xXtQJ1PV;$vB8;jR#a;C7emMma7JTo)}A2pa|TEz$ELgEv)A z^k8ej*Po@s75fP~oc;C6_udCXqg7Ny!aYsSKamd%R4A<4fwjhUJc?r`y?mP+fzeGM zTN~I?I9cP60$?crx)r&Mo?VpOS%#2FwVJQ^lq}K*j0ZdL=4&?$rvBYpXL6S9W9n!f z+Um>{)F$FrlE-MfYr4r|N!Ccp$7Q4pE-fITDWM1~wDts(Tj#-GURxOi2m=NH#DGG8 zF<>8nTB1#MGFm0h;L+kr>+c&Y>mBbAIh90GgC|XH4T$kJolLj=Vae(U8||-&)*@7L zh`(LNvAprENDE;VUuJG62;;bU@|-Kmpr~Z-rKqi4Zw8h9rk{0FEy{4SY4)TH*eSxh zd38Of`Ls`MMjpAXJg5`x;0R-k>6;GAOyEamx$=?Um~8GM^=H#`mm}lIXmZPAplu~9ThHL{FNSK$ zO6a__?ssX2uQ8)KO`j(?b?YEfcZ2RrhMOaZA?aKoccC07raLI1@hB+L8~r?@ZSU8} z6k%fB2HShiF)y*=*~Bxt>^u=S{mR9lPJi#{Q(TzPViHb@t^nvTTxn5pMS6KK^m2 z7)vcR_NVBc26rXN3**rj9`zU<->*adI?w5p`{#jS`Ob34Jj>1pV1&JeUiRz{wBoIee$;Td_n&}`s4m@oRJhREj z$&lmzPVgwI3ac|B^Q=vcWA}83teS;X0DC(9nCrl5IR6Rt_c4@?nS~{gfwKZw{4%AM8b^^C8x*kAO`7e8?@OYFX<^f=sGo zs_rkG#r+Dt5Kb3M271go!#}LQ&h2b4?-C&>+o=~xht64Tw^hzA7uOOVZ8yjm`9^)= z!qE)J(T$!$uTBsQ>U6Auq!AvDWm^!SygJ!6dhjss*TXkwQFn-Jxm@nB{uN?=JeoyG zeNX7oz9;ky|CW^~D0@1)nA-ktr1>YrWG9EX<4B?m`_p1e;*Y>EC&ESaPwvG0u+ZAV zn=tky!o0L-oQw{exZg=zyOV97ShyxRdqjHU*x}DW@mnG`lOkG zf=b%S*5#}R?mhzC9nAAK(Jb5{*LWeG$m-^bFl7?WDKIZs1^|JEBoT=RRvEB>pnL$_ zVIzlHLaSxPhWSphrWkDm0rvx}g!1vHfk*F7AB(jI1tvb5$KZ~lXs5}`V^Adcrh4^T zwa!=tz=^l}SOq4`v>~NMs#&NhD#u;=cj;(w=n|;kUzb`UvvNUd{RLFfy>Mm6cjL%r z8~33{XV#X#hnI%S)GKWjd2bI+l&S8#+{@~84<}OtQy-BlmhKWntghT>Z$e!>7T#S; zd4nl~I+6w3w^;^!-I#acSs8XjAOj8Af`2k25Px zoyRJ^Bh?g-Cj8?c(Z*;zl{{155iyTJs>^pHPjsz_6yvM4DY2Oy8c&t3`Y`s|hXZ&G z`z_q09h(maE*Qc)apT2>HfR^jDfW^u$SoxrOwKZ*jY{;?Dq%#tJXoT$Twx{v%E}b? ztUD#2q3*cW?3_+xbszJUvD~g2J8&T0B?pDu`&G!hX0a+Po)QaOC;5)UdQ~i#m3)n? zu3uFd!a}o~k-=t{av?A_rRj405DVSgREwZw@T%F_L{iwCXyJBG!0XCIth@A@PTKnb zf@K_UpY*Jjii~K8IO+tUgd50O%aQ{-A7({CMCPsH6-Mvkv;LH`@Wh!@8>eF-{~&U} zX?$THEya=i@#`aDmLzO7j0{`-mw8WYyS`fd?06#+cN5+pVUdiEGgj;W%ZG zxlGO>XX3GE-;QWvs>kX9nw}bo%icL4Jueu1rdmC;pEOb3bLs%qXYN4RXYGI}mCVjQ zyU$#PZ{j>MgjpwV45t%IFGr)>^p@=^t#iUVa)4c1N>{RNsN&KU4qW7(00!Z%WbDl+ z&!X*RsbF;4%Ezhp$XjiTpk;XkI#+*WXl$Q?Y1vt<&etwWVe-vCfpV|3T|Vb83a7*G z!lx>unGw&p$c5TtIow8PGB^JX_Z%qgg1sh9>|I`rUlogx)?Vxm zr)kLDmR8kW2U^`C6IpZ|gunl^hFdqfb~L^~Q? zzk|2b)CjTGuZXT|e3Sot`+OzQM1vUlM!IFK&EP+0^%<=;Mz3hET`Qt}s3kfp7BGY< zjYyJ0hQ0NyAd^aVFxM^es$k@4lys=SC$b)hwq~hbNx{sSzSn4AddSsdB3)u)lu(_Iz8c1TZ%&L6F?D$0cSSh-mu zmTT*Fk*K-BnNxJyVNV0@m@mWBzL0C2RiqaTZBb6s+6w{_lO-lwbmD$dx{#_}WTL^J ztkpdu3QAv$YE7~AukUf1&g-m8%`x?V`kF+|fm}kNt z(7eLKO-0nnEACjsN!H=L6z_qNU%w##wJu?4qZt1B4sLGwp1!mHf7K;1Lt__vC(nPD zrzVvluXPy!?=p#STKe~=c6jYXR2i!^PaX$qujmtEH*twr?7CgffK54R@|f*yadLe1 z)eU?y{FA_M;bm923lZKz<Q|LnPN_K@cLp}e$&hejY;ijzncz@oeoiJiLqczyq|QOm3zW3)+r4GYeU7c zb~I&8j|i;xmuzms}bYL!YjXt#`LT>tEW@*4oZ8hm6MFD`2pSLU-V}C?IAG z9U^~bB3m$_XD0e~wc}PGtTBS}A3g0(X8$g|@}}L(^gmwDmKoorI>?I??vQmpEywLh*I| zoNKeJIT>TG2`h*uhmS$xnbITaFX(f_;TS?`w<5^-6*c*q7Jsjeb?o9Cg@)^lyFMvF z2}MW>o_(V9Cp!?|1T|y2#-!g{`A^s<;DC@Fe2C(Qi{7&p;k}NT5|rhSn5zz2sA~8a zjCLLDnN1mo?F^kX-5-rv-eF^JtgM)s%}g5PJT1Fvn~lLz&pVJnt%67O0s_F%eLr%3 zmX^OTpU@J176V^TSW$0S2y^}9sf5KE1v{vrF$oel8eh>7Qw z2443D-vzvrv|w3Z4(sOv8_6fBZwTyu>KtOgC-F%okdH*4;DM5H#8!)Ty!#XO=iJ;Y zbWRF;*ahN14D#5vNz>&mb;mo5lp%B>;Fm7gY7O0h{%<v7%=npbf<|sj4)^{oMmFhr<(_T!ei#-dyY;2 z%-ui#>$u{F^3A?_cy%AtTpzd(`9F?F_(7X*>c*@f5;t;;(A>**rvdJcEkaKeE;T|= zSR1*6Y?6#7N=6#+--}>PS)<7u6LlCkG9|J$~bgR}Loa)%GH@!S_3AbogRmBOpNa#FO zXE2I{h2Qe?JY;x(nU(+OP??1lH0sfI4+;ttIj+CuAOwB@`q30e7H9^#BvZ_0H zk*n)byIjnCs|O8SVYFXCp5!@S%D$^!i{F1*6=rIdnM{;~Tj{P`LPa$0D_aK~lp^HI zsa~A<7GZHTIipOlpyuZjdQYT7n_Yj#~oi__(vWeHxe6_Ifj%T-cdhO%cIvxLP)|OSVYI@v?x55+> zz6_Ymb_5n zntWk6tPP%7`ddZ1qL}e4C6X(1Z|u+Z4rKtAmC9xyp>Og6d$|QV=Pd}$Qtgrv-Z^|u zvqxz35CkhvWhf06mS4LQItde%f*Lrd)pgd;U8lhf5j|F?%?(VAR_Ac#oLp&_QoI^C z&6{2&A1+_LM>abR-%u$n-+(zS*J-ER6Ov4_6beUOlqB2c&fKWx-Zz%1N-A|_F1P7 zw&1H*9~7IcJW?RmGL;Mxzt`hv9kUZYk7vbIu)!O-Cl>f6ako0R(_t|mZ+a*HX;coB zcfn2!CD$&Cm;A`X)yl*9smpkiaz?25U&IY7B;@T+c&I@x=zvfYsWMl0pn+k+XO^ zcxceg_17W`JUl0XT2n8j3s(@qx$235MYJ)5mn)|=xHCYimQ^V~#~DPz>9a|Me2X(o zbnm=^0}He66%ICM<-xWUp_mA(7GZ%`b&hG~qO;nJW3bg26pTQ6_iw>_UaS7o-KVe2=K4q@V;lgp3FQxZq*P zxVsh}X%e9n5Z5j59L&S%o_21p?-!ch#v!YxjAlI}<2rizoW_$~qn%whqBq;W#%Yy? zK9~pqW;5+Jtkz1E2dS25W;4rbL!Dr25}MHs2JS|J1((%v#ixP6osIOye`RT;qU%m3 zaOo!XsoI6K_KI3w)nK{K>X$ed@9YRUWE%$Mm zIq9FcRs}G?+gGLNAy4;lKkgZNFK_MBxUXBIAlov@Tg7kJ5?=W9j{LR^!k;L{C=m3` zgRc}*Zm5_FCg@vx?aOZ=t=^MEyE~38Q|s0^#6mfa=?Wn&k2%gIC6+kIPvS?7Ia}&d zT217fm99SbZvTGOSs7t`qFV_TD&M9Pj$LukDh9LpO<_e8OdcF(B~uJ@8lYZ&8CLea zT;pisy@x*A7Ov* z7tp_!r9Yihf1xNR9AQRr_Gs7c#WPcSz&es z?o)s#>;YcukZz49xd{`rU9vD0*4z5Z6TjaLeC?QCB!HPRVUjG}m~UDr5-MtIJ7Kx= z;-h*{Gp2zoT-OaIww+2N-CL)2(W*_uk@jt~7^I9B7h=56TT1ttOWS3<2N9wselvY^MSCFUaqS zo4il#IH%!`2}MBRM4haH!U2`R_mD=gQMp80kV1_>l=JN}NoZOD`2GOf#vn@9KM?{R z=O_-QQ0Is)^gco-p#4{W?n!?s%i{XVcR~ikyGCI(3P#Gx))}9S`0Ui&Z)(+I7)trx zqZ;+@gp`)E3+A=TheILhYkdZ<%z69Q`$tfu!hZ$wU#NdR*StH1V*N0YD%7Ifa0{Xv z1_^i|RPr%&JVo8>fgXhO=!<9n;YYlDEjSGN%!W*ywRC+IZjl(_Unl|jDI}BjC0R1* z{c8T-_j~8tFrHVw=@t(R1Vr{N$Nl^Jt!!**YUg5UW@#+y=xXRa$>-lAFoJOTFy zz_+StaI=Xdr|y$3u0{%xT@ON25gh8|>}JCLJwZoWLo_b2w`e|DI&#&bC(rkxu*M>ZQ`J@09Af zx}=@OEW_8<3|( zIS6(^gk`|nu|wU}zr=%5`|jXLJ91QrPHk$b4LGuAO(XA6vMwLtp!CrhFAM7a4JJi@UZ~lKPo-aA`NyH`>&f`0M+8u&1p8Z&fJM zon6(TPB$aT(*^rZAxZuHED z&B#T|q^=NRNmASElW>)f(HH8k>Hz_iD5LB}Mkw;q2SY3+taGl~a~^ z>|auuQXR8~E?kx_oaHV!ymEQVC(c<*0zI!k$Mcv6YZ>#9oHz*B+0uzc|e-m1jbgM@sJZglx)faJYwm&zC*nzac~7 za>3(@;yR;nxK48*>V$io>Ns9*I8b+RV{KE5@&rNRtLA{rD0w;Rc`AFVzar)vNyRIq z$R9`XFIB#FITk|C1iRFZO!|~2shC9yKk()cQ|^oDaeI?XS2V)BYYq2QZ)_!>Vvc`w z*YHrk0mvEox9RJf*0Mdf1Kf*R9&X&>Jlw(WQL)-POX;u9CmXm?zP4Nj)J?mXF#JQsGCRPgHD6pbpR^z{f?njAJ$rQOh64s_qRIdYywI?;Hq;e-TRF28~7CG_~UGK#^ z0{d6XMITlt39*%*)b>1|!_?&0dvn;@b(3t46)HQ4N|AZ7_(Zu&DBCiiHf~OANrdm3 zh#hBNSfc}z(KdtR43^DR#))2JCDB7-igFee%*T#J$*+h4H4x)3(~j{OXrvq*yy3>X zf3P`+5*K8htgLy0PuSo~1fU-#S4uz@Yy%xidn$5lLA4`6AjUhkFkO)|gY`Xhey^4F zhned5&BZ z5Eo%h?AC%noT*l|2T z_>AlTvX=a&F&$F+I5}o^Ky-@!s3I{^RgvAtv)DRDW9bA=tgS!2-hzT+@IZX~#^C%y zCjbSnM$rM#bZy##Qd!95cA(#D_opr2;f zann}nSuNg}Acxq$3~`!qR{CmDJ20_Zqj#M+Y7JY7MxJ#lf-*oPe+^;T^9quFnEh?uiq^uoAqOAKy#sC)_!7={5c;b|Rl!8u z7kMySDW$xAB~A_>wYi{QkHRK+b0MR%e2%8{fwit=qd$^BP9&_Ij8vuyMWWMq{4; zj{uG$6f+_s5w4Yp{aCprTcct}&u>5KLEZS#C9XBX%@FIF#p~32YyDpHdjoqT3#IzZ zpi=RD8Ny_NlX9N=OzZ~g9w@{^=E#c&lw0sc`U)VguVSI{dj#N?b~tLIg-t0aV~^%N67J`}^B$D9i+u zSe0XJRIQG`%%H+=%(x_%Dh}KHlx_!!&`7OKA0vyp#xorf@_V*h^F`XKgi#FYB%O;! zXjHT);Xv*)J|@y+%tsyidr9vGD9|G#a@ua58lsXz6t}?(JB9AG5itnK^o%!^yg$)~#8Ny9w&{q(Xa0g9q>y@S8i|2qh*yr~8f5_q786;#;ELWZt@Z^9UOz+@J$HOy5E z8hh%1gV}GUAtX*=oU|{X3mAqj5hP}f$^VtH0(gXLxM7*uF#_S1H{JE}@bSQ7U9Fy$O)T~;80%L|l(scozPLtvm3FLB9-e*A?3KJt(zi6%SA zShMdo3_$}#H!LV$52$}GU872B9{;Mmq)5IkkK892ECkGdX=LW-;1k&nGa%qQC|_eO zVb~~sX|X@M|J$?_@<(6~B=Xj1|!o;m_U(~;~D z8R|}w(HTOfLchW6>eC{tOJ%D^EH9s&Axf5jQInhr;Tm?VL5lmy(j|Ccv{If?#L(?3 z!Nt(+JJH1aMlzWnkQ?(wi*>W(eO%njdg7hpz;8ZuZ2HuU*i|$)EIW=JRq7t>gJ>s~ zwqEQpp^}dh_0q2uv{5!Yw1BrIW-;`Tl4_)@sh;i}m+s=RHW z@^$6k?p#(L0b)d^!GY+TQTa{yeg1O%xK|x(SB7r%`f_|t<7C~Hz`Suj>S}XJ$1rD` znL6T+`O}fb=n>b~gmAo4_Q4fx#s{`GJoWWYPbw4hP~F^G+H2dz$&Sq2>4p&^`7pt- z^A6SQ`gmQd?PoiQme={jVs<>y-!H+eV|hH0mkq+N!Vp3bqS{0yaK8QB{BnL7hINib z19!aJw5aD|zVs$E<)5+Qo__pSmSiLrx9{>0PYMV;!pJj9BhHOCJb0a>Nc572^ilaW zPLwr{>@`uB_E6`tSe{W&9+_}gR;5Q2MX{UF%o}{u9%x!URYU2E8>|Ow6B!=npNGFT3<=^DmaH z1annk{{N$U)}%KN3H)~LgnqkrnEoyER58_%G`6?-N(WD)u-P)>mVgoyHpD-Fk_ zi(23}+bg(BbmYlUxAIPzlH`^{)ZM<{H4py0R1x(|d-d>}qFQ#bul3Q?N%e|-D_Nw+ zO+b4Z#8hmSDwq}_tcbl_egjp7bIx>SvIrH;;%!#Gqs=zd3oe_V(@iDxF{r?{b^gsn z0v9*#9FZ@Gc3CDPTAuM&MfNr+J1<1jJ>*y^6$_6%5HL$)=VI#PF`gbWm4I-BfU0+i z|4q@&*IZNg`NF0ZcNsWdIl)GN%FAHn$B80knl~jDr2}SoOKckQZjeYLmTMtYL#J56 z6Rgux^eDlFDd9D_Ug*e`G92Xx2xaQKB`46j36ZVVTYM^$mLKtZlRA`UD3AfsT)pw)qseELVc_SMo7NQgG#r>A~yIXm*jU`8$}bceZef%v;VY;%;9bG;IEATZAi&sn#OO3^!Zk2f;L3 z9I~)T6WnW7h)WsCwv}ZpBccC8xUpl}WMzC}!2<%kjC!q4IujK;hpH;bgqmufb@lC1 zHuhk|jBRGT?coG4DUkCOXm@k4_ttVa2gXnNLf7A4HA51Z5I=(U)zZ(O{qcWbyycuV zUTr6zy7*yYtY$Tpl}GQHnnZbyg>Ir%gRo>s$^jIb=5q-2Q3@H_6s`z=Azc&?p+WOR zxAMN?9iB`3ojSZH=Hque$1R~aX+L-epn5|ca*vO--_F%Z@qx7R@z&5zfr>0Q9eZi$ z&$bsRT(~ez%-p{+M5yNejcoK6V5A3N^#AnMKoW2Y*2E;2Q7HbY{K!n>g%gF^@e-!t zL@cO(WpwIC`hdaUT<*w^xuSO!zy+>l!9@&vpDWd_OuL6$fYoVY7%g^C#h2G_8SPk{~)` z*)u%n0W$ey&7ihO;HO^{%3;FbBj>{Qxgsusq`$?8zu%INzeObpuxcXl0XxALVZ}^#M@I{@G|57=|j{u zOpo9FMl^0XARxy7C!(1c(#whnidY(&I~m$a+B(?$6VR$uLsItH09{&2!-b|i8g_{Z z6OG@Dr;-CZ&J1t8>9Cl|`K$C9_@lJn+Yp}vp1-}_E2-!6elk@HaMT-=>a%?o5;X%Em8S(*d&U1&@Tcm3<># zB705idQ=a)PXBn5;VV63Y5w&v%gmchP#ZUzpCIJk51!)X{N?iyv4dG)x(15~INB}J zJD0a$R==k2mhj#`Xc|4$=oIPtX(*KfQptb-0d^wPuL>TJq+u6n~Da)0> zctJsR)&bU%;8D5H@$u&Zr0c^#)-lAou?`6?;J4_IC6SU(|Fkk^N35y+j?OHfH+l6Z zALHJJ;xcIyW_vuoFy)il38`C|S~1(sWo|cP3UNoGCXqnf5+|#5b>MqMW3%Es0@=#h zIF0V(0S^<(JGf+Yi~+zrIq2^KQ;f+^u9w5aT?h19N7Yd3JM8)nc5WBTxK`G(PuvUV zkcW`pB=v_qTL8ybW3&9=A104}D<3q6$=!zyp?6f+rS_@5hVNE=M%ZRP>Ms@9gA5_K zN$hR61C~=iF4G0m)9?2KXw3KUg5_xb5kv8C9|I+-&G$Z0G-s043YaQP`6LaX#4hx$ zUhK%%!P4udc6tj}cW-k_;^#C=mQy}s4@eaY$ibZN3RZQJR3@!0=edx;pNK$63wsfabF3y4d~)uxR{o!XT@bcrSVDknMr`cofXepgnfe2!&<4 z+I|syX_Zq<1)7r&okD%K-HMP+SVyqLm}Yh^6C!SEMv(d-jY5;ylJOk{A7>wiBX9X? z`f!gW{e0>~Vat8mVGMaKdYtf|mR<-wG$aq~UM8NP!?f3$7%z#2BN$Mi_nh{{=F5M? zeN|i57EVJjMbqbaV5OVlI8xz7J4Mgjj$8NP2uVprKlK3YyqF6b7yR_)aD5Ceq&?ZO zUKYVEL%PPQ=%i8__qx7i6Bk5H);CxDX3UBwX8I9~2 z%fOVSWGk5yH_Q|H%%?ixrDJJ3YWKD(+^f$?(`V++=Hry&AmCtPS#g+Xobso`6)BA= z&^`mOF=X>Z2ck|Eu-)@~IA2k7fUmIYT>^fez@(NFwQ#&TS~R!C zwY#NmT1Y!QFNgcwJ#DKTc)8Ql38Wm4)<_|!K2SfSxAgUmd3PJ zQtPzP1x`LTzU`Ly*tpP*$ATrn4gM%p{Z-U7U>2TeVm;9DnLcGP~a zOM-Ri>3Q zSC8EW6FSR=ZfgY!Ry(#rM}}l}Qu>Yi{R?0#Z@d}8l*+W3eML~6;p2-Kic4Sii+LGO z8al;)g54mYy=X3}~XMAqOQSvHETNI$(o;7|UWq%-Ts3=2Vmx0s&8 zQL zAzw^m#v5>9oQ&4#>Dh3!1G+WUH;>o{@+qKk_44r(40pDAKjcy5T2iohjm!Qjm&*O} zdwc50{Ry8n&LBF_H-%Kl*hgZ0InqvJU(aU^gwxPDMD|v_PJ-Z!dnnt{~+`xR+$5?M}NPr zAU6ht-bw7c z?aVw@yYgnWY=MW(BV<^1zw&Iayn)UBwK-zX6nWSPP``E5NLa5O+L$+t&Yhz6Kg{Hb zuzu1Ha+LzwZ)b)D$K|T|kMV}+aBC;h!59xG-Il8vXQe_bx`{qXxzfYo?{|d#6zO+%ccN-#I!rvb%embqn zg!+hlq?gt?`_t?Moa!F*hhF`g0)uQb8ZO>~V3GN&9WzPMgX@SUGrT*>T0mQwnDiE; z;h?Xc1RT-+@cqWF4&tkyc8%Eo;_MrvEQzu% z)0MVu+qP}nw(UyWwrv}gwr$&$n(XNwbpQAUZ^erh@9$eT_Pytv4KE)j$>{klwX+;7 zQ!5iZJh7Tf&|1bZWKsb`>2(j$G+?7CCJQmFFe2_5C~!KUop^jeW-2|Rg6618tr422P47PkV(ZOD8!va9<}d`&DKMsthdwN9lmJ6E|B9Z zfK2ha9Ky_WQz)#}ae@|yq^mCIF2T(#nT#8?DLV6e%-Wz&lrfZT0MoEfvwYY@SUb)x zP``Ut!)+2n1>6e+5OFPq9r;&~FcC&Y@H#5U)SuK`#6wGyad4ChwF`$2%9*S^i7&}J z#_}936uB&RFR8F{fM7zwMQecEajoM2iLDPv8HcefiBUsWSTWB4R`R zyo~?lnbX47*v7z~PRP#2#=zEC=I5u3fxWPWqlwY~n$=AugSs7zpbh&Og<*?KOm2U-R3nwh zoSqxs{=snXOJIxqv65p?->-Cwo>rt!3Cb|lV3>9ftllxYOpi_N{7 zktV{Nxil1J=v9&p9K_&*a1{aLuB`Y#p9NQm>E#Hkd5xB3NJV@5j;t2Q$`qqYUmyDY z7I_H$-huaW01|$U3>zU`%*ya1$A0?*I{8G2T~*r zMs2eoF_~r{D_JMGmc3HW`W=rGE>?@Rdv{A;Rfl4jzh|HdH3AXo#%a7DjZPnJ z1#3R0^lwy|Z!)#b07w4@i*>KM8``Ci!c6JMvg;Kn0&s{(F z7Nx2);Q)%W?L1rIaZ7Z^CXt+Ag%xGj#YioMF=Ok$Ib*=rE<%Fjo7_Ao__66GvPONFAXtvup{Of#?B48_usmg;n^%zR

      e~C3|u&%{f+)B7U6qyZrC=IpVZ)d_a8X( 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 z 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 z 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�{h6P&b&LdBwDkqgwU0-Jy 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

      p)1s8f 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%0AAZ&4lS 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

      e5#asfB7CfwG@9+| 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 iaaOz}^00*&ERll2@cVa6_jb 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

    2. FtG%w2cpwm(1A$QN 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�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%0DI=3!jD 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%0ANTx3}ijkR537}fzQYAzb~kO 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 r+npQUmE%yoZ(59=wB-J(N2N`=u`8ZGQW| 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

      eBq^l-eK%CfyM7J?bs64 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%0DDIr7}9oef;j17TL^sBAZ6ih+;jI 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%0DKotw<#qC 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

      fO{wru~t1EI1I99V1H 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¿%SFD)6BhRciFAjx!Nfz9;-iiWn9N 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

      M(6BSdOZGu8N< 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
      ~j_0HwI~t3Zn0d;wJG$AYsbc}g zm{JNI<*VpNMoDpt5PfL?Z*k)LAZ2aqpFbbRSheKh4?n`$0ro8t!BY7ET3e$9tJR$n z>>C@g$y+aAxeq>-J`;1f`|(|R7#&1W&s{ogpmb1i6>J8qpGl9#EHE?J?i37kX!+ti zWh`~D#>kGPuF!lsOEyqU%_U2;h-fJm^uGWf9h-XCO#X438{PgVA(ua`=Ry3Me%d|(spz8$L`!Z?Dqc7yv=%5Sx{{liJTwcdzP*~A9Mb)|dg51ZO z!0j+Pi7lX=nn{SQZ(P3a$Y@s!zq%4QLgB5qX_Mzbu`e*46W4sQ*9Yvu-v2HE`kI%L z20t`Ce@;%M7|*Qfmkm~1lOnZ$(eSoLQUVll^r)t2GPpL>4^&OH2dSt2Qcn$0O^H$| z@1a)6LnmVfTLfLOdZ}K_LwOF6UBRW-iD?h)JM{$(QmdPX1r5?;nwx0BaDatK!@nfG1e*c)sHKWQmGFX6M!TR&8AP8=4X-uSY_2xMvw)N zv#rKmW-waBF#zNyAf9)uz&JB0qSGen%Mv$mEc&a{X)sNG^aax3H;J$~sO(okA#POkc18EG2fGaRuGfyGA z=@W{dLF2zd%5-uJSvl~wN%kGcQnq=<+a<6oTsJ%Xx6#IB`+wk)=wJVSDuXITL_~fQ zt$Og!Maf-r;nvVa?K{Cenc24P-_rnCUvgq@tPY)ci@`>j8iB4L{8;Cm(pzoNQ_h)a zEK7Pb=n{|R17zs5;0`+%(w*_`cGCY<(my_6yp!=`JJ`HDUxr@eQ(el)mowkI6t=$w zr++Hye9`poENEHD)q=6;pmdTJe302A-~TnNi%S-EB1)m$m)R9mxhIYJO3eYv#}+uN zJ#72}t|4Pl6!~);E<)eYetDDohbCz@DVo}o^^=qjD`PDDvnA-wjMOnH%+AAj4}x}S z8o8{j)H26K?JM8Eq%-25bPO@d6lb9$3KmTti77T)kI~%$WRcpy3?z6f47y_}*OPa0 zr(@lpq=03wBM9Pt%aeKDT{th2pIJ6aj+gjXYEN5!|A*XuPj4@0@9xdn$Et+#68vM5 z1HHN$z$9pey0!G<)Z?43&lEQQhIjiiS1E%si-vBR*<&i{$?X0i)LXARjV{IDbR&R7 zPh2W*%bIMf^O0S}Pbq^-Xsq8BnUhLEx?Ohz5WAxJm`+iVE|neP5t5jw;zR#Z-6Is6 zIc?%ayng`Dn0bq`fP{w00KTf2006pRxLD1+zx?+2mAcedC8`Cb_D*>T?5?swhzxqn z&Dj}26_q(RfQ_@~iaoR=cflz2_^U@cEsr75WCy1Fx2Q?ro9H;Lz@FISC7>1C2CNWxNA-5bMLfB@CEtHp#7@i zY&q^+7rtw+3;PTE2cHL@59??v_m(4^z+5F;Kv=u87}7modIh529XH{~Tnc|9NJuHD zny>@BAS9o^_TZF1izz>XkEs?&s90#z+4)XTcb#{9*X*JB!pmiTm*#qRy)Gd$*MaB1 zyHPxLC6_-7D3-JyA^t{tUWA_iw#_et=ORuYxj{S~he2r#t1MPvzrN+D3JcO4yu1Q8 znT@t{ydTqgjtx)I$Zh3R@CV0e>u-*OhCg>yRf^x#xn`@yHe_fY*Dvc-A?BLQ;qKbz zzCmd4L&nO1X)c&T@WiQ{OL$7m>u`eBGUwkehxg}RbufSdu*;Fh)H@ShDFA-2zGlBfUS2%dEa99HwcZtk21(5#?}3opF3-n1jIveU zkbjk`itYSv-~&SVGQ057TH3Jl&7@m+L{nThR|1P^4`i}grOg_8GzjM_dlWh&&BmXsiJe;NvG5K9)@;H4mr3C>LZ6AOA zUN}PnIJPn;N_O#T0vbtVQU6B$C4}~;04+ca`+wrp`FTdkK**&zF$9Z2sHr>66<5fM z7(sspll>t_1%gV=EJZjz1{2Mp?-gj(?>*uvHgA;sxbL|n-dwLeEr+8&nw(MMH_n@F zA^z;J213&d#ktBz`0?i-6Tbo=myp zE}XHoE+#!n>PeiNfWfblSTVA>Oz$?urDj7+ro!6z7YajI!Lb1k!;u(9E4bSW_BV#O z6Gw4!7>k|NYurNr^=hvH>RlZT^HAEM)`XZ)GF|_rmXUJ86!>gv%YJ_$3{Ivc71bTQ zFWS_kwpd|}tK!!hYIEBs+WoK$T{DZ>v;9#97c`a1&LitAyXQJ@izM%8|S>j(YbNT7z zoeD2E`RuNVP&wv&`!X*#H-{WqZM0$o)_Y3>Wmc0~*-DCqJIa(wC@`?nyF98=hYUq* z$w0+v*h*PRcBWGX?FWY>M!h2h7T|b5hw{(0@elg>8 zK@Jx$ODq91ZzW&UE2YuRK7s&1OjV)c_KDLCe70Z9R&1462}7yp{9X1e=$ob_Lr0Bz zOn`cC?0d%7=VMk`B2Sdy)8-k|sNMxsyaT#6kV0h1zf*iK<$^=}Hsyg+{HGfzp7S>6R%}A(GX)vX%hPm-*(iS~%s?*TWd+zU_sB z^w?jr`eWuzo?Upy->GTGouv3@GxM)9h}HUx)~&L#_Ff&AiaguFh^9vWqy8{pK#d7f_R7>U3~H&dDcSYmb>n5pr{cwp>sL97Pzoe}Wi^LNX2o*m_S;ZQ4UY7>)hq0K z2uBY{9xa01g-=m7Z?9ZVgp6B|`oVUr;K$Yy%rBM$z6kKmtaS%GLwPlQH4aHE@%_I- zYhr5tC9J?Sx@L5}J>wE|z5-<13eRZ%@Xp!$QQV<%Wd2uyBH)PEp<5zkw{Gd1gHqYv zsXICZiXQQhA?*vS?g*Jy{Oe&MvW0i=jgsqvd+g1yi92xCaT8&cn}dRgOJqA)f(Nn? zEMb*vxah}cSY>xPcd~g$9>QHjz?C+B8}Z4Gh&HssrgfwP#zxd9wxDyQCFrun|CyxS z4YjmOYAtyzAW2nnT@{N&;XF^`I10KDM&W)SVpRo>#v~ao{*1RxzzUT2z6KQD5)r=(Z|@43RDT0SNI9V5?UP&ZkCMhdKNmjRwv@-N zeil>y2tU7qc=z*7n?iwpiFR^=i-;@M?4kjrLsKFDCfq`jpDvcik_h@D&>Ig}y(SGdAyt z^0pZioA3tyQ#~N2p*_R-jSuL%9teda52Rk6&%*fg8gdyQ|0Yyy?`ecc=I2QniJ$>< zIFf=JaYG2$>iR(LSTYX(_HS{A3qg1GUz}SPcneYl*+xzlqD{>`BNTFp|xZ|JCk3_3Fo zYI~iqR~>mJ%!7#?W0|5F=L{no=M?@k&I!OD=j_57=X66G=VL)Cmib9A)Tlyyx35xY ze&f8AAoq#Qf6Qw|?D~0iJcRj2VIbp~%OPu{%KrQ4QYNOl7uv4ItJzcx$ywh%ah&uM zw9zaW#%D$>m&^>xUkEz_eP#w`2+Or$ipe~u*sjQ!5>f4RQb@}+LKburgq{#a-y=ME zNdV#K6V{S+Vm2w=(0Hqt&}gcb(7G#|;JY@H&^ya3nMw2t4O^zl-DU;kH`xA* z4ZtnUVk(FuKazLzppefK@COEiM*Y8Z{({7#Qm`PW*7HLllZeL=<`?lp_25dz*vsDn zG%^hpoY<53>nKuu6Lh`*<>KGJ{-!zx(CnMsmxwoBq@o>6Lfmcsf~pRrX*<^( z_d)^nUHYOW5oyS&ye{hgq7?-dDmiD=crdSUrhcy@%3`|h>J^>;zH$rKN~9)l$_i()2=sh>}b{OyV+oq>?5wa2PEv>20|or2P)ZGeBRuxb~u>sG&lc#_&vE z%#3IEq8`}(4(Hf?^>DzYlV()k8ATHO(Na;aO9Cj82txf40bVjiObAd*Lv2Ma zrm=+PPV_k`D3({*gF1{4Py3@>Zm6S`wLDjAX4`g1b^ZIMc4&D*Gax>R5qg z0Uf=-C9M;BU>?YCd`dYcw^9?C^0}j+aaknEahF)Le0fesFkQv$Brxp%r6e(6AOPCw za<@FM{H$u6dI^EeKo7QnnSoI#@RWDWoaF^817Q`3>rP+rK+5>%9%X@)@!s4qfRwSJ zALu~J=va=nLH)Q>{JpLS@(1znF7N&Yp{pTuZI2()8vVKd7bgG=Me={H{wdmv3;#im z4-+Q&gA^`4L)@{)sK<5oJ=oI!`PQmtqI_}jTZHP--v&NrflRlRuI)rx|D%|Zg?F=Z(|Sr{&* zL4Wn%wgMD$k054VQ5S#M()qS=UqGABe5~tUKBAqOqZYL#7niWOw8Zju_$7Hv_5tWh5CRxst%ga_mC#@F# zk!p(l{j15a=ECU(XAGF_V1mSF|ZZj=Mbzxx6!28n9qA-7Wp@a zUAMHHyC^gh+#-)Vsge2u{$IHQ>2{3>#~MT=tG0DyDXv}DF`rpXs>7x)oYJpxT8xU% z>q_l|xBP?g7sMtF#WBIWZZQF06`fgU52O>!RSWdT5C+v6c?ee_OIf~=3Pmq7Zih& zDcXDo*51!2#nhu%yfbAPoxGnDeu34vwl$kh7_)qhaCfrHj(X-RqL9Wf8p@wpnx^c7 zGRi0%IZfI%D|1r}o-49qXPi5hg#R$PRU$dM*&ETt;)1h?Yd#c~?f6jj(3PzKiiAWORp!wtUi{b6vBst;q*Q<7cZFRd%oz7#Ui-cbD-KNwC%b(?w#qRQbhLU~$zWK8WDpc5V_SIwn~TQz&J6c!EO;oL3|?+{X1Z#t^f*y++B=5xw(HT9l-Uem$6 zC3*dW9Rb6B&}arAp2bLUE@UBmdM6n>%EG=E0vL1QQ#$RTcxk!P>x%_aJayX&f#MmGGR{BtQRN4~urn4^cQP*h7@{DBz#u320ser6qGSG( zF9RZi2*ig3Ayn5N#I`>qcL{>C8e-8`yM&}RlX&mbu3q1eAR?mtgxIr~UO`qqz5uaq z{=*DF`U^5g$O?e^HzN<0=v(ncP4a%Eu%h(8`r=G!wj8(K$Gk$UQf%VuBtPaio9|D} zUN1AykLw%2?iJ|`TR$+!)>zssrlAfzwqyYoO@<}dq%FP(7tZfc97)G`=iolnca1IsP1myeIAODMR!!zJS&-8o;{7fMX`fIvyd-jkH#OM8~?SH`WZ&lrH zy10Wya$&8Fh}(7IAacw>l4Mq7(P6J@sjjd4s_n}+C#ye{fWAeUUP7K6#mo30c1n8V z59~EK0PatWCF9x|U`&u@nqf)kq4fKYq(Y>IU9%mSQKbA_OCP8gOovmzN&uP{?SpfS zyrGmYOa<7^UyJ?hxq+B$( z*Q9IDobuvRFV~Su`td-1Z<24QX#%>FFwsh0#&z*TZ1=Ixm|=b;+uAf6yk^)v9AFyl*PZ4=ivMJEn2|(xeu`pa z{ej7YKzkbv!xH{wG8iy>J_6Tu zVS6fpCyM|SKR(#@!q(ARyH6~|u8lA()tc4cyz33(3Kk;DF zqeYjNT&c`)`&l2S@fR$`iNZ;=Yo`A}1zN#*(e5Y7vgEGE0mP3O-I)E20>H5a8SK-s zMZ9&=4m2Mr^8_2Or(QuVJ6zZ?P>d0AhQ-`Vp{z!v^UrIk<_fj(a)ic%%wG>kaKt?S zCftuge!s}e51~F0Z0}_?Csi*)PJK@l7qq&!Cc_@9C|CZL(6Pb1tukm@!un0*32F~M zeR1#X_yY0AUrbv%1xm13QMqPP9rc+kpLtT6)8JVFoCOPjeS;x&{x?$t?swzytDsQ^^qstC z#9Hr$($GvV7ts@9NJ5HgMKvfOJgh#&J7{lr8@f?h1q^_A7+9j=GCBhc8siDBItu`R zXTm+2O7x;7y32p2{0IjyPRJ|7G6iR6-gEs7`L`!kOO2kRcCJees{fP#Uz8_xCo2tW zr-ZDZJATvr8}Xen#COrU)H(`!ZetXuChZeV}j zMwTqk)A}+1f9UZC|7>2jvu^S2CBDV~XFz%Dc4Ui~+GSX?Z6`6#cFoZ zinR@ez2unBFlj|))TBYSXx}A}7+t|eTG67=K~BQ%5myJ$r)z$;7lk6=XJ8WN18@Z2 zfxu#=NdvBM+%)u?Q+6{+WvY+0>0;v`<1J{bVKt!uOHs}E0v^!&{?Gux^qatR1NRG) zfc_S_;Td*-#lib0+mHSt8Mf@9LV#*}m8_y&>0_02oe-o=wTv-%g7e#*cnvKa95fd5sK zo+%nKUG~UKg@Kq|&B(Vb9mOv}P=S1{+`+IM6|Hl1NK-ujP%qK%EIdX6&i4kA;R_sF zRIv^W2z9i^Q&9s0j9{=UX6JiPp&ug&*ckkS6KDOi6en%?2QTg{NI*C(-asS_iIQz7 zEp8X~I>V_T^oN=EG4~?=S9|e-2>;;!AP!rH?qdXusU2Vf1`gGH>%bi!k>~=i{O~|! zR^5FKR`*7EH+CTkZDR|Y2OAH?+p?MKOAncGq9B%X#DJ`y5;OyUgz@7$O2eSuU$^gy1 zf7^^Kp?cjkD@e0vzQ*6ylfNFKoLBF|SSdndz_y!k1B0@+@c0RMJb7>#sDKdn*ESfK zk3R=&v^I|WRbD(M(jd*memy;J0v1%hv+u{b*`4S=#){|B-Yb**RQw52dK4k)`J%iAs#Q2ryyTL4SS2$Vw! z0Aq1+M0VYe`v`Ch3k}QpSh4Hqh0SB^u+PoWctQVJzar|bSm`i@sAvD zOse@=Vv9S5g5&CzBEd=JDj#DTg~e@lY%N0yAI|D>N0e)d(y zliY4k`B8)yw+7UQdg$`1xnu74InYAWO?9f~d^KsVk^wK5fN}9vz$wae$Tm6A@}^gIEl8l3Jel?AYzwGwx(@pk!ZGykXibidcR#l8 zLi2EH<)^E}HGx}pFANm`k=J&s8T)(3{=Dt+RgH>Y zMw#p_C)c{sR+C?fYFmUqw|Rh*Mfzp*@1dF_U{CMV-ai|2%^Jq7WXvkzc8`T{WaPld zJ3)wbH*R|d< zjcb*hb|A?FC|2F&CqSt7ml-a~@F?(Gy}*K&riywX9n~$QhMs1}V5$*$@;P=Gzjl4K zsqyb`?7MRK7uI<$*ZLWLy5dcEWcMMUX4QIB`jnHPgG>?MTK$hB6Y;YC7IZv zWPCekR_9!;D~Pe!|MWpnLS9LC%8`fIFZBDDE-F0o=WYtTo-0=iByf!)Z677Aj(?ON zC56$?v`ghJyzoPJQ8qFO+W;@OtQ>7j!ZYXASC-lbTkGsIx1m=x<%D-(Rw1h{llCWE zKYtX^bJ+@J<>hmRj5Yr906>`R`5J45CER-ONpZ*=R zjD1>rv~SsF%fa1zt1r{~$KP}LIeuk_lJMdpGB_)8MYR8Jqz9093my`u2(2+RukG0# z**c;lCl*f}7tB*%l}0$%K&ZTc{I}JN6@BMzM6?r&O0R_-UTt5gLBT6SalHJB>YpI? zp+4T;I{siyj#38uwYQ&0EL_O=O<&liItUyQ0Q{`0&%UrX-WsMNIsCK0a>MUMw--FN z`Jv#5(I~O^Zbw#;64eWs;P&o}0@Km{mGaWUMogBX?+T^uYc^DVm!7RVP{VPDFP&b* z_(VS^r@$f@W-=D*l>XhJXF9 zlI8_XUqcUv4za?yE50-m|AP`NwtUU(c;4<>{Ua|P1`fZO#WSc*n^3tkG9$O5^Fal4miu8!%@oJj-0jT2!JPkit) z*}nSez?1SanE~(#y#B{-RlS6I)o34dAFI$q+m;YZGV?GvCJMvh*{DH0Y{-3mcqDET zHp4DIECm-sk(?h_{o4rN-;gk!wBDba*Vp@Anz7v1PlNOBoZeZSqB|lbz*)`N`-6#q zTzv39&fiH2154KR_YD+&QM)96IRpbb(KEcAC1q%6B&;BPj0|Ln0#+(C2=vr;V%WQP_pVHL%Yn! z?6P1vT&HZo-1;u$yCJnq<`Tn3nHD1VpM-qMQk})cVNwFvwLR-#1t+sEBN|lOb783(Dv|7-PvI+gan$Jj zCwo~4R@t*}hE@2$vxq-J=b}4+yntqiHrt=&`O@P(_qkN)Tl@ zd%=4M_The%kvcI3MXK@Zn@8AYlD7Ln1N)fq+sFt2P+}D1D8?Qro>144pDY8{}`gld=b# zu$am5=QLO?wx<{}kRzY&PmC?{;#y4jhjsp)QnKBrD$}SVVYRmYuD2AYeXuy=9x`*M z_XYf^21Ym!w<6T69#OuHdD@jDld|F5GBpeSkn%!w}ldG~(&2dya0d+KgNxe=<44e^3kl zax;uD@b%(-pu07p++ceAp|?L-cgq?)K{5LhgNz{ zg@zU!7wR(46iVU;OKf%auUror=al116;zVS_r>r9QLKPc;%+XK9q&j(%m=dv)Z{WN zKeFVaJdYn`WrP#dD%!KW)ept)Aa^1PcT5PP(*5!@sGKiPUZTD)oGYC#>R-~7-zbni&%LGlePU^Erm1h>x`+8_V-54;?- zBLr_LzOI5R>O8(i_op@>i&^z2NJZ=MceU1SLu3T%#4SI_MIjN$#;B+ib5u=bA`*a6 zH28SF@hypr16G4;&s5~YbuO@3Qrkz1#*UndDI=Y*C!3Fpr7!29>E)f>hxonX3*;~B=8RGEGuHq|xN#fa z01aXGIRiCRO{t|w)?mahP_s<~* zmex4u$?!T0Kk$K#8_E?ep{dsLhqsJ<(xIB4E-qDv{Usb z#v+k;AhvkBa=FBr1<&rw;b)7p@<17`d*Hr1pBzYNVG2! z=Hx;iD&&8lDWvj3b9#|>ZCCJRvwx**hLq1B743T^d0&2*Zo_i=@9~5NxdCObw`U1c zmySV~B$nz3+)_&#uKv;-3Gvr!KQTKo?&VKdii6tA0xsdw*4&0gq`l-%>6A} zAjhY8+Lq)bou0^ne;SSW|6a{8t|Ewa_8w`A&)7xc_eGufWIzCP0iOBpKBB;YZ|E@S zVM9Av#mp$>xU3(Il1qtLa7wY(>%_yoh?fLMZq*Y!7L4BZ@rIBm5kohyS~qb1Dwt5 zH?rdXoMq!vfnIdBPyI!v%A%k$GLppyGJ2W>oap2)5cvMtB;W|xUcScenizVTru_A9 zoy8^EI^q5YkwLA)xkT7?pY;8$3VMOW=VK4E<%{RJ><&@~^Qgl-gEPN~HQe{){jlm~ zh(Y-6e`gkRhN`4UQDEWWxRTW~EL-ceb8?MPuyc%oQTNKnsk*Rs`=O$6n&m%J>J2>w43=Z7d)&*r+$nM*M}JunzLVMP^m0 zncg1tFVKf(iTs}l&R0&R?zs1U)3v(NlaKEK4A=={fz{i}V0uPWfh94C0_MaQc+I0X zbl|UHGx-GZq~9N)ydsiGb_%Ru;(WP;(Q|8G!h3Y5$G6XZ$Va7i19J!9a}@^lxvo`Y zy_{%%h8|iBP9jduzgttH=BuMCd-~Z))VL*eyKn8g~u! znvyALR40QHT6moLHb)|b7!ncP$E`CS&k3zn*rbHgQ+ZarKAS%n@+pMoSj8j{wkL5i zp7HfrK;~m=kM_VOI=;zIo8$2qV*OP17os4sUnC>O7*T3bJ%YQ`4lRVoa!%EFJ2GhY zSTZ6Sdt6oc!8p&sCw4l7!8Av!c6dKpRvl$3k5DTml^h2zqDmB#z0dABw+&6qcsiK9 z8dMo;i#9aiPK8Jx8fWF0b3tz&xc7bp0^@dgJiwK@hM;bX!Sp93TV`$WjvAk#Fa?xs z!=E(SZr^LOD)Ob6*;WH)*aMCJ0 zYVn+}+AdavyoaPF{(aOZw>x@9II5C>t6Ud}MJB`>*Qr+q<3%t%8|3}zUdJj;fpGjD zVQcN^&G8`lWN@_+8x<7i5yhohi-&zzBlTHgDkYOWk`^c#3w=|X%+WK|%MAc~BZk9x zj1>d5$dCI=Wj0M+&=r6o)nD_oJowdKaWCQGyf^Ms(lvT?2oYJ`fh2?X3m1n7Ao}x;$=;Op3YKUjpw4_0_-008;KFLr&nS%;Gy;Xf3y++eu=LI zRfi3AgrhCrGp*0U@yZBGX-h-UETc(zBEx}*Bu|G?4{Z>hJ@K%WJ zJY+MAbIo?AY9`Q^S|2VVf%UN94eX=@;?Rno@J83>k1}X%;~4?Yd(G56~CW z_UZIk!%j%Srdml&uxY+^MDA9HICGjXBrr+lP>3RcEf{F-ViAfKA~)U|i|1mdT0 z)zW?7>|?hrkymi-zQoUF7`RyOLfU?BtN%a)yl~IPdgESWddO&@wHy?+Hj)3G@AwoK zLf=Ap`4rE(fU0`0gT_kQY!FxE^RmuF$(C+9 z6_)3Edkx-d^z_lQ-vxNjY`Up9?jh)y22Fw3&0=tB~HUfEWntl<_H58vn0Umb8>3WS<(aAU6iX(O3L@wDNck$cTC%T^Ozuiz0 zI%1o%YET&W8pt~@_oq7+!TcwM**FtC-p0&=dNg0+914YhSDK%SeXff_WwMGy!!yTv z6k!}J%;gbnMKu7zn`M&m%0AKN0DUl}<@SKn!AS@OhozS*w;p5+wJ%qtE6>ax^NRBi z$x!WioQsUJ=K&5q@55xHb_rf<@8KKk(#$Nq@=Tm1!dEs}5SK{~Z3Ap|11e<$F8TbR zlFSJ+kAg*p3=8v$;_{Rd&Hsbb8UA;$kAns=Lin%0Ixc32Xur&@J_9B!cwqnk!N_BO zZKgk|V|K*p+MWyky&I;*SApc)0p|_gJDk1{hd`b~Z-RvY`UwNhYn$IOv->;rLddkS zE}pM}6glmJ;@6tP4jIK2rJ4Y=D+92l@Z8P-jO6S6LiIYrIJCwP%mqKNU?TncKceg( zXeJl+atW%~VS5J_J@-=xT0BHbJ}mL+Fukk!IL13PcncV=N_Y!9pfw9oUUY}NgZc&U zAN?>pu1%Q5jHb@V>^kO;5+NL%0B8m;7L|R!jGm=)v-(a~jJ{dac8=H8mQ*!$FHMwM zy^pf_epzV}>@ZlkxnLh^Jw^f`lM=hMPUU3LBZI*9bq{q*bx;3~x)wzDS_9x`(biB0 zhvTwdNAkOVU}`_yeNg&7VWnt{_rab@y~`JI2d&L2B#Vx)=9j}mHg1?mgT6Nk{*EJ^<&|KiMJHjH zz+>`0O7oj`Owjmcn897rZkWY8vVORO9*j`?_Ua6@$DT!tiUg_~6orULpBW!;S?ea6 z@c7{F3`dqAIFo4 zgj`NH+C_dq)&xidNZCUE{- zx`CLI(n18XR?VHsen;Ifs;(PDY;$oh2IuB&ILfyoUXa{0j|pHm)(-XJmZ%7;XI!t~ zMJFIl0FM_4o4bEMU&uaMbTO+2bwOPknEXCF?RL(YKYaWR30LqzVrky~TW|K6j&Gr< zjvvcJTy;AN&!&PRGcf;wbaEKx53T8fi3uL!Z=nBwGNS&c$-tAaupond3=IEg2H>h@ zr!`LRCq@iaAzs%8n;$O3ch3KedR<&w>4VC@O`l=@uZm}7mp&J=;RSiPvG_&_w!fC% zjyUU1Fe5}ckQ~^rDtHzQ;k!U*e#Vyq;MVtNx*}bvDRq5}=bWi#l1!rD1$Y(qGP;N5 zj*hv=;@IGHnfD|1bxD&=-?`?pb_u1#5yG=OZq>~K2mm;ni(}*JbkbsP>CN2SF7LkY zZo#R6Z!2py(uV-VIcB+wUZV~E%Q-fC#QNz)?sQ)ew?>3i$^M%_zOEkP@~)^TWMG!DaDNbQM$hkFOfh3=(ho z_Ker1g$IJJApZ7l?6Rzf^jUl7^zgEo0001RX`>$+^C}5L@w z7N%m%DyOv%7P@RI#7CB!!}}3?&_NU|cw+mQJ~HdvfF?Ld5&_y85seZAxR{A!DopqT zUBn3Zy<@Sow(6T2=h&BEmP+mJNq(*^n?*^jvT1p%LeM+@>2e;UJPcasZ_i^$Kf+(& z*Kxx%a2Nb^V*9v$^H+f%;CUN2B!FD1j|r3ctedj>r4QFK@CjAuCkU28bFJ6=iL+*H z@%LPxzlZ~+gzK`NIkmgR=h=3j1JJYupg$<-MBnQ8h8WaaYl*wm=@oe>T5D7CH02sh z@2vF#iK09Dw8|_nv*xhC36etk!DwA)>Xe5#eBh!*sSZ;WeJGFrH>K)fUi`nQ4ZCu< zRBhk!=TzO+uMK*zA=3`@N*exuB%pRi82Az?&ITUle=*2YAk{sX$eNJxL~XzRQMh4M z(8Oo}i&Wk!3QpX5BLJ)d0e~@>;4b;GNe*LATzD*%2?!Y6p|RyeFJxha)j=tfFRZ53 z`&%1|5uAF;qv$klh}bzCpUvz(BgcWo{a3R>(HTZ5Lfd=z7<{R{-$1O&Jc0vape%m? zK+tL@pZnEjqva0q8?qLAfn^5VZB2#k;3HW$`K+3xdib76(0kFvZ}ZIK*wQ}S-uXO_0dbtA9&<7mW7(~AV+ z;6T@x<_qr6Yp%@;@n0cu)sx{^MWj1=+>0zhzgcWvJw5*Zoz+bdtXKKz?^O4t6V=e( zHS1H=T-eCDWj$dK0O~YR_5g@sRjL0iwnU9gh#Q!aXKF&ed4xH+8LgL=k1u3aXS+R1 z*s8pb_T1!-$>?>m;^hT^*0-)7DEAempdYX!7t^{@R=^VW;;>YCI~mj1YFQDQm()%9 z94hkZkUHc)-+>!0RH(vPI|T{fLKi+5SiUVQ>efW2hDHU6IGv5gO{cGGWB?O4`DaZe zqGQMlPK!b~SS$-QpC7n3JPXy*?;m`G-=942alOOZ`_(tgFV-Jy-{{_v|9!Xv^~T+2 z6>npuKK7pL+liy3Np7<_cDz=-Zuv#~MZ49BR<-uOysu7u+6XO>vq~T?a591CdY&hG zhh_n~-54DmunNwCwRVhZy`riTT65nC(e=>sYz_So11jM z_Gfe!w>?*}nyTho^3|t^({0+heBtD-fCA7Le!*J-+jT;AjDjFwS!J$IU^Nu z+GLgbPn+a9<_Xur?(mzDwjGxM^v=l-lniLgtrv0w+gX8u`8@`{jcW-}VP~mznKe&$ zc*gw;1*2NN33#d?8bjEcH}gR5dVd~a%fe<%f4j@jZE zW^F=Y00!&hmHXr!O_gmiuw4D61hBTrtVcoGe!nkgfhpDPLQDkIlJz@eAJ3}nomI47 zU{5iETFsKk%S9hZcf_!&z`gTmnn1fE^fl>P{a-7B`4|zlft-C3d5`p#tFCW!3c{XLhS*JeK_Dc)0h*oPpm}&dc{kf>9^2=? zK!V^?`cQ~q!tcN%b{38NJ_3qayYpcn2R21n_|k$?j)`mLYYSNGQRP|5?5DAAM~C&m zG@W{zjJfX(CM}g@1;--Ok!_7bd*=L&lp|;WeO3%l>_{dp`k_|_^vA^hF`30F`h0w1 z4+rCh=SbPG+Yu*{WO(jc{k-HP}vm!8pN^*Fj-{;8Y0IAmsDnOm_FS?3IO{P>+ zD={HF8tpTFSP6+w<>`fO>Wi`l=Vg<%7RWtFOdoaIWkCW?6k99aPS?n&8Yg@MB z+u36DOWsS%okj#KdaE_9DB56CS=%j4Z(GiTdSTg{ERxTg3e1xID;%;5y;d-#rS6?q^g4t3hSM!L{BjRb;^Zd(kSe zQyj~^*)NCPaaA^T)C$&NwFzC8mGsME?ZU;K7dVKo-ZSHTYgw?$Raw5J-=Ra4uFpB{ z4gAG#`9|c($G>ll-b9KOZ+`b4_F4^!*zj2#B_suD}$QEtM`)1Wkp5MSo zqH0O~t^wkJ91ZmEK=+8cK4+ePV=y74kNdO4wg2;lYS zzw9Oa9IMh1`7*E!sd}>GH68EOYd723$~pJREUhMDU8OZ} z8>0NFm*sKw4USKaO>%WoRHaD4=cKy#tO|`%^5V6jj6S;#>qO2E8grCFJ1;-GNZUXF z%(37nyY{$YWCBTVH8wONG}z zQZ4@`#*sa|2N;*Dq(M=$)4d z-+ZKb^t09IJd0dECcHm5h?)4|5-i*=snYT=+Ibwf98W~0OMVYdq^X?MUJ^fvJ+)Ww z2SLq{jU%e!^m8M25t$uV1Z725@Po}3;@|(?K#&3mPseFA1S|-~0UDN)7fO0+7tYHX zW`5b6S4LeZi!r_*>-Tb)!eLDUG~6V=L_AMq>zWSoakz$=*Y(^+`myi;sP64&sr%J` zJAd5<8z(v;@K~-I>tJWguu1hec^IkeOw&%2d4TS&|Q(W_DIcK!RGFitLR>A?@>V3k;`JNQD?~1&fyb7v4u&M)H#^(}G zk8Xbw@jBZ*=f1pQyAeH%}BJq?+BnOUs!$SVE~&cyng2> zpd}VwpFINT%7)c%n+c-s^97LN4y(_(21tp9*LQyhya?GtQqT3k(Q!gGEQQWEs7}K>JLHJ8~$06v#VndWtyBF_rVjsx<=lwW7J?YlRKirXD9ZOo=ytk zXxUDUxo2J!YaO7lb#HP1w=xqB~eU7eL2?zT{JyHF1Iq%E={mmV#Mav1L zp`mVxZ&2fYx{_-!qSuLNC0y9PU+-*}H8IO&rqL6VO7bTLDd+Ay$yI zBQo4O0Mkc#BraQ<(LFQm+wFC$%5rX2#aiXCuE+G`+&c5ZrfL_UrAqCYY>gMu;l8H0 zhF9_rIU0B=+M(MAWimdKJA$C!92*(P9>_)*=L3gXJ%9?3rm!ydcd0T7W7X};y6cF; zye(z0)$F4IXBvg~N&j*OKTl@^JoIJ)B*F0@PESKIhpCw1-nCx0$coF>^vH7WZVZ1} zF?+fKc+zhDr3)vTeM0(%Fy;sd1#vB!tARu1K#DqnyGbvxN72{S>53kIprO(72uk2R z6V)iS#=pL-t;O#jVu`;GvqbuHFCRv&2A{^~TG9wl@VgB4Lb^P=#2f3bSx6z}O z=_kAA^@!i;D|_)v=EOplrhkgkzlb^ZIf6hzFUiQIBQl-bF#5 z{qYV9H`;L^pZn;mCYu-4O1+e7heM1I-$1H9_G+gh)|b3{azJLL%3(qjRoA;DIo6v; z?$AX8sd$@2!};Kka=zPP{YG{F0a7ZiI#ST ztNYRjcEdN@Svyuw=vLeA#B&7;^(Ei$v00_!7o;ngaWT_=N>a-kyesGl0BD1CUgds` zu^0Py5GH%lDFd5 zzn+ISQjR^24m#pJhfn)Q78bNWpLOV5kx-zH!5BXXg07VZ=-0pu3I?M?xh3UT74_dT2qLKYV5s&-E{I<6d(%=%cq7a3Z;U8) zp1l;1vzkI>0_eTkCbz$gi=Q`qz@5K#plg63HTj^DHDo_X)G?p!x+(5 zwAng;%x&+jT?25WLX0(c*H8@MnMjvoO7uVQ8zI?JnW33FL>CK;{$>)vOKjou5}l;T z7euR??V{pAMB2MqY6i=Z1Y1CT&9vNuAc#K+z8y{|bKmh3+Ha&klKrzxB>`LPEQDGp zZf2xi0b3{U;UGC6$+nsyT5zyuOu}_Qh4#q#PMfcFn&Gm>#3m9*hYf^K57^SIL#oJa z&ZGr!+Sn*a6Th>V--%s}KssQ<8R+E6Kmz@lnACK8OQkGFv`*P~JXrlXIQ7+jA-naq zXR-S@JB|@jut#evKo&3+B;xW5#zCb|p?3@S^`&(s%ro^6>$#E4vi9Ih$zy6vRAd|J zbi(g3(Donw$DrRbowr@(e4vv?-@#>8k))92AgP(`g8Otj2N+CQ-+D`4&lWqQBO7H6z7k*B6$ggV77EHC! z0XCPwioHXx{0w^{2xgzDMHY01yLBJUzdIzoi?*M)@vo&dqp7$;;UTMou2((ZeSw1J zjeOCJ|0Js-KOxh%a6L?y@rl=Gn>&NcLwz#w&G*ReZwlZG7~Z2SmXxZt2h;20kzV3qAG72J%&aa7CIF| zOw!zP)>`_mN>7X~P?XV8ypdf670fjnX=2RzWV6Bvfsa&wj1E@vHh#i`)tmVxbr=Io-E_@iw7^N^ z0s^Z%aHIC>)JirfZjL%rpww#DHZL zkq66WtsEyq>S7&Cn5o+%FxY`&WXgGW$ux&(Sc>GUk}FVe^bCorRLQ;PhAw)(j3b}5 zQ823)@Xtde*Z6Oe&;02QM-FL$!u+W&h3sL$EU)~OG{`JcfltDyA~58#uoVxfpS;A- z$$x>0uod5bf#A?e5h!93AOKlF9vD&*AP7ZB0R&3wm-qiZ7~~P77c$8fcQ&?L+8o>% zY(}IRhFlH*VyUNdsS_= zn2a{jf#3uAolm)m`W8moe50!1EWHwPajygU@}$Ij;fyLF~gT3W=dZ5&k8fQQ%I zQ1ur?AhTpp^b-d*Q_Km4gR>@;&HV)eqXENBvx$pigv?6Hwe5k3fB+a>kDifO5}%?7 z>74Eq$bHC(9pe*F^VR1#Q+L#Wc_@6_g+Hm=gTIojD~rr*_4yPb*dVl!Z_Xy@4E|#} zsn^8m&;n@;J^qtQqR|S>f4Z@);2Aih*8TDnzKsXo$iJA6L>)^U?3`86a(zw7FS3H` z%^dceR%z_)oK#4-G4#tG^qf`so=QW4%_^ied)*RPGmx7x1AS-7c5ni_|6u@xrh3L9 zUzYn)ep4x$QU>w^_N+qb#~&pcGJ>vrYGyiNWCe8aSWx5vIA!3x;1vS#K(A&@d)O-A zTLqJTQb|~Lp==Ol`P}5HXM*%J}0-)b{njoL$e)4u|k^&ZgHOtIT60Tk>2aS3|?p*&fe$cm@bv|H% zm%|LYW4F&fB)bAUk&pGP)BP1zL($Lb-f_1&k_?Ne@_Dm#c$qr4eDWj4<+5TfHt%Zx zVP=%5QKz+l1ifxv0EZdecGa*J>2u{0G{ET3nU9%bZn2=&;d}q39)U>h2Y;EXWs&;b z!5-x~SQQ(m+1q@s*^=>)12-gyb^_wFmNI47pK?WXD87r=vcIuO@|2OFcoOO?VijMh zu`$KqtgCZrj*thN;J|$;HaM?tHD^n){K)x=%_o}8&<6Q;&y`auKU>GQ{9Kl1oeq%q zJVG9Mj+Z8i`sJn`gG=~tKgM21x6@^o%4_j;qRdyD zH)?t)qY@c5MI5y2fh}vtOnX~p(@P0Yst4@D+Yju z;V>+qAgmEu&^;9Hbm6mzgS$!Q)D{wKA?n=+4$E*SWd%r^6sf@Mm%ELuJgC&gl_)@U z)iUrZ(LTC64z$nGrLooaGAexieN{!i2^8W3f(tg=_6bT6)en-18|al^@LspO=)m|~ zpk4cUazLUqSY;BpoEdaW)HwDwzqEVrR!Z1^8rBcsRL>8Ag@pASr5s)Tp)7NvZT6fR z!2L}mJ)N#oB_fW@8LWrEwWq1NtJ2j!Q1)I^l0j7q>1h^{m%pq?>m+^67IT;D=-=1MpU|7zkmqajB7|R-9U&wSi=mpl;{! zR{y;csoM$&M_3x!xn2&L9~tnFyh_3{K92}Q^?p;P3Mhl|CDqyukPInHZ5KU1&~V=_1-ii8 zBA=Kn{$udJx@7o|<}Hydmfdw%ro8dlwi1op{E3@l;-h7PA&8urAm{V`gF?1h1WEAD zw`y1r*gEn(_&c9ON*6sZke^@*#!;(m%BYYjt9Lva2w{ulh3UX4aE&Me!Hseaf|I&h z^e|pw&~r6%AM%Vb&?i>V7`x|@z9B80F{y3^Kvg?*jafDlVn_&a{o>{+iHpHFW;C}K zhyK@gRpj4?d}=7C{3~CN3KYIy39!2YsyoU1rW!QO&{PT&+P~FyetZC#en2Z<93(yt zc;*T@%%gz@Q~-ykni(q9%_^U;Yf3c$4&(5n7I4O4n_S2l((#>!PTbY9%rM4!y@AY*`37`y+GMe+Hrg?>U{efHn0Iw`@8AUV zf@KTpXL-5w;xy$bNeZUYK?FA!-3T*P)c?K~0=V1G%sVKVL-j!YK=JJjRA@T5E37i$ z1CWud0_X7XB%}TYNUWFE_w7a4o&TMFaFI5NO=rSZc)mgnH ztSV7~ietV5>Clk6I>jR#%Qw=MFhF^DFnSB=sAhU!2=tEucdDHTOYxO@iBgpU4+iI7 z1Z+M$om@D)CjU`c`Ar%!)Uq*EFBf2~hWY1#855~9`OjJpyPzulzw;VA3?)oju;26& zf%ip@AT-}?4V)&J!sJimRiU;f^VRLZN@jQTTF}mVWMVth-!Qo@(~`{-0X_(Fn36Z- zvw>@$y+*`b!?C`S{6EBYJaXPQDM0dXdJU}xrq?6W1Q)aYlNbukWr-0D_}N}fz{L;z zz^ioK3LO_Fn`(EJq8xv5Qh9!*`(Y9^E5B?l*FFu=Mq3u{`&W(qi&ofby0FWw_^X1X zQo%x+uXh)lcqo4vfMw#rkXe6YITUjKdm$`4S7^~DlOm6b(?Q*A(42o>EOpDV*!u6( zAC~9IDhDxJjH2MIJEK2J`QE6cQbv{oT&K#xN!$NvVHT$T%Q4lF+*g-m3xn3xl09l4 z%z1QT8rPS084UyBl@$wFwogutPWmc5G8Xfkkf|=z^SiIeYbB{!ls1o9sjA8hmR8OX z{4)<4y%b|)zD>iRVy^nq02c5v;%fpfP(n4G_RG2YJ}9@a5LRbH?0cQT?AeXMHQ_r1 z6vF)oS|wpSF-h2ozL$^ig&Jc;j?b>9RL1|nc@k75wxn>hUlpDReiCdYvf-J-U)K4# z$o&?U6WdPInZ;5YmF3MKANy!9hE7Z*zr6tcV`#2lZ+bfFg5-w;0L(PU|EcRaQ2HQb zf%kq#Ih)Og3U-OTQ_$Bcl^GJX{k!j88lDl<=$E?Vb{(IZRzq3CvBP98d;KhBN0^HT zHlE2e3wC3rIYrGHl|QL4x4WAT*aZN@Wl=@$uTn#jQq#r%>NrQ^Rdd?_(m|`M?Z0;b z`T~p#@GuK$My2z3tPLW^!lT#=el_)WYW0qc=MHNZO*{(6M{LTw?<$Pn09B8DoZn~E z0N*zb+0mb-*7?v;I%*h>Tqdq8x-L=Adi2Y6Bj45&JDn_ZGw9sfN~E#X9~0j%dKkVVtksZroQ5Wa{)EHeX6$K-~_*2vJl1=Kc%~>rMBEuTk}J z#4vKZZ|OkWXSLN1!a(*+u9C$S$K5GuNJmKelN1C2xa1SspeKcs)ywe#Dtc`?*yzur zq|9*4PLvQB9ghXb2L(ar9hGuR3)6I))0@0?q-ttWAwf^)bpkJv&Xp&Ma_fft(!lZD z#kvAw09IWgg~EmyBDn3v3}x`5&*gW~_z@iA*Me*^Ud0YiLA4Pi3y^3`K+(TlD2Kbs zL&VZnARzwFX4@|S$94tjP zdC0I>1W3fNTU`R);>=S`V1V$fzE<;Bek=K^0L7BvA4=QZ%sd&^^o0N{dMClUx0UR0 zD6pu)(ewvIzbf;MH&(vtl!=V5@!bCi?FLlpZ|C55qO)8X2)>e=ilS#Qh)%r-6^_17q>CUM3S1ZsRgy zfXdwqpM&lFvfLAD0TF645cmmjW(|xujn)a%NaX2(xIhw?Hkn1(57H-V-%Ig9Q*I;p z5X!AGfe66?RH>n%u9R77RitH-i_qrJ<8^D#;=Cjeq>MZ)Fydq+GJ`)^LPGPyX~ic1 z`w?@m=W#caL$V53!cQVj5kVPZwv!ujhHS9iPWb?E(e+!9t1U*gxH3A?a#Fl z|7AAu2|}q|I-`M~L&UNjS5^ZTP#bKIREr-1&XT=EN#D-(%0+(^FiNSRou z?SHdmV_q9ZL9OL?AT4*8)fV#SgQQ(a3qAQEyQ5rLu+n|KoYqzVOZD9m>=M;jOR`b# z?2m4{!!qc{_74CMFxLiWI8B0`DKfbJed+HfdoCAJzo870NtF#-IUuP;M$UkEW$x~$ z9tAq|kAx82p77tFX+`VVCw`%Sz@zXalKJXAz^aV-c)3eZ6iP*kQXAYf?wPXJJ`k)NO6-!MS|0U}!>!aPJcr2lC3 zkpIzaKtWL(1c8B}8OeZvf`^j-qj5<8M;j&kkJgUz9}NQfKN=R;f3v0jN4uB*k494Y zAMH%_KNb1*H|?`i?de_(TK>~{OS8ZU~YiFefD~RPyZ9TwXFnRZ<&m6 zWxwFWYJ}PS_-c+>{`hLVnZo!g#5{09EqlT6AH7~-7$IIZ@ei) zKy?gS8aWE`O8=O32L}JectOBb=x_T_=47g|QESf*$P zW0}{)N&hx|MvCe=px_fnNqsU%<~o|P04v$y7Va74zX_9AuhiJ~{vD1yd|{+q;^g%s z(fp*12!@j+36J#~+yVohmrbDs0?@2^n;sVUJ~_4TR0|}+&hKn;HXrX2y6BZhUC=#iv{#7bPsnnEcd_G@k0q6IRh;rJL8V!TitI1o{oT!! zwfmRf$|1Fm6)MV42W%Q?jE9lfcHqWt;BLg&3J?^kZHE9n?HhupPHr;-a5-u4IE4p@ z)Ei?-1-#)*IwgN>roEiy6{LVJQ^Hx70{l~*g{JncV5^qI%8Ozzs5s1nV#=0zvMBQH zo8(!nT;TN1B$@?_;>X?Wdi zIGH_@J!$z-eG!ML7ko0ofoPavT*#x<_XlDiFPUXa^yO>l$fw~?7r;ar1nF?7rwpc2 zCWnePljKrZt_(lh^ookhmk9jDeFdiAMZ5MeteW zPnlpprV!KU@yP;wI@|tEf$7Yz%LgKmXT0+59V(j+{^KiAzCNgM;lx5cag&BwaQMyb z_qA~X-m8@Z6P{JfK07^3T~geWrU+V+p~7Adq(Tf4E~$hDEy!lKh!gx1s1Fu!7CBgA zm5K&Q6rbJ<41}x^M2$!of8X(+yT1NEu0-Gep!78Vx%tEYg9iPN`#$kM=*IuJ3UmL1 z($oIumM{Mg8vH*l&?Ybt()tE15)$Gf&%(YyPZs1@rUVnxxWL_l>Cy9P^tra1d$}L{ z-N=A@f)Et?r8K0QZ%*auCj@<$QM@&Nlz>x|saWnMB^JS0N7NExm%|T6Da<+N1IC==}p3(ijoh zx9x(<<_#a-HiN&(Pum;_F&pzh&WtVN*rU(ya8EA>ggak$4uRgSi{Tj*rw+;s-@E0l zW#kymn7JV)y+hy>aaZm^Ad8x$^_wWTe?}f)Frc%H)i?n^Sh}E?EwDAs zbyVVTKP**TXmYfzg7;Y3&<~)*kY^9tp6)o+>lloq;J(24y{WK~l%nssFT{}leREZF zR@F5LJRGtr=ix60((XzTbLBvEg_E zh%*yx{AYiGnNu)>MdB{sjSmV~V(v+t2@F64M16$L2NK_%!QoA($`u+=Oqayk>Yi#C z?hQO$8u1!GV7`(a_Qv2xC0ulum-2lqQhbe9A};&hR`ChM+c+ph5uHm-&%XG=9p20` z%A6f}j-`;|cs0}Z3PwG5?cCaS;XhNRZ?EnVMo+SwL;4;~=L#XZVT2tn@CXX|s&> zg^FsLKGD7^fR};%Tzy@^H5AfT60(8DuyHf$M@XFf{?;ud2x4Pa{n`77y=K({9##J9 zsMTd|g|Qae`vMTaQytY8zXCV?oTi%)8+iGMF(;vH_C+wZ<3Vl937M_p4DzPozFw-NrTRNePQ@N&M^7;K3EZM2rX@% z+
      #ms|N-L;-_e6<>9|Ve&SrGSJg{{92m+3$U|OTm1P;5-*>VbQr{?s9VghQfQVR=C3&%mMK^59VV(MZY@_>!s~$&ulIltvdV+JA&x=fvkT~YAIpF*P_3R=Ko5G zNRpe~a;-7Ds!^VibhU4Lu!9*mwYIVjbhoCLl6vJhm^|<>0$d(9Da4i(3U8L^#CBRU z@|LL$$he!8CI>Xus!4Q8xuMNSBBg}J>@~%3}SRq?SY8udoEW zi>_}IYcc97HB>@>ee{TxM@X++`dL+aoEw%HY_x17GG7cFE3AqS+^fhB$p8%B*&0#+NHp0?QzYo@?dfp+#W54}ZN~>^ z@t5>r5ZtybxgK%pJpe8B{M+HNLy4ye<0&EshYFwRfI;QIL-gWT_8(N<=|Ic%Gh>{! zsWwj*8m%-qf_jaGH#D7M!6j5KVTpVZWmFGg!F-85n-27MJYYab zYy?P<3GD|`yRWaotFXhN&`Fi!<%DL#wkE^QMj>#$wT?^YVgfv$e|2Vv~s4 z`At=OC)mb0^b>WF1xPtH{E=W75Fq5KE^aZ<+vaoRY2L&59Z0RQ+O)N@Yw${SSIT{? ze!QUYr(P^+dO`C1`5>!FQYgeuW`uz|F4WhWT$euwlYlnc4wZ+**Kd4s98^)}L0(o- zg50Z}svgtwKf;4Y*p(V?aeV`TlXrIrI;Y$^}vy?t*ocfIl=-f zYE`Qp_&mi=)e#<-!XZrB;6u(j9 z&`?@XeJDv(UOz1642!ap2`;TV2p%)20XUa90|-J=8W1QPm4`>9G-`TorXmP)hO%@a1 zFfQ4&gSC(0QSpHWM%)|Z`p484>vD?jLk+HFyY;kW#06(y1@nt0GT-P+XV{n*HRN65 z&ZK|lpbWvCbwcJphOUHjmtZ~O*&349o>UWd*!^>$DjSku#16-I9|A!yPw>4LLy=?DdwvkxzeOpCVcQx7=s1|`O)L03l~wG%SCEfg*2 z6wwL(I%rwMA?O6C$5r?L!j94{&WUh~{f5n7pScgeg%gI^b!flo#V zG{FOPx0urpcDD2J^CZk3snEJzLv;g+)5ZRue$xht)6oL>d1+RX@|11`TN*T~+df9U z;fZ1@=t1&orjpd}Ck^W=x)oxB73x8AoxiN62co6X={Avz>D>G*G@k!hbWNs{b@^W@ zGw8X#T>@=O55-Qn|Z>9q7T@AQHp_Qi|*<9st#w_VA2d5oW@!g0#;ADmGLQ?6gP zo8vaJMp(CaQ)EsR6E_rnPrsiJObMI@E{0yz@i8&_Y#es$k|u5=8Vi!PeFbWqh0T`5v6R;wglKfl?c7Wb@}RNul#|D2Ukx7?q3rTX27?vUw+@s3`%ybQj5rsMPg9EJM*i*ReL)S<%$`(^ z=DRUy82#*ow8ZZq;Iz>~TXFh``ST7N)cDeIhv{oLp4`MfGSPH2T~FO}_g`^dY%(gH zKz`@8r{q7C`@KOL{{#d-V4{;a0Ue#TxLqkH;1TesgHRC>VMx5gL;33u&-VE>7bTP< zpcMj6uAVN#r^x>j5(?sZf>(>NkF_F{e~i;eXhaVC^)Z*hvsD6?z$@6~oBb=`l&$kD zKvZxjibgeO`rPS;?Gl)TLwBhHoni}4gyj9CSd+eiAJ`{1zi?t`Zhs;h1;1mSL07lt z*EuHqxQ?ItfuL-2B6RKsvkaAq69~`kUWa>tL|S?T%5csG|YMdsRMa2>+V@ zmtFG=*x<5R7i&!N{-BC^lAe@kuu&bt z=ux=LfJu$j&yKq_L)y4N0iJngzX+C-sRhHC_-6|DV9MG|u%qBm*)ac|wQY+7ciiQa z4)lWN_wWu(k?D@y)1KQKuz-$2J#XBhslD4XD7@l&VPg6zvfi4;znQKF=B^aYHS6bo z3MC%t`6->2nkV4X%s=OfWdY{@%q3Wh_M|CTi}IiP&-*`y4Iee2e~JKv^$stLVDp}8lzVsMVJ0sr?r6)M0hD$6ui_}1HIS9Ag=)=oGy~KS20Xs| zyo*pM5&Hg$-0~I>lGg(HlS#;bpz~trsUZ0doHv0%`^kLK9;Wz+#5s_H9BkM2wn=SD z2tRi??}g&JuTjK6*LUT9>q&FoAAz<R`!@ zJ$gzB#pAooXriXGj$60CLn;j`)1=jLfZ1^72C_ob4I-6t?^1GyA!9@j^4TY{9BwO_ z3cO~ceQzxtfA_vr7uQFp?rre;N35&PvX-*Jhw<*u%YN;f&Ok3cm^!i9EV|krQHAR@ zBK4jr;;psR+*NdM-(`;yD}hjj#zRNNZ;govZ!|#H)+OgEk8xIxJqP5C@RT9nna!+4d{e`j!ve<2&(VTnkB_w58tTjEPnl# zk#BUZMM*Km*CsN~@VTrc!7$W~oT4tzydRFNBT=Aji~LgXm}D}Eu~1E^JV_DY{6B%> z%PduQ49nu?62zp4a|W(M+N8eS-Sh0g1qjP7n%U~+m(aITBoAum6$5Hc+Eru0v`rY1 zFy+GdINNA2!7~bQe2CsRJFiK92h){xsl0_4mPy2c&a!X)DE6fk|FV$e{ylT`l9oKv z8(&5IK-x`2o*$*mCG0OLF6wtE|Hl7TgId{TB*#)i zY!P_}A@@0PK^&ZH>9!Xbr^Qr&RwBKDm@x#EFP=TeIxc1KWi%wTT7-}-k+-M1nX|TP zMt+q2%3GCc<+STTLcrr#-tU8xO!JI0%Ccr}i78fZ5bJlyIBA`5*Kz>Hr<_CBO()Cw2>Jk~o-O2r&){kfp4(Q zxe+%hjg$fU_0>rM_@e9nnUxxCrP8Xc+CPV;!T44faAh0&L*R}2Y+ED8ul?K5Z_SPA zbX0`8C{xHPiP1zDR3>pW@tJLZ4=TU<+BYI-$rNH!8mZCDp&!)C#1#|N3J(HFB$x6I zJio^9ZP)Hup+4v94h=~r3W)G_4+Ptx*|B)F6_Y&O6Yd-T_O|lym4HiDz6VD-&DGL^ zaBz>9a!`CWXn-^m{Q)(PmaTjbm3mPQz9qhV40~`k+NIrJLY`oh>V?QxHb_9e=K;A+ zev5!ClDFJ2fbDX(qe9DPds8uN);^*m<6*my1e^6skBd;-BONjlJRk$Ap^-<6LQ1;` zuEuUELR2VOTYs(ZP1r+cd=x!KJ$#M>-EZ3FsPOrUoANYGblRfwM90hdIR3IWcg|du zFc`SW$WWRZ`d73vN*Nl7k+H==V#WtmnzgZo**OwE*(N2Q!EtOZ89Ad`{SW`XB|{=F znzYD(WI0Le&NHsk9vYdBD3Q-Am8$@KO$~^1l4wo#oLkX=K&!ix$D3?bbSz+ATEOxu zij%l|gh~90ZPq9QH_`v8O6ru5jaD0qQY*vKI3eAUsk@g^06RwrnPya7%7s^QTInB~ zZPk}m>1-s@D8)8HZplTHbGOYTq<~J##cWc{@r3#YPH>xe(-hN^Ta>hRMsf5M-**G}@d&Uh!Xpl`4&Fs2eb zF(CHo#i}XMHGWf{iH#a_k<$+`yIpWaAfBeb5)Ryf;rKzf?1S zbMnwPC&SYUTyK?8v-zVlD!9M`5BNVm&B}_i$BwYJH|u5gi*Z{Do!PAV#FH|5mf3$i z6`RxTKcv)s-!|%_GHNazSk!BvdO|jabX!w@o`bZmRS%_{k6R5RP9FEo^obuP4IS`= z|DJ^TWB!lS>qz@hBk7DbBC9&ZtC%(-b-z?b3{k&?SGA}SNENSZ>A6o|p?%GF@}w9H zkf*wE9vY%7&p1`jI!?H~&zb_*H~r-vdL!)9YhQ~FA0rSZi+mRpdm^q8+{zJGr6pri z-f{a1<+UwoxB2yeKLBE)>lE>UJNR$d*k0BAd;(C&#jO)MILne$WIu`H&EHm{$rDW2 zdRf>A#dYV-7@^!AWA+9^h!EX^3HPVCdWK^+LwG8>&+gT(8d|G|sTDxu}wM>6b0$fUk2H{l~w4%BxPW_fvx>1q@BC0dm|ClNq%@?qA%l5G>8o zpN#4xpa%pH&L_X-NVqpl&R@>CqeD|s%d3|$CXb?>Mbmd`z0GK*b|<7~O6_BYr^ndK zQX}P)PAlDhuXB3f-QIy&WQsMU&SA}@ZQkvr){NgY{Z;ZCp zB-3TQoyhf1Akd1E4DH*7QI776STg8gX&q=ju5B05?!5b@e_wlzqLaX+j_96w&7Tym zRM48C!C`W}fA)(G^OWfrHK7=^Jrow^*K1#jgV^y*J+q2<07cJA$g>ZM-qcvse`urD~?$OAay^IU9GvIlL7& z(ob|M+X1aVK1lV=G4$O^7?@fYJ1wA(iMR&{Ojn<5@qrf?%5HL)uhy!7ugCeuvB4;3 zYjdU?;PqQSLhsvawV!4)vsFQpMT}s4H5C(-1Zq{s9&!LT zK*+z!dvAkxrnRdJ%T32F@++Ud);`AFfzfdw0z=ivaV+QJtbcnF*!zYR zyj=I}x4JbDpv`$u=5!q<%~=@*AdoQHyGRSyQ(9OC1WL2apuqw(F$BGohSbD-t|0Wmlx z0im`m7hOYi#*C+w&Fs)_mF@S39ychI;(H_g1n;2_u(Mgb{#-KljDtTim#%H&`c8GL z9kJ8vcRmk{e?^jI>sq*E{gn$b6p0nBAfFtiiwdQ}=i2l~JTG|jDG4_3$jf-R$o<*U ziILVL$L>Nv8MxfBjT(uagWMdAk5vw~)cnb(Vle+!iF%}Pu2XOB%BgA2nKN!WPx{&Z z14f0=&ub6P{L5&Q?BDu;cW(+$^-cXpkNS39an&#TR4qOhO@Eku->lZp?fRJ;=$ST} z0-0L^*tNs@XzSB4zSn@~OIJOrVqEmQz!~~vzjX@|tp#CEurw^3y;=$JmmZU6+(x?A zV{ya-^Z4DxD%zVLo*2NnQZexh1+qP({CQY^5VWf9Ss*#H2v>6$&~ii`rS%oIeM4uF zBNk?||GPu0+`OqGQGN&sc^fH;`;;=-BD6~o`0ha+)@eM`e}WbDfL*l9>(uqM$C|hk z%bh4q_=MDk0xUwZV!^fitxY--`DaJnC9CM7PJOaV@5LZo?S;sc{Q*zbDYGXeLVF_h z>zmp9{AYf61^^C#r(U%^Z?oP3_m?7=2;EnSv$qYNRDcNKVp#Iehlh36F9Q+6!@TH| zhX|3hQ&RWdl~4M?N!1Kmon86U^$$t69i zyUj;)%z`{58`I_ATDSpu$b+qfuW-_DJ?41^?`6{l9+(+JVY1~fmph#5X{U=y z-A^eh08j=y_LkZdNZPxArEdm<{>7k7u;@S@bmTZH^M+>@OxWDIdjQ>U?-JTq1rmEs zqzFT_h%nW)C}^a$OMIApL%>~bH6g)kWpOhe#~f2vyD0aS<7fGz%08B{y9?NNuC@Ja z6l>3(mf-V$7!>WX%UkR{DzS}f;Bk6Cv-RGqBou;reYP(OFyPeros#A~rP6MFV_tSQ zr0EXgP5%SSjpzK>8U7`&6AsPK8du?NTnaH+#>A9fAR>*ah=mJ+X(Sti*F62JPMpVdE z7@K(2dHDEx>&tV|s~><_`CTBZ8n@;o zt9>8cu(Tkg*3`f?G1azp7qdY}TR$WDMg12lCsS0W7_0e=I!~qkM2$m+pF=cv@Njte z`&&rlOp-z%@rMSMe3N`)tzQ8FL_v}IK5OP~P1jh9DrpjB-#n}2Ux?mWBahiNjN?vx zbBIBG-Kz?3?4XaU#*8)ug~t9>*-3b_OR!RPU#W7HbQJ*{?8)3vYggngJ*>VjR=~M1 zQq*sCpFNdS;V%8oWZ(US?gfdDIT2^*XfielUruV|JTT(>9&U4OSSjq9%<`($o1Hob zvR=1DhEoQFBmx#R%L2DIkTRbk|p+Y za1V@;PehM7L<~DqpHORrIs(eeCsOFofXm#}ll54zZ@K`7j^9pBMnlXlW}ceM?TyWB zg6BUG8JQ^4yx2lnqHNl;UWojsK=V5)m1zr%a5UO^gpw-H9amQcD%AQ~GM6|#-cLGbVT zl{dIKt851-PV@F3xxp~X9Uq_V4GA5;xtYH2qhgcg#)d};lXl`aHicp=!BKa z1|Ie)6zq-Nd|$?`&Z-=|VL)&9(7wt>xUBW2Lwm)o6L$>+OFysq6160SrfTRtX$x0- zb8R3wOZN}3xa;MHM+;z%1cs7_tb=rPC{*E-cZIz=n(A^QJ?1B+_1Vj$(}~eWr8w`v_2RNZnzqdE-|mkD9;8@ z`GMXtRPafyIHbB%Tl&X|{(!_1*@9k?LEY&WKmz+9&XEFN!d5#qGUO+JlL6=9-CvA( zBmjEXXRQSRJ33-qKOmMt_d{`#Alw`Yy&H>dLtgpQo zZ{H+lEmxi5(0YPOVBQS7ph@4a$;&Mjeteo`wMe&U3ijoz%6^_h4qEfSdm0#BF~nb+ z{RJV=wVggCTwOZzU9Bf`9W}q9X`MC~uQxo?m7@F)u;_a62op7{u z_yN$huht(mt!IYRwb@iv8jXRNs|#OU5n*kW+b~Leb@*j5y~N!&+faiosG794=Ut&I zkt$!et;@G7r#tbg<6fqiJ04>Bo%LZumRfwrZ>P7PqsH$lXh@sXFZWx^UR{rBtdE8N<`k$@Xg2r9_o&7XM`2 zPbUAXjhe>@b>(_FrV{K_=6r*xVvK>9M;LS$G+lJVuJ_!pfmbm)@8gOXs7&9_65lim z`Gn}=cU*OZc4vfGDWu?H9(+A7#WJ~P`tF{86~A@6e!PBry+jD~k{a5{tN}l8>!?Q1 z4LPfVNErsE207$+DOg}0hj6q766Vdh`HEysSyoLt5?V9V2jk^?FEE0cJ)-`Rx%>_9 zC8%7Po2ZoO7R;H}F;-#yoX&)msa{N|t4Wq<&=|odu{QN@cF>D>9RKToOL;mP>%kJr zHl6s13!AzAG*X#wXMBPpySuoUO)lc{jRPH$y_V#A7+3ot=CP?aVgp`l9D?AO z2&XvqxL!*#3$&tkTslfQYkHDnWMchJ&)Pa)<+YOSKggA=lJxtpq1K0bKj~frqTxEK z9>bt^-nqY3_G+5e^aV|?%835&Zr~I*aBmSZZJnP^Sg8TLfNI(xfa9|%H17y=y{%&tx7sM}3(|BV0%37;Q7gU7> zwgRmjWzU`temtj2H8}xJQ0l!=)x~oVk$UPiWYozs2az3cQKDEz7K1K0rM%bSwxFNs zpKfh6s3#3`x8c8>T@8Jd)KLwC)G%Ei1|YiMbwIT~Ykq3{25tw5$Dx)KjT0Cq$@EiH zdTA;>h}J&~5G%JP*a!MB|H+X6%pQz30OEgSuSfo=Q_duMcJhcA^vhcGLJ#vq%tZfO zy_;rAyq2=Za8-1>D5m;iG(&;w6*8~p$Bh222M6mff7dgf$`n~4vq>#FzmwnoqQVjq z{Zm?PW5vR%1OulR_cGYp{4%^GxjQU+;4Os%gpJtTRuDbB0P3%rE=+f!oziz-ZWgWr zeS6(pGY!AqD$36rord8YaDi7Vk0&=UFswMN-|>mXENk=f&%gP9NWE9W-50E$gmA;* zK=$eOo+<1u)RqnC_I&5aGg&+2w&4Z82d~KW_Ypv8wvOr#XVVi2t=MGQ^=Oz1l*(kS zr_JG-wX12}gh@7P$XZwC4pMdHoh$>L14S`c+hQR1EW z?LpEW{5PrEdy(6Blv^kkVqK`fweL@lYumYQK+=@GyP2R*B*t3PP?lNwyysx{V&U5| zW?s9y&rx=N+oM}83R_lnyL_`id#dIvai4we7*fWNKL%_cV33Tp#}#Bgx)q#mJ}5q< zq09}mq4cN8QyX1K5U&Q#CKVZMUcT>hUW(qbhzrGe){$8JHU{6$Y8EZxkYqP^BMckX z`y=J}N^J~)_uu&8Tj(%&3jSo-B=jACw6z_~5M}Ssq&cAX_G#z!ak}x!K*|e|CH39? z;-wHtPS>MPb;Q$2vt15kFKDZWa9UTq`+_v1qV5!N2~VnXCDT{<6CWf4iI#j2H!1+; zlADl&noo_VpK-yDn5>&-F~4#Y!3+#EU`EmMmo7$^nbBo+-%60HjzbVx#8 zK)MP+CFQZGBbQ7PHv{D+7N!Kk>;HL^AIM!V<4Pu9bR^ca2 zz!EIKC{5Cj$5MwuOBzrns};7N}4%im(X z*`lY7-6#^Cgbrv8edyX)` zG1z+M@Q$tU^Sl4w1P+CfyqxoLKyuq}22hqCE>CeF5i(BI^r zBjxISd+cQzCfZf`=X$<(ETH%-GYj5GC6uWNJQMG!*f6<|BjHPynS-ULl5-O@-z70n za_|2ZbIcND-LyfkM7N7%84E9&Uo10;3a^?A&{|VkF#9gf`!9VsWxTA}HIS9Hkl`8f zU%u+RN;6bRJrPA_-3fa+ioFm`^B%(Uzm1TJDKYO9sh**?mOUz1mUHS@jAX7}aP2|A z90`LB)XT}3T2x-6^VgA=D)(f)m7h=9G;i;t-H(SoVZr6{v5uH9bF=d3?nq{5m3g$G zkh5lU*3@|3)&EEDHfmmSDrx_?5gg5lD*G|JW2umsQ8qDcK{LA=52pfqTyisFs<_s$ z`yX=pTImSAqk_)t0ovhs*hMV3WFhvgw1|sI=P2n&B8m#az0zS}dKotU--x3ms+70# z`z2vzI0Pa=)vT-B`54rq5xvK_?ElgZN5U$CUrTP**cBn6ahRON5hN}aUhFW%-I%rN zQxl2b%p3bbOAPwR4T~@Tw*K*PDl{|jvGSw^R_rql3NvB$y;NAUc+_6Rk(x4EYPlRRT2kZJ{jFz|KUA6x2 zT3Dc*U~&$L;$Z}u1!N?Y`pCyIzIka3h0rj2*$l?P)U|3!44TKsK$O2j?JbK zxetc&IW5V5u|Z52b%0`=Q@3$R2m$pIlB4t0xO~oh(e=5KP#hY3`$x<83_8A!eDQ1A z5~5MC_(2V%sNlkLPC9l#Rh`5UT0TYTJj8BM2qAS6vZn|xbj6cR!hfkd$tN^H3h|B| zy#JZTA-wkw=znz!$XGx=bawYKfK!+Jx6d8Qa-uQk*lT|i8dd46fTBx088|`Jwh^P@ zBFfTv0@nYs(EDpuX>?#JAJ3%!Q!HK~8cH$Y`3Kk8w~wMi>~e&JqHN*sG0VGA`P-<~ z@Ds&Z4evuI>FyPv#CYQt(#bi0-38i#7~fI>h3WbdmShYqV;>Vcp|FpS0v!f|^Di^5 zP+-m^cO62|@V~z|b5Dk2(QXaFg`eSIAzk_BqjPataMsj4>P}+>88)zR9yPafEfbN! zVPE+M7q(47vhi=(U;LSeT7ij^SpP#9U!SvO#ehL?7g`*d%RBvm|5mlD4~yq#k$#U( znNlHnx+(hI;rV&1srwI$$|vH4KCD_U6NBP@2rU`-Z@>Y(VfE|;u=vkh5~c&OO;eQX z$6>*L5$gX;&9HMG3q$%YB!r3mq`hmFmD#bcWhh|VBW`A6Vq4tG## z-`>%38iBu>LK6-2Av8psWV+Ya_Tk-zc6F@LAU|7w=|nHLB`H;|U)f0s+3+ruN!7jQ zA2Z(cyInO84t56r5>1YWCBZ|BYz`dqG?7L6hmsb5LW^jQnn~MSw9rz+%Q}y4X!GpR zy4@;nK}u)q3uAe8vZ;`$W0>a6&r)@+xm7k#?rfhBJG_DxeD3t&aaDD^>7e*y$i`bn zqH(X6q~v*t*8)a8WGIE+fa!_}R|ap3Y7QLfe`~=US9{mh+l)M}jt$Q57bc7N3neAb zYyT8olGjU}x*NY7jb`zAc>Zi}1(S-_pl znpV`kLfk-`&mp*8HhxXB0ev}z`jFLTi$1_G*UEox3x$*stg%C=@1pof6{92zeaW5; z0tH)aDXk)Cy_YlrL~ikG4o#s~X-XS?+$Puqfu3%FxP46Klqj6P8Io+l!OpgYT)w0g zio8;u7j3+HuyFH!S&c?#S0x$zU+zhEtvJY%No{RMnu(x3;%g;3f4792G`{Z)XxUD4$x#Hhix9T_(#}2Pk@Cc=#t_112_ynG>RFHlL@`g z#Yu-^+cwIP;{u}UEz*^>4Vihas3krW>ip3rijJ;KTpAHPo(l6oUN8jNhuY#a5eo^x z2+C?-I`&6`Ndl3-DIohL%WxEH>fdic+wQ`kMeCdrGgvodpyr6FDEc3y6TI*QW6SnH zrI_3wK!kEjKDnBR&NpM}c1ey}SRJS2j-T@2%Kx2{;kjZm>~8V&GJ+yZU;#U&N~YBs zHot!4!}y}JIY`*?`rPsPN^ooi zBHkBfqMG?1UqJK{18%2uhOWea>B0I*;dar_TwoR^Az!Nu>F$mtmVZL*Y%+P4P4E3x z89rtCc(2lRe6(X1cHd>FC7d_j9r+!iTDVUY=MXqM;C_@v)`psh3t@2d{?0fPn=3;c z^p~gB8Q{v5O}ZcX={ry*CrUChrB`xhGz)_aR12W;obf*D(XQ_=$ZnvjfLuDhqLHVD z$LZ}m3|z^d&F%8oHBdm_U9WV=t;F8_-3r1dtM709_?#JcG6VG{uKso2tB&Jz{H@6H6@agE<`R7H+#7;NoPd2I@?VB36f?+Ad|8O_sgXMMi*M z(!D4PDTb>f-8#)i_BsPl{Lp44v`ae{w5?TX=TF-Ox6bZ;f zLeN2>uy79mp##OlKA&UtZ@{gx0r$?3*xWlCW%Xak^3$lX5wFT!=j}^=h{e&>MydM< zaC&&=bdWJ#inRnT?$9UCvLO^&1(kFxFecBo0TdGaZ+?2Gf25E0|4hD--LM!I{J+*5 z*D58zF8^pglQS35y+d)1B zT4O?k(jds_3qxJLUqJ4&q{rn??2nzgm@;zQ5?SpPqRa5ra!337nBk>;V!voJg>MG_M@DKdD0sy0Qpo}IeB zVdRbNN|Qqf{WqY8@Ydo_ZzZQ6LOeY;Nzexno5@!rpl&3{OHdv18N>o})Fc|{-FIUY zjV2$6De_*!kjLlL!&ccKRGwd7lzrB~@)+*7+UCz78OaaB3c`;9U&HqEVeRL5yw1tY zuJ60cs>_t&wVnFtM?e3BSVOC+8W#82s)_Q4X2Iwbvd~3vyo83Zs7v?#?w-E}7kR(Df?N z+KMSX82ok6)nZkGzs=RNV_IqZAhPU%Iu{yOjT8#rA~DK;U|DI!xv#{|qsdd>{jj2E z%Xjf&Ct$xP_W3bzH}>aGqIbTS#pwcIBu!XJkxTGCKO;xYgp_eb_FGF;#{FCv8bJ!} zgl!fk(uWT{LxP-wOL_6rm4bvgs#)nWMc9xgJ8ut>yGVRZj$03G?c(%jVO_yWy@H{c z>B(y)QP_|^n=&|LjY#CL!u3_lg*#35HzgB|N?HaOKZKp~G|7J_K++mWI-`^Og5L=5T>wpjh#xDNnG4{Wfc>iw+LiLKW5}We*IJ2u?Tpj>Cje@F4 zwUWow|DyMb0fVp%R${4yjZpNUPkTYl0$Z9|BJogQ2#%C=Ws33KK zl3`XtRim(9hy^Dm`GJyQ^xvw|r#N31OxRJVVNfy*N=Zg5?<1iW%-B(y0%R=hpu3o< zzfpqB*fFSCP%<=1Xsb^HrL$&*!67ps(cXy@EXO$tyZR{ng%X2EC*uXpwtxStx^ag6 zY-rXj`wFNzMx5;1)E;Tb>xwypg)rOsF6Huft?9n!z5?4Tf7*<}0w{ZqMAJ0GVU{q< z`@~am!mRtMKYI>zhvUCWQhIE$yT=GNqQHs4JpLw*R@r|1gGBi+EJVM9lEMA27#7hH zzQX1P2;aYnBmb+EHs$}>D8!E$$_OfHdhvB8vt{n1l5F(0Da)5_>)5~1uk%RU?9>%$ zjz|iX)3n@uwD5obogxdGdWTLNxAzP$9!)&Se}@v4V>IcLs&vRnK72|OPgp`RUd4T$ z@=aH^bc)*?LYgpG+1fk#_C&m!nRE%RfrF4afAx&ZX^a<-RdOzk!e#!!IM)MHahWp<_vXfETdk{HafXzawH-_?N zII>M~-xNe)JyCmqo_nftMKw0X4*GwV zlVv;pA5u3sLIMuvhO0#J#yIi+td_}VAm|V{MvXUP_To&Ihxdh=)~=>GQMVe6-1Oh( zlu`a?Fwm^I|8L`zAkaZX*d@g}@;2D` zol{T=qSHg2X+%Fd6h0P6lPyXK{%3nUhh%t79sQ@vAf`=k&A6M&&oPT>>0(08;(F|~ zIv3CCnMrC^`X}KQK;@UB=PId9H7+Oe|5JM)q}r!b;Zv34go~)s{{WBNYR^uEPBl^y zE+Gp40~p$>-Tud@l|pW2j{TpybI`Z@b=i5nud*7fh5zSWx{rBiOQZg-KOjA;C^o_Q zcP0Zf@5<<}m*Nzc>Lip|!%zIr3ztODa_X>;RNyYP!uenO?|~Y1tD-#ll)h4vm}i5% zQO%j%6WV;a^YQxkMJKVuhH$LV@hJwLlH}TvUc8&F#1@n(gUC^}FIzr(zM8KD5LZASLH<#;xtj&T{&7MHnoQZTxnVf_BhN0FHE$&L zRtkU%?0_0DmU{~Yzy)_m^k1$vZ_-um|8IH60ZQFUVK*>)(ZuZiTmTEr1sP;&w}IX@ z&0S{z-?Jlz@`4rBDraQ z1cXX#0_@f)OF-x9{ueER62Rj0KeX+C(taUw+o1amdQm`gh!y`OU80D9utlB!t2&1f zR6wZwe@3!?09dmAhwohoBOp}qKM-dI09*AxR_Z1AW(!<(2h>3nS?4I7z@ZAeV4D|W z*EUaMo(O&Z?xjHx5Tt7*MAnz@o9FS%rTZYH-LcK19>lWq9s&_@k|iNbvt`|?YdI7j zUZj_h+|XB~-8|PX@SV|AFMyi}W=lxq`U@s+v3`vIC}@gbGbbFDe)VjSf6s}g0?6hs zx-t+_Gt31bGe*Q&KxQmJ5)#WykXB%^z6?DLN<%){(tAsSmvFH@@^NjCfk_m)hzsWt zfayyz>vRiovCD1x=LzuG{!1OPu{G(jSCf1(x7m?eQ|R?hr^EUFP()3xmt%MGK+<@b zv)V8P(^(3>8H+Wd#ifm0D+qma!7_Vin=JVdV^>3oP=r2py)R{1KOZ5F&Q08;1r*#; zX4ZK8AeM+xSOks-@|UcBS2u{M-!Qo36ZP|aSiCC1;KMw!UgYdFbSul?U5M-o`Yg5TY@`AckcEHHi3Re}v+HMf^d5B>sP;)?fUQ z{ZZS}MJ8igOGWV>@E~$pa>LgA^43AbVzSwM#>kE=MXORsEM$b0n9K#ZC`l8+ixL(8 z&)g<8*RP2%ADLnpV9x&2vq2vBv{Hn}BZC~isl-tCi#S|E_!Eg{8m54I5>pC?xk^0{ zfa~e9*M_*ME?QiBdV8{Yi~~5Js`N>(HnsYr`<|E>P0<$Bvnd3iZ>_5XKb{3?{ymbY zA_@v{R{Zy%wH$t!GQFxzF*1Vj>DMmfWbpAzOJR~yo@j3wziaxU;7tsWC%4VUqO@&M zRKW(UnedeVg8-BzF4m3Ru3r(_{`1`HZJRc5f}L)0U%GzegFT<*GqINc_%TUmTa)L_ zS{?xM!_9g8W|AP5`{2KO&V6Cv<5yZop!u3i7CJi>4FRacE1LwAP8n)^Xhwf;Vlvoptik4+SKktQ$(rd$+D7npcb zAd6%2PJ$|uCIAzlrKe=l4$X=rMzA$C5X1WD3*nyHhw~6OBn(1AYI%cHYD!v^;7tEt z%BdT=S3yzF2ghG)$Jt?gyeLa{;{T{VLLuXRWl%HHNP{m*vH!AFoz|9r{Tu>6o~Cod zYtA;B?szc%B54x_d%bl1VxUL@006g1Qi7I;*RCp8Hrnx9nqK;`mP>#bU&_9gYN9W& zl^vi9j5Mm$D$5#TWYFE&4bqqk%%-q@{nQ8T*L~Y`QlAtbo{y?kBy-Wv5|2ZD4~t^g z$7jKG%}tBEXD`%QYlR!YRx#B|9AklJQTTwKLBg(m_IUJ_dV~$N9Slu7#)-uKG6V+k z)|qqq1?r|8%QSeitjfutSI<<*AL|NAf3>I88QpxrI%7wjfiG0CAp2Z=o|^vrZ>?-K z;b^7$g-Z8A2m`0?aNz#to_uycj$~PhWU<0F>pNv>Nlj4PJ&5lI+3tuL_v_--KQ5J$ zll~G;6cq4cztnjSdJ|l!tXGO6u9RAevZgp|`Zv5|tP1=K58%!yK5k5rlf>n@@vlI* zMKbru%cPRvAdyF33W~SGb~y3mvVoR|5p7)(Pe0@P%yuYR4y~=_W&@q)#PSinM~@m#lq>$P&v$2A^hX^ahzJ%r zwS{C84_E)mr>4?#Nd4K6vU4VxQ9`db-+JHh*!S|A2x5d-5ddh5+zp6P=UK}4^r-gs zj>G35uZl~(QK+jW?c#nc4hw|HmKHo|AKb2*1M!*qblcYWFv$m@yy=rMKPyd2yRFHb zYiMCE+m)MW4Os5+h1Ngj?VA0O%t0r5CfRjHVX)TER;{FU6{;iMr-fq?^-W&!V_{r? zlB&o?CC?_236d3aGd!>rH#UYx;3z+!z8Y$D%H?lm01k3>0p*#|C1`r9NkEEjdiDqB za*M+&jgKVC>Do6Elhf-8bKQQ41ugDZVfPk4|eF1@>4J6lM5E_E;OtT8U(9Wn8mgXr2i2koq{-SoM? zd%GUJHg0rt!A*ak;$+|4b6mEv(?eVJd+P1P`i;0HZB_NokV`C*jd^xg;+vGBZ{9#` za)mO`j=I4%49nsx+9yD0XdfA*YI(ryQWE<&6itd9fcTvL*j}faptA*u;nNNf#S$zW zA&Errj1;AG-TqEHmCDlX`C{T6M-QGfzKfO2p{kS0iP39-<)D!u&XfW_ZlPHKy+A() zNUy>)>MBv7=Ik1L&dxCd)>^DL2|fxgSo`n*4Ewyn5Q0Der+Irfr99~!WACnTvk~Ck zBE6J=EOHr@vAeI}hKutnyElll9#eqUilHpfYdD)=7Q~#4XEC4fam#A*7;_i_(A;AX z^Wf*cB_Ho&H+!keBJ-zG00IrO87q|fgTb$#$Q9S*ZTcxyv(2e-w%2LlpD<{?^4)Qk z39pY5(i?@$LkJd>w)$7pamDFB!zYOOxD699P@o|Q2NgowEuRhR9Yzn+&9BnB4oUE9jIr8snw^!1d&zm&i52xroql_DVj>#que?%FmXJ@7%NmO1eK%bXqNJ_-<{ zxU`tpc<9WWN1|7XcEVyFpiCJ{sUK}hA}+ZObP6};W0;00dGBK(NIL;p^deNe$98N3 zIRXh4c2bUy7nnB5{4O~<|MzmGaPVZ%a|1&vllx-?0O${3QZn?59ZH(4F&qv=Lv>c* z6?`3qIeU;{BH^*he6X4T1MXx+L{u^rf*k_O#ozcJYcjffU;%)ST|~U$dEo%gAX1TB zyCzYQVwW(Wv~5K<@X9LT|k?Hm-(;~kqV9*DFomQ8^5R- zw9jrhAN*POd%syQim?>!R6qTX+`x&wmz4~jg$}pm6Jz9c`p;qi7a9QYriybU0k8<> z(KFbL(Rnhk&0OL5v%CE7!;kNwqVv-1&$s#Rec6QqHACLd7*#V+F`ED;dFhrQI23((>A+OTj>*SahWCifokXlj`s~mT z4fr43kaIo@_XE`L1$uAWVMgo{+HaC$0-{d^NPqwd0I=JzHwq{F#m@QCaEoZdiI&V!P+*mPuRj%L z>EhnHClHW(H=2KC@|pV36*!CrI8gu;Le=w(2;T;Qw4$=`}qC11fus?1uQ#vNkyjBu3=NFGX43R5zu4rA~MT&ZB(I^xZOOj+B5kS zUlNJFK`crdb7&PRRFn9vd7+X78`lWoBX$cZiUz&R-r_pfHiv*nTO<5fjd3_(Nhuj% zd}GW&g_*zw&svl7QK&IKg7{DRdwb;0|Gem(&_BHZjfa!wpDw{2Ex4@4G;e3`^)~ij z@~~CikPgNw`oSPb#KSyO9>(-Lr-wnFcY~ZS205QJa#rc|ZqD96hhZ%T=z2 z30c5Z*_Q@+f0ZD0UnK9hAYLZ%HmA}%6lte$tlvNzGY>?1RPF;%dbAYPZc=$h1Dtjb`FJDB zE&hb(&e&9Doz0r}qXCdW!Y~Df;?TrQxP@fT!SDcgrk#OFy;tyyi9E(~7rmHj!7K<> z)mH_@lfe%8+7uWQ|C_lPU)5IGHEIjvethoPX~m!`_&?_U9~+}L2BL67xZ=3uPpuzA4e?4YmK= z{u%fz1e`WvHYkPffamP~!Me2Gd#6pP-+|7dPaKMQS)0e_-Y^vNyfTZ$yRI+fb!i%n zd0DBO>MVQJx?c@7y+7)*9@W4bdB45)7TR1)<2U?uNY9^Xc6?+EVf-DA)GD635Xe+1 z!FsgCT~zj%nnB1NB>lTtD5qD$GuIlqAYu`yf5`r4XPGQG1E(#wYGRb89c zNx5<|E#>CkUO%6ab#>`zTpU_>m>=uOnq4R``)Ru5Lh!Zf1%JM6(zecey$j8g0mFJQ52 zX!8jSQut;tSLPP~8Waf8hIM;>)26u%Z3b}%JNmcKD^Kg!hluu9KLq*@!{1<}v^-#_ zAHHP;?5$%Sg6Pc2jYItd^D4W?N7Kn>3aK&z1HTTWP)VfIX-EHN zEph6gQ>ia1wdZX5wZ-f?D7|_1nJ(zW2RvdT+!&Ew?Y*J)5qd zHoMoI-mU+qfZH4LY7x4(9;mz3agk)*JfJ=LfSoPx=6^kWd6NR1L}*TN?J;ztrxhDV zfI&yCnmcIT%uftdvY_IiEVSu+ER}Au+J9SqYPH@Tw33&FXR}CeUlUFN@4J5)rQ%#|NR?-4Pb|Khk4(st|W3rWDnjwi)Cuz+2 z!_l_=)i@pSLi;XFNLf&MzNb5cf3q07q^esP6ebV;e$hy1M1@~?h_Cd zQWLVWorx8C&-3L(8DL|EdvC$+pQJGNa%%)c(V~r5$6_I>hR8Bv zHdRQd&A^EV-6~;NQY{mKWSGekvSH(PS1kSSK27pdo4l#-K>Gcb6PU!Bg$O+x1_r5W z1m|G|DFwcSwstM0#|I)$A6AP7KmIX3`Nd4Pfk_??FemOITjJa*-Tap1nF(b9nwb=B8`k;fW>y?<&7hl-cnBP06*c+KOX)U^=Y}8C zsg=6HtoAjAAz))8@+1I4Y`Tyyz%xDcbqUK-j^^w#z7yRV`cIp_^*POpcAMNGuW*9B zkMa(|0o;w3w+(JrM>oCyAdxtR!j!smOS@WG3ufHZ|pzjPFCvSDc(rC7``}9$gk>pQGsFrIque3FP z{!oMLXA+%ASr7cvaeLcn!bSo3?qZSHC`pVL=YGwjQH-H4JsKC0M#4i#p9ic!6u4Pb zp{%>9roHGg2p3dYz-ummS|t?$kmPFQp^qk;&hGJF!VX%YeBVH!xPgEC<9ivMo}1NS z_|%LZ+8VO)XcPu%9YgCxwJD*FYdmFTDJjYFy(T5-=8=|%Qor036Zc`Vxc`yMM$FdVc)d)QF4gB}=yu%a{j-7=5n z)>fR;-@@1|U-gE1i{JHCY;FK<@g#5{5?2}!Vx&q+GxJK%!MX_i- z!<5q2j=vu#A`&Oo06d_fyB;;7wH2w-jJLrMg=4hUf_!Z1nAEavm)oF~5 zguy;$8`gFF?Rhai^?zzsEESZcnrT)dnZ2SCsZLCAdp0Du6)CM&O$urjed<+EKb|EE zJKA`(LQT(5J*nWk#p0^&d4F~N2k*c+Vrn%Y1ZIKG*cw0tugH(E&^)OCuI^?vU^6FZ z&Mepo$X{Tx2IhL|=&T7w#4W1qAH%?o02)}}Q5Xa&{8BQ@BY#-`K26mFJtC@aRQ6!{ zcahbnE}1Rq9P+)t5{`h*s5O`>W3nmtIB(d`c;*cUju647)5xEa1q+?NzJGEiUyEr5 z<;xC6%H|nc=S=Dcn*YAY$@WV(Rl0_dk;AjM-TkDMuRs;ZZFZqsP7#nh*H^~wpGQdb zmN}XhtQKiAd7cTS)`@Hs$*_EzTjGg09orS*(g&nUMh&VBSIZt;c@Q9m$)2sSEeu9E zDLIQCPS#spTPm#0=a_F&gsgYFU5simM46^h8j){UfT~ns3Vf@G%`Qw1p;kgOSTPq1g4}K)_%FTr+fNXM+4MF|4V)`G{ zFPHeFfaqC_<5i*2_Hnn9^5oi(Q+C%j%Db4ftgXw1t; z?1d3(wuos)HJ@(q$^LCw1lPueLG|1lzufom0D#|i0G#$efWW_qGsd(%XY#+YL1f|D zqC|J>K^3!>ZG9`*k<{m4(!tNgLIc+4yv!lc&;~p0=;)zI2ZU+83<9-*?knm#!e*M{ zD5h7YAS9$nj}4kB-@&e_U7OctbU1QF)L+NRp`r z;@f;IGA|UdlnO++q_M!D`iY|Tztz%h^$frl@>S=%b&(_nU3^q=qn$;=D}@bCn9!jC zt%v~iACBNN*FXOFd4`WzRe$qltf{`T{GxZA*U~^|;SnWxc-L$JeZehIP*_x5Q^VkQ z)*@(e3qzY%gt8usyhr=0wXSyTzRm;LUoLGYwMb7i(bpZ1?6C0kVN1j;hXo%zrdN+r zdtw(H`=a(=8$7FNCjR=MC5~V#>$)~?rO!CzzP{_J&5eOA42q#Xl3~~VJj4Qx#%Rc3 zXIyR~fDU{I{5&8&y49EuaXxUgIIbo8Ku}3G=o|6c@xzo_m$`A=(c#kIAe67PcM%pwln}x=Kix8IT?S$u5RqXUqZ+KPYx2jp6X9IlC1a$tCDPwEYb@39R0qKW>p5bf;KfQ#r&~ zgtSnq;}MM1@*w(isx{(>S6~qgu%punL$BTiOnr-~&?^J}>ha?`{cSp@h5gud{sZ{0 z9f{V5>J*?1*9bO~1N^kr#uka&!DHws08i2=L;)x_2uB;ck_M^k6^NPK1FK}*C!>K~o+ow!zf9oCbs&rgtGJ&!d)$QX{cZGPKQ&Quau?^JU6i0mt8wv4=`cmHi+aLB z+uoixKqFUOul`0he6zbhKz-=5&sge{-mBXBp!-OAUKqV&Wi%`M&xr=Xqed?!@1byu*L@j{`2w;M`@%A-}^T%t6uZPURYfiLG zYU@ADlqc^|sq`Yf4LJ8}Dz+NCBca_`K`&?Qhr8F$RWLSEk=3u(Nay<|3fiAg`OQbJ~7>Yt-B+x9E+@d)wVxI{1hSJhWha)q9-2jqSee!&+BESQ8i~d1ABhtjk7d=Zq)yXXezpO&v8je zFO(t?s-tvqm{9F>;=qx7g7ISsf&uLMUNz3`7(u)7o6w0*S#B60YcIbX1wt4Vmy%11 z?N{)YW@ELmn8VxMWCq!+`rKQ(`{`NYY!{%g5xxGVtJL;T0<7=a%uHrc@NZAW>SoN9-oqqmo52w$>A zVvTvN$IbHW;sPs3(4*VqdZ@mhbvB!eHF%qH`gp1@M#mq*M@<|BwDWGlDLApcvV_q! zc^cmRg8`i}9QFMA={PTN9%ZqUFO4NeJXEm89VuU74ZSYkUhzQn|Kn%w{WiZ+Cb9}GMZ)R zrR#b57`t?4ubsB?q5ejEEhS9?Qm1vl13{r&NG@yE690VNs}2Hnl2~DR(~=xrcDvx{ zNhqYo--?nFES}jJdp5i1_G?Z8zw3esxAUx+>2KmPsBhP}djBvrGyzf{7J9>2V{!I5 zUXuLO=`=GRe)I_?98^;S5hk^=GYN}KCR*!7m+n?jE^TOKCABy44Gt|#W^}|c*At_iIv26|KeS(20 z^asY#!2qNIQY@bateZx$pnw#!1Xf^xdcpXDYl8?7;Qb9m|Mfj0N+i+DZEgr0t+Ujx zpwb1C3Y5*nL?yR^3%abL8b>*C(6{?f*+Aq;D2Kig_Dv0P%CFfmTNw3?h3TNBh6nm>~l*UUN*l|rr9>0|r4I|H?fuh_UV{~N{qv+ueZ z?AG%mjk@2*%GQ+esUG1@7ld(;+E)2-0Vw1wP4>|=iB`tZdy}jflYBR<1!U9gdbLc8ywiV_@@xDy3bKG8jTgDz(#-@dXTO-cMY+@ zy@KU0_g4i1WHbGlK;*;2ZeOy$s{sxcs(U%Et25#)=+ZX;<6xQ!4wbvL4IO)$zAb-& z(NwSuOT?qQDpS6E806q+FkKg6r^a_D+Ba?gxeFEWQUUvI{rczq-gyT7b10a^Jyk@{ z-Y0eHe+-dRA7eZzQXT(#N&72k4Q#l{urqo;7wbkdt761X0v?Wp(MeyxqQ-8$^m-JJ zR&Cjb8vMPr6n2u59%vP5`TO~qp?zd1y*&^oB~p2)(87k4M!RsvO|!95l6ak>XhnZK zA6q#*`3K_buKM1n>prx34cEQZ>!q$FFbO(_FsiiUKamZjJBkQ6L7Y)_B)$5cb&FU- zy&#Z3)xw-coy*_8`h!jPHSx zkz~H53xQ;|$`u)3?Fn9HW82~ER#D$Mw?rgN^}a4E<3h_W#C$iCrUDY5lE2FB>{7Qe z-i5!aJN+}^M`{UN-~4Us{}^y04D~|CWPf7o?c_Fa@QxBT>cJ%Aess%lj~eN{6FbPi zvu7OSu-v-h+-WxHS=+a(r(EVX-Cmr>w%*$xxU;Y~*iDpo+=HGug~`rd+jnQ((WMJ7pYj*`UO+ zW`kC!A#v6<@y+e+->-`-LyEtd2}@Whd9tm&LyFK;@->sH&VDWnh+`h?Vq`?vHS%RV zl82W~f6t4+G4Fl6u?1H9hB5!!K&0g1{-99Y$aQt1o|K&5m2oK_hn0i4WIEWdF2VM55D9EBTS%lwSN*qAe= zGl0s7mxRivVCIrrqa>XVrxQ8Qy@hd*h5VCgLRR``-?{>EXu^AZ3|WUZef*CHw}s@p zEzHWF7)xb+xelX3H8v%JJ%v>w6WQP^HNZNf=jwnpXY#fVX7VmxdiqXzPx#Hw_ico? z(AA1r{$Z%0F=p#8gTU7I6IPd_ecnG_P%vWaR4%1EuTm_U4kU1sC%Vw>pP{&5ZbqYh zSxAkxiZ+nGC9Eqn`&SFLJv6bhb+CUNFW$FhPC$K%I6|*pOd~bqjNW~bRdSvsk&~ z)2NQH7uuo7ji<@5r9_dPY$uoaIMTJXVV@dKx{UB|lX*S{y+Fp^+162bBB0h&i~QmA zb^EptMS+^hS%SWqlC>ddr1+`s@piu6!g%_16TU^hTOG=!bXJZN@ex#hD5jeXN}-R@kwjc`5cZgHFp-CC?&I6Hb*^U zqf5b1VR~ymY4qH&->PjMVuw+?#dk`snA3Phe72aA`-jrtDyj9D@h%bH4@weIEAt`$ zUyP?pZP)GwqhlyOWUVd?K*JSB%iAJVSUV#4TAZq#s*H^vjTsbKYtY4oK8D zvKdtUU;ru(N}!n`HNG6kMVN)@7M){ymUEDRs?HTO=w=bR<{8VIkh{OXGmSi#x36QC zC0v^iJFY_%CX{z4(3vqf%tqAZ2%lyCifG(79T)IHBg3cI*l=&ZIi}{`=BlGwwCs0i z*skGQ=-*2NL1+aws!*bf7+BmZ#mOwXLbTSTvXt7Lbo8G>8)rp@VDS?K;JqdcW8{56 z04+mN1~LoHEaetb8HQ91=7=W!->J}^vRxQQQIoq7N@Dj&30$oCH@|x_52LJ-3|z#N zFB$k-lsGm)dbdl2)Y-?!$Ia8??4EF#Gl)7g9oMj)Mm>UlVOMZIfvB4R(=lk(QpG*k z@A!x+a%K!$Fd_Vr`&_+0^1RMdoGZ#JDBtn%BPU%=F--O|>GaK;4}4yt6$eUmb~DpX7vQjxSa< zJszm?mu2Ry=JkfC)*gR<1D80n<}`zqDm35Ysb982@ z%oqq1?ExwWX+((4i34NBT+cM!S<2${@2*K^5dl$FArT?(V&GgOR6Wv0#D(3C&cM{zx` zoR^s`05H5P$F4Zx8bu$AOhwKPXW{X=xeIsWjbtg0!1)f$8Eqc`(}D9D{laFl0Li}h zb_w1gIl7By_cJ-<)&Zdavzt&U>J^V6*e&7q3Cv%^qv)n!9(vMf9A6|BI!sBq`KJYQ zOc!9s9nsnK$v#2R%-Y(DVn3YHK=Nm5kEWQ`I?RSzp`DVu+2v;+6}WMU1W7ANEaT5D zL_6XViSKC!1xK@B6|&3g8u*(R1yk3CyjIN(Ue^iigF|p}AO*{(n)4Z;0?cQ~`r42N z)rIFAUf|T_A(R4;W9O^_v*%K=`|Al^8%@PFp=0X}&NGWf~9aF9kHfuNYcR%~%RL zuV4PCkOV;Zk8*Gt`2#9he`O4FGb&O356|?*%#ysI-q*S~jRn0Ku1(|xu=LuTxTC*M zyzo>1hSbdxN8g}T%>*`-<`lJhhy6@6*Mav|=a<`+(#_eloCC@7eSGLk-89yZL{139 zPdQR~R>o;@JZauKDmIciqw7RROkuM4Gq45&vxi6i&2~=s>D?ReJtIcc)di{RRNmAz z)rID#jm`s0)Rs_}EWi0APid-l)TO1Eak-^Q_cQA#u-*(q$Do>Jcx`pu3GW8x8YWaG z-&X75$9x0Oca94&GjvRIXeI>JKsjSC2V9T*Uc|l zNbFMnE4{^ko~$uUzcsmd$Vx`DV^;eMpbOl08dGroZ#OxdnwITWj;DX(+rqwA@jcWP zij=hGfMJ+CnFoqH=f-qx2V}7~^+n8jzpsj$MQgbs+kJKvfM4y#q%Ab_ND=DII0<5j zx~FB9IkX_SBbWWS(^DGKEh0hn>$tu`x>9%x+4)spyw6m7X1NX_3P9|J3tipSyPrLQ zJ1YK1$=4Ija0jxbWlasVkrzk@hDLvXzi-bS)$dgC&PY%Z2X!P@6~IFB(F*x^zm0s5 zlehwY1lRO^_*ImEu(LXa|1^sNJ@4BbxRRvjwVAblhiwA2MsS30O}7u7le(LSn{VcK43$&FLUuDLZSB<6(&(a1w5sDbH*I><-u)YymEI6YC_cg zG<3{TVIC_?-ij=8QkxeN=+~6jFK%6ACrX>V5K41xMNc|6I_Ht?KRqw`g z)~_~bY8-Ty-CZy(0t2)C4X; z(M{_vjJegriOQXA<7@8;+3CzN1n0KmUHXR)Zga~s5MidzUlkcmoXN#YH6`zg#q(dp zCe4PFg=6QL5(L#6NbJL9hv$5<=?f+xMk3RL&voz8RuN4Ge!O7-rke6KKTB}7I9DVIfJy*zn-a?lvr-^)0G^E>m_zQV|@`1`=J zgbKGqHRtDesNnF&)I;Sx7&%`XL+_!WFk+(ipt7pv2M>?(XFKR#N9}hlG{W;J2PDSw zRju8VQr|7QifN3%^wi9Eqi_>NZP{+tt-YyWzanPJQxM869m#vzkt6mjpB~+k13TUw z6n?wyhZ6r51ng^L=h%C8pJAm%W4 z{;GEM=_|>p%x*GBEVlS=r+%a^CZ=wrE|}gjl_a0@{h6)uDeVed0c)ScVA}XXiV8Gv zxLC2VYT!V*MX(%RqSuu*l_i<8i-bpg!iX|^q7S$Zu5!)mkx;`o$pMZ7BvYb&nVvdv zqOh(bYR18)naV)zJh(A#yj`nJC%Ft=Kk^O_DHy4rZNtiEt~&SyJRqgS5YpUyA*j{M zra!bQBWBFIV)pmdcK7FVy3+T%`{egNE$O2_W9*lE@eX?PX3qM$V{qn$)-vubj)=5x zrdDl@Z1c2}&HbG*ox564`jBMKr{e237Y_tVvamY*%F_s9m3Z35LFQt1!`=xEK={%*av`97n`IE7yBD)PFaUha5%f8X!g+0(PxowB=qDAlf#de>x<{4#X)dkWNJ z9RQ|2DRVsXOn>YYUy5hl=~ht*$otJ?-kvJOKj{_kreF&@Q!FAT&O=FF$-lRr4 zo%^N{rPznfaJa`;8vFE4Fy` zT7Sv~{cuU#8SHd406@p;LD0q(gyW;mr@xeg(Zw>w5o{rcz?rTNxq22$qN;*ah-n}m zBW02=`$U*@b(zTNo8Qt0A{9YFsibGu^u*|;w0VNXA1Z|;R(Try160k~E*=c2E$9gP zGU^hIGx-2{TVB#QJw_qInUEeC-QqIqRphJGA`uyNe6Q)0`(jf@yry+hvcnvz1ab^$Op?5AHCF>MW1&o@X*OOh5PFB@9N7#dv{rw zo<~Ujo(m^KQ=iTEmsUCqulZ^Wpg?Hv+jEEQ zR4T0a$I2xYrSL^pJ(53TQzGeRS zznQWru&Qs%Er&3lP;=Gk&*`CImrs>{itralVZJELJn7XeonqH3x32<&Iu>k>$-e1# z>2UH3ba-I{bxm`HTAq&VD>7obL$9;g6utGZ-l8!4@@aSXl7RB6YPdVYAuzj0w$wm^ z4E;QI^cw*S5kSzjftw9ek6s-1-{MmE!zVH$u}qD695&1wKQBO)aM601zvxnat%Ewp z_BLk}u1uLwuPxJyI$*tjOgkaBdj9Uj^ z*L|pR5@?5CvNNPQ`d187hs0BH=kes+%zWhhJc6>Qma2XZ>@GaQ?Yw>G>5Li@5bJhE zI|%xjt!G0Z-cUQ!V=uif_du!JvKzq;|d?ph^&&`^5dSQe4WnP}BG~w8Zo~|+-9J`@szp%0QJ^O?P#Gu^t&TnU4 z#xC6Abn=sS`r1!Px49^)7=ZiHd+%8H_Q>4ya@bw2taO`BhY7*^F4I1DUvyuoSi=Fk z#oF#R+ZcK~V_LS#c+ZVJllrW@+8g407^5&-!a0TkS&5vY1gus3mO zr3AQL_@wL~Xzb5FwR4?Mh6(QP>FK4CDY$38buS50=+r8uGBqkgA7ve1^9W=f&6!Vc zoNf#n+pn(okmgNn*g|XH^T)V+JadA5l{Kc`&G8Op%m|5(#PQC=2vc+yCX-X>ikmPW z(+_*_*cm^(lDl0m5L#Y($32ghZLCVz(6>Xf>IB#eTXzh7ZC1%ppFXr+Mt?4KTEpT@ z9n=Hlm=zp}`NE6cEG@GA7a7vsJ1j-8sGKQwu)Y{)?cNOe^dI-B;rM`CoA7?q zpfdPv{EJU8Ok5n-h4hbIiDzZqk3h}$7+3*I-yH#08tDf=KY>-gjjp;1f+s$~ zvJ)#LA&exsNCUYY7ud)y31Aahqp|8G9Cyc5M^520<@N+(`0F6>UxgCyKK~?!Lbbnz z{(8+fdrboIcxoxwCT#_u6$P-y{nJYfYe&Mdb}a9IXnw_3T_nC`cE(-qDItd!ab5u2 zx72arGZ)ZEFmrO%do2%jzgmcZasC~4i5(^U+j4vKHrdKGN+5Yf?a5z7kz!oiko_oj<6V#=p>Zy3u@t(I&4D&4Igz>+^s}%SFCB5H8z3#kOXRNrn;zfJxzgrTDc)cBgEAZzx1D$%2bA|BQ=mT_Hy8Yj>RUn-YN-XvCVY z!)ld}>VTRyt3~*DI)Mg$L}>14Vy`~d7})!Ld8?1#E8^4jjrJ}vYNp==$PdC<5HR}Y zl216hkjX|hRGXBP+Pj|d_eWF{`Ve`GM8cpau9fNy3cAwZpy2OWf_J_LZzWt&zfv~< z(A@c|Y>iFJ5V89T1OUeT<3&~x6u0W&47dO4SFp2=!5SXvfoQ-wc|tz1&;!wbW*&&E zW6g7N-{8Q$xI3@q0d2=}tzj-RIn~C)f#jc7spi}47!f-gTz-gBO%|LhIgOoBUhHE8 z$XgvjBb2{V*A6m|RG zFGRrsv)CA8K3iGsxSZ@Noas0A^ScX+;+foF3l5mn2AV*!j>b9^|6pEPU>mS!CS}^#G`KNJtx>WES6xa3olHi;V;{2U?+zv-z^5h64lJ>ah&4xd@1kOkwSGJWh zjtNOSlE-N_im6e)C!V#yQF|+$zyW}B31lUhx|AcQbgqu^?WWZw1!~uIZmZhqB*C4O z^yxan?QK+tw}R6@w3|Ei&g=P!nXD5pQ9KN0+#!4>+yX|VP-oy`wK@1yA?7*6Y$=%_ z@JrLtkRleV?@>zAFmi6& zFRaH%J!Fw?aRg2LC-(v`_DO6vc*3Zf{I2ANsa;{TfTi2 znqQ_p;@va^cW)K13!<1=n&mMm>#pfbCzXpDMXvZoYn$EV^ci`g)n9E$<+UDcCq0Fg z`IK_?{DBo8#)C3H#W@Y$CX_Nd7cBb=6%ca%%Pf<{wGAxio_W8EEb#2U%eQgEnD9%b zVxyvy^*JcSH!+N?9*mtDT;Dl-Z~_|IWW*0}X>1pLRp)S|C<272P&PmnEok z!q!gy)RryzK5+u_pkvB8#Hr+U4u~tE4DN-ax|8$-mJ2Fw3b*ecn=u8xx`5Uq=NGcO zx3W|HKR*nCP<7l$msYm$V0G``EPk#;+4{KCJ5}KD%zJF=UqK(6#z8@AxyFsHG{zBu z&YVn?FN!b>vY?QAbF8uKt;-AB;UKeEiZz_d=3?Q*IhL(B;Obb=_n5>`ZP4r5hui@( z2#+c}(1<>&R8*qi8GJqLMt~k&JLtPX2@4>J(ssQ*LT0#Yu%e2TF(2`^fWt+HD)uTbS zq2tw{BUF}kA;^&&K|@8X$$g*gD}HVA-)!rYXr5+j0=<2S&leMHMr|%`85#mc<_Z4H zRdncTh}6*XiiWelEkV2rOu}Qaw~)!JZcfRiV%W(eKf$O100B%_MSU$br6|@$iK!O0 zCm^pe;b0@2nV;_XsnjJ%VhFF0fBS|lfWG}L0-o6GyBF>Ny`p(-ywRE8OQ($YT+Xr5 z>zCaAvPKpaxz=#Y7V}Go$R-A++KB-QgJ}*O19S}oG8F?hh5UdLc@f33A_`@crKLqB z8yVR(6jlS4YPh|=eMN&oxs{@81z31=uv&m#HDw+HunR;IC=oV=9$$(5n6R+YVfcD#cR z)Pw@6b&BJS+5W~Rx$v~NNeqCl53$t{YHu?;S*v!A)bsUWjmrN^cd_eEVXI5F2j~Ol zNx$h|f!@XWI%M?H`sPA{(YpMRhPktPz72w6MzS(AhChk?C~h|1cFc174NnyX_e5`= zU-l+O@Tx<%RDRA-BN<;~LSzM=s3-D)dQ5K8N>ORAr_o9j{tneNa>Vz-dtV2&8T@;G z!*3GYdalu3pSNdF49z^qEBo?`CVG_fajK5+$t5KOQd&X%t zfyR9yQb!d@^o-^qimb$dIA#GEqW?c4>vW>j{pQr$&zU{lxsx-C)$K@U>TGy37Q0=F zK!blk^nX_1yOa5Vx-P11Ao{8%>?imw^>`s)&tPOgP|nr%jS|jct^z`2Ll1fir?*Y}yg1{? zigqL?*J0Hda89uc!R>psZMAV8H?4<3RDtY3N@QvonMy?k>gJrzRU9vZs?K+Nj2DD+ z!0XulZdC5&bn6dDV>?)%7>xW^lYk;HVgf*a3M246tF^Wccm#qz34c%D3j=~7J7)99 z;V2aq00X!IDm&NmWmPredBWe!?9kYhCMsyLIo|4DQQ%Ife#RU(9J?(fMgUZWa#Mmz zRs2oto$=pfmvgBci=rmSo>EJj0uRjP<6o7yThBW0jf8$1dV!kzRYUO;YPm-A>v;sS zyLWP!mK1+to_>o6`^kp}%plBYg(x9@4^pM^W**7#|1tmra%Y`3m0}4(0DFhp%%J-W zS}|p~+ol4Rsli^+58PeW%`#5hbE_tBd)+)a`Ne&g0*_aNr(cA&3xG>`@62p(&(`U< z2U>Lkjog`mjKeGf=65h~+y|4;yLytuT7?mn%`YwBI+rB#5)mJ;2i!Jq=jesbOj&7H?5 z0wToic6Z>YFog+C4QNq0YEk~GI*A)j=}QY}Hn5 zoCtRleBGwFNob?CV~ z{GaXs3@z}RIJRLHfod-0NSqGU#Q^<`l};;1(HhC43Q<~=e^^M9QL3sO#^DMrkjByS zFK0)2#wENu^5banTk~Tu(8+|Fox6hey6xmI+Te?Lh_Ms%H(TDlFrBz~R!tfE*Gk%t zhGaMBH%rnXt4HCUS?;1G+yxBoCu!xgB&XtiBwJrh%fUxE5leZqOR6cJHrNJ-wl*45 zZ1<_d;nLA0t(2ZhF}mfr52=Q2q*^c>PI6v*%A{wW%{+hUCYgHFXsHUB z=EnpK@s-ojyk4Mg)kbp36cNAUjh(IhXU%SnOeg{#I^@35{>5c!H+RyRO(iE2AplX% zpeccm&#ClSxKwB4fPU3vSY`xTJ9tYn(P3w;#r0Eq%f~q>RIVjn1R38}xH#YM{Ll%i zQ9j7DJ0`!N_A0;lidJ{N%jAkQ-~ZJQyQ^G60$|UPskUh3pRvtb7i?Os0T5v7-COEy z_7v6_@}mC-r6IyG#W?b_qI-by7#mTYdnNkzUy!<3=5Rj;uJ@9jgCRTkJj?`Z_wfC_ z2l?9awYCF0g@=k`5w!n@i!#bsFTY8#XweU5ONS45mPH}fw^#?=D%YfVa;v; zspxjM*taUdfQNmay*&u755&QE2svY!mJ700Y{kvWN0K-$=+UJ_!XW$peRh;(DwM@b zH~Ko&WD{Tr!yvVR#x^H>F@!=hPud}z3Us_nT^67NVDW@jB3H{ntpApIGF#SoN@7rXX9KXIeCSokU5jvGORc=A)KH3i@f)u4y|Kg+QckKc-K)FfXjWZwsk`nOs1;5prb}x-W&2aGHpD{QJ7kAOp5LOo&sr$; zfBI(gC){#yZaYWdKxNW0NCEq7=`>k0{$IV-)lIuQbfXfoCgH}$_)O>RGMH~RfAW8IYMV4& z>Aob{p)Qg+gj0__k;OnMUxQAlg3n}Tr}3_Da#zy5G`lv-U`lv)#>B6Gz5CNmr4FDzbXz5{NQ*V-N(f)mBjBK z_3!aR?hqi~dp8fwJNh!Lv1G$OE6>Lfs1lhYTpFM-DHq0|F!YuNQ%kp^Yz-s3t4x{7oKTB2&y3_6A0qSfr3GX2~8%npmKctR`80 zd{+W!qwbOHF@wniz~ue5#a`j!2`#d~^Cqa=yyvOJ|1a+K|D)UfugroRddm%_0!s{V zRadmAFl}~U=I=`aG-Fv12RsEMM}`=M#fyN%#P$}8&7$l?e`^Q^hc`wvVy0rDnS5_-=dF|y+543Y0cdowzl!wn}1`p6z6e>E|aAS=f`abzqjlV$G+<@8nED3k@n?@bRvL`dz;LVXArKKLSg*BlosOzaxsm+ z=nB@D0IH5yaldtOum$U8UJ|L~I#Dv>0{Akp`}O#k24QUJe!T#`0>oJ{a(lIEurAtJ zF>zXm{y-bH0kl!PbKR2zNvmdzk#&}T(7#JTZhv)hI_<+wuiGU}C!2!6Q@FpCF}jM| zk7k7`u0%3RO)b{69v0h5k-A)#>B6hoPJXqcJYrw@73BV;vRX3v>3UsTJ0xA^R+V3dy-?S+<==#SKD*5I)8P&Y zJBz%|;Iu*JjRdBBjvC2rm5sYveE$gDB}Iv3(!T_44<@v_>3{)VZ%(3nLF2Vo$w-1s zM|Y5&W{xjp{w4-C>lg(1oPu>6)*Y>@uYU;mio?JgjxRM}m2C9h&$TRd6Vy4SJv!7S zGmDMx97b-H;VOE)rwl#diLx2eg}M^*RLY9y)A-_eG*YL_+mmw*>;nIp7Bq0cl$o;kI!EZx*;vmy?*bGm%)=v)J9pHe1e{DRb)x!e(T*Pm%Wt%)-`ze~jn;FfgtzP&1}9l}i);+8 zr_==WkAd|0xK%xOt$-hrK4r209V+AEc83B@MNp@ZWj9H@DVS*s77j=JEqTF zDwD^qf5v8WSd~dZQYO&=TQE*l5FebJ?U`E9-2!3)Qs0$;g-GvXI}Y6yQ&0H)xK8L( zZ^BG^DqaEGa?_M?K#!mdifwgy7v?Z?emX_*6 zC-|Gqa2TT*71BRIM24C8sMW2~uX`y{AX_q0ZhOR^ZF z>|K9mkXK@ha1%b(WVq~pQy}s3+OY7gl@fEiIS2CARdRL(o554R5T%Iw@bjJGM7KI1 zWZC-cy7EZ0y>baZH-5jHl=|W`{^a3#FDB*^jT*j^akb~+@eq1|Ws!K>2COtYaRSD0 zCC&?E7VQ>clOG;)dW%lv`oEJpH`F`V`WG!jmsrf&sOkFOikDlvd~7hxyD%xDj8I6q z>l6GANyDO+F1lgVBxS{!knE*I^HX5k=oojhmxPMTqw?PVpdZe!NpT`nmg-gFuB15| z-`5osIa=z#^i%5Xtv4|BwWA)+9keeMmOAPEQz-U|}*^6-Axtz`oW2gb5GF5v92)AkFb$7((tARws#?tpNyZ z#(dHvpmO|X`}d4eObAD#h6ixf2;?s%V(S>S&UM1<;LqTXTA3x`wl%B=o47kqzE#iJ z&D%g~OKvRW^uaz7<|&F5+_)h})6;x47T)i8mL2`0xYZbz?cAA`B<8{C<1tNbPc%@2 z=a&dr$S1PHsRdSgL=ygsa!isAw3Oq-Rs7--WPiK|EHT(U3pGRk4JvlSJ&{W~Q@`Ys z4C0F)B&P46Oq<_rHTU#;!3{_&hC2nr)epjcn~Bm+Dl+e<4O+h_Uu?TB!GLX*D1`0XdP4p6@{H-uIm* zuOeQrgn_GL%;DyIaK{A{!S3H%Hw#f;?RYkL%)t0eO5JF!*uJAAk>2wkw{c>9gMpOq zZpx6_<8i>PoI@@2bLjIQ}5rg@`cNM)ZxXjM*hA#MtPL4NFY!K>5OccLx~VrVCH`_L9) zf;Ha>8;PMGIOTiJSuDrWc$jLCN~T4k>0ZuZX4{>q&$jNtiDBdxY|xxe7x8GlW>HwooH1NmJAB#{E2CA8-}`V zjW{tLUh`m$;0c{z&tY~xI9)eMc-%0tj-riL(S=C-S^$t$YX6>yLmiS%Ll3xb+#tMJ z(ISJYvEwC+eD^?p7XD#t^a)I>a^dsd;UDI>u;Sd(YM|mBuwi#J63x|ky*-~}JBVB? zL3tYwKgPbE3(JKMC7!5rQwpCXE$BQ?4`+Kc6qVRfLdKwyX)=qN$iBIGts}q()|J$= zR>$iStt+R0ZRB+L{@EQJEEot}f8#EZp!OGX+z-mek-I@@b3`{0FSuiMb1^OH1!KK= zf0hW(2*5b@X75yW7i(%~)m9}hL!ZG2vHYX4IG(cBvT><1vH9bpG-?!`%_=tN(B(== zP|O$KK*Qq_g+8f<+orBIZa&Y$xfn$Dnjce?`W|XattaBFkr~p-b+s|9bfHcC*0cWa zM+PqKlUfPjqcqFo1q2Wn{7&j!TP&kAaM6}~q>6y1 zgF4BO|L3AnFY1P|hz%2;s!`oLvJzDSg#Ox4MJJ8XWBX;-MT(M#fIIul8)ES>?VA6V zdVV|#;+nr)^Lf#MhJD<$bgLA7OZv%p4mx1l#GkX0P}@bjzti6IRUegi(C@f!UC&Zv z0*deWt7#lrZf{_uM6A$za^eibQ)Qb{wH1A3^y68^1qJ}^)yB4_{^y%*z1d#i^?{1j z{pWLI>DFH}s*iFY_2TsxgH?u{Lj*mTn@d2c;Zlgm+hE)h(&W5903(7`n(NEmFH(dk z%@<*d0~LRY-w!8rp?`0VOlPz8>n>mDFRG&6-b&p!-GHu>EqCyItV5SQ%2Q&4MhAcP zwR-TPh1%Mb%gL4yw7B1|)ix7>pTFMBQwR8k`(I<1n0N}G{F&WDLM_`1svkFw`zz?rZ{T$>ryk9`)^{o1SaDqS zX+es(xaOuPlnB_;uZuZjhMZ(25*GsAxI?ga3*iYU&LDQ44g}IJ&$wc)&5>Z}Bi9R) z5yLL;BuVHHqblc4a?S1N;gEA7_nOdBUA@)!93ag{#ix{MSBXbef{_q0Tae5br*W>P z{l_-^g94nO=_KM%&U`MDouI3k3tFnr=Z1PTp}eYhvPZbV4Htl#9IIEVP}VmdxB(%(EG#1Wc*$#ii|%6|2tw_qHIJb;kWzh5ihci>~F+vcF@c< zV_tTvB@#Q1Kv@QQcF0Ezl?)*Dmqse1{`4{pRE1?t@RNuB@xlX8F)n!mu&idr z`wH%~)U2Lpd}F5f#c>rOd5z76!G0GgkiT2B@UL(w8Y!;`po@(r5w-oR^Af{`EKVHA z^zRJWzn*biWz#KS+|9v0lw<(XAlh~5K7v1Ij^dxOOuA9DvgpyrYYLFQgNGnbkjLLE z9*j3&+gRqiF0TR+qadwpQC10E8ZY7LUe9jq&$BVB;pCZOg(&?)5W%)J6veU83E#SZ zSS?yQ@ceqXkEu8&T!GB8evAXBzrVTMM`4}bXg-kKVw<`<_W3N5l=4hBK9+I`aWh0F zHK=g|&h4+T=3-3>(fVKAI)j^ED9YxS@Nd7rzq2w_hGr<*N&*0tU+dl5^30(4q`?44 zJQ&C>)eg2lk)m9%3mBFX73Ba$K)S!njzk%bjol@9>rMwlxXOdwiHvAN)9h^#Te#bn zl7j-SVc>ehl5Ew{F67JCoq>laA>;()?&(3dGdV_IUSzYIhD|`(Lw}MvoYpOFtD2k_ z{%lsUe$rAIlIH>sSbPLpuI7US?V$L8`p*oEe>2Intb{K|yh5Y(-ak~*)DH|@ifrZR zIo&=5OylmB75PGRi82<|38X4h?GscocRx0By zwhXSY;~&6lV&m+($MMPtd^2x+yxX;S)_MICfG8Veh<5%1{71(d8#HE@^{wV&kfx@U z{cmhs;sBa>i$b(s;ju#(gB|1}do(%aQ|{zdfM_8@k}mp|bJhX;Kn(Da6;RVNp#1^j z4#a8suB&(H*3bUpJ1!O4(zv*>W%@vC%16pD<^;jD025X+leuO1^%l_La}bY@u;(>7 z^ns$^C;e!CJMi(IF0+l9X3UNTIcYRYIF<6$07jwIX9Jyf{?0>rSUb?t3)Y?qT%tek zpn|POtG~AfqpzE_$-{vKAV=s)=l}|*?NbGpK9Ba1)6XP4J!hDZmIyM2TqZeP(P;LG*i5+BKKR}3h0r3b)l%n@5ac^M z3c!2wU0lkQ?E_JCYDQ16YfliT9KXCS<76(9B*&#M1~NhITmi;VNzh{8WzwvwKKiGM&H|?`!jFGE5Q1b6=DRaG1ovz1A(Jx`7{!%xV$gR{?s&l| zhEcA3iUtgfUh;e^d6nCiq{rHA<>SBxWGxr)g5A-H;uIj%YT2yJSeh*ZVDSfHSfY6* zL)czvy_=Mb@QtwA6MfEZH;A#l=y0u#`7o%7-bk@uKmbMNbv%%lX8!t)3#1qK6p zNmNMH$hZ!6U(h_UH&&1V15+t(?U-mvq+hD7<;+ zm=(w(2YqaRc4s7&Jt#Iyc&W3p8zxdYes9Re^ zHNN6x>H3?>7bDHl$aadf7xeR)kpk5kOg0^a$m1}H-_Ugg)~D2<=qkmVay{>7n&P)~ zakC39fu97yE7eyDz*FMfa%ih(7bx9IT$H$Yy}GUUSZyYzwOrrVadEo|9oF)TG4F@O zimDTVG>{)6F-1~+#85Jc!`|?*!z>@X`NxM0<@JsM{K(lvUXePzuqBmo1@{f>O{b3s z^DFmRj1Gv3K++~W6{5Lj8pkF-$v)UR$W_sJKU7ppeXg;uuCnE~9J$hLwsvXHiNo~P zs``igT6yN0hr9ES6(>^2AC^d8dDH3)$jjBwECBmwc{nJW5VExWC+|6Gh+?zX6F37ZfKLSady%D>GI{{s zI;3_@^&`~j)nWmvXdzPqqftR0z$T@LuAwi#n+usPy$zgftGyyw9q_f+s-e!oQEAih zq9M5*7~Da%dL<1JJ|O!V2O4|J^4{Ixpe~v*RtVA;UgjN9M5hWY5yH>oR{Qnn9NS?^ zCaogv0;0-zv*nr)tVg4fov{W;RFCK^u-Q1>DfOW}t_MwQNSb-4_h1u3C%m3#^qulx zE>xrHed1{;+vJG_gdoU`W%=I57&H_624wtknLi*DfJ84)+U+(XYFrApfI}dZxQ-eI zQ7D+)?z9!rTL{nFOv3C(+t+74nGppXGOS9rFfSWr_#f^m{rEo$R;K;f}L2+9nZm>2cTxp>pF z4BG+^g&T%GK=z#a%A`AzrhR|AWa{EahM6U_q~HtC!-^;=b%xp-=@wIeNy4`yBbspP zAa>ub-B|$t6Iq2ZfjtwawWK@tZ(EpdJzBIha>V#s4{d!O9q^V);Fp^?8(3DFHCC#^ zF!SK@_cD6y?(tVK?PDDIQcdT6q;JOm`aOXZW2!flKgWS&C+m~oeHrRx#0-E?Tgq4m zHtDPIIxaPA+rgH<0%AKvAG$LT!sx}i5@V4(`Za$bvs*t%e-=NE!GGrziRJ#@N$<0_ zJxxDWx!d}^+&WtQA-D>K(MOitRbR5`i~erYokON9xY6#W=ogb z5-AWbD4{`XaZWn*O0n_D<`d_$?)c2WGo|lZ-s)z*`Zwpb4kE+sA7lVoz&NtXY$c?@ zJ+0qM?@EdxIw(LA0v}qe^(VpkUasaEq(cSI4nELUQqLZ2tAfP~k~% zsc@l-*DO2e-JXl_6JAV1#+a=U0hDj~gAB6F`c&<%Di50qA)*iPG5_5n`{2rK0~R-} zSbFaS>{uZ#Wl3Mso8HKArgun-@F->%V}+Tt^3<`YdYn87wkW%)B6O5uXylvZh7y)Ml<2hOWsil|wN19w#dROlAtvaF zxEl^_R_Ffo+8NRN7sO(PifP8r&{L^50d3qpl}>L?jrw+lz8B=W$%lBdxEtWX8N!g>oZXjyQ~)Z z*Y4>L=Jf0^Xh^C_rqmyW1J7iea4Yb=M9@g>nwFA`k?JBe&H@b*T^bSvOHOH__nlMT z(%<2Hv7_#oJ*e8%L#OBy#qrD3`7#*W1-Po$$1!n^kwxJpx%@;uA6ZV=IYuuQ z9J-&o@OahxQsM~w4g?m(+{yAxz-A!c?5(=(v7~(!Nu@5p7k=0X*Zh;|=4to15;;P-gqQ($U~8AU7Af43 zI_DMOtS?=8Tdc6P=HP~ZMUTIH;*Ifz{!^M>4?d9oGFM{P!%4666ZqGMNAiJxtkq`_sqVi49Nu%C;EOuVfV7SA?_4iSsKk@g9uHMaZqkh1N zk>0Y2EAx|6_Lse@BCotdH)L)j+O?ohO2D`4}3kD)jpFw#VO6S#)*;op0;jK_oW=EP`lx%)ISq-8sK8tu-Dt>@7y)GO1Z?N~ zAcFEJM9jJZt8_COW+ zY23qeSp_2?T5;MZtHE>kPR&wk&Fvd@`&1)LQMgL6?s zX=CJrt7+Oc`sLeB|B5Hz>k=#`#k9+>Sq)NA&KJ;Ip_e4ApQY3bkYqYgJft)(BAG94I1uKB-yzH$`LEAN7u%4bPhz} z&UqzPlZN(kOr-YTdSe3#45^;Rp+>x3{m5|d#d)9p5tTiY2FoLICKx!z8xAajDVNjY zPx-(;BC1*jCDeMS(8h$6zem~ATJ_T$h`FllcRb?Aj0O(UN&tZ9HN{7+`uR9HkY5s9 z^#&$WHCO6i7-xq8y7Ufh;DHAr6m6aqLR(FBob^meY zW_wq6g7}8Hq`28{_@9D7Wl_FY;)jHvf_yUv@rV~XAPNq!=&2z?N=5{;%CoRJ1-FRV zOSuW*XI9lyGBj0)kf1MDxBPlxp?rCR?l^eRkq&=E7_|6B9$eGy{yJqc>C2ruW!jz~ zAos^z&uqBp_l=2A@htuh)aC&X_z{5m>^&wil3^nv9wwp5DSEwrT-pd%ZfJmE+F4kb zH1?@Rz~EsT$9_Ic^2n_$es|}bi5;7tuKZqP6LahK{U+AL>R?tjsIrCEG z`-avf9>Djnjs(rMH)C66u)7-#=`fGT@$t|_A7Z`VjErp5<7%{58Xo4~sTmozqV_A8 zTr{^eIHxJ#BYQxdrzD+d%F8dsvQaYu$Bb%rpd))5q$ zT)P)KUa_bZW@3*bzcYB#hqa@AzEIYC%VG0#;L7`8CMW}v5q%*r&0r0R@L`9} z`sS?TEEj5cU$mgqw#!iKG7mI2X8`--05hn*xA5Ei64dt<+PdKnvcFuI_!IaG4SyBL zlqYH8^J$wh5(ziPyhA$b5-Ggcyw&Qd;-h^|0R@- z*$sCG;~>-KAxwvk{HZiU0o9PsHFVImjev6efhF;ek@@SxE?d{|2jy>y3_YR++P^X~ zjV%>oFH#BK_rqN4`16T8P`#-#sZns8pS613U3Agajs>ik2Iq=KcUTu;xYhbUJF;XG z+cl3=m}BOpGxL{G<2f@Hy~^3OJErsFi*TD8hCUvdBCdw+|KJ?FI`NGi5{`n` zpGXpK#i!tywchYI+aabfG5F~JPRFIwIK9}*I;7e7djiWzN5W*DR&Yu{T-ESrfu4~T z1d77UrD+t2usCM(O6%ze^{EkQD)-ZSs7E)Iph^^BuACAe=R2kt?0-6J7&eJ7lujab zj|nf4Y(yI&GZ_Bf{{&*3krbSqk6j^H2q!>dP10v?9Z7)7RLB(tkj+yg3nreSg_kkD zV$nG*_3X{&+E%A`36-AD2PTnISS+95*?z=0I=oKJD1~f$wPDvi8C2YBQ9wCaG1JDV zRl7ZG%~?-Q+ZD_=vEyrSI9;Ag6|ker(c11fR9<9-LtLDcEJzJ>Gg_@)g@2QuwP;9l zehui~{Ld1XFYpK@H`67Lfzr7npSi0hMX$`c4wzIfdZN|W-`RiXjJk_ByLF-R*4^&{ z!F~DIGEugnHq62fdeq1SJ$00giDfvq=8)kOcOqm^yVzmyh*5eJDQtbG8n{b2h$wc$4N|io~ zFMi-{8vl7ya*SXs|1+Ng^UayFkTgid?~7zBL%C^YjQo9B^fzNg z&bYop^jDK!v`@l&iS9C)5K;X%Td!8mPo*gRL7jpt-7r^Zt>Pn zzONfLP$wefKqmTIU6mDE1N z;yrroV;0gmYVf-_`Bh@A*Iib4|D^g1=WK@+Ho-`X^5*!vEau zGC4n&#?L)XlNQ&1dNq9LsdG;jC$nI-*KS3`O0j;jyvYxg^u{h9p)V8Ob-O zYpSA}-4$Jfk#df=y#5^l^~e&6X9|7hD2Ho0D1$i}CH!8<(K+PMJvZNJ`qWo94&0K|LjzoEu30Kl3>Q>^Ip z-UCSuZgS!uPyU-y-)R;epU{ecp_kY`x!c2KmoAW-f%c?p_`uwq&kMC`EI^ChNj$wK z(bW|1Q7eVDwRM12l*Z{THGLZx0PtGk(l!dq?b6DoV2y$s6PA%Vj${pzDYRI4a&iaG z5?WqZLUfA3gALI!x*Ms_HF23-)nnwss(W10uI*J7?Pa$F+uX=*aRO;5N}%=cpP_3r zQpj#MKmgkJNSY9eOt83_YzZC|CYT3bJu*Dv?@J{F;2|qgHDjC6Wm~iIuQdrs(~5wP z?qj%CJ8;g*mxxdQJjXuef}}f!=3A)MxE9hNeOWzva^6z2*yDSJ4?&EBTex-j*@f1} zce&O=LxmQ@ZFZSGy4&UGNkz3zkIEhFM5yM{eP3+ldWoFC=?9MCTjo8yd>E|%Sfy6y z2e82RgFF4Kig(H6VF!+PqZRc!$YijYR%%n3X$|{fQp61Rm!8fGX~E~!>SC3W@oI%ndFFOEY`K!aNnu^^a;F#%U!dY6d$;2T;)l9a>RlXF9P% z=y4fq%&7iVAhI$?RT?{eIBdo{;0MS+^>(A)%QmC$JDKY!NjI0YmQgr=)NvU3|o z9lF`8g9*0P11U8vWz-2+Traay4Ge7PW`5c`?r0{lX&oO7TBzekB%>OnwA zv44OAAYU3lOq||Ww#hug=s{yhr`2~-{`w6-Gr z-nf5(xJw;mVbiGzK>x8&THPm&NY?o!g;Zn831#P2e><0sNQ&F>yGpMKR#*}la^M|YE+To^$+>}(r zlC`!}?~eS?9Y&)T3`$0~P57;quJv{}(f4}|vr5ds0#p5VJDJYmcStU<@Gdd4+&%K4 zuu~E0l>-;_wpZ}}=@k9slqr8a6>g*b90n;P>h$y`A@|KffUl|lMR|yq^Sr~-LTt$K z<~M;|)yXhf@F@#g`^&b-w~!YyR^OJg&d2IX!PR&D5_2&P@#-&LAX8uRK?0GaD|+7L z=m@6sZtIbgw2Q1M!3vXdjq{Xdi3-JWlzyc5#Xp<6*~~|O6)>a3;kAfL9*fvCJ25SKp0V=JheaM6vdy~7 zCMm|bdD*q*b33_893Gcw3#~LytMDRJmPWevs>hqdy3TFHD5>0LC|t>8qrS4wxv>r1 zE_I2(8Fh!fWnnv@sWr=L6&4(PiH#=~w7j+Ie85T?5day5b@?Q}L`U1FJ>GnIR@+RX zcYh*`ZrUG*y=@#vYlU6*XAZAyQEdytdpM?0>A_PptLXg&>HLkHptg%gh$S6w+x=L@{N~G*Ne@A$#?0|WeaGk< zyl?QELd<=92hU02m(~n~s1vY(><)wq3&1%78DVHJQ)90mWHaB-D31=-83!%}R*fSO zM6eo5rA)=ixI>;3drJ~05E#k{Td{%Ttj1Kye!Afgj{$vE&|VY!Z5;{rik5P~B5IHs&K z5(+Kr!%OEQ+I%oV7U(HgY-=&yf^Yu_wV*(HuQG{$Pq?Bp-?bN5pd=nTsg|;72`hwr z#{KvJ$;=b2JXHUyo*_DT!!NDUvr>yW&MoER2EG)TA~sU%ABFC0>s~o&5%y-D-tXcr zMi|N=)G$!+bWI|zGr+4SIOcmP;U^3mfp|8mHvSY4&TuMY1)a}f%w%)gO~Pn?hR_03 z4L;c_=yT5@gwkx_as+LJXE{($*&?c(bW8uLtI{x(3~*G>^tHG%Ac*5nfh6<__`}M) zL7AWH=mhc*Z^Ouzu3V8S1swJQV=97RnIUJU*70?smAQ{Z)uW-HB*gK=(G-(3u6RL( z?Be8wz}{~lr)T+RQy@%`)+t++{To##0iSIe`v=0UfX_@vl)|ZuPx%u61stj{o#IJl*8mer4>Tyy5#V8M#9=to009FHvB?#lCK$)(>P@?u2{dK zGnV_0;jypGUHR=({^3)Rus2$f;bf$XTGN9NVywoGgWNQ~2NGfKybD*TJ`! zcc(U(l;7KO0=7UI%3vnwUpIF-kJbETGF#F=<-7P(S5{Ib>!N&lwltYX1uNa=Z2U?8 z;_fUVyvY;Dw_{Ib8aDA=o8%;!a8aK`-Wy9F;vTkn)V42vukrf=++h0XOG3HGoC@t^ zC0g7FTgCTNL2c$k6?zZdJuwl1KXy!82gNP>C9rhhvL@7@IZ9xiD)DP~d^7&d#!7&$ zH=T7^)rpnQL$E-g@0hU`Ws@g)9Wq1U#mFW3V!#mY%%s)!e%vcs=0hXtk!{Sct*&o%0Kw5dHpw-s6RVc&TYpA1VE4rRy#{BfUSN(CTMoN z#vasabI4#fti8iRF(+}ghGaCK|3dfrBF?iDDI%%FCJ)5QR%Z)etQhX-1h6j{<7d$$ zo|iRI=Flchli5nCW{%XvseKj{;JBt>q|F9>6FE%e#yMIeQ=gf&EIUmKgT~u~2%rW|HaG`&#Z`L3#Bxl8|p&inr@NSO_ zf-qk%HAf@Th&s(gGTC%wY)z!$|Bn=vnphpIzv4_KRJ(ahW&Yc&`M5qAxVa;pPqS(= zsM4%BP}zf`I9#ypDi<$s8B))oG(29 z0K0gAu1$yzH_zDILfai=U`tI|qaQo%slp!;lBTJZFtVBS(P62edO`|_J`+(|DKij9 zJtSE5Qe?Lih1{}f72vEHdEWv7$;Q*7Eknlh!tfUa-OTcB@&u!J`(WX!+&Fa+v z0EF_I%wtSqjOtL)>Q^n-=wNCqz|{5j43dc4k+=I|NtzS{)g}c&2RPjBh+0Fo_@~## z3gJGe`tiUL1r%SfmBa3RcgSN!VN~@h2dfJqG=Fj00aZmi#(Y z04wo$B^t<;ZRmJ=3wr2%$)sRX3L@l1fV<4ODeDP?Yb|BZM)euiG0B!c)A%sZG)s0) zp&EWvo@tpwLe19%+qWn zK=xJ#?ADczT1@Q}AaJmfwR!pErfgG+NyO1S>~x)ozmKDzAN7}5*P37ock3k_JTrg}^x0MaMXhMtT+eD!x<&k1xLd1}SaL*jL zkSuCFLHO zf`--*gCI=^j3(p5SmnR)&xiBmgL5{+7+p%KvgC#^Rmw?<t0C9%rgK5wVxa;xH?V; zm%46X7;nYc)s1x1w5Z=&N)O)5>-ECBr|l`KZiGU2W`8&z4Fz4l?vNN35(qmje7aDfCW623yc*%Xo8f=iVRkl|`;Cca4Hk(~M#cqf6~U z%OfUMpUXkGc14DXF%OjqkiK&Zu*K}0{$^Y5n|WJKe7{#_fhDSX^St$D0x9Z5uaI~y zJJyB}1%7`c_ANKpWTkMn!D2Ohqu!HJnw|@CECX}18HtBLnI&ma-ahl%%HIMN{&bG^ zzlQmnmVBI}2_lpeFiDI1r0r=fow9RhbFn~iGm(jd^8A@h!|W4_pqv(rd5MH&<*Wlv z8TiA>3#>+wgO`Jl6(!J02c_-@1*N1fEdWhL2!;mv9Rwp_->UrC^S0UreM|>*+Vm-? zbgeeb<)JnF17Jrg?aL5MlrH@f!YgT)5+}w>X)M29*WG8OYlcm_wqR;%J&bh~b|Y+_ z&L zEBcp)>tz`)BCAT4A{+fPvjG2Oq+^r2|3wIeQ|g;HpQEp;CS0I1$f-$awd|C#!+s-! z9FI8~Ei-GKttIo470`+rG=Q{(;vLO{U0(w;<624|oaZS)vnl4FbmHMxHPOZg8<0NV2Yc-7|TyAt3xc&DVcDk6fYFA>MnE9*Ui3VgDjnv&>S z8K=8C`|OiXxKNklMMR`rJ=t&f5L{B18cxWRd+f~_>=+}In3k>jMWhvnu<(*f_j-H) z7G2G5V<-J~eBVo7>yp!RoDNu-v_uV zHJ&i!lRT2@rOPeo_`621{2sLf%l5weu~0j?y6of3?6u~Ra=Y3c?e30{h4cHO=YFlm zek%V7uhgqIit6mlys~%@=Pui<7b@oM?0BGO8W~EatSkN9!5+#x4iDkvI#bF|FP&Kt zS3}Y6NQ6a(tIp~f7>0~PqO#I{R$V%U4!l?4{U@iSoM13*`&Z+k)hVGGI@Q0E+#o+Zm--xjfPj~4$C=YuW=W)-?RcNV3vv*G#AJOl22lA& z&8HkcA>w;3jSy9I4>_y+c(?4Jztk|@aHXh<5kF-=)KB3u&|A1x_u@V`Ov;-s(odiB_;>eAsA{^bFYmf~ z^k}9pIN_`0zXf+GN1d%@b=l7E@=Q@0rqztZNr!38&=e4R|yQ<5f6B!w;lL%EUcL?ss zz3byH1??-I5zDm9H_DS!$sUsj%sZ>3=ygE|KmLt74bgl~d2)pE|A{4T9i-hThU>B1 zSTgEwzDg2bUlSWM?h;XaF;>2@)J|a`9BZbK8dxUk(`jy?=xUcUmY{H&HI`U=YB!ch zdp7r`tn0M{^tG!?4Yb-I360VIgKQUpC2AEX8d{__1oAN09c`1k5i*7NLGA%fA2e9N zxW6u|j)4cEFpoGeXAe7x= z1mA0Zsk{WGrH4?@-JQ7Xr_pE8{ACc<-FYx5tmkKz5A|&L{z2>nH$+Um%&BVpwYI)i zXR{i7EQmJNk7}i}EZvzw*Q8xBu&T{ga=hAG3A_8BdfjjiPUpuKph zU!krxhzU0Jn)L64HeLDCjL5f?08uKjP}h!LKKI=4uURvW5Cjt(EAT@k1i&thrH?zrD z-4X^};#1W@RQ&ut#5qTE`Q>F4d=|r#sJlHk1n42%1(h;fLiAaMHlIT^dH))2Ld>pv z)>iSpi6C_R^8=big2|e1l50&Y;{0##v`5WVN$)za~yy2i%7X{N!b2`@7pM< z@VjMY5tB@h%A}qlygGfj<3kbkZ@ij- z+Vn!1(K@t%9MoLvI&B|@TG$e)#(>%`fE6T7ksQDiUXm*Ui86$gOKRY{ zq%2vWu}=my!sNi;Yn?B^nlX+q5q6HAU#-)_W^=xCWwn@6nhP5D<-}|=lVfR7A~OZu zy{MwAPlG1N-Acx;QHsP$7txNRe3z-OknfCWeGbv_L<`mKQ`$@8Z&~N?lTID>==K3l@LV+P+szuU-Gc&SL-V%>z>jts|OMVpZ(s+&AOhCkLTqp<79c1Bkv)W zh79`d3ORwCZhxiPu9Evj?aCzWqPK6?uu9MSf=Z8e>m&~|BPq7)EFQl&w1*DtG;!s$~WCPG(I=`7S`2WpIxO_fpJ;ttuo_mBF$SUe#gkmbA#V4 z_gIMS_w&~_-U_{*Vw9<(10?IQIN}ZO7M2(~{o63=n;8gd*tO zoy?ksXT9ll{9;iIyB~Vb1w%@;Xk(;#Qcay0Z;Au?(_fGGBPDP$mE@l+FX?inkptBJfU!SJ;5hqaZ~kfnNm zE{g7tQPN;nbc8PxpuBHu2;ER0+Jk&48NrZqYoM%CYZDBOTPaucldD$z6u#{ zU4Pr=bC~^@(cW{XI2^`h!wb9lebKiGEPQ(g-EqNV=UW-X zO&zCz7M~5Px`jm-ddhcY#aY}0b=x%pT&$#~fUgM3xH zSvIA23grjec<8P!>?-x~{Xy4Lyz$4e;-sfT%-p>OwY=0uzRk(+S@0teg`#)54d6H3 zsVO!k2RfxF_d*FvifpCc+moH}H0Wni z)mz9lr#kHpBlx%2s-ES-_PzJesMAafdQsnL8hp?hBsn!D7aLFfx}5?D_RNMc-lTPq zCkorcU`0N*tIYB7CfWgb$EhykIY2jjr*a%!!LBag0x2#pja!!`tyLw#EhX z4r3JWzY?PurB$7Bb>};ZYcsq_SRPa|s7WZ` z;IOdCpuYsSsA-`70~6?vN8%_oG*CEy#4_|9C_do;^`5|BHbpU&MtOKxX9FYx2#_sO z#HD?$pQjnaWs_(Lez1Lr^|G2v)=yv(BhMhucB4g_zs-!&-NEH_2SpDX4?w~}tE1yP zfEcPX@qDL-Pr^H{s2NMCZT?lgK+&oYPa-((f$_^7AYG5~4NUHk5!?HJ*{qA=%p7W4 zPcaXpCmwYVq3v1w9IJypO^2{VS6*&J$y$r*@W-U=PF9DQgX0DyF5mB>;)F5=f|pgX*0JcuG{0-LIDoX@7hep5LH~(j{ewY&2`>(Ya0Cdl`~5x= zKHRjSP>{qoJAGsVcBMvM7t2lCmG)S9a^es+3BtUMc0-_^3kF?LQV9nvTXWzXOE8JX1h@ zRz9<48BRNO2L4{U?c46+c^`@?M2LBsdwzKW&SQwkWyq*ye;I9OeKY!LQ{>wA{|uG* z^uy9XkI?#?bBNG=B0o_zhH1ZiqPAZ}HXYVXrD` zKj6|auNLgE{0)pkYBZP+)djNPo03Z(fFvmfz!a)Z8dHTfh^%3CWLoswa;5$-SoF3I@ z>2D7HF5ERp`-RwOTnfQ*%N(-i?Hlh3;2!X;a-5aZT;HMgXO_EzX2HN`EEM3CKoWOIjUM$|qmSuVna_0^>&uY> zYtq>MaoC@Aa%eB*eSBzZrO=Rt_Qm-&=RO}*`o07cKKe^M8jDoG=T1J#tzR&b{Ug2wXz766<8NXWK~PkUb5 zu20j2VX}VDh?vCt=FEfF`I@z6{6t>v|&c^NxNiEjJ=m-=!-b z(p8U{t0zn?;AWSwbH-J&{*&`&wns~6IR7Lr6v(EYcO^)UU1`x#xpU2WuK-F5URe29 z=1k%tIAg?=&t98^GhHx zH_#BHF58wDW4`HQ7H0lT-DRy%=_y#=?;az+HTz(s7AZ`dI*6(G*-`J+F($nj_iyq( zlrQrmOSqQ9$$ZV@ z5q94r7%uPyRWpD3xP--fe-a*tdegtYVn8|_5!k2rtKd=v?L>Ho{fvSOCv3v2Q<%3l7lWdAk;0DvcSR9fw7^5&63 zD-2I}si{$TIwmKRermiwe=IQ?hIcpC#MUlRqsH~F#Wsl$_yK=S4~{CILF=A15E!Hw zHf&^`Xs5i9?j_Z-}L49bM0r7!*Dx-X(A|S9J9WHMUhtHR?t2w!EE%BEM zj0U5^M%3+)8XjXS!s&O1y3H9`iJ!2r#Pjt7Dc`ky#*DzJhih`iaKF6|;4FL|fWAGe zTpQnV_vc(-03m_E$AQde`9Z)hzbA04?>E426nE4G{15fj?XVjNd-<-x)Byq(VC$9S zonCWBg!Q)YpErmfXn57e{tY{D9IUvspHTz}D#bm*A0i@z?5fODz5x%6-a9VaHTq|6 z#GPRFR^S?+%$m0%${_w>`mzr^12SNOO@xIV>?@khGIdX^ES29^UTDI3UnE_(_Q(i5 zxBX+*5B{LkT_f;Z64YLQ-6QtD{F64g^S}210KU>UE$Z9_@^zO!Cq&0vP_MXOPpY`YE zIYvjmc$EX0Tag>djkWgR^&d-&TdIEZ#vQe;VO_AqQ^YG#ahRUib?04Oo9uv{>b3Zhc5J{lLa;VBX{aRuQ%a`zUGPCYolFfdy!lIt+x9#dJu!JF=1 zwrfu!czQJPXVtte@)@Z;Nj}M$sLh^UCphciNLF;!?7D8VHYFO^(Cj|5Mitl@v6uSO zApgVZAIwD)bR7$Q{6qziydVX`pmT9M+pH$ z+HO7~f0kdqi+P{mPo<~*-%U1cLF%M7u6OR49G+c?PKy-h(0WIZ8RZy_SOu$fGSMqp zDS2GRj&97mOqGw&0~I>Dg|$paEYTLcgd?xM>s;&H8qQ+J^|=nKDmM=8`Q9>L*1O^% z&r9MZWn=>L2|0ai?hxN28)!r-YQWtKdo((rPo2;e50LH-@ZIfVz;EjZ4j>?T`N26|qf^Mlm%iw^r@=Zxe5oZMS~yvcEoYX7Hc?B~qj@@IlWuP* z`N;^9*1S?gjao7b&kc#njpM2hvjTlH8#*h!-4>J&5UBunznJ&Dz$Pd{k+c{HE4GRw zfVwJVLY3osuMc$6gSBo;6lRrI?lAR*kMOf7^W4BLMQ{W#92vj^LU^tKeTbc}#~ZW0 z>WGyo&+uDXuSXT_K4uUM7Y+ghtkoRj$%wGxQ1DFxBz%tWa7RBlxNekdPyizh30c16 z&pFq6U<`Tg68C1#6h%2Qn|rFB=@M_Ys@~P7^w3v){kG8x)(z~d4>m^~ZL^-FM=32a zhmiy*Gi5M5Xr5OLavg~9f?Xzw(Z@?~a`)Z!3lLeU)qZJqwI7tmoVKi6Wl0>+@_%zP z@+`OL8_Q*|u`(T$v%&=PBB4pBxy$wDw$Ndv6F!1qfXtZlcGSsLNig@Si&PJOg~Iw` zw*(B%WIgkHu=^jM2*~Hg8jMPBw&Y1X5JA4q{l%LPI@_$8Tw)_9JQ9hE07F2$zd)B2 z0*8;Usgt#aM)#;t=3JSoF~h4Ezs)80&wf*48IQ^K_rWlb7aW$6&CJZ_;oxD+-1IvU z1?zg`5Tz97$&+=)e7?$-*Vqg23n)+>og2LrfL&8vqKG{;@Za9rZ=k@VCxtC2hpVxD zrG=0@9Azf1gFY{Areu;6b z2M?P;sJYf#kX@bhCv&j+@YSP|yUY9zl|GkIw$Uo{ zaX+5EfV1mg0O08VcxC5XdU*i=0sKz@U~CEoa8v_9sACHc2=O)I5~a86PM04+1JiQ4nI8z_HcN0Dfe zd8xVV`t{7M$mNVO^_fo1zsi{XeY=9%6kD9UKe*OgIPH>5JczPpsFtI&s*}d^Vtl1N zif4L*IW4Zm{|9UOYld@SyHq{C)9T9pDb9$D-iqAeP7O+jp5ajaM4QGy9ukQL6ass|;O3k#?xBQIvWusGOW3yF4z+|-1MegJgf1$o z0Un*x9ExGc*+`es5zjG#1ED*s2Q&n=L|pvegc*y=QF#GpLURO9pqF!tFYp&du?f{sETBILZ_aXd*n#Q}-!UPgn(LHGK#&Sze zi;A`8&(3IK*{I+zgf*bumEj51QI7E`Vc6JgQf>;qaLccMN~wlr+AEQIdkVMRA&Tdi zYH=)Oap2W=C@Um9y6+jcNzn3pcKwL?O?}+fulGCBUC(|jQ~+)z@TQkhi@GW$VZ-i7 zE#_OfQb->+OwW2`< z?&Zpy5GLt|D$e~*NTZwzT_FqRj|8av!W*p=fhL`nIgc>sVQ)^@u@WO1!fywQD5Y_F z^8l5luvmdJ=&QFP;0biIZ@%NQFQUJ)-qNiI%CMw zDlPyZSsoQ)Q%>Lh+{#4jnh9(%&8l9{h3g*?_tH2QY_n2uqm@NLq4}iUZ3?H+uYczM zXNsmMPad`F0L7G6$_U6eJ#h1{NI)yZDGaz``=Z%gqdZFAZz$czzcVD5?SBcn;}m5` zgLn0PGl&gwu)2^ix*X{&=2qCg@WOmTO~Nfh_+9`CNVs!u2nWjG&ldU& zjRw2PyFj+`6(c$OC!ru%y>@GabnDS=JIv#f=h=4!NWct%9O+C3X`%P~IR=smY|L5LFCM zq_c{T zt0Tqi1D+Y*gIxJ^>uYC`i`7tvvRvtPQ5DsS$2gT5=T z%j)AFcY7P9yPgQH1uNSb))Gs+CzMQE@pS=#!#P?MdJ8QQAv+7ykhsbtk944}?Tn@q&1h zWrkSJG=(!N-#q1aFC~zGCk9nO#F9r)I)L0U;%?Vk^RETuycO5q-T6kuzcI%D#^Jg> zD|15BBRZLp z88&rDF?t31cph3glcgS|+hx#?Ft&@dIi8Dc=up!D72KYMiS1W~9nt;Kp2mZSZ^(*& z9pEv9cxlKQGUq)Z3=&f2X>;+Y2+8mT#B6g z!YX_D_QGP)`%6LymopW8({k0})FWgW<<5Qp2oG#9o9gjp_y@lP5N^*dr%H2xLr>rA z*Q_cd=of>6X87~D#I(l{ zVB8Loo_!WdtfE&93=!8j!rwN&PuHDkO{x|u<;uhp{1D)icx#4+pVG>?TR z<~}=bYX{@Wh&0vR+N~9o->g zP{TT8+~S%ZK!9qO`qgCka7XMVivz z>|_9VYMXbfT*7|#fRl(c$+8FFgmLbpRe>Sb1ZyKw)#aK%s}fyeqaeqBU$xxoQYqGM z8>>kG{G1s}+Qk9h{nP|oI2H}jZdZ*0*K|xBUjC;fnS)qIDXKrJb>@}X=)(N%SM}Rb zu1#9O9g^`~M?kjZpJa*T+i#m=t@^Dc{YPLG?5DA#QM%=Jc z@ds5=6oXZQ5*7*1X?&NY#09O@eEao%v04r%Ws6>TNCF$9Td?F{szGoJPE>N_Gsz8ad5eXx=W&g;-EdIDg-SC-1~rG8HHb##0Wlda#}-C>K+G&p+D(5>FB< zr0L(d%paaGC_8*bcw*ehtR6>ybkwV}!91j?hFgZ$b|!cyRn(nj&|&ga(d5Lycz9(- z9k*H+x!>KFxf}+^#0eAGvMKQ!&)kHcFxc); z%YP9^F+dq+%naErm3Nnh70v(L#`RNNmfNRIRpZMUcMbVKZ{ljBg>vZUvJ=c2Ak>hf zKg{oMmG^R6Kgy-Yu`0&AO=sl4cF5-@Kk+3DEw3O0ezROi7{y1S>Km4PM9d{%JD59O z+hPheR&UZ}BQbI;qWXVUU9PE6d|8V{?`DBnhKbZkPeMP??7u7-*`U0HD=4A`a;W}5 z6+28U3R$267z&Fof!I4!(4EeTw{m-K#|P|n`vd5TC@xPAJr|77=EO+5(7Xt;#>1H1 zkd_DbAq(C*IYaovDd52DgUm<67Nd~L(1;a@Ma$Tt)MYUHH5m$6^@AL3ha7Ey_cnt1 z>Y)O(P{2#c5b0zna5MDVnD^~WfDa~ugyV^Q1r-c|Xd;o7Fwsg_pr!5SWZdIq{N-iB z5oO}%yrj~f2qW;G^@3`HPK-E@(vl+3c^Bd0D}?G;$N8yY>d=pVfi#)v$*dAxm0ZW! zpJc2av>{W77AZ`OTl{EB6DOtErcZ~+BA5M3f*Mg0eKJFuo7RJ^x{d2RiRW#DK;;yz zIvMCVOYG?=T?BQw&U%z*agUij2%(?i=@$FQ$LX$627g6JAV3oC{`pWN&KiGc0jG>E zZ=?Gwdc$5l%j=?#IwQi|R9X;Mhph*(b>!pJ|LgsD-m^XMb9YS% z!EDgmKBfp$9R*mVwGJ}d-fKrJ8{x)buon9u^ldjmll@CZ(}BVi{O7Zs zBg-M7fdeT#PI3E@QC1QC_8O8*2>Zt&&td-48}uLHDy2Fz(ek0%7Hc>K5rq%*5u^+% zBvJ!K9AT0IASTS)bPl|dp-u-I{ta~ajZ**bgwH~mQyjdo>?rIj2yQ|b=g53fX@{Gi z5ErbSIGo)ZleV&?&CLrJCRmO~{7*#TBTfw+fzKLV0K@$jQ;iKz90q4YAx*RoOINR)i;6DDd}6DFQ{ z9^1J+6{a~O*WXgUb9)+4b9>0$Jn@ov=Vf7fbKfUe@ry)Vin!YU2!9IM&Vyl=i-!mE zUfo&v4K;%j%Y%&VkK9p>S+`9uKU=p*bQrDuuHs)n4KCNia!;6@u zQqPWZmO#bsWiyx)ctQ&JuQEl4HJE319QFpjxUju(ri3aX9q_~3oA z*BiIgaYaQa7>&x$T+z+#47XXh^@?Nc!q%{LROxUTRn0e&bsI>v^Cz}c0R_-dNX=|h zg0*qifCXlraJ(dP0i@lc{$0F)*E*hK20|*ZY7N!%G1v_hd6X=0TVFuNd>oMdf_G$O zR`(3o`xVH%7Chn)z-nUBevd|-4a;ty&IE@WgNESv`gkO&6h{A&G5i&Hn3C8`2-B0K zN(7(&OmDV-VhUo?1cFf+w)%wt(ic4b%w+&P_Zi~Fn$(}UjhxFi+gK#_Lnp(kzu5@{ zct8`wbLEM}!$P1l5D^#II^%KUnwH^oi%Q*d&xi7X6a1})kj|2N#vYQd=!YG~Y+HMf z4F+d^3T2MD)ZE0U{%1OAQ4IW{GJ>wSCc(VdIsgr~8~m=(kYJH3?X-&Y?KnUp2=Y_u zcDG$v^lZKXlmqL&vl(Ao`n~|^kppBQK+>LmD1pOZyBv$##)w$<5qp+T*WFE)26;nV z^#?==flk3;FJ7k;1S$caZ!zZM+b@z1OrLe+LS;KFXspWb!t!o(Fc`?Z5A z$Mk*&LfNK>b)n6R3(xV$5?CN8LLHi^otFg|@7V?x`_Nk&K;`AN|gko!~_+q5!?RNwmnw^Q<8Ey8L-9)}Eo_tw`V(?)E8JfMJ;NM@Y zf~kbzQI7K=4Jkj9sYSE(iMHlnMT@)YgPT7XN1g9hH^_hJ_H1 zae4p&=mMVmS$Fgu7tVcWWYA>nUfvksS$$$iLr(o{#>aRvhK6$90ybOuaIB3hVY#mt zT>Dcztqmzh(o|~t7ZEE9iFpW@uaFW}R3JPon>sTHuF1fDStbDF+=)f_%A2=K2b7Sy z#Gi`H>j^<{EYkd7P-I&s`~w0D)vYRxjL%G&HVt}f;!<8qNV>Gppva9vQ(7ZVle)qL zA0YOe1~%19{^yQU#>*~U2&=%7qw$~QqwX6l4MOFua3aQHI)uKVlV3WRc|!r!{X2Om zEoQG-Yy;vFM&;P9_yYr*Dt>7?NqNwb}cq@)3~-LE-8V97tWMB zLMxLs@#fNT0r>i-J zeJn(5AE1JLGzM%wprU;wd1zmNk{d|Y00sap2T*XqKY&6S;7b#Qk0n_ zb5%(OY~Zz|Y~s_IlI?F0hT7b8ts+nY&|F8VG1&Jrpo}$3^503v5%PXPK>Zk=)T|+T z`Es^tj|!zbdN4-6bStuHySTG#j`e{(dj4p|4yLDdz8S3Lvgae?8rnE<#!e*XYh&#Y9OGV!ZUJ!Y}w`O*!OQB0Ah(# z#{Q!G;g^02t+zKo(wMJ4cJDE4ikJWd$d8z5w*NHCL@$K)5tNVIi0h3*=mE~Bry7To zWESv*`v=Z1>QAa6ic`<{G!hadrDRsV!C4nf(y>86c)+k*m%zMKYExt&f!$N#FMQ+v zql_qY&M>X%9|>$WVXiglUn*2+TRaZEoMSTUyH(JA9@7)(FCMkz)8H@T(>w=cKsudjD z{PiRqvziVm+iRPpBefz@8vx5`O>gt|^8R9Nv#PTGgPD3`OKC4(M}^BeP%g|k7O_M8TYLT_4~34 zq-ZjT#D%3IIHe^DR`-_0@#I7dWOu$jMvNiQ=@dE=VKPrfks?28R-2syEugz z5RvxCowlU)>jfFZR#isL8Z7U|POK`u=8bf>rsgcoZ*QyMB+4w+e=LaA%1oW70C=m@ zOIc4OCmROUsJhh4L+6Q!zMS{tW6fh?a(p|_#wI&ABjP%xcJ~X~#41%_V$#Y95UBQ) zTzmO(-Qn0aL9_V=z&v^R0_3(Z0Kh)NaX<*nog)hm#7{_wtuV@&0pN-G4fR16%s4hMc^-ih(*i1g!PPEQ|0vNI>kHj7>97SR0~j)%)ZvT))Qb8}*GQd9 zKv`aZOp#oVtrTAWTu8ud^+>w6;f^R&ohhJhORJtns|?;+Z6&O`?eCGY_FOImK#5u3 zmxeZA9W*uP``z|JCQuBNg|Z1mAp2bM6wtSHh3F^eP>!`|Q$WBVkSNLmSW18PR>a>K zviR5=uza^MSs7On!NH}+HSH_G>)$U|2yV6g&}p;SI8~Z;&CqdcpVx@)jW6j|h9obP z;SAT57EPv*P>Grm41nJ3+M(g2E*1UznGl<9@uOT>alDb^PEStU>dHDMUjCExEJ*On zHcfpwhp8uAp|JnY+6qQlA!|z`12gjrOvHmWbj8;x}f2IA2#1fdVX%x$kit`!B) z=R>u1F)%xK2m8j1%?HBH!!m#B<~DO>XfA~k2-Pz<%w5M{cMmZa7K2oxmcb{=K9?<7 z15amZjK1>R(5d@Vc0#ps>#)RpRYgB#B*gDcH8s3KqJy%*Np-|9Yd6cdRxhNDzS!T#mg($<9OW!b>vhpCFd7>qMXfd|yNGf?>w0Q8=I z>MGA`KL6kG=6@goN=(WrXc;p1@*JR~k(S>9;*#?Kc~i39wV2Q<)W}j#L%*3=>%=5f z&fN~aZ96xMdPJr`*fX}RG%485`=5(4xhlL$V9$!U+H!T@ZY`hXCG6;rog;2?G?zk8 zA40Qzx^1Ub=BNUC>0pbW{4ZU*E%(UDvsDP_Vy`oMOZK?<#*_O;alQ&q+-_o=Y)>97 z60GKTg>qh{(8-n^t?B2$ z_wMr6r5tbXjcTknMfu!+hb}SQF#uX6cVO=sn&(Bd}!c8mS!E2Ex!HNyIfL%rh zV4eV#|4jxof>J?#W$Ew(b%Kh#rgstd%RFQ(u05|7e?p~!M0E|hOi=PL}7T`HJoZK6`m_HN(89abD%5%Eg_nbL%_B z&xXW{^N?c0XwK;kuq*FMZBa?SS%$B!!RIElJw6Ek;)y4)+1mq$|G!aVf4EeFOd}vs z6LZM|;$VPd^aYUo)q{ZrgZ?F{dm%^3h{u6I+k}l0Gn4^=GYgZ%hv6b8{Qb)WiJ-gJ z55r>y1W5~8j6m1~7(%!O_^E<`s_m*)4S*wW_4UKy(rd!~FB&CQ)AV!_DmIgY83qMM z7!U-jCLFAdem~rKT2rkM%@|`|UZ}R$M(B!q)CPtb{Fl1Xfk3<}h(9rA9Vk!+K;XZ( z_J>!^$TafED?XD^(NWZ7MI4sh&JG0P|ER>s<|&RLubdG@A3t&tT>xbj6&C+po(U{v zQ{X(g2XQPeKvS~NBOI`%jKxYYl?)&&v8?GIsD56X9nflyprj?7JR8PtBDO6T-%(Gk zwz~!A#rpY`lUSvxkWXucBNmk$tr#zNcJ>Y7tJN6oxc&0R-%E4%3a@9UkfR*9_tGJe zDt1nY381`bFFdt6+9!x{yv=+oY*c8%bu8>_G8&2dB4{#$q_a|Ce$o%hdAV>O$tR_P zT;y-?ngr4G|4SUFO%Zl`bd7#A0%24V;{THVznK4bAp_)*M5-bZ1>@8bN(~E;QwD%`M;pFpnZ}^ z3K{wJQtOTs1i})UMWj^uSpkO|oXBx3TzPQ6n~Yj-|#A9Q*&6{u>Q6GZR(;+4R3??Np#SNkD#!%Ietv?;X9= zgxSJylI?f%XJd7F81-csPkr!*`X4=?!*UnEU50a`|8D^&{xJj~^rSBqO1p8|UkTub zIf5MHg#mb z5Y-F@#dZoyV0k!fMG=FzxwyF(5qwCBVByE2aq2U4P&pUR0Z&@ns+49|mgDq`vt%stS7gr(=Q7 z$5|mS0?+4_(nR>1U3Tc7qF3eUh*1_RcDx>s3}J#X%h_lV4*qKAwzNO$SF(_R*O7JY z>}K%i@9xw@@{H$_VhqZ&-2}9e1sVJ(U2oxdoa|gqZ&27(i%RAOL0U3QE!fZLl^<0T zG{lb6zp90}`gY@KqaFU8{C0`*^qx{rJ#!M#dHhl(ZLn==RJ(!EMzgo+JMJPSIPFYn z(+4hT=~XhmwNz=~49+eZjhTiO(^EDjIy;LjjxL2e@}U4f z_p*qPnE8F)*6*A_)e^3KXlaVY1Uxw0*YN(5&Q73KM;Dcf#JkmRqUd_QfiFC)(G9$` zw}{sDq9+!B@CZo*Ip6qo$5!X}0aea~2 zjSeg5FM)`n)xHG02dcNe@FD@Jl=?e*y7;r%1T>n8y+{d?i$){L%AessTpNu>SdKB> zhVEDX4>TIdV51LhAkp9{Q5RI0!l>BlA0q41`H$mAYK$OmTnUulf38h9Kb;;bGk|af zUQ=}#;ArSJj@Y|@7o-H)!p`p0RqkMz!i~!8dERCCLEef}25j#7dd(T%Rb~M>qDGQN zZ$eD(%g>`2ipUvi{r(^#;3-KP%zm-cxEyna`VwXb^sh+h$<4{wb(JH13Aj-l>8FN0 zXE!ydgesB#q+FP4{o}a)3fns6e#)faDMk;L93ULxUw%t|2M-$G7N?+qy3gQhxGwWG6jVqmD$Z%`5h2qu~kwX-xLP;Oo-keOqOPPAIRc{I%_}c>UrNecMGmCvJ0c!)8ueV!LZVdL>tFv=x$dE7l7gOS%adNsFcz{ChLQ4-2(`P55XShDR*1sE6EGEPznJrg>J;-vGvn zur#%(AM@H}|8vg}1)g6n=b15Wm&L6RDUv3KrqGAQ_iS7TXXma-b5H_5BxDt$;6410 z9JH5s^rbia5C1NTzni#7Ajfj59DKXLZzjbI@pF*3WUW@wBSBf|aSaP=?;`bT( zQmUL!hd?uOCi%>6fEHqa|EwzZW$*S}Cv@0P!bmOsrFRlAa7AKaBr z>&x{$NEM#nUm4UoeQ|GF(BTjmWh6q4f^B27dEoVSGUzhflBL%XKU@sV5=GtdkHHl1 z#QU;R4OJ2?!a>*T3uSVl0qS*kt3BYr*(HJ-7EFr;opDr{jZlKILlGLAHE^C^IBor% zKj!fe4X*S07#__SgFq9p+&5!Nl&S(){_QnJ>uPLM%)`3Uin;;ZvQBw8pOw+gbUz)! zkxjq<5>i9Ez^jQnpDQ)OUXnW6qJpRF=0ZW1e4lcy0iDroSXCDfPvpOYwLj>2pmv-h zk~DNMXshnfy$?igr*W~N-^G@2t*CUfeBTJYC$xy}$~He1_prS{2MdiHS6DvBI(t)h zoWtNVBx+3T6GXFj)Vsj#qIo^d1LwG@JEN6&53s!tv~jICNwW28tYK%2>H&0exjmtJ z?}$9ic?_1QpCSLmA}W)A_t_go-&xex@S~*7~k^Rf4-Zef(z-fPP`Q}*B zq7iaqlQJ^{Z5UibLH|KcJv-Rmp#`MNu*=77;VD8)u6R2@w53klmI?(%>99j-FvIS@ zx(E2u)fucOt?OD0zzV;8_XqcPMK3V$rv)2Uz>2N$eKtS| zz2Dogm+bY@PrWE=HId!m4*3P`!a}&F$hxsa8EA#7k)H&-F*1k`+)grZ^tE;I7@sf) zS15;)WCbp=PHqi)Ho!Qk2GoB(PLJ5hg-)+>BAVwLsQw0w|MpP-GK3g%SyjylLfE`H zvl%FII{WTK)0JSq=&Ani|9rSE03gSW7w3#$7j+Z zeUFRK>p~h(MQ61qNE;LS!XvlcU4|j^w-QLv^%FA0q4*dVujNWOK!s!hc~Mf&7ko;M z_!SDy?WB>wQF*{nin)#eGvHyNU2NgTF|CJ2UK?L^puWE-F)l#9Wa*#^2v;%Slqv8N!GV zM}igBH#taj#2tlPBGI7`5l4MAS~>xnY_E^!$10%+T9bp-i{a~yM54`X216vA(9f!{ z?q^WgZdY5`bT^iOx5g@yvR|LU2q&1oJEDQhlgDRn2L()y`ZjtQ#Cbk44*VnB+-8 z@rNTO>P&~-C7G=jD<`Olf_6DAHNL>c6i>+GsNj`5)yK6k)5<}ey~djxtuk~Voby-h2dNx@Py|Cv z;)0flf+iM~J#5WVCd_9)N5``M4cr2U*3O^PB%#U;9O9eIqWQgZkN5>KZMlR7hGN^A z)61X2X6n>@yv23uJ4UHtc-NNd7FK5BD@#=oL8mJ#WyUwJkW(csOTCmH;eD1sO)V?P zbufNm4a2QTdH`+tcFoQ0mCrnvMjz4zxq}V#ABh&1UlkZ6V3e|>1e>$mJJ1aDOY6ZB z#5qO@0vAk(PH0PG(F%9Q#OB0R%-8gKh7DUfB>LOxwy;Ei5+dj!`zfKN@4Lq?in2$1 z$L7)BPP(GQ^x5#O zj9ac_Yf=YGGcJ|$4#J*bCCdt+L-^BxR2=PRvVJayVPy(vAK+n6tn~aVWj{$Ja)@b$ zyn+w4Dxmc1X9_O+^V5^BwwNntTjreypQ-Nqc&XOhuaxDeM_4q(@=i0i7B->hMMNvzz`UgP$g*<@=cT+2=Z-Ax#cB~ZW%G1_+?^uUn zQvVqZ6za-gHvv|OTpur^`pLe=H(RP+Y?kSNij6z@rKqz3tQwwjDrOh^%a$d!1CqGV zRK7)^O$rR#OOCwot9Ie(wF+opyt1b2rV!SXYQ-1T70?OkTaYL|xZXLS0?JHSaAA|v~Ppa@yy|J2hQ@a2bbnqRNYxxB<#O@`vEq_$jf%@)nAjarO1J^y{irm$0 zns%)Gbtct#Ill#OdD9lIP@3+(YB2PSK_CZj=i&T*&|x>>apfHedm*@3CB3RUJK~;o z=rv%5ew%N>>nB=%de&PI*qA#)W9Iq5NBTyd7z-nu&)=VPQ1u!IY9TuHJrG``pG|8f z_;atatNW`wG|63$NA?rh2Jbpy>78Ju^Nkageg`@F@hUfb&{7(8=s9`xW+@6-D5`pm z1b*<-)QwclgN{pmet>QV=>JGPk@K4YsW$-9i^>NdUTW$4rh4ySLhf^OwetDj1#>Q} zh8T@h;U{%$KMivIbN5$$xsn;_Q)*25=tj0ZW@|fEM?+lqS8W{`40LI9u7Mgbt=Bi# zUx;cBs?$q9YR77IX)V_g5~Vvg>np?eZQq*Zeh;hK0mnd8jOoKE)|TdTY7k~Ndqrv* z+rV^;nhmYYt+m6>kCexLG&UcFlKdbO`cb)NC2#^mzQKr+BcR zM3nK0e*V{F_^82`Iy*JVKV_R#J<^FkE6$z`@fTO)KRJ3YG1_rf6VI!EtC+Pz6hty??DkYqJ z#08#VFWroauiXe4UG~rEaYfkC7Cx&2UV#uDoZJ+Eh%#0RQsG{Z<0qw|)Bf5iXVVdc zCX^!TFuEfyw4x1_htU#L;ox!PSD+VRE2m+%pCbhI`OcJTi7*;KQ9q1ItkW}~e@jps zq8X7Cv`f{0m)-lMqE8(Ut9rvDG<4K=mgfV(*E3{{ouhwbv4X!2laWZj>P4s=DlRbT z8fh!XM5ZbW4Yb2~#&Lxh&)+?rvH7SM=uX)q*zZmn;A3NZJi{Ev(+M-Z>>xy@QKhKtTDQPw1VbUJA`I!4!kzxTa=!p;zTpV_1%*r#nO6=+H{IJ|*A+H|3 zc5_>OBOy9%*3SHV6y0q9+D7XGx^8(uwL1^MGzkC$BT=_XD)VS94MXq6HESQq zLEOFBibL;(jZ^-NhBr-5V4BoT#=<(Y^;h@(x8mBODGHgjRL}t&RAVHA4Oh`BzyQ{< zFq8xS->5wF-ad&+FXDa;vI1*_qp{Tjg}u$~marj*xQQyTu_{CHe_(0hnp+*g2oV)9#LBLM zblOjW9a>2M*^1I%{-Jt`)IMQ3{R3XoCm~dk*#|IMSc!&@7Em%S5U9k$xb5Gs+fZ9T z<_MUDIdcdesY3$0-vfaQG*%Y1Z~Bpqt@?hj zu(1cP+06=AIyQc~8Tb(OV8ASEN}m~ls4`Uzm_z)iX7r~CDCydVfqnWIcucu5a&9e* zrBYw-}pn-)BnZ}--=*>H(FEOdAolVuK}AMtirIv9$I(ISjP!NzS3B`RicI_!rS)bQ+(%Q=BSUN>hw58mW$%J6uxX%Whx*BaXX*&c+;>N1^1 z7jGPqJ;m0*AL~BnN_j!5*#I`La|0n3I>(QhJ!C-t*jMYrQNXHVw`ESb?gz?>X&k&r zCGG_S?&Xd(R8LC8e7Fo^_nM;PF!dE=&Y@8?F4;!lj|KPQj4r@Fe#B(=+k1rHD?8PD zavU_BmV(6WIX_A@jnBGW8vc{7ua8^$$m0^F(8rUXj&k=Yco;?RH5CPX?Zd}QzII0r z!h2WN&)`UI{=)nL^aGCk8vYDg;-ydM?mNMoy6h#}X*)~HUL;>fuV$<^6BE@Q&>oN; z<<04B9^DdZG_e&nht4A%VHkU8nlEc`O@C?sY>hP_Is%ymT%*w??5;n%s8kQkl1e zbyT3bM9;`&H+mK{b7{JZ&Lqts2J2)^B-;BTK3{TxZxYa_HDkp+4&nT%#=!iMF&V4$ zW*$k{|RQnN(x^$2;P!I+r)wrH^?9zQ4K6_ zx1rFH!{NkS!-tXXy%bB848)TI{NBs=Xu zc*zOg8X*W?Qis)?zzm0u%UMAss0Y^5yfW?g4#zo_1OIByGAf9E4!;R!{!kDaB@j9} zVu2LVAlzs~ENsRH<^Us8;qht6#B?NbdSZE1(W0yO7)#kG7oG4PQ6Eb>{4T3mV0~{(L<{W3ezPxPI0I{!TL|aUM6o88?45 zHz5`W52x#;FO(}AL9Lbni#ci_8}R?q z*eq4u6Tdi7Au=xfQ?B{VU;2iEdafkdCUJDDj0=w_AD!1mHloSa4A5nYwkWdkqxJpv zDv|33+)A$BC9gYK7_nfK7vUu13%lQ(;t;9(shD!e_xP77gLK;56=ukkh84Cauw4|N z+@0j$%a1breEzAO$*F{;E-7*jG!fy>sB|gJq3zm5WJncoC@g>Uo<=gDOaEq7} zo`$5jX0J;Dr{&>Ld z3@fGf1%|ml$PfYeOc9jViB5FtoZJ`sMk+#__^Os*>2d0#V_$HW2}BX-)0+I^Z$ zFnNARacpe)*MCl3z!qesPt40oMgZkGlfna$4o$WDv5>n;8>1Z8B5ZO3VeeGvw@ zF84FXdiB0LJNpfqL|y_?N5bvKxj?D=j_c+tbYQs1B!nyR)0^wHliA{#8s-!7nb*vq zZj}y;N=8Q6d3WJQjU#^__-t+x>Joe{7*3f=9kMgDOMz&=;vAY)u(a4pDIO9PRnbf` z&moC6DAN0-@iP0jTMg8=o&eG5xz> zpPpJh=2C1JA^mIxkU}_AWz%LKAFm|L-+3{&JHHrK<})!zD0VBq`56c%>Og>Vp!41< zAr!{gf47U-qTe&Z1 zeF2`WkZ-VJR)a>b8MLqX^zD^%CIq1qWH2l&%NuJIj7zSnt&508nN9XwiFTh^keiEx zbOA0Hoq>cjrpjmxbUm*v@%c`JiT-HUJ}gC8@3 zKSwDL3>8hu$>*3cgZev+qJmIemOM3rQm{eIl=As8J>HuIgT@XS&Pd+aY7P%6IJ*{M zkGiDj{1Uv}0BGajtI7-)06##$zv^n9Sc0E`n-`i89E=_MbU2rF?U$E zUcN7JPb?Bb>+5`$hdb&dfYbTu4SVHC2Y6O@364P)4=+;9I!rhD0xn>EQJPu9Cob;D1(DA5keo>U+Ry3I4D&*fD|=CQ3XJ( zMu-e6kl-)IvNr~fy$>M9Qy&6}@FGM)Bt#An64oDsgeC$aBE=j64ag!yLdThV^?_ZLU%U zh%ticD=Ps+IKc##lmJ44V1&v~1R#LDhutiCENx&DYo$iCbU0as;67y)NJ))gzaWBha80S3nL!u z4BS+l1epFoG$os;f(CUHF9D1MG}#6ykG9-GW)krH;K{P}{HM=bco`~=b@O#?He(l# zj$@8*8g)LtYw2e>X){~L&Y)v(BhFbvR)fg*V$U&ZeF*MJ;o9XUKuo1wDDjv}rbe&( za%J$E%jub8xw8f+fv~!^=;87e`mzZ2J(Rh{`rH>QZIhtdWDPhLsqS+(SPG<)LM&HZY}?YOFJ4X1b52rVRHfAd+>BZL*zJm|f7XfiZY}9~ zY^RS~X+IT-&L_y@B60BLVIptvJU-?jQ3Bjt3 zao;$tBKn>vFhY2NzSy4Ly<|w1Q*_wi4t2ag=sn9gYuS{=>9b687?0=jH$3K^{{~jI z5wgZ+CuVJ;Y2I?#W|8<{YAP1W2u{fA`*_4kBrSp5$N54)stdctUWSs%^ zbG#i}_*d5uVCWg-(kb#eOD>^E&xJ5e$LhbggCy93{)Y*CmJP5+VWu1`k*#Tsbn9x^ z-?%MQW^JbZHVa9}YRb35u?U=F7bG}c5YOmwv=WnhTxatl2Ujvx1u>~)AuHQl%7?<= z_Pxck;>$4dbn?TLe1dZPK2;p%$%rtY%XOfnUg`r7=gb;d0h`P<+!efLw!FLn3hs<) z9B=)@SQ#p^2}X__$2X_c0smK|gDIqe9^I$k(X}_06ZUE@GE`(T`)n&PedhNXuoIuzb(@F}0=9syv$+d#XW@!>wrl<%>8`+z9K8y7*&cLrZOVw13A z4pkHVOR|EY$=Y9pdV2zOzN-+CN9Wnk6c7kPfE(Eaubx1r{-pk#%hRxw7U@&MdByuq z(v0x>JFr)IZ7m-xpUl(pGl;$|kJu%F{vC)y2@t_~W{Y<>8cU2l%&j7^A8Iv72M-Uc z?n`j(ZrGduF=Ar{lwyVN?&&57f9zz{Eyem-pfXbRB8%ToJm1I~#-8P)o(Fb6#ud!B zgZ^&lrJ*!HFMXF=MW5#NntGPfy!u57)<1Td-+j$4o@yeGom}@6fshi~0B7>+p4jik zk1pDD92i@?4cKv?mgj(|e@6b~Q*;z+f-l7O3E>_gQgRyuDoyH4XK}K}Mw>K|A2rRY z2RM;NEpA0gd;8olg5J;Ym?}e6y#e)Hq#}(wu|{uQV9WSMQk{aRJOX|vJNH+B8_OwF zOk&m~?J>uy=V`8Qcd?)AR$ci4){%CRo7(Y%O09>%Q~Z!ng@&-OrgkCc1jxt4fxdwZ z)ep*TZFCL4Z`DKRQX4dVl`BW7PYFkn;Q3&K4NK5QmSBww(w4QlO-dO3_24XbC7EL# zL)Y7?ipjoD_?z~HSr^64$fQLrN05!fKurMZQx4}&8(Wb*P&L1un(T#~GQP!$a7?L> z(lkfnLhbTZyxiThRS{`EIMM&|oT{Hcj?B{@Pkl{&H3spOUhWm7c?^TSgo%2&jzY?k zK8!|V?t0ntm?g(j4tHn0_K-u)(k^)*fT9 zU`ec-0h#^PBxWlUb~O(wMFnKJUJ}%HB-440PYP`(n+ZfLeY8JylWajruTDhs7eQk@ zR0IX`vO{uw+Q_{cNhQqjm8B2?0iTYY^NlIy&_{E#?KL`)CM@NhhCIUfhV8P?J3e$3 zLqDdCJK4R_kE;m!R(8E8r3KaPWu#!kH)-T8KvCf-?suYd8_!$su|0+T))&0R8|Dn? zwcFn)p6vXGL2H+{WW{p#=Ll(ysr6OU<3tP3*h2=e#hdc0*h+zS9Cmt%^#hL2;^nla!}{pYhGZ1CFDITP__u9MkCb z;V&(L{z_L~uia&G3dQzzCVnVmXc2oKnyf(*=}y8y-1OQjs)TU*%YylSAWZ0@Q>WTk zzw?R*lK@u7htk*dQ)(*-Yzn$y zB~cuu@GYJDBg7oJivOz1OZ)6^V&RTzQ>v9(`1eZ}_?GUL-0JJJF!Is}3UCMZy$)dp zYpkFh4aAEh^lp=8Od&U@uJ)S6EDCqbn6?E{u02=GdljP~N=EF^a7PmpCY>BS`p^QL zeR3sZABAxtVjA?x8lx50hM?H_XM4-@7?W99;Bvu-a7_J?Bu|T*>yKeL&jVDr7E%mk z6av9pBxIso8aJq7t{u87F)EpYN5>)u6TaD0GA5dF)y^XS$jr0YhLfz5LoI=ku>7vE zXE&k-xnESvpTvKmb?5)CjEDFjIbNh8AgV?JKL#II>3OPcWn-vYfn8wtlFamRDG|9%bVks81;|=^ogXf#&W5!K!6(9-w7+Q zW+%WM6;ZFQH+PGQ0y2;nzix0xlBi7Fg$rOQa;*idydG|eG+tjR3+~PD^yHlq04!kg zW>z`IX0$z_*FNRVrCvLOS+Mz_;Q1Jx+A5`=sMS5j zFJYLL*g0AP31&KTvpyg>(&j9WU7nSVAlKZLF7a#Fg;bHWjM0vT*7d-77Zz)bLM z!ZbQ7nE?(JJva&zss8mgr+uRHo-Hx3jRa8cIMP^4p1yKt&s^QaKU$eim}!7uU9)Yk z!-@#NMns>(D9!;CV4JHT&I29uCkt#i z4BOq`KK?Ha@!p>qI0|7rT(SBan7@*n<9VKDr$oVFAck1C9?F?~d|8aE40njQ@I zj4g)*I!6blPTWp6E^)X~*a44E4U7W<(tPmxgh#z^!cL;C$K_F`CEdM-l88(HYz@64 z4{oZ;J$Peh#=MP)kAb0;S0We6-OYusEB=W}ozOAg3Y7EgpMa-T&UAxw46@#U_<4xp zbwdEYynaw zfi%h0@3vE73n*)3H;G#>N0>f8u`I1jIrAVVw~0IXUH%yX~oUL*2sbL-7ss&`!NVh(JAe9jJ&lctY#5 z!A*h9A;TZ21`9iIZn7O*=V1o6X;U)`!h}1ASKmS>z#WIyeF+>-KOr~nV*^}MM;0AK zW6T#!WC8^lD|wM9(s_*>Zq5E+0;{^y;zq--D~yCqokhAb_%E1oN6~IAJtEVh83Dlm za)m&qW!-c^Ahdqn4trejq%I15OlKmUY{k4wGD*X^ZgP{D;}MkOs>LS_E-Pib=>yJH z=jhQyiNzvLf0%@py)Y;o9Fn z8f-5!qMX@)f>X*oA#I*UMh#ixiE52+2UK^?%s&t`DFpJ2naZe`J8y11jH!c%Q-0Rv zp#>Gf&=D2SCH!0&-(gwWyqUofHNVVE{0xq#_2AD?u`1x5S5LFat!2(fl5IS~LV2Ip zBdS!YJ0E7>uPAQ;07PdHI{yIbWWEdzg+o~ZMWFzI^%)WyW!Tt)y9!`)Lb6Z}V1+`z zA)d_-D2f6GxY+5PJ*M&J zuzwxq9q+jlj>=@eWBvsY2tpp6{@Fk55EvXiRiv#6`>emG2cQS)!z*q6XtF2au41@O z{C4q^W#Ph=+4hnl1Ma>=Uge?V^nklih*NwBDDTvktP*cIdjm)hq#mSpb7o`naAY6b zzRJh+^*M1#2be5CjZvY-%aG#~$Z!i~8AS8tqa^(?iw77izzk4f`pZ=PMmrr&a#Q&4 zlTPh`^EQG6>Y)NO7knfR9+P@8|9CFw!Q`Zbh$mgaN`#5E%$({;D>@6R3Oc?aru{=kW+M9N=*+TO z%khgI4NIT$t~5m_G$hOUYmh;9KjjEsMD;`lI4jb@Y$zJ{Yemq6NyV6_U8bf9#Cq96 zxJ(`aBPrpL`Fsy z<&?>*q{*B7f)=6Q&uf=-g`$_X-5_%E&@iTr6 zBMR-(++e?*5IyTN)$F&|>N0vrq1Vy_#$O>j21+$LBnZL8L z2=E29PG>P$SYaQTarvj=0HqQ8tJ!tSwkt72#kSQIpTlV!AgKM2Fv+XHTjqRp0!oYC zPnQIsGK3vvWXrW1LDQO{-avHAs7Ez2{YZ{$$MZu1EY8U5LRW?9flC80>!=`sY6Bn{s38HZz;0`3euK4u z3~=zU^}T}MLhJLoy;jCh@$vXxV95juLXt>et_2E0;#goRWJctt>Bwt^O_RIAJG>2w$9oUo7a-&s@j5~4-x zMYKhHwqf|fiyl(P)(Nki!o2Xbr|TtI z>F?AmDFSX6|LBB1s;qFIIVPmTLB@6QKQtov9y0%I6c_bSU4a8J3ty-oz2y++uX0#Knv^*l^eCH?k;K$e+$6?0D-_?6*vH(EaD0X0ux6U z(+XRMXe^=r<-~^FE5?GXh1r@Ko(p!c`bvVQ&>9QFbDfpT`qMEa`r+8mc!lD(Rm~;Z zI5kCtt=j0;S1oWTL|ewEvB_bGelVp5C??!VMp`W6cb2|gj6+#+T7AI$xOk=9Kybj; z*q?~BRz&@p_i5rOO>C~R$?E;Ji)o$J_HN+sy41uPsTPP@lohbi&gMmPr|?T;8&xwG zqG^qem7ZF5^5j;~IvQwuGN?LH!j?;irk~LYuZrF!=!t9~_19Z5v|JXEX~Mo@q!)A6 zR}kF6-4tcQA5S^WleHZ#tG;1-kL4`!-Lhi01z17#7o38FS&cb&<_gku$v=KYZvPTd zlY+*SCdJnKcH=WlxWvH?kLgwpgjFNtdG1X0WvemGV+os2M=Kjy8c%kZEw{w~0Z%(A z8)I1TJnK-KNVSgUbxCK{0`xt+aRUn|MY_AuSloOO!}CkaUcD0o{H_9~=|fXjQpzvt31NuV4M0 zb@sordP(99wh=_B!vaXx>#+SH9!M(X5HYLu%rn;&SX2#o*gaYa=F^R0v&xK|`9??( zB|gcKx7f6~YfIg<;^;V%Yq{Ho*AFC7om;G-*-z|kqGll=BC6IHgVx0^Cg?qx{c328 z_dk+*Tto)YlH@yrHj~2zZIO@4*~Px;jVkStq>nQ!r7RIT;Ih*=nu}Rrk}`=Z#9W!u zi`sLT>6Vzmw-~%-^wVsR*~l$7r)5506c}RAmb`V z`+uxMQ`BPvFKhT&wRZh=QpmAF<_24iq)Tf?j2<2@dePST=05s3ZmBFNXOSA8R$*PY z`!IeD*&%4X9{rKBW!*q&aZl*CEt9`4bA-hSql;J&zeiOjKXKiRHjIq3*ZBt@cjPGl z9X5VRp297iJ#e|N6Iz*hRw18g##ka0x6xc?Z=H4KwIuN5cNtFT zOjSSH5`6Y34sxz5aIv~i*~1++(ogk~7<4MQQ8@s9s1qkqP?n@-k+wx-`}Iz=c`9N7 z=U_eBMK|Cz$l6o2%3Uja&A$Ue_1?w5&U-&ZPx$N_apdPNMPg{%AmMGJT1$86u&c6t z_|i1#c`#nIat@$)&ohby7}k+YQ<2*WwJ zZM%Mrg9}$RZ}Cl&?|#{lH#myy?*F^&;W-$b%OJ`)vnb>}cK1j+C*R!-(LSHL6tg*@ zAOXw$H(>zbP;nrZa`{r*AdIxo*GEJIT>@N;tLU$UL%6;~DodF}u}9(~%HMcXoOSW@ zu~X^vFt>JOfs6(kNJFX6cv0tZ;s|;jY-!YzKVgi-1?G4Sj6xQ$Q_5xF78_HJbqfA` zwlr9R%2_IZ+|V4Bas|ZfP!@~KhTq`6ac`(~Ka>5{aG?+Z(!j0sLlPB5wjXi?@n`VaH8CJ%VCVMl;fa#E+8c>10$Q zcJ^x(?sg1QC696a(c}COtIZ)c>W;$b_;Kk{D>>okZPp#>9|LE6rlomU@+-&mG)_N-}AlD83@}fqcIV}GAByZp7Vc(u6&=fRI0Z z!fi9MK{)15q?SQ2%ku!IA|`Cy2N@?c?G3>f!0*gE`egxo$U}C}NTl*^(GyeLF)oHp z3nDG!nEfAMzFO5@cp`9(dU^jso{rxc#Oa$y&!6WZN0-lP_;B|es!yH*9*(fD3p9hx z-|roA!3PNTOqc_X2OXZ{2Rt?`ZiWvYdTJ+a{wg}{4m62HA9u<6j~yUpK?)Rs#a41V zC82_Y1^l8L)7B7Wr1&`U5Np}p&~CW(`{(tKKCgE7aV;icwat=y*jzV}G2;2-fdf;2#)4>^bOJN%+|vo|5%UK33b= zGK0hzFBV|x>O4q5l%zX8FjOB;ox3jLmN%5xG}~XqtQ>Ya_VP}6ND{Dp?qwK4G)hPv zHrMV6i3!0S2nCXdu-G5YNaU!PPGyzt1#{dSX7zu;e=(JzGu&BTj_SGR6nl zHi%8k{b~#rHbp4h0F?Sz%aHjNahfjeo_~2nDSU{#JzIgD)cSS^vw*|`B*3-i|UMh;zVV%Gd zj(ud#=4c@1Zox`#*l_`CrmCAT$4xYaDv4Zk3N)J~LfYT(ND@w{O{stvK?8}W%1u-b zsS#~4#E5dN~oaZZY7OhX$Q=q@9Dwj#J<_sxOcWLvWhkW%xM*?K^R}uLt zgAhu0zR${F#UMc#rGe+9$iF8K%Ea5{sEjPFnI}UArN%JxRM|W{KqZz4n$9*Om2*3^ zNuk_>wd}7bvoZqWhg$Hhu#`XZYUN*cR(~38DTq@@ai{%?_~SEYXCgTf2!oVW(dJ;J zYYEO05@dy?bI}c7@a;t)^^sjJ$cb6Jx~f!#T3R*R&hnMp+un`ShqlB3vIlJpiDERpHD(S$mAXc{T~+DbaAo?V=%=lEtf6hj_{-7`V8#kT`QC&7zI3 zdLBmEv@jzh_7c^lG+(p#4BJh1TwuoC1;!$BV}N+Oc5=k|5W&=C63Y((TLNMjx3F3z zLZKh()$kwQ>%&&_yxHWk^~(T1*90ga;sR74^R%Oaty+J|aOUh%?em@AVYy=d`%fe? z#+T=FG*1{)&v-5>h z-DoY#15Ld0W<4TZn$(v-y${WSJ`-0;7f<4qivhZ10L3FB20&=LDecJIp_e05JW^iU z7cgEGpIF@O!KPVFHw9Ta8ZlMTYdG=&1EegnU=jzid8iHWJjRhwca zNRl@qiR&m=n-$Iy*->AX9?u#YzaPK6>O|A^nE5`bs8e(dV6%oU0E-`Ao}MpJ@lJ z?y^O#QKYYI2lt>9GqJ{h!Y^%WVo14ZDnLcp7>>}cWGus|lm~^H#N#?UF z-lRBw=jfa(tV>V%<2YLSuX)7-yBlDtp#2CvCA9Jct@`E?nR|ge&murR->pW)6psFV zeY;iZUl+FAVcTNf-I)LG8c2NE2SCNgQs)LVeY1_uf0p`wY~-34y@#stQK=i{byhTR!LF12hR(!Ob7uCZ=81tkM2HKg3 z4e;necl5w4BhJ1XAsdD*naq&4a28<-aJA1#yBK1UmMR)TzfirS1t&EQOJ~jK*+GkE zzx*^Z5|1m82ixh-8`CS_=SDPCc5ubn^vSIHLK2hJ7+|%Om-cSqX1Pu*IAjH4ri3`f zsbG*c22;};QIoeo%?Ww;*q@|x=$9Q%v#UtVIrj(o`%)pm%>>s_673t0CrKze#2TsU zxuz8zr@?j*Lpf+9!Jdc}a$<@LmRB+8n0rGA>?IY)9Cfxi|4b8aOR zmpIL?x&rBFgPpb=5VZ~rOD;FbGAn{Fz27nDYK3|h<<;{0XmC+xlAf;r)nIuseW9j? z8N$$oPIEC$knY zh&7^olV^Zoh!LQH7n6EugX(lHf;%tOE>J`!pFGAQ*+`V0@Pid2cr(ak676CT^QVYK zxDrCky+r=)@7O9>SRVkT`GQN4-A&2Q+<2^?(D+~3Wx_<#sR82%W4wsay3T}{y2Rv; zu<6NjCL@4>+8hp?Zx0NN2SV9-Uh*}h-gCmz^CI6=@1;Fo*!DCH0$1=m(GXUSFwazE!!h=hw)gB6$;|+H;0!E}@;BVMb$m zBH@sb(!er{#j|ipF%0av+DZ^5LJ1WW*nq7!PnWNOlwA7Eie?bokKB;eOyAD-yH!h@ zw(Hc(-zNatcW))hWR-}6W~0Bcu)w$~}x>lC2tgS%%+a4+urG?xDc9epHNWJIEeOm_~Rj?b}tFF4ULTW^6wv z3$6eAW{P*}{#i(tEz-PHGDk6RysnYaO$qE`ObEYZM9`PSz}wI z$V+AAR5!ig1bBcST!@&9^DLGG$7R}ONB8UYA$O^40059z>B}sVc$Q~S+9t}sgJL<; z@Mopg4WLEg*14glvU&Z!zoQRUHh6 zE(-4<7u;ExuZRf#8O?`s)3k)`A;P@pv|eiw0_Mi&-WuiBckzUacBFNKe_rO@h;Iwb z@Za1rpC#iP(`7^F8*wji&fHbDLt9?^WRj~|8usxi&gr9Me|ghYy=c-;r-#1hO>4Px zbw{ME*hRP!XC8doa?h8Jf7vUrp8KxErJQ<@gz`vo0P6_O=P2_H@Hlhf%=ytqy%e!a z5PJc=4nZ2&L3dcfjJp~!noIy!72!=O3luna7i;0qSWm7zT4G(w!alBj!c%sx>s7o` zO{2)49}=Bn7A;-Q$hJ}G^U{=TlN0zLwku-eB2h&>b??-Y=y-u+ zJ6o{5F_KlKYKGdbbP4YK)eD5Vp0j}K0-sUtwMpNn{BxrntKNs8PQbKy!&&DR;C^&r zR>vg`W?3luRmD~053x8UNzH7megGXu55sQMz5eA{mFTx0GC^F~9+dyu58LZx(k?g(gx%ln%V;`K(YoAVl(I#cW=mMnj)q;)X1{_>y|Jej;{1A9PaVy`> ze+I1+__dh(xRdq5e_mIQ%1n z?*5hf&*^Lk7a}~A+0$G82Pn363h&+TdG*QEoSDFu+C45I`Z>Z2C6l4wKz*ZLco}la zqEYkUgt@al5Nw)A1P)w2sf+5GoUWma!c*->XsE-+XN1l-e{XdQQo|$qLUlIf94?3O z%iCU@Gc(6G#RxKdyqy-8eN1*J8XZ^X*)Yhj)O7FObQB2!SZr0dh<=|%_CJO`nX#WAAt)x$Ye9t>c$QQdDYpP& zCdn7b%$BmV-=5jiEjxUH#;K=!=>wjlqXzWYgXCpru#-Z?VuvZb&m%@kNjmIoN#9A4 zkc_-JOd=gXs1FSA{KOsy;y;uC@fMx|2pqxqIHm7}kA48a?0Ca(z30MyHA_=5& zH~aYWzdGQw1fZ_qDd=cpVPsh1>Z6>za|$i!$F2z ze>L?QQ0t@vPc7*x*Cq4rjSb9r&avm$QRtkLY1ri*AkGr3Zrm1gf4_FheW(zy^wkxN z7Yo8nB3-u+HJo%~xMDs9hpGAX1l{%TAQ-s<$*F-b$~>7<$tX?%WYp|l%N%&0UCjMZ z`qu<`sGdGH{JcC#A8b_-Dv3ib;;a(?l8d1D@pno-@{1FJDRTUr4(j=$9%n|9ana(W z*WAHweta!TB*V2u6eqHk-^(2oK6r1w`u!sN|B2AWdT~tVN^ih8N2FH$5gF`uvxD*^3*cK-db^7qY#~M*@g&53IRh zSSBXH@XX6EoJ5@N7*+9D;#LQF05%EIN`8&Ryb)Jv{;NT*{afdIr~6Q73f3&q?}s0G zU!2nduldvWCNk;7cP1&Ac#Nom=E2@N8#5+kh`+^V?HC>? zOvt!91=GInC%0AWnf-#w)rtc{p!30mzpiP7y2&J$MXXUtlXhUV3?c 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

      Ojo? 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�EkBmz2@&kJv?E>zw%V>)w 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

      gSm793@Y7(N8Q~Nw?XwU$ z747I@ai|?5Sf~XFOqCs}b?$?E>WihT5HFl19gr>`Au!HREd!4~8w_;o7vS32GLnnu z%Ts(4qoXk2ug+K7ujFAfh0_kd+E}*zkgK4KCp)qNk7l)T!EJHC!t!zHKhP;jcIl1$ zpnGO7Pw`xCqHq(!RsJTM$-{2MDFlzRe1(R1ZgaQFxx#pXf>T%B;V&@fDjMMZ+jf)O zqWgoM)vM`BIRGkifVb;6&=}?xb&wnk+mxkkGf_f7c9j-00qf*JamWMgaB^at?xU(# zu84498e<=9_k1WiO0cG(-DLX2AUE@uyasZXpGOIc3>F#C>P=@#qDFwZ!1r#-HvB6? zgy#)`aRrE+>1(1!Nh%;xYcN9&gn1eUx=bH>#>@g#K`~DG_<&yn;X^iL^n|iG{&FYE zm<9FMu5tDR)OfCzRgeRGICYbgR_rC(mJ#Xxc-SF^uGCy=TCkV=c){qiF0?f;_KE$F zTyLi#fY)j5mjy4Gifyl~CwxC;HI!YZWGSmoX|nX!-FXQ>!TWk4oSSmPRBxx|V5){= z?W|NK2;Y0zT47rji5~~Rwsu1vhkuojtfp{aT1G|wc-SE}Arb&Tgr4M397%o3-8u~6 ziF1!YFGC_l@H%f{f;NCh8=bFnx|g|mq&-+v6}{(pV@YZ&0tmKZI9ftbOAn};>B4?Q zMtR(R*vN%ycH*uLT#~@B(ts1&tLnN&SdYE%b(htUL{gX*opb}BN|WRRh~*-H;&S!j zdZrp#dKY ze)zOBVv0Y5I*WC#i zGw_JEx1g_xU%hk*+q0q6Y5p;guac};D-)&}0sW=VX1r;>L+7h{7>zd?KQUx`^{v%o z%!#(w?1=MKYvH(7W{o}TDr$l`VSf&%)SX?T-a|IlI#^@?X#HFq4@F-!(D3=PY!(Rg z7@WrA-o}cTqDENHWg|W5A594uLYVo#28mPsY#zATDmxNq1QztqiR_ zgOA|L!w6@|RC!|DB`vy4^Pjy_9-u4P+h9lObagYp)yj}F{Mnz`>nzAa1y7vFR~Qpa%r&=&n%o|CWm{8ZQnGS>m#JUM_+B%6TZ1?c9#HR=ZelO z?XC?`vASV3X)@{Y)4_8X_kG$%HaFAN%9-~;@V)$?tK?57UL1rX!zA#!=PpiU2m#d66}EbFl%`UiZ$+yF$Ig^&WE`DyUk(E(Q!p*4o0Qv|4&+n8LHfN$0ztNkwTUxJn%yd7|ZJdAJ~%_ zbq0!S-?mp2SQXJQ92zW9#hK4-tNFLyBgY}x;&GXt&^@!`KrByV^b$488hm+w3*Gm4 zCK41KnC4L^bJJY4s#}>iG1f6ir847_jioqt-wVndAGK%kFzR)Pq+5u}H&BFL0wAvo zb(g^tXTJk@A(Ydp8Gt8W%_P5)03`xKh}~XgbO%_q=K=pWej!t`HL`bRz)62%cI(D| z5UNHev5RzEP2#9NeaZtLY^+m#ZQbL8_90R^{;5n7a#2ZrkB^jv1Wr!eXv^B&HMglA z&kT11LV%e>v|WXP8L8p?FXF^pwj^0nJ|m7l)-%esZ8==c=5d4 z>Ul|C(9mfxKpfM5Lq3nZWX_n`gPdgyucX_jNgBXV4oBPJF1O-BIugWYD zn8$U_pNaNi8i1e@0@zyMK$furvKmW)4=xa;yh{7@kpl46XRH!wHw%~X=98=TtP3?~ z0qhA-_53Tw@LdrDnoffyvFb$l@Z(KkqPS0c#7K(bRlvP1hR&nm0bA8nu<{VVBmZ_C zOzMec+yja=CNL2cVI&a!f0RMrGY}@(ot;LLAI+6f`1+&{X02WHmHF>pI883yRdxeC z**oBHFGFPRvnpsSBF~T%1w5hJQtswBoZpB7f=_Eof8~Se{@`^^54zpo+P$rs+Nr zx2#*xVVo|H#y!XF%4V=hFl#TS0WwtgH!U8K_HCt6_KA47qza0!%^N(-s_Ovpf`PYi zN6{n`>_#UUjXI0qgD#f`zL#K19d%0AY@5&#cfaS^w{sxVTm{6l%1V}gpX;Dii|h4V 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�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Ν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 mS<&ZjE42^bZF#n< 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

      Hq7{Sa|c2v@j$qRs~JQ#8!(vo$fPCB!`4=NJ%h$ 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�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

      ZzW^>DnlG^P`7WDOx<{ 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%0DUQGP*gr6?4?W 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 (~?~+hOq)n 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͕+ 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≻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

      I45jR!Dk2W;$t{81!^lF45v$Q`7S>l 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�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
      e|Q%sW*S!5BrGJNTgr8>MU)L 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 z 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%0A?cl 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\d+):(?P\d+):(?P\d+).(?P\d+)(\s((?Pmtc|\d+))){0,1}\sTESTCASE\s.*\sTest\scase\s(?P\w+)\sstarted\.$', self.__flags) + self.__regexps['map_port'] = re.compile(r'^(?P\d+):(?P\d+):(?P\d+).(?P\d+)(\s((?Pmtc|\d+))){0,1}\sPORTEVENT\s.*\sPort\s(?P\w+)\swas\s(?P\w+)\sto\s(?P\w+):(?P\w+)\.$', self.__flags) + self.__regexps['unmap_port'] = re.compile(r'^(?P\d+):(?P\d+):(?P\d+).(?P\d+)(\s((?Pmtc|\d+))){0,1}\sPORTEVENT\s.*\sPort\s(?P\w+)\swas\s(?P\w+)\sfrom\s(?P\w+):(?P\w+)\.$', self.__flags) + self.__regexps['messages'] = self.__regexps['unmap_port'] + self.__regexps['message_out'] = re.compile(r'^(?P\d+):(?P\d+):(?P\d+).(?P\d+)(\s((?Pmtc|\d+))){0,1}\sPORTEVENT\s.*\sSent\son\s(?P\w+)\sto\ssystem(\(.*\)){0,1}\s@(?P\w+).(?P\w+)\s:\s\{(?P.+)\}$', self.__flags) + self.__regexps['message_in'] = re.compile(r'^(?P\d+):(?P\d+):(?P\d+).(?P\d+)(\s((?Pmtc|\d+))){0,1}\sPORTEVENT\s.*\sMessage\senqueued\son\s(?P\w+)\sfrom\ssystem\s@(?P\w+).(?P\w+)\s:\s\{(?P.+)\}\sid\s\w+$', self.__flags) + self.__regexps['timer'] = re.compile(r'^(?P\d+):(?P\d+):(?P\d+).(?P\d+)(\s((?Pmtc|\d+))){0,1}\sTIMEROP\s.*\s(?P\w+)\stimer\s(?P\w+):\s(?P\w+).*$', self.__flags) + self.__regexps['final_verdict'] = re.compile(r'^(?P\d+):(?P\d+):(?P\d+).(?P\d+)(\s((?Pmtc|\d+))){0,1}\sTESTCASE\s.*\sTest\scase\s(.+)\sfinished\.\sVerdict:\s(?P\w+)$', self.__flags) + self.__regexps['verdict'] = re.compile(r'^(?P\d+):(?P\d+):(?P\d+).(?P\d+)(\s((?Pmtc|\d+))){0,1}\sVERDICTOP\s.*\sLocal\sverdict\sof\s(MTC|PTC)(\s(?P.+)){0,1}:\s(?P\w+).*$', self.__flags) + # End of __init__ class + + def reset_state(self): + self.__state = 'exec_test' + self.__logger.info('Reset state: ' + self.__state) + # End of reset_state + + def parse_line(self, p_line): + self.__logger.debug('>>> regex_list::parse_line: ' + self.__get_state()) + self.__logger.debug('regex_list::parse_line: ' + p_line) + + if self.__get_state() == 'exec_test': + m = self.__regexps[self.__state].match(p_line) + if m: + self.__set_next_state() + return m.groupdict() + elif self.__get_state() == 'map_port': + m = self.__regexps[self.__state].match(p_line) + if m: + return m.groupdict() + else: # In map_port, check for TTCN-3 message sent ('message_out') and received ('message_in') + m = self.__regexps['message_out'].match(p_line) + if m: + self.__set_next_state() + return m.groupdict() + else: + m = self.__regexps['message_in'].match(p_line) + if m: + self.__set_next_state() + return m.groupdict() + else: + m = self.__regexps['timer'].match(p_line) + if m: + return m.groupdict() + elif self.__get_state() == 'messages': + m = self.__regexps[self.__state].match(p_line) + if m: + self.__set_next_state() + return m.groupdict() + else: # Check for TTCN-3 message sent ('message_out') and received ('message_in') + m = self.__regexps['message_out'].match(p_line) + if m: + return m.groupdict() + else: + m = self.__regexps['message_in'].match(p_line) + if m: + return m.groupdict() + else: + m = self.__regexps['timer'].match(p_line) + if m: + return m.groupdict() + elif self.__get_state() == 'unmap_port': + m = self.__regexps[self.__state].match(p_line) + if m: + return m.groupdict() + else: # In unmap_port, check for final_verdict + m = self.__regexps['verdict'].match(p_line) + if m: + self.__set_next_state() + return m.groupdict() + elif self.__get_state() == 'verdict' or self.__get_state() == 'final_verdict': + m = self.__regexps['verdict'].match(p_line) + if m: + return m.groupdict() + else: + m = self.__regexps['final_verdict'].match(p_line) + if m: + self.__set_next_state() + return m.groupdict() + return None + # End of method parse_line + + def __set_next_state(self): + if self.__state == 'exec_test': + self.__logger.info('regex_list::parse_line: Set state to map_port') + self.__state = 'map_port' + elif self.__state == 'map_port': + self.__logger.info('regex_list::parse_line: Set state to messages') + self.__state = 'messages' + elif self.__state == 'messages': + self.__logger.info('regex_list::parse_line: Set state to unmap_port') + self.__state = 'unmap_port' + elif self.__state == 'unmap_port': + self.__logger.info('regex_list::parse_line: Set state to verdict') + self.__state = 'verdict' + elif self.__state == 'verdict': + self.__logger.info('regex_list::parse_line: Set state to final_verdict') + self.__state = 'final_verdict' + elif self.__state == 'final_verdict': + self.__logger.info('regex_list::parse_line: Terminated') + self.reset_state() + # End of method __set_next_state + + def __get_state(self): + return self.__state + # End of method __get_state + +# End of class regex_list + +# End of file diff --git a/scripts/generate_png.sh b/scripts/generate_png.sh new file mode 100755 index 0000000..7c73718 --- /dev/null +++ b/scripts/generate_png.sh @@ -0,0 +1,17 @@ +#!/bin/bash +#set -e +set -vx + +clear + +if [ -z $ATS ] +then + echo "ATS shall be defined" + exit 1 +fi + +cd ../plantuml/ +python3 . ../logs/${ATS}/merged.log ./${ATS}.txt +cd - + +exit 0 diff --git a/scripts/run_all.bash b/scripts/run_all.bash index fd921d1..f5fe449 100755 --- a/scripts/run_all.bash +++ b/scripts/run_all.bash @@ -49,7 +49,10 @@ do done sleep 1 - mv ../logs/$ATS/merged.log ../logs/$ATS/merged.`date +'%Y%m%d%S'`.log + if [ -f ../logs/$ATS/merged_formated.log ] + then + mv ../logs/$ATS/merged_formated.log ../logs/$ATS/merged.`date +'%Y%m%d%S'`.log + fi done exit 0 diff --git a/scripts/run_mtc.bash b/scripts/run_mtc.bash index 0559a9e..e225512 100755 --- a/scripts/run_mtc.bash +++ b/scripts/run_mtc.bash @@ -42,7 +42,6 @@ if [ "${TITAN_LOG_DIR}" != "" ] then ttcn3_logmerge -o ${TITAN_LOG_DIR}/merged.log ${LOG_FILES} ttcn3_logformat -o ${TITAN_LOG_DIR}/merged_formated.log ${TITAN_LOG_DIR}/merged.log - mv ${TITAN_LOG_DIR}/merged_formated.log ${TITAN_LOG_DIR}/merged.log echo "log files were merged into ${TITAN_LOG_DIR}/merged.log" fi -- GitLab From 4c9fc6bf77a62beaa4112ef46c6047eaf4739563 Mon Sep 17 00:00:00 2001 From: YannGarcia Date: Wed, 19 Oct 2022 08:13:54 +0200 Subject: [PATCH 06/99] Remove useless files --- etc/AtsMec_Location/AtsMec_Sandbox.cf_ | 15 +- plantuml/AtsMec_Location.svg | 106 - plantuml/AtsMec_Location.txt | 28 - plantuml/msgs/14_11_47_542719.txt | 1 - plantuml/msgs/14_11_47_607302.txt | 1 - titan-test-system-framework | 2 +- .../AtsMec_Rnis/AtsMec_RnisAPI_TestCases.ttcn | 2300 ----------------- .../AtsMec_RnisAPI_TestControl.ttcn | 126 - ttcn/AtsMec/AtsMec_Rnis/module.mk | 48 - ttcn/patch_lib_its/module.mk | 1 - 10 files changed, 4 insertions(+), 2624 deletions(-) delete mode 100644 plantuml/AtsMec_Location.svg delete mode 100644 plantuml/AtsMec_Location.txt delete mode 100644 plantuml/msgs/14_11_47_542719.txt delete mode 100644 plantuml/msgs/14_11_47_607302.txt delete mode 100644 ttcn/AtsMec/AtsMec_Rnis/AtsMec_RnisAPI_TestCases.ttcn delete mode 100644 ttcn/AtsMec/AtsMec_Rnis/AtsMec_RnisAPI_TestControl.ttcn delete mode 100644 ttcn/AtsMec/AtsMec_Rnis/module.mk delete mode 100644 ttcn/patch_lib_its/module.mk diff --git a/etc/AtsMec_Location/AtsMec_Sandbox.cf_ b/etc/AtsMec_Location/AtsMec_Sandbox.cf_ index 3a5c961..da4ce8a 100644 --- a/etc/AtsMec_Location/AtsMec_Sandbox.cf_ +++ b/etc/AtsMec_Location/AtsMec_Sandbox.cf_ @@ -8,22 +8,13 @@ LibCommon_Time.PX_TAC := 30.0 LibCommon_Sync.PX_TSYNC_TIME_LIMIT := 30.0; LibCommon_Sync.PX_TSHUT_DOWN_TIME_LIMIT := 30.0; -LibHttp_Pics.PICS_HEADER_HOST := "try-mec.etsi.org" #"192.168.1.39" +LibHttp_Pics.PICS_HEADER_HOST := "sandbox-mec.etsi.org" #"192.168.1.39" LibHttp_Pics.PICS_HEADER_CONTENT_TYPE := "application/json" LibHttp_Pics.PICS_USE_TOKEN_HEADER := true #LibHttp_Pics.PICS_TOKEN_HEADER := "Basic WrongToken" -LibMec_Pics.PICS_ROOT_API := "/sbx1w3aaas/mep1" # Need to sign in on https://try-mec.etsi.org/, section 'Try-it from your MEC application' - -# LibMec_Pixits -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/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_ROOT_API := "/sbx8tunqyy/mep1" # Need to sign in on https://sandbox-mec.etsi.org/, section 'Try-it from your MEC application' LibMec_Pics.PICS_MEC_PLAT := true @@ -57,7 +48,7 @@ LogEventTypes:= Yes [TESTPORT_PARAMETERS] # In this section you can specify parameters that are passed to Test Ports. -system.httpPort.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server=try-mec.etsi.org,port=443,use_ssl=1)" +system.httpPort.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server=sandbox-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)" [DEFINE] diff --git a/plantuml/AtsMec_Location.svg b/plantuml/AtsMec_Location.svg deleted file mode 100644 index f78c839..0000000 --- a/plantuml/AtsMec_Location.svg +++ /dev/null @@ -1,106 +0,0 @@ -TTCN-3 EnvironmentTC_MEC_MEC013_SRV_UELOCSUB_001_OKsystemmtc:httpPort1map2@LibHttp_TypesAndValues.HttpMessagerequest := ...14:11:47.5427193Start, duration: 3014:11:47.5462674@LibHttp_TypesAndValues.HttpMessageresponse := ...14:11:47.6073025Stop, duration: 3014:11:47.60849714:11:47.60886214:11:47.6092836unmap14:11:47.610574fail \ No newline at end of file diff --git a/plantuml/AtsMec_Location.txt b/plantuml/AtsMec_Location.txt deleted file mode 100644 index 57d8d7f..0000000 --- a/plantuml/AtsMec_Location.txt +++ /dev/null @@ -1,28 +0,0 @@ -@startuml -title TC_MEC_MEC013_SRV_UELOCSUB_001_OK -/'Editor: https://plantuml-editor.kkeisuke.com/ '/ -/'Syntax: http://plantuml.com/fr/sequence-diagram '/ -!include etsi-style.iuml -!pragma teoz true -autonumber -participant system -box "TTCN-3 Environment" #LightBlue -participant "mtc:httpPort" -endbox -"mtc:httpPort" --> system: map -"mtc:httpPort" -[#green]> system: @LibHttp_TypesAndValues.HttpMessage -note right: [[file:///home/yann/dev/gs032p3-ttcn-test-suite/plantuml/msgs/14_11_47_542719.txt request := ...]] -note left: 14:11:47.542719 -"mtc:httpPort" -> "mtc:httpPort": Start, duration: 30 -note left: 14:11:47.546267 -system -[#green]> "mtc:httpPort": @LibHttp_TypesAndValues.HttpMessage -note right: [[file:///home/yann/dev/gs032p3-ttcn-test-suite/plantuml/msgs/14_11_47_607302.txt response := ...]] -note left: 14:11:47.607302 -"mtc:httpPort" -> "mtc:httpPort": Stop, duration: 30 -note left: 14:11:47.608497 -note left: 14:11:47.608862 -note left: 14:11:47.609283 -"mtc:httpPort" --> system: unmap -hnote across #red: fail -note left: 14:11:47.610574 -@enduml diff --git a/plantuml/msgs/14_11_47_542719.txt b/plantuml/msgs/14_11_47_542719.txt deleted file mode 100644 index e8d93f6..0000000 --- a/plantuml/msgs/14_11_47_542719.txt +++ /dev/null @@ -1 +0,0 @@ -request := { method := POST,\n uri := /sbx8tunqyy/mep1/location/v2/subscriptions/userTracking,\n version_major := 1,\n version_minor := 1,\n header := { { header_name := Host,\n header_value := { try-mec.etsi.org } },\n { header_name := Content-Type,\n header_value := { application/json } },\n { header_name := Content-Length,\n header_value := { 0 } },\n { header_name := Connection,\n header_value := { keep-alive } },\n { header_name := Pragma,\n header_value := { no-cache } },\n { header_name := Cache-Control,\n header_value := { no-cache } },\n { header_name := Authorization,\n header_value := { Basic YWxhZGRpbjpvcGVuc2VzYW1l== } } },\n body := { json_body := { userTrackingSubscription := { clientCorrelator := 0123,\n callbackReference := { notifyURL := http://yanngarcia.ddns.net/location/v2/notif/1,\n callbackData := omit,\n notificationFormat := omit },\n address_ := 4005C0A640001,\n userEventCriteria := { Entering (0) },\n resourceURL := omit } } } } \ No newline at end of file diff --git a/plantuml/msgs/14_11_47_607302.txt b/plantuml/msgs/14_11_47_607302.txt deleted file mode 100644 index e527d03..0000000 --- a/plantuml/msgs/14_11_47_607302.txt +++ /dev/null @@ -1 +0,0 @@ -response := { version_major := 1,\n version_minor := 1,\n statuscode := 401,\n statustext := Unauthorized,\n header := { { header_name := Date,\n header_value := { Wed,\n 05 Oct 2022 12:11:47 GMT } },\n { header_name := Content-Type,\n header_value := { text/html } },\n { header_name := Content-Length,\n header_value := { 172 } },\n { header_name := Connection,\n header_value := { keep-alive } },\n { header_name := Strict-Transport-Security,\n header_value := { max-age=15724800; includeSubDomains } } },\n body := { html_body := \r\n401 Authorization Required\r\n\r\n

      401 Authorization Required

      \r\n
      nginx
      \r\n\r\n\r\n },\n tls := omit,\n mutual_tls := omit } \ No newline at end of file diff --git a/titan-test-system-framework b/titan-test-system-framework index 1e363a4..a49d8da 160000 --- a/titan-test-system-framework +++ b/titan-test-system-framework @@ -1 +1 @@ -Subproject commit 1e363a445c9be2ea40578342d86bb1f777daf709 +Subproject commit a49d8daee3e5df27198a1902a7c630a84351e427 diff --git a/ttcn/AtsMec/AtsMec_Rnis/AtsMec_RnisAPI_TestCases.ttcn b/ttcn/AtsMec/AtsMec_Rnis/AtsMec_RnisAPI_TestCases.ttcn deleted file mode 100644 index cbf0e9b..0000000 --- a/ttcn/AtsMec/AtsMec_Rnis/AtsMec_RnisAPI_TestCases.ttcn +++ /dev/null @@ -1,2300 +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 012 V2.0.3 (2018-10) - */ -module AtsMec_RnisAPI_TestCases { - - // Libcommon - import from LibCommon_Time all; - import from LibCommon_VerdictControl all; - import from LibCommon_Sync all; - - // LibHttp - import from LibHttp_TypesAndValues all; - import from LibHttp_JsonMessageBodyTypes all; - import from LibHttp_Functions all; - import from LibHttp_Templates all; - import from LibHttp_JsonTemplates all; - import from LibHttp_TestSystem all; - import from LibHttp_Pics all; - - // LibMec/RnisAPI - import from RnisAPI_TypesAndValues all; - import from RnisAPI_Templates all; - import from RnisAPI_Pics all; - import from RnisAPI_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; - - 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 { - - /** - * @desc Check that the RNIS service sends the list of links to the relevant RNIS subscriptions when requested. - * Acceptable SUBSCRIPTION_TYPE are the following: - * - CellChangeSubscription - * - RabEstSubscription - * - RabModSubscription - * - RabRelSubscription - * - MeasRepUeSubscription - * - MeasTaSubscription - * - CaReconfSubscription - * - S1BearerSubscription - * - NrMeasRepUeSubscription" - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisSpecificSubscription_BV.tplan2 - */ - testcase TC_MEC_MEC012_SRV_RNIS_011_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - - // Test control - if (not(PICS_RNIS) or not(PICS_RNIS_ALL_SUBSCRIPTIONS)) { - log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_ALL_SUBSCRIPTIONS 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_RNIS_SUBSCRITIONS_URI & "?subscription_type=" & oct2char(unichar2oct(PX_SUBSCRIPTION_HREF_VALUE, "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_subscriptions_list( - mw_subscriptions_list( - mw_subscription_link_list_Link( - ?//PX_LINKS_SELF.self_ - ))))))) { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a cell 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 - - // Postamble - f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC012_SRV_RNIS_011_OK - - /** - * @desc Check that the RNIS service creates a new RNIS subscription. - * 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_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)) { - log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_ALL_SUBSCRIPTIONS 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_RNIS_SUBSCRITIONS_URI, - v_headers, - m_http_message_body_json( - 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 - ) - } - ))))))); - 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_cell_change_subscription( - mw_cell_change_subscription( - PX_CALLBACK_REFERENCE )))))) -> value v_response { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a cell 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 - - // 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 - - } // End of group all_subscriptions - - group allSubscription_bo_bi { - - /** - * @desc Check that the RNIS service responds with an error when it receives a request to get all RNIS subscriptions with a wrong subscription type - * @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_011_BR() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - - // Test control - if (not(PICS_RNIS) or not(PICS_RNIS_ALL_SUBSCRIPTIONS)) { - log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_ALL_SUBSCRIPTIONS 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_RNIS_SUBSCRITIONS_URI & "?subscription_type=wrongSubscriptionType", - 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( - mw_http_message_body_json( - mw_body_json_problem_details( - mw_problem_details( - -, -, 400 - )))))) { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with HTTP error 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_MEC012_SRV_RNIS_011_BR - - /** - * @desc Check that the RNIS service responds with an error when it receives a request to create a new RNIS subscription with a wrong format - * @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_012_BR() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - - // Test control - if (not(PICS_RNIS) or not(PICS_RNIS_ALL_SUBSCRIPTIONS)) { - log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_ALL_SUBSCRIPTIONS 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_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, - m_filter_criteria_ho( - "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 - tc_ac.start; - 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 - )))))) { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a cell 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 - - // Postamble - f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC012_SRV_RNIS_012_BR - - } // End of group allSubscription_bo_bi - - group specificSubscription_bv { - - /** - * @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_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_SPECIFIC_SUBSCRIPTION)) { - log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_SPECIFIC_SUBSCRIPTION 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); - 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_SUBSCRITIONS_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_ok( - mw_http_message_body_json( - 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 cell 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 - - // 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_013_OK - - /** - * @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_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_SPECIFIC_SUBSCRIPTION)) { - log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_SPECIFIC_SUBSCRIPTION 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); - 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_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 - ) - ) - ) - ) - ) - ); - 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_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 cell 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 - - // 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_014_OK - - /** - * @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_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_SPECIFIC_SUBSCRIPTION)) { - log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_SPECIFIC_SUBSCRIPTION 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); - 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_delete( - PICS_ROOT_API & PX_RNIS_SUBSCRITIONS_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 deletes 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 - - // Postamble - f_cf_01_http_down(); - } // 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 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_013_NF() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - - // Test control - 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; - } - - // 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_SUBSCRITIONS_URI & PX_UNKNOWN_SUBSCRIPTION_ID, - 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 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_MEC012_SRV_RNIS_013_NF - - /** - * @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_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_SPECIFIC_SUBSCRIPTION)) { - log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_SPECIFIC_SUBSCRIPTION 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); - 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_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 - ) - } - ) - ) - ) - ) - ) - ) - ); - 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 - - // 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_014_BR - - /** - * @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_014_NF() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - - // Test control - 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; - } - - // 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_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 - ) - } - ) - ) - ) - ) - ) - ) - ); - 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 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_MEC012_SRV_RNIS_014_NF - - /** - * @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_015_NF() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - - // Test control - 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; - } - - // 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_RNIS_SUBSCRITIONS_URI & PX_UNKNOWN_SUBSCRIPTION_ID, - 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 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_MEC012_SRV_RNIS_015_NF - - } // End of group specificSubscription_bo_bi - - group rnis_query { - - /** - * @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_016_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 - f_init_default_headers_list(-, -, v_headers); - 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")), - 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_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 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); - } - } // End of 'alt' statement - - // Postamble - f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC012_SRV_RNIS_016_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 - */ - testcase TC_MEC_MEC012_SRV_RNIS_017_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 - 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_infos( - { - mw_plmn_info( - 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; - } - - // 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 - ) - ) - ); - 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_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 a S1BearerInfo 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_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 - f_init_default_headers_list(-, -, v_headers); - 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_ac.start; - alt { - [] 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 responds with a L2_MEAS 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); - } - } // End of 'alt' statement - - // 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 { - - /** - * @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_016_BR() 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 - f_init_default_headers_list(-, -, v_headers); - 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_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 - - // Postamble - f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC012_SRV_RNIS_016_BR - - /** - * @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_016_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 ***"); - 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_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_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 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_MEC012_SRV_RNIS_016_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 - */ - 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_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 - 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_invalid?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_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 - - // Postamble - f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC012_SRV_RNIS_017_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 - */ - 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_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 - 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 - ) - ) - ); - 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 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_MEC012_SRV_RNIS_017_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 - */ - 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_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 - 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_invalid?cell_id=" & oct2char(unichar2oct(PX_CELL_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 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_MEC012_SRV_RNIS_018_BR - - /** - * @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_018_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 ***"); - 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_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_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 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_MEC012_SRV_RNIS_018_NF - - /** - * @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_019_BR() 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 - f_init_default_headers_list(-, -, v_headers); - 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_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 - - // Postamble - f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC012_SRV_RNIS_019_BR - - /** - * @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_019_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 ***"); - 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_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_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 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_MEC012_SRV_RNIS_019_NF - - } // End of group rnis_query_bi_bo - -} // End of module AtsMec_RnisAPI_TestCases - diff --git a/ttcn/AtsMec/AtsMec_Rnis/AtsMec_RnisAPI_TestControl.ttcn b/ttcn/AtsMec/AtsMec_Rnis/AtsMec_RnisAPI_TestControl.ttcn deleted file mode 100644 index 4c74736..0000000 --- a/ttcn/AtsMec/AtsMec_Rnis/AtsMec_RnisAPI_TestControl.ttcn +++ /dev/null @@ -1,126 +0,0 @@ -module AtsMec_TestControl { - - // LibMec/LocationAPI - import from LocationAPI_Pics all; - // LibMec/UEidentityAPI - import from UEidentityAPI_Pics all; - // LibMec/RnisAPI - import from RnisAPI_Pics all; - // LibMec/TrafficManagementAPI - import from TrafficManagementAPI_Pics all; - // LibMec/AppEnablementAPI - import from EdgePlatformApplicationEnablementAPI_Pics all; - // LibMec/UEAppInterfaceAPI - import from UEAppInterfaceAPI_Pics all; - - // LibMec - import from LibMec_Pics all; - - // AtsMec - import from AtsMec_LocationAPI_TestCases all; - import from AtsMec_UEidentityAPI_TestCases all; -// import from AtsMec_RadioNodeLocationAPI_TestCases all; - import from AtsMec_RnisAPI_TestCases all; - import from AtsMec_TrafficManagementAPI_TestCases all; - import from AtsMec_EdgePlatformApplicationEnablementAPI_TestCases all; - import from AtsMec_UEAppInterfaceAPI_TestCases all; - - control { - - if (PICS_MEC_PLAT and PICS_SERVICES) { - if (PICS_UE_IDENTITY_API_SUPPORTED) { - execute(TC_MEC_MEC014_SRV_UETAG_001_OK()); - execute(TC_MEC_MEC014_SRV_UETAG_001_BR()); - execute(TC_MEC_MEC014_SRV_UETAG_001_NF()); - execute(TC_MEC_MEC014_SRV_UETAG_002_OK()); - execute(TC_MEC_MEC014_SRV_UETAG_002_BR()); - execute(TC_MEC_MEC014_SRV_UETAG_002_PF()); - } - if (PICS_LOCATION_API_SUPPORTED) { - execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_OK()); - execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_BR()); - execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_NF()); - - execute(TC_MEC_MEC013_SRV_UELOCSUB_001_OK()); - execute(TC_MEC_MEC013_SRV_UELOCSUB_001_BR()); - execute(TC_MEC_MEC013_SRV_UELOCSUB_002_OK()); - execute(TC_MEC_MEC013_SRV_UELOCSUB_002_NF()); - - execute(TC_MEC_MEC013_SRV_UETRACKSUB_001_OK()); - execute(TC_MEC_MEC013_SRV_UETRACKSUB_001_BR()); - execute(TC_MEC_MEC013_SRV_UETRACKSUB_002_OK()); - execute(TC_MEC_MEC013_SRV_UETRACKSUB_002_NF()); - - execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_OK()); - execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_BR()); - execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_NF()); - - execute(TC_MEC_MEC013_SRV_UEINFSUB_001_OK()); - execute(TC_MEC_MEC013_SRV_UEINFSUB_001_BR()); - execute(TC_MEC_MEC013_SRV_UEINFSUB_002_OK()); - execute(TC_MEC_MEC013_SRV_UEINFSUB_002_NF()); - -// execute(TC_MEC_PLAT_RLOC_001_OK()); -// execute(TC_MEC_PLAT_RLOC_001_NF()); - } - - if (PICS_APP_ENABLEMENT_API_SUPPORTED) { - /*execute(TC_MEC_SRV_TRANS_001_OK()); - execute(TC_MEC_SRV_TRAF_001_OK()); - execute(TC_MEC_SRV_TRAF_002_OK()); - execute(TC_MEC_SRV_TRAF_003_OK()); - execute(TC_MEC_SRV_TRAF_001_NF());*/ - } - - if (PICS_ENABLE_UE_APP_CTX) { - execute(TC_MEC_MEC016_MEO_UEAPPCTX_001_OK()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_001_BR()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_OK()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_BR()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_NF()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_003_OK()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_003_NF()); - execute(TC_MEC_MEC016_MEO_UEAPPS_001_OK()); - execute(TC_MEC_MEC016_MEO_UEAPPS_001_BR()); - execute(TC_MEC_MEC016_MEO_UEAPPS_001_NF()); - } - } - - /*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()); - execute(TC_MEC_MEC012_SRV_RNIS_011_BR()); - execute(TC_MEC_MEC012_SRV_RNIS_012_BR()); - } - if (PICS_RNIS_QUERY) { - execute(TC_MEC_MEC012_SRV_RNIS_016_OK()); - execute(TC_MEC_MEC012_SRV_RNIS_016_BR()); - execute(TC_MEC_MEC012_SRV_RNIS_016_NF()); - execute(TC_MEC_MEC012_SRV_RNIS_017_OK()); - execute(TC_MEC_MEC012_SRV_RNIS_017_BR()); - execute(TC_MEC_MEC012_SRV_RNIS_017_NF()); - execute(TC_MEC_MEC012_SRV_RNIS_018_OK()); - execute(TC_MEC_MEC012_SRV_RNIS_018_BR()); - execute(TC_MEC_MEC012_SRV_RNIS_018_NF()); - execute(TC_MEC_MEC012_SRV_RNIS_019_OK()); - execute(TC_MEC_MEC012_SRV_RNIS_019_BR()); - execute(TC_MEC_MEC012_SRV_RNIS_019_NF()); - } - }*/ - - if (PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED) { - execute(TC_MEC_MEC015_SRV_TM_001_OK()); - execute(TC_MEC_MEC015_SRV_TM_002_OK()); - execute(TC_MEC_MEC015_SRV_TM_002_BR()); - execute(TC_MEC_MEC015_SRV_TM_002_NF()); - } - } // End of 'control' statement - -} // End of module AtsMec_TestControl diff --git a/ttcn/AtsMec/AtsMec_Rnis/module.mk b/ttcn/AtsMec/AtsMec_Rnis/module.mk deleted file mode 100644 index 449db40..0000000 --- a/ttcn/AtsMec/AtsMec_Rnis/module.mk +++ /dev/null @@ -1,48 +0,0 @@ -suite := AtsMec - -sources := \ - AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn \ - AtsMec_TrafficManagementAPI_TestCases.ttcn \ - AtsMec_MultiAccessSteeringInfoAPI_TestCases.ttcn \ - AtsMec_LocationAPI_TestCases.ttcn \ - AtsMec_RnisAPI_TestCases.ttcn \ - AtsMec_TestControl.ttcn \ - AtsMec_UEAppInterfaceAPI_TestCases.ttcn \ - AtsMec_UEidentityAPI_TestCases.ttcn \ - AtsMec_V2XInformationServiceAPI_TestCases.ttcn \ - AtsMec_DeviceApplicationInterfaceAPI_TestCases.ttcn \ - AtsMec_WlanInformationAPI_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/EdgePlatformApplicationEnablementAPI \ - ../LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI \ - ../LibMec/TrafficManagementAPI \ - ../LibMec/LocationAPI \ - ../LibMec/RnisAPI \ - ../LibMec/UEAppInterfaceAPI \ - ../LibMec/UEidentityAPI \ - ../LibMec/V2XInformationServiceAPI \ - ../LibMec/DeviceApplicationInterfaceAPI \ - ../LibMec/WlanInformationAPI \ - ../LibMec/ApplicationMobilityServiceAPI \ - ../LibMec/FixedAccessInformationAPI \ - ../../ccsrc/Ports/LibHttp \ - ../../ccsrc/EncDec/LibHttp \ - ../../ccsrc/EncDec/LibMec \ - ../../ccsrc/Framework \ - ../../ccsrc/externals \ - ../../ccsrc/loggers \ - ../../ccsrc/Protocols/ETH \ - ../../ccsrc/Protocols/Http \ - ../../ccsrc/Protocols/Json \ - ../../ccsrc/Protocols/Pcap \ - ../../ccsrc/Protocols/Tcp \ - ../modules/titan.TestPorts.Common_Components.Abstract_Socket \ - diff --git a/ttcn/patch_lib_its/module.mk b/ttcn/patch_lib_its/module.mk deleted file mode 100644 index 65c5047..0000000 --- a/ttcn/patch_lib_its/module.mk +++ /dev/null @@ -1 +0,0 @@ -modules := ttcn/Http -- GitLab From cd079573aaa1e07ca5a67427e69767186ad7266f Mon Sep 17 00:00:00 2001 From: YannGarcia Date: Wed, 19 Oct 2022 08:38:44 +0200 Subject: [PATCH 07/99] Add AtsMec_Rnis --- etc/AtsMec_Rnis/AtsMec_Rnis.cfg | 1 + etc/AtsMec_Rnis/AtsMec_Sandbox.cf_ | 154 ++ .../AtsMec_Rnis/AtsMec_RnisAPI_TestCases.ttcn | 2324 +++++++++++++++++ .../AtsMec_RnisAPI_TestControl.ttcn | 44 + ttcn/AtsMec_Rnis/module.mk | 36 + 5 files changed, 2559 insertions(+) create mode 120000 etc/AtsMec_Rnis/AtsMec_Rnis.cfg create mode 100644 etc/AtsMec_Rnis/AtsMec_Sandbox.cf_ create mode 100644 ttcn/AtsMec_Rnis/AtsMec_RnisAPI_TestCases.ttcn create mode 100644 ttcn/AtsMec_Rnis/AtsMec_RnisAPI_TestControl.ttcn create mode 100644 ttcn/AtsMec_Rnis/module.mk diff --git a/etc/AtsMec_Rnis/AtsMec_Rnis.cfg b/etc/AtsMec_Rnis/AtsMec_Rnis.cfg new file mode 120000 index 0000000..17a9bfe --- /dev/null +++ b/etc/AtsMec_Rnis/AtsMec_Rnis.cfg @@ -0,0 +1 @@ +AtsMec_Sandbox.cf_ \ No newline at end of file diff --git a/etc/AtsMec_Rnis/AtsMec_Sandbox.cf_ b/etc/AtsMec_Rnis/AtsMec_Sandbox.cf_ new file mode 100644 index 0000000..a8e15be --- /dev/null +++ b/etc/AtsMec_Rnis/AtsMec_Sandbox.cf_ @@ -0,0 +1,154 @@ +[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; + +LibHttp_Pics.PICS_HEADER_HOST := "sandbox-mec.etsi.org" #"192.168.1.39" + +LibHttp_Pics.PICS_HEADER_CONTENT_TYPE := "application/json" +LibHttp_Pics.PICS_USE_TOKEN_HEADER := true +#LibHttp_Pics.PICS_TOKEN_HEADER := "Basic WrongToken" + +LibMec_Pics.PICS_ROOT_API := "/sbx8tunqyy/mep1" # Need to sign in on https://sandbox-mec.etsi.org/, section 'Try-it from your MEC application' + +# LibMec_Pixits +LibMec_Pixits.PX_RNIS_SUBSCRITIONS_URI := "/rni/v2/subscriptions" +LibMec_Pixits.PX_RNIS_QUERIES_URI := "/rni/v2/queries" + +LibMec_Pics.PICS_MEC_PLAT := true + +LibMec_Pixits.PX_RNIS_SUBSCRITIONS_URI := "/rni/v1/subscriptions" +LibMec_Pixits.PX_RNIS_QUERIES_URI := "/rni/v1/queries" + +RnisAPI_Pixits.PX_SUBSCRIPTION_HREF_VALUE := "cell_change" +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 + + +[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_Rnis/%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 | TESTCASE +#ConsoleMask := ERROR | WARNING | USER | MATCHING | EXECUTOR_RUNTIME | VERDICTOP | PORTEVENT | TESTCASE +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=sandbox-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,mutual_auth=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_RnisAPI_TestCases.tc_HelloW +# 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 + +[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/ttcn/AtsMec_Rnis/AtsMec_RnisAPI_TestCases.ttcn b/ttcn/AtsMec_Rnis/AtsMec_RnisAPI_TestCases.ttcn new file mode 100644 index 0000000..15150a3 --- /dev/null +++ b/ttcn/AtsMec_Rnis/AtsMec_RnisAPI_TestCases.ttcn @@ -0,0 +1,2324 @@ +/** + * @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 012 V2.0.3 (2018-10) + */ +module AtsMec_RnisAPI_TestCases { + + // Libcommon + import from LibCommon_Time all; + import from LibCommon_VerdictControl all; + import from LibCommon_Sync all; + + // LibHttp + import from LibHttp_TypesAndValues all; + import from LibHttp_JsonMessageBodyTypes all; + import from LibHttp_Functions all; + import from LibHttp_Templates all; + import from LibHttp_JsonTemplates all; + import from LibHttp_TestSystem all; + import from LibHttp_Pics all; + + // LibMec/RnisAPI + import from RnisAPI_TypesAndValues all; + import from RnisAPI_Templates all; + import from RnisAPI_Pics all; + import from RnisAPI_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; + + testcase tc_HelloW() runs on HttpComponent system HttpTestAdapter { + var charstring v_str; // Used for Query path update + var integer v_start; // Used for Query path update + var integer v_count; // Used for Query path update + + var charstring v_uri := "/queries/zones/{zoneId}/accessPoints/{accessPointId}"; + + var charstring v_zoneId := "zoneId"; + v_str := regexp(v_uri, charstring: "(?+)({zoneId})?+", 0); + v_start := lengthof(v_str); + v_count := lengthof(v_uri) - (v_start + lengthof(v_zoneId)); + log("lengthof(v_uri): ", lengthof(v_uri)); + log("v_str: ", v_str); + log("v_start: ", v_start); + log("v_count: ", v_count); + v_uri := substr(v_uri, 0, v_start) & v_zoneId & substr(v_uri, v_start + lengthof(v_zoneId) , v_count) + log("v_uri: ", v_uri); + + v_str := "/queries/zones/status=[0,1,2,"; + log("v_str: ", substr(v_str, 0, lengthof(v_str) - 1) & "]"); + + setverdict(pass); + } + + 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 { + + /** + * @desc Check that the RNIS service sends the list of links to the relevant RNIS subscriptions when requested. + * Acceptable SUBSCRIPTION_TYPE are the following: + * - CellChangeSubscription + * - RabEstSubscription + * - RabModSubscription + * - RabRelSubscription + * - MeasRepUeSubscription + * - MeasTaSubscription + * - CaReconfSubscription + * - S1BearerSubscription + * - NrMeasRepUeSubscription" + * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisSpecificSubscription_BV.tplan2 + */ + testcase TC_MEC_MEC012_SRV_RNIS_011_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_RNIS) or not(PICS_RNIS_ALL_SUBSCRIPTIONS)) { + log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_ALL_SUBSCRIPTIONS 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_RNIS_SUBSCRITIONS_URI & "?subscription_type=" & oct2char(unichar2oct(PX_SUBSCRIPTION_HREF_VALUE, "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_subscriptions_list( + mw_subscriptions_list( + mw_subscription_link_list_Link( + ?//PX_LINKS_SELF.self_ + ))))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a cell 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 + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC012_SRV_RNIS_011_OK + + /** + * @desc Check that the RNIS service creates a new RNIS subscription. + * 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_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)) { + log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_ALL_SUBSCRIPTIONS 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_RNIS_SUBSCRITIONS_URI, + v_headers, + m_http_message_body_json( + 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 + ) + } + ))))))); + 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_cell_change_subscription( + mw_cell_change_subscription( + PX_CALLBACK_REFERENCE )))))) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a cell 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 + + // 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 + + } // End of group all_subscriptions + + group allSubscription_bo_bi { + + /** + * @desc Check that the RNIS service responds with an error when it receives a request to get all RNIS subscriptions with a wrong subscription type + * @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_011_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_RNIS) or not(PICS_RNIS_ALL_SUBSCRIPTIONS)) { + log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_ALL_SUBSCRIPTIONS 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_RNIS_SUBSCRITIONS_URI & "?subscription_type=wrongSubscriptionType", + 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( + mw_http_message_body_json( + mw_body_json_problem_details( + mw_problem_details( + -, -, 400 + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with HTTP error 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_MEC012_SRV_RNIS_011_BR + + /** + * @desc Check that the RNIS service responds with an error when it receives a request to create a new RNIS subscription with a wrong format + * @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_012_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_RNIS) or not(PICS_RNIS_ALL_SUBSCRIPTIONS)) { + log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_ALL_SUBSCRIPTIONS 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_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, + m_filter_criteria_ho( + "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 + tc_ac.start; + 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 + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a cell 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 + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC012_SRV_RNIS_012_BR + + } // End of group allSubscription_bo_bi + + group specificSubscription_bv { + + /** + * @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_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_SPECIFIC_SUBSCRIPTION)) { + log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_SPECIFIC_SUBSCRIPTION 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); + 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_SUBSCRITIONS_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_ok( + mw_http_message_body_json( + 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 cell 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 + + // 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_013_OK + + /** + * @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_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_SPECIFIC_SUBSCRIPTION)) { + log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_SPECIFIC_SUBSCRIPTION 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); + 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_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 + ) + ) + ) + ) + ) + ); + 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_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 cell 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 + + // 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_014_OK + + /** + * @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_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_SPECIFIC_SUBSCRIPTION)) { + log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_SPECIFIC_SUBSCRIPTION 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); + 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_delete( + PICS_ROOT_API & PX_RNIS_SUBSCRITIONS_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 deletes 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 + + // Postamble + f_cf_01_http_down(); + } // 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 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_013_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + 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; + } + + // 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_SUBSCRITIONS_URI & PX_UNKNOWN_SUBSCRIPTION_ID, + 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 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_MEC012_SRV_RNIS_013_NF + + /** + * @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_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_SPECIFIC_SUBSCRIPTION)) { + log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_SPECIFIC_SUBSCRIPTION 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); + 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_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 + ) + } + ) + ) + ) + ) + ) + ) + ); + 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 + + // 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_014_BR + + /** + * @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_014_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + 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; + } + + // 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_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 + ) + } + ) + ) + ) + ) + ) + ) + ); + 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 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_MEC012_SRV_RNIS_014_NF + + /** + * @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_015_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + 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; + } + + // 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_RNIS_SUBSCRITIONS_URI & PX_UNKNOWN_SUBSCRIPTION_ID, + 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 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_MEC012_SRV_RNIS_015_NF + + } // End of group specificSubscription_bo_bi + + group rnis_query { + + /** + * @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_016_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 + f_init_default_headers_list(-, -, v_headers); + 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")), + 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_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 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); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC012_SRV_RNIS_016_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 + */ + testcase TC_MEC_MEC012_SRV_RNIS_017_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 + 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_infos( + { + mw_plmn_info( + 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; + } + + // 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 + ) + ) + ); + 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_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 a S1BearerInfo 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_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 + f_init_default_headers_list(-, -, v_headers); + 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_ac.start; + alt { + [] 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 responds with a L2_MEAS 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); + } + } // End of 'alt' statement + + // 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 { + + /** + * @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_016_BR() 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 + f_init_default_headers_list(-, -, v_headers); + 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_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 + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC012_SRV_RNIS_016_BR + + /** + * @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_016_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 ***"); + 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_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_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 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_MEC012_SRV_RNIS_016_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 + */ + 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_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 + 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_invalid?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_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 + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC012_SRV_RNIS_017_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 + */ + 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_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 + 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 + ) + ) + ); + 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 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_MEC012_SRV_RNIS_017_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 + */ + 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_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 + 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_invalid?cell_id=" & oct2char(unichar2oct(PX_CELL_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 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_MEC012_SRV_RNIS_018_BR + + /** + * @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_018_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 ***"); + 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_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_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 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_MEC012_SRV_RNIS_018_NF + + /** + * @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_019_BR() 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 + f_init_default_headers_list(-, -, v_headers); + 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_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 + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC012_SRV_RNIS_019_BR + + /** + * @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_019_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 ***"); + 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_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_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 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_MEC012_SRV_RNIS_019_NF + + } // End of group rnis_query_bi_bo + +} // End of module AtsMec_RnisAPI_TestCases + diff --git a/ttcn/AtsMec_Rnis/AtsMec_RnisAPI_TestControl.ttcn b/ttcn/AtsMec_Rnis/AtsMec_RnisAPI_TestControl.ttcn new file mode 100644 index 0000000..20cc6fb --- /dev/null +++ b/ttcn/AtsMec_Rnis/AtsMec_RnisAPI_TestControl.ttcn @@ -0,0 +1,44 @@ +module AtsMec_RnisAPI_TestControl { + + // LibMec/RnisAPI + import from RnisAPI_Pics all; + + // LibMec + import from LibMec_Pics all; + + // AtsMec + import from AtsMec_RnisAPI_TestCases all; + + control { + + 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()); + execute(TC_MEC_MEC012_SRV_RNIS_011_BR()); + execute(TC_MEC_MEC012_SRV_RNIS_012_BR()); + } + if (PICS_RNIS_QUERY) { + execute(TC_MEC_MEC012_SRV_RNIS_016_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_016_BR()); + execute(TC_MEC_MEC012_SRV_RNIS_016_NF()); + execute(TC_MEC_MEC012_SRV_RNIS_017_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_017_BR()); + execute(TC_MEC_MEC012_SRV_RNIS_017_NF()); + execute(TC_MEC_MEC012_SRV_RNIS_018_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_018_BR()); + execute(TC_MEC_MEC012_SRV_RNIS_018_NF()); + execute(TC_MEC_MEC012_SRV_RNIS_019_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_019_BR()); + execute(TC_MEC_MEC012_SRV_RNIS_019_NF()); + } + } + } // End of 'control' statement + +} // End of module AtsMec_TestControl diff --git a/ttcn/AtsMec_Rnis/module.mk b/ttcn/AtsMec_Rnis/module.mk new file mode 100644 index 0000000..bd30bc3 --- /dev/null +++ b/ttcn/AtsMec_Rnis/module.mk @@ -0,0 +1,36 @@ +suite := AtsMec_Rnis + +sources := \ + AtsMec_RnisAPI_TestCases.ttcn \ + AtsMec_RnisAPI_TestControl.ttcn + + +modules := ../LibCommon \ + ../../titan-test-system-framework/ttcn/LibHelpers \ + ../../titan-test-system-framework/ttcn/LibHttp \ + ../patch_lib_http \ + ../LibMec \ + ../LibMec/EdgePlatformApplicationEnablementAPI \ + ../LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI \ + ../LibMec/TrafficManagementAPI \ + ../LibMec/LocationAPI \ + ../LibMec/RnisAPI \ + ../LibMec/UEAppInterfaceAPI \ + ../LibMec/UEidentityAPI \ + ../LibMec/V2XInformationServiceAPI \ + ../LibMec/DeviceApplicationInterfaceAPI \ + ../LibMec/WlanInformationAPI \ + ../LibMec/ApplicationMobilityServiceAPI \ + ../LibMec/FixedAccessInformationAPI \ + ../../titan-test-system-framework/ccsrc/Framework \ + ../../titan-test-system-framework/ccsrc/loggers \ + ../../titan-test-system-framework/ccsrc/Protocols/Http \ + ../../titan-test-system-framework/ccsrc/Protocols/Tcp \ + ../../titan-test-system-framework/ccsrc/Helpers \ + ../../ccsrc/Ports/LibHttp \ + ../../ccsrc/EncDec/LibMec \ + ../../ccsrc/externals \ + ../../ccsrc/Protocols/Http \ + ../../ccsrc/Protocols/Json \ + ../modules/titan.TestPorts.Common_Components.Abstract_Socket \ + -- GitLab From d3a8f73b4b164f4e86f77376f1bdcfbe21aeea5d Mon Sep 17 00:00:00 2001 From: YannGarcia Date: Tue, 25 Oct 2022 10:18:36 +0200 Subject: [PATCH 08/99] Update TLS certificates support --- etc/AtsMec_Location/AtsMec_Sandbox.cf_ | 6 +++--- etc/AtsMec_Rnis/AtsMec_Sandbox.cf_ | 6 +++--- ttcn/LibMec/ttcn/LibMec_Functions.ttcn | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/etc/AtsMec_Location/AtsMec_Sandbox.cf_ b/etc/AtsMec_Location/AtsMec_Sandbox.cf_ index da4ce8a..7d8b595 100644 --- a/etc/AtsMec_Location/AtsMec_Sandbox.cf_ +++ b/etc/AtsMec_Location/AtsMec_Sandbox.cf_ @@ -49,7 +49,7 @@ LogEventTypes:= Yes [TESTPORT_PARAMETERS] # In this section you can specify parameters that are passed to Test Ports. system.httpPort.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server=sandbox-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,mutual_auth=1,mutual_tls=1)" [DEFINE] # In this section you can create macro definitions, @@ -77,13 +77,13 @@ system.httpPort_notif.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server #AtsMec_TestControl.control # 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 +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 +#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 diff --git a/etc/AtsMec_Rnis/AtsMec_Sandbox.cf_ b/etc/AtsMec_Rnis/AtsMec_Sandbox.cf_ index a8e15be..275b043 100644 --- a/etc/AtsMec_Rnis/AtsMec_Sandbox.cf_ +++ b/etc/AtsMec_Rnis/AtsMec_Sandbox.cf_ @@ -22,8 +22,8 @@ LibMec_Pixits.PX_RNIS_QUERIES_URI := "/rni/v2/queries" LibMec_Pics.PICS_MEC_PLAT := true -LibMec_Pixits.PX_RNIS_SUBSCRITIONS_URI := "/rni/v1/subscriptions" -LibMec_Pixits.PX_RNIS_QUERIES_URI := "/rni/v1/queries" +LibMec_Pixits.PX_RNIS_SUBSCRITIONS_URI := "/rni/v2/subscriptions" +LibMec_Pixits.PX_RNIS_QUERIES_URI := "/rni/v2/queries" RnisAPI_Pixits.PX_SUBSCRIPTION_HREF_VALUE := "cell_change" RnisAPI_Pixits.PX_ASSOCIATE_ID_VALUE := "192.0.0.2" @@ -52,7 +52,7 @@ LogEventTypes:= Yes [TESTPORT_PARAMETERS] # In this section you can specify parameters that are passed to Test Ports. system.httpPort.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server=sandbox-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,mutual_auth=1)" +system.httpPort_notif.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server_mode=1,local_port=443,use_ssl=1,mutual_auth=1,mutual_tls=1)" [DEFINE] # In this section you can create macro definitions, diff --git a/ttcn/LibMec/ttcn/LibMec_Functions.ttcn b/ttcn/LibMec/ttcn/LibMec_Functions.ttcn index 043e12e..fb0115c 100644 --- a/ttcn/LibMec/ttcn/LibMec_Functions.ttcn +++ b/ttcn/LibMec/ttcn/LibMec_Functions.ttcn @@ -76,7 +76,7 @@ module LibMec_Functions { p_notification := v_response.response.body.json_body; v_result := 0; - log("*** f_register_for_notification: INFO: Regustration for notification succeed ***"); + log("*** f_register_for_notification: INFO: Registration for notification succeed ***"); } [] tc_ac.timeout { log("*** f_register_for_notification: INCONC: Expected message not received ***"); @@ -111,7 +111,7 @@ module LibMec_Functions { tc_ac.stop; v_result := 0; - log("*** f_unregister_for_notification: INFO: Regustration for notification succeed ***"); + log("*** f_unregister_for_notification: INFO: De-registration for notification succeed ***"); } [] tc_ac.timeout { log("*** f_unregister_for_notification: INCONC: Expected message not received ***"); -- GitLab From 749b3548134ea2d3811c23321fb015480589f389 Mon Sep 17 00:00:00 2001 From: YannGarcia Date: Thu, 3 Nov 2022 08:33:16 +0100 Subject: [PATCH 09/99] Enhance TLS support --- Makefile | 2 +- etc/AtsMec_Location/AtsMec_Sandbox.cf_ | 4 ++-- etc/AtsMec_Rnis/AtsMec_Sandbox.cf_ | 4 ++-- titan-test-system-framework | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Makefile b/Makefile index 7473071..2b4cea3 100644 --- a/Makefile +++ b/Makefile @@ -23,7 +23,7 @@ $$(foreach I, $$(includes), $$(eval all_includes += $(1)/$$(I))) $$(foreach M, $$(modules), $$(eval $$(call IncludeModule, $$(if $$(filter /%, $$(M)), $$(M), $(1)/$$(M))))) endef -all_includes := $(TTCN3_DIR)/include $(TTCN3_DIR)/src $(TOPDIR)/ccsrc/Framework +all_includes := $(TTCN3_DIR)/include $(TTCN3_DIR)/src defines += TITAN_RUNTIME_2 _NO_SOFTLINKS_ $(ATS) AS_USE_SSL libs += $(TTCN3_DIR)/lib/libttcn3-rt2-parallel.a -lstdc++fs diff --git a/etc/AtsMec_Location/AtsMec_Sandbox.cf_ b/etc/AtsMec_Location/AtsMec_Sandbox.cf_ index 7d8b595..83dd334 100644 --- a/etc/AtsMec_Location/AtsMec_Sandbox.cf_ +++ b/etc/AtsMec_Location/AtsMec_Sandbox.cf_ @@ -48,8 +48,8 @@ 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=sandbox-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,mutual_auth=1,mutual_tls=1)" +system.httpPort.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server=sandbox-mec.etsi.org,port=443,use_ssl=1,trusted_ca_list=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem,privkey=/home/yann/var/ssl/archive/yanngarcia.ddns.net/privkey1.pem,certificate=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem)" +system.httpPort_notif.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server_mode=1,local_port=443,use_ssl=1,mutual_auth=1,mutual_tls=1,trusted_ca_list=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem,privkey=/home/yann/var/ssl/archive/yanngarcia.ddns.net/privkey1.pem,certificate=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem)" [DEFINE] # In this section you can create macro definitions, diff --git a/etc/AtsMec_Rnis/AtsMec_Sandbox.cf_ b/etc/AtsMec_Rnis/AtsMec_Sandbox.cf_ index 275b043..7daad53 100644 --- a/etc/AtsMec_Rnis/AtsMec_Sandbox.cf_ +++ b/etc/AtsMec_Rnis/AtsMec_Sandbox.cf_ @@ -51,8 +51,8 @@ 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=sandbox-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,mutual_auth=1,mutual_tls=1)" +system.httpPort.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server=sandbox-mec.etsi.org,port=443,use_ssl=1,trusted_ca_list=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem,privkey=/home/yann/var/ssl/archive/yanngarcia.ddns.net/privkey1.pem,certificate=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem)" +system.httpPort_notif.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server_mode=1,local_port=443,use_ssl=1,mutual_auth=1,mutual_tls=1,trusted_ca_list=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem,privkey=/home/yann/var/ssl/archive/yanngarcia.ddns.net/privkey1.pem,certificate=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem)" [DEFINE] # In this section you can create macro definitions, diff --git a/titan-test-system-framework b/titan-test-system-framework index a49d8da..78962c1 160000 --- a/titan-test-system-framework +++ b/titan-test-system-framework @@ -1 +1 @@ -Subproject commit a49d8daee3e5df27198a1902a7c630a84351e427 +Subproject commit 78962c1f0df218785ebb7c9155e208fff25a7737 -- GitLab From 607d4679ebde9f2c6ab56994fe5256e1af4d1779 Mon Sep 17 00:00:00 2001 From: YannGarcia Date: Thu, 1 Dec 2022 09:30:09 +0100 Subject: [PATCH 10/99] Complete re-organization of the ATSs; Add unified TITAN framework --- Makefile | 8 +- README.md | 151 +++++-- .../AtsMec_V2XInformationService.cfg | 77 ++++ .../AtsMec_WlanInformation.cfg | 77 ++++ scripts/devenv.bash.debian | 8 +- scripts/devenv.bash.ubuntu | 8 +- titan-test-system-framework | 2 +- ...viceApplicationInterfaceAPI_TestCases.ttcn | 2 +- ...AtsMec_FixedAccessInfoAPI_TestControl.ttcn | 126 ------ ttcn/AtsMec/AtsMec_FixedAccessInfo/module.mk | 48 --- ...ycleAndOperationGrantingAPI_TestCases.ttcn | 2 +- ...sMec_TrafficManagementAPI_TestControl.ttcn | 126 ------ .../AtsMec/AtsMec_TrafficManagement/module.mk | 48 --- .../AtsMec_UEidentityAPI_TestControl.ttcn | 126 ------ ttcn/AtsMec/AtsMec_UEidentity/module.mk | 48 --- ..._V2XInformationServiceAPI_TestControl.ttcn | 126 ------ ttcn/AtsMec/AtsMec_V2x/module.mk | 48 --- ...AtsMec_WlanInformationAPI_TestControl.ttcn | 126 ------ ttcn/AtsMec/AtsMec_Wlan/module.mk | 48 --- ...ccessInformationServiceAPI_TestCases.ttcn} | 32 +- ...cessInformationServiceAPI_TestControl.ttcn | 19 + .../module.mk | 36 ++ ttcn/AtsMec_Location/module.mk | 4 +- ttcn/AtsMec_Rnis/module.mk | 2 + ..._MultiAccessSteeringInfoAPI_TestCases.ttcn | 18 +- ...AtsMec_TrafficManagementAPI_TestCases.ttcn | 24 +- ...sMec_TrafficManagementAPI_TestControl.ttcn | 22 + ttcn/AtsMec_TrafficManagement/module.mk | 36 ++ .../AtsMec_UEidentityAPI_TestCases.ttcn | 1 + .../AtsMec_UEidentityAPI_TestControl.ttcn | 27 ++ ttcn/AtsMec_UEidentity/module.mk | 36 ++ ...ec_V2XInformationServiceAPI_TestCases.ttcn | 2 +- ..._V2XInformationServiceAPI_TestControl.ttcn | 18 + ttcn/AtsMec_V2XInformationService/module.mk | 36 ++ .../AtsMec_WlanInformationAPI_TestCases.ttcn | 2 +- ...AtsMec_WlanInformationAPI_TestControl.ttcn | 21 + ttcn/AtsMec_WlanInformation/module.mk | 36 ++ ttcn/LibMec/Ams/ttcn/Ams_Pixits.ttcn | 16 +- ttcn/LibMec/Ams/ttcn/Ams_Templates.ttcn | 26 +- ttcn/LibMec/Ams/ttcn/Ams_TypesAndValues.ttcn | 62 +-- ...plicationMobilityServiceAPI_Functions.ttcn | 2 +- .../ApplicationMobilityServiceAPI_Pics.ttcn | 2 +- .../ApplicationMobilityServiceAPI_Pixits.ttcn | 2 +- ...plicationMobilityServiceAPI_Templates.ttcn | 2 +- ...tionMobilityServiceAPI_TypesAndValues.ttcn | 4 +- ...fecycleAndOperationGrantingAPI_Pixits.ttcn | 38 +- ...ycleAndOperationGrantingAPI_Templates.ttcn | 116 +++--- ...ndOperationGrantingAPI_TypesAndValues.ttcn | 380 +++++++++--------- ...viceApplicationInterfaceAPI_Functions.ttcn | 2 +- .../DeviceApplicationInterfaceAPI_Pixits.ttcn | 2 +- ...viceApplicationInterfaceAPI_Templates.ttcn | 72 ++-- ...pplicationInterfaceAPI_TypesAndValues.ttcn | 94 ++--- ...ormApplicationEnablementAPI_Functions.ttcn | 2 +- ...ormApplicationEnablementAPI_Templates.ttcn | 2 +- ...plicationEnablementAPI_TypesAndValues.ttcn | 90 ++--- .../module.mk | 0 ...FixedAccessInformationServiceAPI_Pics.ttcn | 0 ...xedAccessInformationServiceAPI_Pixits.ttcn | 12 +- ...AccessInformationServiceAPI_Templates.ttcn | 32 +- ...sInformationServiceAPI_TypesAndValues.ttcn | 78 ++-- .../ttcn/LocationAPI_Functions.ttcn | 2 +- .../LocationAPI/ttcn/LocationAPI_Pixits.ttcn | 8 +- .../ttcn/LocationAPI_Templates.ttcn | 46 +-- .../ttcn/LocationAPI_TypesAndValues.ttcn | 78 ++-- ttcn/LibMec/RnisAPI/ttcn/RnisAPI_Pixits.ttcn | 8 +- .../RnisAPI/ttcn/RnisAPI_Templates.ttcn | 18 +- .../RnisAPI/ttcn/RnisAPI_TypesAndValues.ttcn | 52 +-- .../ttcn/TrafficManagementAPI_Functions.ttcn | 10 +- .../ttcn/TrafficManagementAPI_Templates.ttcn | 2 +- .../TrafficManagementAPI_TypesAndValues.ttcn | 16 +- .../ttcn/UEAppInterfaceAPI_Templates.ttcn | 2 +- .../UEAppInterfaceAPI_TypesAndValues.ttcn | 22 +- ttcn/LibMec/UEidentityAPI/module.mk | 1 + .../ttcn/UEidentityAPI_Functions.ttcn | 83 ++++ .../ttcn/UEidentityAPI_Templates.ttcn | 2 +- .../ttcn/UEidentityAPI_TypesAndValues.ttcn | 6 +- .../V2XInformationServiceAPI_Functions.ttcn | 2 +- .../ttcn/V2XInformationServiceAPI_Pixits.ttcn | 10 +- .../V2XInformationServiceAPI_Templates.ttcn | 84 ++-- ...XInformationServiceAPI_TypesAndValues.ttcn | 80 ++-- .../ttcn/WlanInformationAPI_Functions.ttcn | 2 +- .../ttcn/WlanInformationAPI_Pixits.ttcn | 12 +- .../ttcn/WlanInformationAPI_Templates.ttcn | 58 +-- .../WlanInformationAPI_TypesAndValues.ttcn | 172 ++++---- ttcn/LibMec/module.mk | 2 - ttcn/LibMec/ttcn/JSON.ttcn | 151 ------- ttcn/LibMec/ttcn/LibMec_Templates.ttcn | 18 +- ttcn/LibMec/ttcn/LibMec_TypesAndValues.ttcn | 10 +- .../ttcn/LibHttp_JsonMessageBodyTypes.ttcn | 8 + .../ttcn/LibHttp_JsonTemplates.ttcn | 7 +- virtualization/docker-dev/Dockerfile | 49 +++ .../Dockerfile.stfubuntu | 0 virtualization/docker-dev/README.md | 99 +++++ .../{docker => docker-dev}/build.sh | 0 .../home/etc/init.d/10-titan.sh | 0 .../home/etc/init.d/20-eclipse.sh | 0 .../home/etc/init.d/30-osip.sh | 0 .../home/etc/init.d/40-ttf_t012.sh | 26 +- .../home/etc/init.d/50-doxygen.sh | 0 .../home/etc/titan_repos.txt | 0 virtualization/{docker => docker-dev}/run.sh | 0 virtualization/docker/Dockerfile | 58 ++- virtualization/docker/README.md | 89 ++-- virtualization/docker/docker-entrypoint.sh | 58 +++ virtualization/docker/docker-run.sh | 13 + 105 files changed, 1914 insertions(+), 2063 deletions(-) create mode 100644 etc/AtsMec_V2XInformationService/AtsMec_V2XInformationService.cfg create mode 100644 etc/AtsMec_WlanInformation/AtsMec_WlanInformation.cfg delete mode 100644 ttcn/AtsMec/AtsMec_FixedAccessInfo/AtsMec_FixedAccessInfoAPI_TestControl.ttcn delete mode 100644 ttcn/AtsMec/AtsMec_FixedAccessInfo/module.mk delete mode 100644 ttcn/AtsMec/AtsMec_TrafficManagement/AtsMec_TrafficManagementAPI_TestControl.ttcn delete mode 100644 ttcn/AtsMec/AtsMec_TrafficManagement/module.mk delete mode 100644 ttcn/AtsMec/AtsMec_UEidentity/AtsMec_UEidentityAPI_TestControl.ttcn delete mode 100644 ttcn/AtsMec/AtsMec_UEidentity/module.mk delete mode 100644 ttcn/AtsMec/AtsMec_V2x/AtsMec_V2XInformationServiceAPI_TestControl.ttcn delete mode 100644 ttcn/AtsMec/AtsMec_V2x/module.mk delete mode 100644 ttcn/AtsMec/AtsMec_Wlan/AtsMec_WlanInformationAPI_TestControl.ttcn delete mode 100644 ttcn/AtsMec/AtsMec_Wlan/module.mk rename ttcn/{AtsMec/AtsMec_FixedAccessInfo/AtsMec_FixedAccessInfoAPI_TestCases.ttcn => AtsMec_FixedAccessInformationService/AtsMec_FixedAccessInformationServiceAPI_TestCases.ttcn} (97%) create mode 100644 ttcn/AtsMec_FixedAccessInformationService/AtsMec_FixedAccessInformationServiceAPI_TestControl.ttcn create mode 100644 ttcn/AtsMec_FixedAccessInformationService/module.mk rename ttcn/{AtsMec => }/AtsMec_TrafficManagement/AtsMec_MultiAccessSteeringInfoAPI_TestCases.ttcn (99%) rename ttcn/{AtsMec => }/AtsMec_TrafficManagement/AtsMec_TrafficManagementAPI_TestCases.ttcn (99%) create mode 100644 ttcn/AtsMec_TrafficManagement/AtsMec_TrafficManagementAPI_TestControl.ttcn create mode 100644 ttcn/AtsMec_TrafficManagement/module.mk rename ttcn/{AtsMec => }/AtsMec_UEidentity/AtsMec_UEidentityAPI_TestCases.ttcn (99%) create mode 100644 ttcn/AtsMec_UEidentity/AtsMec_UEidentityAPI_TestControl.ttcn create mode 100644 ttcn/AtsMec_UEidentity/module.mk rename ttcn/{AtsMec/AtsMec_V2x => AtsMec_V2XInformationService}/AtsMec_V2XInformationServiceAPI_TestCases.ttcn (99%) create mode 100644 ttcn/AtsMec_V2XInformationService/AtsMec_V2XInformationServiceAPI_TestControl.ttcn create mode 100644 ttcn/AtsMec_V2XInformationService/module.mk rename ttcn/{AtsMec/AtsMec_Wlan => AtsMec_WlanInformation}/AtsMec_WlanInformationAPI_TestCases.ttcn (99%) create mode 100644 ttcn/AtsMec_WlanInformation/AtsMec_WlanInformationAPI_TestControl.ttcn create mode 100644 ttcn/AtsMec_WlanInformation/module.mk rename ttcn/LibMec/{FixedAccessInformationAPI => FixedAccessInformationServiceAPI}/module.mk (100%) rename ttcn/LibMec/{FixedAccessInformationAPI => FixedAccessInformationServiceAPI}/ttcn/FixedAccessInformationServiceAPI_Pics.ttcn (100%) rename ttcn/LibMec/{FixedAccessInformationAPI => FixedAccessInformationServiceAPI}/ttcn/FixedAccessInformationServiceAPI_Pixits.ttcn (64%) rename ttcn/LibMec/{FixedAccessInformationAPI => FixedAccessInformationServiceAPI}/ttcn/FixedAccessInformationServiceAPI_Templates.ttcn (94%) rename ttcn/LibMec/{FixedAccessInformationAPI => FixedAccessInformationServiceAPI}/ttcn/FixedAccessInformationServiceAPI_TypesAndValues.ttcn (93%) create mode 100644 ttcn/LibMec/UEidentityAPI/ttcn/UEidentityAPI_Functions.ttcn delete mode 100644 ttcn/LibMec/ttcn/JSON.ttcn create mode 100644 virtualization/docker-dev/Dockerfile rename virtualization/{docker => docker-dev}/Dockerfile.stfubuntu (100%) create mode 100644 virtualization/docker-dev/README.md rename virtualization/{docker => docker-dev}/build.sh (100%) rename virtualization/{docker => docker-dev}/home/etc/init.d/10-titan.sh (100%) rename virtualization/{docker => docker-dev}/home/etc/init.d/20-eclipse.sh (100%) rename virtualization/{docker => docker-dev}/home/etc/init.d/30-osip.sh (100%) rename virtualization/{docker => docker-dev}/home/etc/init.d/40-ttf_t012.sh (66%) rename virtualization/{docker => docker-dev}/home/etc/init.d/50-doxygen.sh (100%) rename virtualization/{docker => docker-dev}/home/etc/titan_repos.txt (100%) rename virtualization/{docker => docker-dev}/run.sh (100%) create mode 100755 virtualization/docker/docker-entrypoint.sh create mode 100755 virtualization/docker/docker-run.sh diff --git a/Makefile b/Makefile index 2b4cea3..80b364a 100644 --- a/Makefile +++ b/Makefile @@ -47,7 +47,7 @@ outdir := $(TOPDIR)/build/$(ATS) bindir := $(TOPDIR)/bin sources := $(sort $(all_sources)) -includes := $(outdir) $(outdir)/.. $(all_includes) $(NPCAP_INCLUDE) +includes := $(outdir) $(outdir)/.. $(all_includes) /usr/include/libxml2 $(NPCAP_INCLUDE) ifeq (Windows_NT,$(OS)) EXE=.exe @@ -108,14 +108,14 @@ $(outdir) $(bindir): mkdir -p $@ $(bindir)/$(ATS)$(EXE): $(gen_objects) $(cc_objects) - g++ -g -O0 -o $@ $(LDFLAGS) $(gen_objects) $(cc_objects) $(libs) + g++ -g -O0 -std=c++17 -o $@ $(LDFLAGS) $(gen_objects) $(cc_objects) $(libs) $(gen_objects) :%.o :%.cc - g++ -g -O0 -c $(addprefix -D, $(defines)) $(addprefix -I, $(includes)) -o $@ $< + g++ -g -O0 -std=c++17 -c $(addprefix -D, $(defines)) $(addprefix -I, $(includes)) -o $@ $< $(cc_objects) : $(outdir)/%.o : %.cc mkdir -p $(dir $@) - g++ -g -O0 -c $(addprefix -D, $(defines)) $(addprefix -I, $(includes)) -o $@ $< + g++ -g -O0 -std=c++17 -c $(addprefix -D, $(defines)) $(addprefix -I, $(includes)) -o $@ $< #$(gen_sources): # $(TTCN3_DIR)/bin/compiler -n -e -L -R -U none -o $(outdir) $(tt_sources) diff --git a/README.md b/README.md index 4bc51e8..f409fcd 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,10 @@ # MEC Testing Framework in TTCN-3 - - GS 032-3 ## Introduction -This repositories contains the test specifications and test adapter code for MEC API Conformance Testing in TTCN-3, GS 032-3. -More information and dowload of the standard at https://portal.etsi.org/webapp/WorkProgram/Report_WorkItem.asp?WKI_ID=56776. +This repositories contains the test specifications and test adapter code for MEC API Conformance Testing in TTCN-3, GS 032-2/3. + +More information and download of the standard at https://portal.etsi.org/webapp/WorkProgram/Report_WorkItem.asp?WKI_ID=56776. For more information on ETSI ISG Multi-access Edge Computing (MEC), visit https://www.etsi.org/technologies/multi-access-edge-computing. @@ -24,18 +25,21 @@ See the attached LICENSE file or visit https://forge.etsi.org/legal-matters. NOTE All draft can be found in the 'IETF XML Registry', accessible [here](https://www.iana.org/assignments/xml-registry/xml-registry.xhtml) -## Download required libraries +## STFs/TTFs + +The following STFs were or are currently involved in the evolutions of the ETSI MEC protocols project: +- STF 569, STF 625, TTF T012 + -This projects requires the LibCommon and LibIts libraries to compile. The libraries location are git submodules of the current repository. +# Installation -Once you have cloned the present repository, in order to install the libraries you want to execute: +The ETSI MEC protocols project builds and tests regularly on the following platforms: - git submodule init - git submodule update + - Linux (Ubuntu) + - Windows ([Cygwin x64](https://cygwin.com/install.html), [Npcap SDK x64](https://nmap.org/npcap/#download) and [OpenSSL-Windows x64](https://www.openssl.org) are required) -Alternatively, you may clone the project together with the required libraries with the following command: +Note: The [OpenSSL](https://www.openssl.org) version >= 1.1.1 is also required. - git clone --recurse-submodules ## Installation @@ -45,6 +49,7 @@ The MEC Testing Framework project builds and tests regularly on the following pl Note: The [OpenSSL](https://www.openssl.org) version > 1.1.x is also required. + ### How to do it? They are two different methods: @@ -66,50 +71,62 @@ Vagrant requires a virtual machine. You can use either VirtualBox or WMware. Docker does not need a virtual machine, so it is the more efficant way. -### Using Vagrant +### Using TITAN compiler on a Docker image + +In this configuration, TITAN compiler is located on a Docker image and the sources and the outputs are located on the host. Pre-requisites on your host machine: -- Install [Virtualbox](https://www.virtualbox.org/manual/ch01.html) -- Install [Vagrant](https://www.vagrantup.com/intro/getting-started/) -- Install Vagrant plugin vagrant-vbguest -- Credentials to access [ETSI forge](https://forge.etsi.org/gitlab/users/sign_in) - - Set the environment variable USERNAME to your ETSI EOL account user name - - Set the environment variable PASSWORD to your ETSI EOL account password +- Install Docker -Procedure: -- On your host machine, open a command line session (PuTTY, DOS window...) -- From the ETSI MEC Testing Framework project, clone the Vagrant folder -- In the file Vagrantfile, modify the tag config.vm.provision replacing & strings by your ETSI credentials -- In the Vagrant folder, execute the following commands: +Procedure on the host machine: +- Open a Terminal +- Clone the ETSI MEC Test System +- From the ETSI MEC Test System root directory, build the Docker image executing the following commands: ```sh -$ vagrant up --provider virtualbox --provision -... +$ cd ./virtualization/docker +$ docker build --no-cache --tag alpine-mec -f Dockerfile --force-rm . +$ docker images ``` -NOTE The creation and the installations will take some time to achieve -- Stop vagrant virtual machine +To build the MEC Test Suite, execute the following command: ```sh -$ vagrant halt -... +$ ./docker-run.sh build ``` -- Update the file 'Vagrantfile' to match with your networks configuration -- Re-start the vagrant virtual machine and log to to the machine +Possble other options are 'clean' to remove all the build outputs or 'rebuild' to force a build of the Test Suite after a 'clean'. + +To retrieve the list of the available test cases, execute the following command: ```sh -$ vagrant up -... -$ vagrant ssh +$ ./docker-run.sh list ``` -- Switch to the next clause (Usage) +Before to execute the MEC Test Suite, prepare, edit and update the configuration file: -NOTE The user password is vagrant. +```sh +$ ln -sf ../../etc/AtsXxx/AtsXxx_yyy.cf_ ../../etc/AtsXxx/AtsXxx.cfg +$ vi ../../etc/AtsXxx/AtsXxx.cfg # To update it +``` +To execute the MEC Test Suite, execute the following command: + +```sh +$ ./docker-run.sh run +``` + +Notes: +- The MEC Test System is listening on port 30181 +- Updating the file etc/AtsXxx/AtsXxx.cfg is about (e.g. etc/AtsMec_Location/AtsMec_Location.cfg): +. Selecting the test(s) to be executed +. Updating value of PICs and PIXITs +. Updating HTTP port setting -### Using Docker + +### Using development Docker image + +In this configuration, the TITAN compiler, the sources and the outputs are located on the Docker image. Pre-requisites on your host machine: - Install Virtualbox @@ -136,6 +153,49 @@ $ ./docker/run-container.sh - Switch to the next clause (Usage) +### Using Vagrant + +Pre-requisites on your host machine: +- Install [Virtualbox](https://www.virtualbox.org/manual/ch01.html) +- Install [Vagrant](https://www.vagrantup.com/intro/getting-started/) +- Install Vagrant plugin vagrant-vbguest +- Credentials to access [ETSI forge](https://forge.etsi.org/gitlab/users/sign_in) + - Set the environment variable USERNAME to your ETSI EOL account user name + - Set the environment variable PASSWORD to your ETSI EOL account password + +Procedure: +- On your host machine, open a command line session (PuTTY, DOS window...) +- From the ETSI MEC Testing Framework project, clone the Vagrant folder +- In the file Vagrantfile, modify the tag config.vm.provision replacing & strings by your ETSI credentials +- In the Vagrant folder, execute the following commands: + +```sh +$ vagrant up --provider virtualbox --provision +... +``` + +NOTE The creation and the installations will take some time to achieve +- Stop vagrant virtual machine + +```sh +$ vagrant halt +... +``` + +- Update the file 'Vagrantfile' to match with your networks configuration +- Re-start the vagrant virtual machine and log to to the machine + +```sh +$ vagrant up +... +$ vagrant ssh +``` + +- Switch to the next clause (Usage) + +NOTE The user password is vagrant. + + ### From scratch Pre-requisites: @@ -224,6 +284,27 @@ $ cp ./ttcn/patch_lib_http/*.ttcn ./ttcn/LibIts/ttcn/Http/ - Switch to the next clause (Usage) +## Generate certificates for TLS and MEC security support + +This clause describes how generate certificates desrived from Let's encrypt certificate. These certificate will be used for TS mutual authentication and for MEC Security tests. +NOTE: +- Certficates shall be renewed every 3 months +- The port 80 shall be vailable for standalone validation + +Pre-requisites: +- You need to install python and [certbot](https://manpages.ubuntu.com/manpages/impish/en/man1/certbot.1.html). + +To generate certifcates, execute the following command: + +```sh +$ export REQUESTS_CA_BUNDLE=$(dirname `python -c "import certifi; print(certifi.where())"`) +$ mkdir -p $HOME/var/ssl +$ sudo certbot certonly --debug --mec-tls-cert --config-dir $HOME/var/ssl --work-dir $HOME/var/ssl --logs-dir $HOME/var/ssl --standalone --agree-tos --email -d -w $HOME/var/ssl/ +``` + +NOTE: For testing certificate generation and renewal, use the certbot's --dry-run option. + + ## Usage This clause describes how to compile and execute an Abstract Test Suite. diff --git a/etc/AtsMec_V2XInformationService/AtsMec_V2XInformationService.cfg b/etc/AtsMec_V2XInformationService/AtsMec_V2XInformationService.cfg new file mode 100644 index 0000000..c79eb24 --- /dev/null +++ b/etc/AtsMec_V2XInformationService/AtsMec_V2XInformationService.cfg @@ -0,0 +1,77 @@ +[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; + +LibHttp_Pics.PICS_HEADER_HOST := "sandbox-mec.etsi.org" #"192.168.1.39" + +LibHttp_Pics.PICS_HEADER_CONTENT_TYPE := "application/json" +LibHttp_Pics.PICS_USE_TOKEN_HEADER := true +#LibHttp_Pics.PICS_TOKEN_HEADER := "Basic WrongToken" + +LibMec_Pics.PICS_ROOT_API := "/sbx8tunqyy/mep1" # Need to sign in on https://sandbox-mec.etsi.org/, section 'Try-it from your MEC application' + +LibMec_Pics.PICS_MEC_PLAT := true + +[LOGGING] +# In this section you can specify the name of the log file and the classes of events +# you want to log into the file or display on console (standard error). + +LogFile := "../logs/AtsMec_V2XInformationService/%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=sandbox-mec.etsi.org,port=443,use_ssl=1,trusted_ca_list=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem,privkey=/home/yann/var/ssl/archive/yanngarcia.ddns.net/privkey1.pem,certificate=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem)" +system.httpPort_notif.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server_mode=1,local_port=443,use_ssl=1,mutual_auth=1,mutual_tls=1,trusted_ca_list=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem,privkey=/home/yann/var/ssl/archive/yanngarcia.ddns.net/privkey1.pem,certificate=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem)" + +[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 + +[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_WlanInformation/AtsMec_WlanInformation.cfg b/etc/AtsMec_WlanInformation/AtsMec_WlanInformation.cfg new file mode 100644 index 0000000..2823043 --- /dev/null +++ b/etc/AtsMec_WlanInformation/AtsMec_WlanInformation.cfg @@ -0,0 +1,77 @@ +[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; + +LibHttp_Pics.PICS_HEADER_HOST := "sandbox-mec.etsi.org" #"192.168.1.39" + +LibHttp_Pics.PICS_HEADER_CONTENT_TYPE := "application/json" +LibHttp_Pics.PICS_USE_TOKEN_HEADER := true +#LibHttp_Pics.PICS_TOKEN_HEADER := "Basic WrongToken" + +LibMec_Pics.PICS_ROOT_API := "/sbx8tunqyy/mep1" # Need to sign in on https://sandbox-mec.etsi.org/, section 'Try-it from your MEC application' + +LibMec_Pics.PICS_MEC_PLAT := true + +[LOGGING] +# In this section you can specify the name of the log file and the classes of events +# you want to log into the file or display on console (standard error). + +LogFile := "../logs/AtsMec_WlanInformation/%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=sandbox-mec.etsi.org,port=443,use_ssl=1,trusted_ca_list=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem,privkey=/home/yann/var/ssl/archive/yanngarcia.ddns.net/privkey1.pem,certificate=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem)" +system.httpPort_notif.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server_mode=1,local_port=443,use_ssl=1,mutual_auth=1,mutual_tls=1,trusted_ca_list=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem,privkey=/home/yann/var/ssl/archive/yanngarcia.ddns.net/privkey1.pem,certificate=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem)" + +[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 + +[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/scripts/devenv.bash.debian b/scripts/devenv.bash.debian index c6a9aaa..3954023 100755 --- a/scripts/devenv.bash.debian +++ b/scripts/devenv.bash.debian @@ -57,11 +57,13 @@ then export TTCN3_LICENSE_FILE=${TTCN3_DIR}/etc/license/license.dat export PATH_DEV_TTCN=${HOME}/dev/ttcn3 # ITS support - export PATH_DEV_ITS=${HOME}/dev/etsi_its + export PATH_DEV_ITS=${HOME}/dev/TS.ITS # Emergency Communication support - export PATH_DEV_EMCOM=${HOME}/dev/etsi_emcom + export PATH_DEV_EMCOM=${HOME}/dev/NG112 # Mobile-Edge Computing support - export PATH_DEV_MEC=${HOME}/dev/etsi_mec + export PATH_DEV_MEC=${HOME}/dev/gs032p3-ttcn-test-suite + # CDM/CISE support + export PATH_DEV_MEC=${HOME}/dev/cise # Validation folder export VALIDATION_DIR=${HOME} fi diff --git a/scripts/devenv.bash.ubuntu b/scripts/devenv.bash.ubuntu index 06d2da6..254cc37 100755 --- a/scripts/devenv.bash.ubuntu +++ b/scripts/devenv.bash.ubuntu @@ -59,11 +59,13 @@ then export TTCN3_LICENSE_FILE=${TTCN3_DIR}/etc/license/license.dat export PATH_DEV_TTCN=${HOME}/dev/ttcn3 # ITS support - export PATH_DEV_ITS=${HOME}/dev/etsi_its + export PATH_DEV_ITS=${HOME}/dev/TS.ITS # Emergency Communication support - export PATH_DEV_EMCOM=${HOME}/dev/etsi_emcom + export PATH_DEV_EMCOM=${HOME}/dev/NG112 # Mobile-Edge Computing support - export PATH_DEV_MEC=${HOME}/dev/etsi_mec + export PATH_DEV_MEC=${HOME}/dev/gs032p3-ttcn-test-suite + # CDM/CISE support + export PATH_DEV_MEC=${HOME}/dev/cise # Validation folder export VALIDATION_DIR=${HOME} fi diff --git a/titan-test-system-framework b/titan-test-system-framework index 78962c1..bafc335 160000 --- a/titan-test-system-framework +++ b/titan-test-system-framework @@ -1 +1 @@ -Subproject commit 78962c1f0df218785ebb7c9155e208fff25a7737 +Subproject commit bafc335bf71b976a49fb9edd4237fc517d872834 diff --git a/ttcn/AtsMec/AtsMec_DeviceApplicationInterface/AtsMec_DeviceApplicationInterfaceAPI_TestCases.ttcn b/ttcn/AtsMec/AtsMec_DeviceApplicationInterface/AtsMec_DeviceApplicationInterfaceAPI_TestCases.ttcn index d0208a7..2f39915 100644 --- a/ttcn/AtsMec/AtsMec_DeviceApplicationInterface/AtsMec_DeviceApplicationInterfaceAPI_TestCases.ttcn +++ b/ttcn/AtsMec/AtsMec_DeviceApplicationInterface/AtsMec_DeviceApplicationInterfaceAPI_TestCases.ttcn @@ -13,7 +13,7 @@ module AtsMec_DeviceApplicationInterfaceAPI_TestCases { // JSON - import from JSON all; + import from Json all; // Libcommon import from LibCommon_Time all; diff --git a/ttcn/AtsMec/AtsMec_FixedAccessInfo/AtsMec_FixedAccessInfoAPI_TestControl.ttcn b/ttcn/AtsMec/AtsMec_FixedAccessInfo/AtsMec_FixedAccessInfoAPI_TestControl.ttcn deleted file mode 100644 index 4c74736..0000000 --- a/ttcn/AtsMec/AtsMec_FixedAccessInfo/AtsMec_FixedAccessInfoAPI_TestControl.ttcn +++ /dev/null @@ -1,126 +0,0 @@ -module AtsMec_TestControl { - - // LibMec/LocationAPI - import from LocationAPI_Pics all; - // LibMec/UEidentityAPI - import from UEidentityAPI_Pics all; - // LibMec/RnisAPI - import from RnisAPI_Pics all; - // LibMec/TrafficManagementAPI - import from TrafficManagementAPI_Pics all; - // LibMec/AppEnablementAPI - import from EdgePlatformApplicationEnablementAPI_Pics all; - // LibMec/UEAppInterfaceAPI - import from UEAppInterfaceAPI_Pics all; - - // LibMec - import from LibMec_Pics all; - - // AtsMec - import from AtsMec_LocationAPI_TestCases all; - import from AtsMec_UEidentityAPI_TestCases all; -// import from AtsMec_RadioNodeLocationAPI_TestCases all; - import from AtsMec_RnisAPI_TestCases all; - import from AtsMec_TrafficManagementAPI_TestCases all; - import from AtsMec_EdgePlatformApplicationEnablementAPI_TestCases all; - import from AtsMec_UEAppInterfaceAPI_TestCases all; - - control { - - if (PICS_MEC_PLAT and PICS_SERVICES) { - if (PICS_UE_IDENTITY_API_SUPPORTED) { - execute(TC_MEC_MEC014_SRV_UETAG_001_OK()); - execute(TC_MEC_MEC014_SRV_UETAG_001_BR()); - execute(TC_MEC_MEC014_SRV_UETAG_001_NF()); - execute(TC_MEC_MEC014_SRV_UETAG_002_OK()); - execute(TC_MEC_MEC014_SRV_UETAG_002_BR()); - execute(TC_MEC_MEC014_SRV_UETAG_002_PF()); - } - if (PICS_LOCATION_API_SUPPORTED) { - execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_OK()); - execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_BR()); - execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_NF()); - - execute(TC_MEC_MEC013_SRV_UELOCSUB_001_OK()); - execute(TC_MEC_MEC013_SRV_UELOCSUB_001_BR()); - execute(TC_MEC_MEC013_SRV_UELOCSUB_002_OK()); - execute(TC_MEC_MEC013_SRV_UELOCSUB_002_NF()); - - execute(TC_MEC_MEC013_SRV_UETRACKSUB_001_OK()); - execute(TC_MEC_MEC013_SRV_UETRACKSUB_001_BR()); - execute(TC_MEC_MEC013_SRV_UETRACKSUB_002_OK()); - execute(TC_MEC_MEC013_SRV_UETRACKSUB_002_NF()); - - execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_OK()); - execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_BR()); - execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_NF()); - - execute(TC_MEC_MEC013_SRV_UEINFSUB_001_OK()); - execute(TC_MEC_MEC013_SRV_UEINFSUB_001_BR()); - execute(TC_MEC_MEC013_SRV_UEINFSUB_002_OK()); - execute(TC_MEC_MEC013_SRV_UEINFSUB_002_NF()); - -// execute(TC_MEC_PLAT_RLOC_001_OK()); -// execute(TC_MEC_PLAT_RLOC_001_NF()); - } - - if (PICS_APP_ENABLEMENT_API_SUPPORTED) { - /*execute(TC_MEC_SRV_TRANS_001_OK()); - execute(TC_MEC_SRV_TRAF_001_OK()); - execute(TC_MEC_SRV_TRAF_002_OK()); - execute(TC_MEC_SRV_TRAF_003_OK()); - execute(TC_MEC_SRV_TRAF_001_NF());*/ - } - - if (PICS_ENABLE_UE_APP_CTX) { - execute(TC_MEC_MEC016_MEO_UEAPPCTX_001_OK()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_001_BR()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_OK()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_BR()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_NF()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_003_OK()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_003_NF()); - execute(TC_MEC_MEC016_MEO_UEAPPS_001_OK()); - execute(TC_MEC_MEC016_MEO_UEAPPS_001_BR()); - execute(TC_MEC_MEC016_MEO_UEAPPS_001_NF()); - } - } - - /*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()); - execute(TC_MEC_MEC012_SRV_RNIS_011_BR()); - execute(TC_MEC_MEC012_SRV_RNIS_012_BR()); - } - if (PICS_RNIS_QUERY) { - execute(TC_MEC_MEC012_SRV_RNIS_016_OK()); - execute(TC_MEC_MEC012_SRV_RNIS_016_BR()); - execute(TC_MEC_MEC012_SRV_RNIS_016_NF()); - execute(TC_MEC_MEC012_SRV_RNIS_017_OK()); - execute(TC_MEC_MEC012_SRV_RNIS_017_BR()); - execute(TC_MEC_MEC012_SRV_RNIS_017_NF()); - execute(TC_MEC_MEC012_SRV_RNIS_018_OK()); - execute(TC_MEC_MEC012_SRV_RNIS_018_BR()); - execute(TC_MEC_MEC012_SRV_RNIS_018_NF()); - execute(TC_MEC_MEC012_SRV_RNIS_019_OK()); - execute(TC_MEC_MEC012_SRV_RNIS_019_BR()); - execute(TC_MEC_MEC012_SRV_RNIS_019_NF()); - } - }*/ - - if (PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED) { - execute(TC_MEC_MEC015_SRV_TM_001_OK()); - execute(TC_MEC_MEC015_SRV_TM_002_OK()); - execute(TC_MEC_MEC015_SRV_TM_002_BR()); - execute(TC_MEC_MEC015_SRV_TM_002_NF()); - } - } // End of 'control' statement - -} // End of module AtsMec_TestControl diff --git a/ttcn/AtsMec/AtsMec_FixedAccessInfo/module.mk b/ttcn/AtsMec/AtsMec_FixedAccessInfo/module.mk deleted file mode 100644 index 449db40..0000000 --- a/ttcn/AtsMec/AtsMec_FixedAccessInfo/module.mk +++ /dev/null @@ -1,48 +0,0 @@ -suite := AtsMec - -sources := \ - AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn \ - AtsMec_TrafficManagementAPI_TestCases.ttcn \ - AtsMec_MultiAccessSteeringInfoAPI_TestCases.ttcn \ - AtsMec_LocationAPI_TestCases.ttcn \ - AtsMec_RnisAPI_TestCases.ttcn \ - AtsMec_TestControl.ttcn \ - AtsMec_UEAppInterfaceAPI_TestCases.ttcn \ - AtsMec_UEidentityAPI_TestCases.ttcn \ - AtsMec_V2XInformationServiceAPI_TestCases.ttcn \ - AtsMec_DeviceApplicationInterfaceAPI_TestCases.ttcn \ - AtsMec_WlanInformationAPI_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/EdgePlatformApplicationEnablementAPI \ - ../LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI \ - ../LibMec/TrafficManagementAPI \ - ../LibMec/LocationAPI \ - ../LibMec/RnisAPI \ - ../LibMec/UEAppInterfaceAPI \ - ../LibMec/UEidentityAPI \ - ../LibMec/V2XInformationServiceAPI \ - ../LibMec/DeviceApplicationInterfaceAPI \ - ../LibMec/WlanInformationAPI \ - ../LibMec/ApplicationMobilityServiceAPI \ - ../LibMec/FixedAccessInformationAPI \ - ../../ccsrc/Ports/LibHttp \ - ../../ccsrc/EncDec/LibHttp \ - ../../ccsrc/EncDec/LibMec \ - ../../ccsrc/Framework \ - ../../ccsrc/externals \ - ../../ccsrc/loggers \ - ../../ccsrc/Protocols/ETH \ - ../../ccsrc/Protocols/Http \ - ../../ccsrc/Protocols/Json \ - ../../ccsrc/Protocols/Pcap \ - ../../ccsrc/Protocols/Tcp \ - ../modules/titan.TestPorts.Common_Components.Abstract_Socket \ - diff --git a/ttcn/AtsMec/AtsMec_LcRRm/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases.ttcn b/ttcn/AtsMec/AtsMec_LcRRm/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases.ttcn index 34b146f..3e2235a 100644 --- a/ttcn/AtsMec/AtsMec_LcRRm/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases.ttcn +++ b/ttcn/AtsMec/AtsMec_LcRRm/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases.ttcn @@ -12,7 +12,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // JSON - import from JSON all; + import from Json all; // Libcommon import from LibCommon_Sync all; diff --git a/ttcn/AtsMec/AtsMec_TrafficManagement/AtsMec_TrafficManagementAPI_TestControl.ttcn b/ttcn/AtsMec/AtsMec_TrafficManagement/AtsMec_TrafficManagementAPI_TestControl.ttcn deleted file mode 100644 index 4c74736..0000000 --- a/ttcn/AtsMec/AtsMec_TrafficManagement/AtsMec_TrafficManagementAPI_TestControl.ttcn +++ /dev/null @@ -1,126 +0,0 @@ -module AtsMec_TestControl { - - // LibMec/LocationAPI - import from LocationAPI_Pics all; - // LibMec/UEidentityAPI - import from UEidentityAPI_Pics all; - // LibMec/RnisAPI - import from RnisAPI_Pics all; - // LibMec/TrafficManagementAPI - import from TrafficManagementAPI_Pics all; - // LibMec/AppEnablementAPI - import from EdgePlatformApplicationEnablementAPI_Pics all; - // LibMec/UEAppInterfaceAPI - import from UEAppInterfaceAPI_Pics all; - - // LibMec - import from LibMec_Pics all; - - // AtsMec - import from AtsMec_LocationAPI_TestCases all; - import from AtsMec_UEidentityAPI_TestCases all; -// import from AtsMec_RadioNodeLocationAPI_TestCases all; - import from AtsMec_RnisAPI_TestCases all; - import from AtsMec_TrafficManagementAPI_TestCases all; - import from AtsMec_EdgePlatformApplicationEnablementAPI_TestCases all; - import from AtsMec_UEAppInterfaceAPI_TestCases all; - - control { - - if (PICS_MEC_PLAT and PICS_SERVICES) { - if (PICS_UE_IDENTITY_API_SUPPORTED) { - execute(TC_MEC_MEC014_SRV_UETAG_001_OK()); - execute(TC_MEC_MEC014_SRV_UETAG_001_BR()); - execute(TC_MEC_MEC014_SRV_UETAG_001_NF()); - execute(TC_MEC_MEC014_SRV_UETAG_002_OK()); - execute(TC_MEC_MEC014_SRV_UETAG_002_BR()); - execute(TC_MEC_MEC014_SRV_UETAG_002_PF()); - } - if (PICS_LOCATION_API_SUPPORTED) { - execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_OK()); - execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_BR()); - execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_NF()); - - execute(TC_MEC_MEC013_SRV_UELOCSUB_001_OK()); - execute(TC_MEC_MEC013_SRV_UELOCSUB_001_BR()); - execute(TC_MEC_MEC013_SRV_UELOCSUB_002_OK()); - execute(TC_MEC_MEC013_SRV_UELOCSUB_002_NF()); - - execute(TC_MEC_MEC013_SRV_UETRACKSUB_001_OK()); - execute(TC_MEC_MEC013_SRV_UETRACKSUB_001_BR()); - execute(TC_MEC_MEC013_SRV_UETRACKSUB_002_OK()); - execute(TC_MEC_MEC013_SRV_UETRACKSUB_002_NF()); - - execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_OK()); - execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_BR()); - execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_NF()); - - execute(TC_MEC_MEC013_SRV_UEINFSUB_001_OK()); - execute(TC_MEC_MEC013_SRV_UEINFSUB_001_BR()); - execute(TC_MEC_MEC013_SRV_UEINFSUB_002_OK()); - execute(TC_MEC_MEC013_SRV_UEINFSUB_002_NF()); - -// execute(TC_MEC_PLAT_RLOC_001_OK()); -// execute(TC_MEC_PLAT_RLOC_001_NF()); - } - - if (PICS_APP_ENABLEMENT_API_SUPPORTED) { - /*execute(TC_MEC_SRV_TRANS_001_OK()); - execute(TC_MEC_SRV_TRAF_001_OK()); - execute(TC_MEC_SRV_TRAF_002_OK()); - execute(TC_MEC_SRV_TRAF_003_OK()); - execute(TC_MEC_SRV_TRAF_001_NF());*/ - } - - if (PICS_ENABLE_UE_APP_CTX) { - execute(TC_MEC_MEC016_MEO_UEAPPCTX_001_OK()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_001_BR()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_OK()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_BR()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_NF()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_003_OK()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_003_NF()); - execute(TC_MEC_MEC016_MEO_UEAPPS_001_OK()); - execute(TC_MEC_MEC016_MEO_UEAPPS_001_BR()); - execute(TC_MEC_MEC016_MEO_UEAPPS_001_NF()); - } - } - - /*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()); - execute(TC_MEC_MEC012_SRV_RNIS_011_BR()); - execute(TC_MEC_MEC012_SRV_RNIS_012_BR()); - } - if (PICS_RNIS_QUERY) { - execute(TC_MEC_MEC012_SRV_RNIS_016_OK()); - execute(TC_MEC_MEC012_SRV_RNIS_016_BR()); - execute(TC_MEC_MEC012_SRV_RNIS_016_NF()); - execute(TC_MEC_MEC012_SRV_RNIS_017_OK()); - execute(TC_MEC_MEC012_SRV_RNIS_017_BR()); - execute(TC_MEC_MEC012_SRV_RNIS_017_NF()); - execute(TC_MEC_MEC012_SRV_RNIS_018_OK()); - execute(TC_MEC_MEC012_SRV_RNIS_018_BR()); - execute(TC_MEC_MEC012_SRV_RNIS_018_NF()); - execute(TC_MEC_MEC012_SRV_RNIS_019_OK()); - execute(TC_MEC_MEC012_SRV_RNIS_019_BR()); - execute(TC_MEC_MEC012_SRV_RNIS_019_NF()); - } - }*/ - - if (PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED) { - execute(TC_MEC_MEC015_SRV_TM_001_OK()); - execute(TC_MEC_MEC015_SRV_TM_002_OK()); - execute(TC_MEC_MEC015_SRV_TM_002_BR()); - execute(TC_MEC_MEC015_SRV_TM_002_NF()); - } - } // End of 'control' statement - -} // End of module AtsMec_TestControl diff --git a/ttcn/AtsMec/AtsMec_TrafficManagement/module.mk b/ttcn/AtsMec/AtsMec_TrafficManagement/module.mk deleted file mode 100644 index 449db40..0000000 --- a/ttcn/AtsMec/AtsMec_TrafficManagement/module.mk +++ /dev/null @@ -1,48 +0,0 @@ -suite := AtsMec - -sources := \ - AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn \ - AtsMec_TrafficManagementAPI_TestCases.ttcn \ - AtsMec_MultiAccessSteeringInfoAPI_TestCases.ttcn \ - AtsMec_LocationAPI_TestCases.ttcn \ - AtsMec_RnisAPI_TestCases.ttcn \ - AtsMec_TestControl.ttcn \ - AtsMec_UEAppInterfaceAPI_TestCases.ttcn \ - AtsMec_UEidentityAPI_TestCases.ttcn \ - AtsMec_V2XInformationServiceAPI_TestCases.ttcn \ - AtsMec_DeviceApplicationInterfaceAPI_TestCases.ttcn \ - AtsMec_WlanInformationAPI_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/EdgePlatformApplicationEnablementAPI \ - ../LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI \ - ../LibMec/TrafficManagementAPI \ - ../LibMec/LocationAPI \ - ../LibMec/RnisAPI \ - ../LibMec/UEAppInterfaceAPI \ - ../LibMec/UEidentityAPI \ - ../LibMec/V2XInformationServiceAPI \ - ../LibMec/DeviceApplicationInterfaceAPI \ - ../LibMec/WlanInformationAPI \ - ../LibMec/ApplicationMobilityServiceAPI \ - ../LibMec/FixedAccessInformationAPI \ - ../../ccsrc/Ports/LibHttp \ - ../../ccsrc/EncDec/LibHttp \ - ../../ccsrc/EncDec/LibMec \ - ../../ccsrc/Framework \ - ../../ccsrc/externals \ - ../../ccsrc/loggers \ - ../../ccsrc/Protocols/ETH \ - ../../ccsrc/Protocols/Http \ - ../../ccsrc/Protocols/Json \ - ../../ccsrc/Protocols/Pcap \ - ../../ccsrc/Protocols/Tcp \ - ../modules/titan.TestPorts.Common_Components.Abstract_Socket \ - diff --git a/ttcn/AtsMec/AtsMec_UEidentity/AtsMec_UEidentityAPI_TestControl.ttcn b/ttcn/AtsMec/AtsMec_UEidentity/AtsMec_UEidentityAPI_TestControl.ttcn deleted file mode 100644 index 4c74736..0000000 --- a/ttcn/AtsMec/AtsMec_UEidentity/AtsMec_UEidentityAPI_TestControl.ttcn +++ /dev/null @@ -1,126 +0,0 @@ -module AtsMec_TestControl { - - // LibMec/LocationAPI - import from LocationAPI_Pics all; - // LibMec/UEidentityAPI - import from UEidentityAPI_Pics all; - // LibMec/RnisAPI - import from RnisAPI_Pics all; - // LibMec/TrafficManagementAPI - import from TrafficManagementAPI_Pics all; - // LibMec/AppEnablementAPI - import from EdgePlatformApplicationEnablementAPI_Pics all; - // LibMec/UEAppInterfaceAPI - import from UEAppInterfaceAPI_Pics all; - - // LibMec - import from LibMec_Pics all; - - // AtsMec - import from AtsMec_LocationAPI_TestCases all; - import from AtsMec_UEidentityAPI_TestCases all; -// import from AtsMec_RadioNodeLocationAPI_TestCases all; - import from AtsMec_RnisAPI_TestCases all; - import from AtsMec_TrafficManagementAPI_TestCases all; - import from AtsMec_EdgePlatformApplicationEnablementAPI_TestCases all; - import from AtsMec_UEAppInterfaceAPI_TestCases all; - - control { - - if (PICS_MEC_PLAT and PICS_SERVICES) { - if (PICS_UE_IDENTITY_API_SUPPORTED) { - execute(TC_MEC_MEC014_SRV_UETAG_001_OK()); - execute(TC_MEC_MEC014_SRV_UETAG_001_BR()); - execute(TC_MEC_MEC014_SRV_UETAG_001_NF()); - execute(TC_MEC_MEC014_SRV_UETAG_002_OK()); - execute(TC_MEC_MEC014_SRV_UETAG_002_BR()); - execute(TC_MEC_MEC014_SRV_UETAG_002_PF()); - } - if (PICS_LOCATION_API_SUPPORTED) { - execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_OK()); - execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_BR()); - execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_NF()); - - execute(TC_MEC_MEC013_SRV_UELOCSUB_001_OK()); - execute(TC_MEC_MEC013_SRV_UELOCSUB_001_BR()); - execute(TC_MEC_MEC013_SRV_UELOCSUB_002_OK()); - execute(TC_MEC_MEC013_SRV_UELOCSUB_002_NF()); - - execute(TC_MEC_MEC013_SRV_UETRACKSUB_001_OK()); - execute(TC_MEC_MEC013_SRV_UETRACKSUB_001_BR()); - execute(TC_MEC_MEC013_SRV_UETRACKSUB_002_OK()); - execute(TC_MEC_MEC013_SRV_UETRACKSUB_002_NF()); - - execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_OK()); - execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_BR()); - execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_NF()); - - execute(TC_MEC_MEC013_SRV_UEINFSUB_001_OK()); - execute(TC_MEC_MEC013_SRV_UEINFSUB_001_BR()); - execute(TC_MEC_MEC013_SRV_UEINFSUB_002_OK()); - execute(TC_MEC_MEC013_SRV_UEINFSUB_002_NF()); - -// execute(TC_MEC_PLAT_RLOC_001_OK()); -// execute(TC_MEC_PLAT_RLOC_001_NF()); - } - - if (PICS_APP_ENABLEMENT_API_SUPPORTED) { - /*execute(TC_MEC_SRV_TRANS_001_OK()); - execute(TC_MEC_SRV_TRAF_001_OK()); - execute(TC_MEC_SRV_TRAF_002_OK()); - execute(TC_MEC_SRV_TRAF_003_OK()); - execute(TC_MEC_SRV_TRAF_001_NF());*/ - } - - if (PICS_ENABLE_UE_APP_CTX) { - execute(TC_MEC_MEC016_MEO_UEAPPCTX_001_OK()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_001_BR()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_OK()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_BR()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_NF()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_003_OK()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_003_NF()); - execute(TC_MEC_MEC016_MEO_UEAPPS_001_OK()); - execute(TC_MEC_MEC016_MEO_UEAPPS_001_BR()); - execute(TC_MEC_MEC016_MEO_UEAPPS_001_NF()); - } - } - - /*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()); - execute(TC_MEC_MEC012_SRV_RNIS_011_BR()); - execute(TC_MEC_MEC012_SRV_RNIS_012_BR()); - } - if (PICS_RNIS_QUERY) { - execute(TC_MEC_MEC012_SRV_RNIS_016_OK()); - execute(TC_MEC_MEC012_SRV_RNIS_016_BR()); - execute(TC_MEC_MEC012_SRV_RNIS_016_NF()); - execute(TC_MEC_MEC012_SRV_RNIS_017_OK()); - execute(TC_MEC_MEC012_SRV_RNIS_017_BR()); - execute(TC_MEC_MEC012_SRV_RNIS_017_NF()); - execute(TC_MEC_MEC012_SRV_RNIS_018_OK()); - execute(TC_MEC_MEC012_SRV_RNIS_018_BR()); - execute(TC_MEC_MEC012_SRV_RNIS_018_NF()); - execute(TC_MEC_MEC012_SRV_RNIS_019_OK()); - execute(TC_MEC_MEC012_SRV_RNIS_019_BR()); - execute(TC_MEC_MEC012_SRV_RNIS_019_NF()); - } - }*/ - - if (PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED) { - execute(TC_MEC_MEC015_SRV_TM_001_OK()); - execute(TC_MEC_MEC015_SRV_TM_002_OK()); - execute(TC_MEC_MEC015_SRV_TM_002_BR()); - execute(TC_MEC_MEC015_SRV_TM_002_NF()); - } - } // End of 'control' statement - -} // End of module AtsMec_TestControl diff --git a/ttcn/AtsMec/AtsMec_UEidentity/module.mk b/ttcn/AtsMec/AtsMec_UEidentity/module.mk deleted file mode 100644 index 449db40..0000000 --- a/ttcn/AtsMec/AtsMec_UEidentity/module.mk +++ /dev/null @@ -1,48 +0,0 @@ -suite := AtsMec - -sources := \ - AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn \ - AtsMec_TrafficManagementAPI_TestCases.ttcn \ - AtsMec_MultiAccessSteeringInfoAPI_TestCases.ttcn \ - AtsMec_LocationAPI_TestCases.ttcn \ - AtsMec_RnisAPI_TestCases.ttcn \ - AtsMec_TestControl.ttcn \ - AtsMec_UEAppInterfaceAPI_TestCases.ttcn \ - AtsMec_UEidentityAPI_TestCases.ttcn \ - AtsMec_V2XInformationServiceAPI_TestCases.ttcn \ - AtsMec_DeviceApplicationInterfaceAPI_TestCases.ttcn \ - AtsMec_WlanInformationAPI_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/EdgePlatformApplicationEnablementAPI \ - ../LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI \ - ../LibMec/TrafficManagementAPI \ - ../LibMec/LocationAPI \ - ../LibMec/RnisAPI \ - ../LibMec/UEAppInterfaceAPI \ - ../LibMec/UEidentityAPI \ - ../LibMec/V2XInformationServiceAPI \ - ../LibMec/DeviceApplicationInterfaceAPI \ - ../LibMec/WlanInformationAPI \ - ../LibMec/ApplicationMobilityServiceAPI \ - ../LibMec/FixedAccessInformationAPI \ - ../../ccsrc/Ports/LibHttp \ - ../../ccsrc/EncDec/LibHttp \ - ../../ccsrc/EncDec/LibMec \ - ../../ccsrc/Framework \ - ../../ccsrc/externals \ - ../../ccsrc/loggers \ - ../../ccsrc/Protocols/ETH \ - ../../ccsrc/Protocols/Http \ - ../../ccsrc/Protocols/Json \ - ../../ccsrc/Protocols/Pcap \ - ../../ccsrc/Protocols/Tcp \ - ../modules/titan.TestPorts.Common_Components.Abstract_Socket \ - diff --git a/ttcn/AtsMec/AtsMec_V2x/AtsMec_V2XInformationServiceAPI_TestControl.ttcn b/ttcn/AtsMec/AtsMec_V2x/AtsMec_V2XInformationServiceAPI_TestControl.ttcn deleted file mode 100644 index 4c74736..0000000 --- a/ttcn/AtsMec/AtsMec_V2x/AtsMec_V2XInformationServiceAPI_TestControl.ttcn +++ /dev/null @@ -1,126 +0,0 @@ -module AtsMec_TestControl { - - // LibMec/LocationAPI - import from LocationAPI_Pics all; - // LibMec/UEidentityAPI - import from UEidentityAPI_Pics all; - // LibMec/RnisAPI - import from RnisAPI_Pics all; - // LibMec/TrafficManagementAPI - import from TrafficManagementAPI_Pics all; - // LibMec/AppEnablementAPI - import from EdgePlatformApplicationEnablementAPI_Pics all; - // LibMec/UEAppInterfaceAPI - import from UEAppInterfaceAPI_Pics all; - - // LibMec - import from LibMec_Pics all; - - // AtsMec - import from AtsMec_LocationAPI_TestCases all; - import from AtsMec_UEidentityAPI_TestCases all; -// import from AtsMec_RadioNodeLocationAPI_TestCases all; - import from AtsMec_RnisAPI_TestCases all; - import from AtsMec_TrafficManagementAPI_TestCases all; - import from AtsMec_EdgePlatformApplicationEnablementAPI_TestCases all; - import from AtsMec_UEAppInterfaceAPI_TestCases all; - - control { - - if (PICS_MEC_PLAT and PICS_SERVICES) { - if (PICS_UE_IDENTITY_API_SUPPORTED) { - execute(TC_MEC_MEC014_SRV_UETAG_001_OK()); - execute(TC_MEC_MEC014_SRV_UETAG_001_BR()); - execute(TC_MEC_MEC014_SRV_UETAG_001_NF()); - execute(TC_MEC_MEC014_SRV_UETAG_002_OK()); - execute(TC_MEC_MEC014_SRV_UETAG_002_BR()); - execute(TC_MEC_MEC014_SRV_UETAG_002_PF()); - } - if (PICS_LOCATION_API_SUPPORTED) { - execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_OK()); - execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_BR()); - execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_NF()); - - execute(TC_MEC_MEC013_SRV_UELOCSUB_001_OK()); - execute(TC_MEC_MEC013_SRV_UELOCSUB_001_BR()); - execute(TC_MEC_MEC013_SRV_UELOCSUB_002_OK()); - execute(TC_MEC_MEC013_SRV_UELOCSUB_002_NF()); - - execute(TC_MEC_MEC013_SRV_UETRACKSUB_001_OK()); - execute(TC_MEC_MEC013_SRV_UETRACKSUB_001_BR()); - execute(TC_MEC_MEC013_SRV_UETRACKSUB_002_OK()); - execute(TC_MEC_MEC013_SRV_UETRACKSUB_002_NF()); - - execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_OK()); - execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_BR()); - execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_NF()); - - execute(TC_MEC_MEC013_SRV_UEINFSUB_001_OK()); - execute(TC_MEC_MEC013_SRV_UEINFSUB_001_BR()); - execute(TC_MEC_MEC013_SRV_UEINFSUB_002_OK()); - execute(TC_MEC_MEC013_SRV_UEINFSUB_002_NF()); - -// execute(TC_MEC_PLAT_RLOC_001_OK()); -// execute(TC_MEC_PLAT_RLOC_001_NF()); - } - - if (PICS_APP_ENABLEMENT_API_SUPPORTED) { - /*execute(TC_MEC_SRV_TRANS_001_OK()); - execute(TC_MEC_SRV_TRAF_001_OK()); - execute(TC_MEC_SRV_TRAF_002_OK()); - execute(TC_MEC_SRV_TRAF_003_OK()); - execute(TC_MEC_SRV_TRAF_001_NF());*/ - } - - if (PICS_ENABLE_UE_APP_CTX) { - execute(TC_MEC_MEC016_MEO_UEAPPCTX_001_OK()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_001_BR()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_OK()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_BR()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_NF()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_003_OK()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_003_NF()); - execute(TC_MEC_MEC016_MEO_UEAPPS_001_OK()); - execute(TC_MEC_MEC016_MEO_UEAPPS_001_BR()); - execute(TC_MEC_MEC016_MEO_UEAPPS_001_NF()); - } - } - - /*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()); - execute(TC_MEC_MEC012_SRV_RNIS_011_BR()); - execute(TC_MEC_MEC012_SRV_RNIS_012_BR()); - } - if (PICS_RNIS_QUERY) { - execute(TC_MEC_MEC012_SRV_RNIS_016_OK()); - execute(TC_MEC_MEC012_SRV_RNIS_016_BR()); - execute(TC_MEC_MEC012_SRV_RNIS_016_NF()); - execute(TC_MEC_MEC012_SRV_RNIS_017_OK()); - execute(TC_MEC_MEC012_SRV_RNIS_017_BR()); - execute(TC_MEC_MEC012_SRV_RNIS_017_NF()); - execute(TC_MEC_MEC012_SRV_RNIS_018_OK()); - execute(TC_MEC_MEC012_SRV_RNIS_018_BR()); - execute(TC_MEC_MEC012_SRV_RNIS_018_NF()); - execute(TC_MEC_MEC012_SRV_RNIS_019_OK()); - execute(TC_MEC_MEC012_SRV_RNIS_019_BR()); - execute(TC_MEC_MEC012_SRV_RNIS_019_NF()); - } - }*/ - - if (PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED) { - execute(TC_MEC_MEC015_SRV_TM_001_OK()); - execute(TC_MEC_MEC015_SRV_TM_002_OK()); - execute(TC_MEC_MEC015_SRV_TM_002_BR()); - execute(TC_MEC_MEC015_SRV_TM_002_NF()); - } - } // End of 'control' statement - -} // End of module AtsMec_TestControl diff --git a/ttcn/AtsMec/AtsMec_V2x/module.mk b/ttcn/AtsMec/AtsMec_V2x/module.mk deleted file mode 100644 index 449db40..0000000 --- a/ttcn/AtsMec/AtsMec_V2x/module.mk +++ /dev/null @@ -1,48 +0,0 @@ -suite := AtsMec - -sources := \ - AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn \ - AtsMec_TrafficManagementAPI_TestCases.ttcn \ - AtsMec_MultiAccessSteeringInfoAPI_TestCases.ttcn \ - AtsMec_LocationAPI_TestCases.ttcn \ - AtsMec_RnisAPI_TestCases.ttcn \ - AtsMec_TestControl.ttcn \ - AtsMec_UEAppInterfaceAPI_TestCases.ttcn \ - AtsMec_UEidentityAPI_TestCases.ttcn \ - AtsMec_V2XInformationServiceAPI_TestCases.ttcn \ - AtsMec_DeviceApplicationInterfaceAPI_TestCases.ttcn \ - AtsMec_WlanInformationAPI_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/EdgePlatformApplicationEnablementAPI \ - ../LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI \ - ../LibMec/TrafficManagementAPI \ - ../LibMec/LocationAPI \ - ../LibMec/RnisAPI \ - ../LibMec/UEAppInterfaceAPI \ - ../LibMec/UEidentityAPI \ - ../LibMec/V2XInformationServiceAPI \ - ../LibMec/DeviceApplicationInterfaceAPI \ - ../LibMec/WlanInformationAPI \ - ../LibMec/ApplicationMobilityServiceAPI \ - ../LibMec/FixedAccessInformationAPI \ - ../../ccsrc/Ports/LibHttp \ - ../../ccsrc/EncDec/LibHttp \ - ../../ccsrc/EncDec/LibMec \ - ../../ccsrc/Framework \ - ../../ccsrc/externals \ - ../../ccsrc/loggers \ - ../../ccsrc/Protocols/ETH \ - ../../ccsrc/Protocols/Http \ - ../../ccsrc/Protocols/Json \ - ../../ccsrc/Protocols/Pcap \ - ../../ccsrc/Protocols/Tcp \ - ../modules/titan.TestPorts.Common_Components.Abstract_Socket \ - diff --git a/ttcn/AtsMec/AtsMec_Wlan/AtsMec_WlanInformationAPI_TestControl.ttcn b/ttcn/AtsMec/AtsMec_Wlan/AtsMec_WlanInformationAPI_TestControl.ttcn deleted file mode 100644 index 4c74736..0000000 --- a/ttcn/AtsMec/AtsMec_Wlan/AtsMec_WlanInformationAPI_TestControl.ttcn +++ /dev/null @@ -1,126 +0,0 @@ -module AtsMec_TestControl { - - // LibMec/LocationAPI - import from LocationAPI_Pics all; - // LibMec/UEidentityAPI - import from UEidentityAPI_Pics all; - // LibMec/RnisAPI - import from RnisAPI_Pics all; - // LibMec/TrafficManagementAPI - import from TrafficManagementAPI_Pics all; - // LibMec/AppEnablementAPI - import from EdgePlatformApplicationEnablementAPI_Pics all; - // LibMec/UEAppInterfaceAPI - import from UEAppInterfaceAPI_Pics all; - - // LibMec - import from LibMec_Pics all; - - // AtsMec - import from AtsMec_LocationAPI_TestCases all; - import from AtsMec_UEidentityAPI_TestCases all; -// import from AtsMec_RadioNodeLocationAPI_TestCases all; - import from AtsMec_RnisAPI_TestCases all; - import from AtsMec_TrafficManagementAPI_TestCases all; - import from AtsMec_EdgePlatformApplicationEnablementAPI_TestCases all; - import from AtsMec_UEAppInterfaceAPI_TestCases all; - - control { - - if (PICS_MEC_PLAT and PICS_SERVICES) { - if (PICS_UE_IDENTITY_API_SUPPORTED) { - execute(TC_MEC_MEC014_SRV_UETAG_001_OK()); - execute(TC_MEC_MEC014_SRV_UETAG_001_BR()); - execute(TC_MEC_MEC014_SRV_UETAG_001_NF()); - execute(TC_MEC_MEC014_SRV_UETAG_002_OK()); - execute(TC_MEC_MEC014_SRV_UETAG_002_BR()); - execute(TC_MEC_MEC014_SRV_UETAG_002_PF()); - } - if (PICS_LOCATION_API_SUPPORTED) { - execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_OK()); - execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_BR()); - execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_NF()); - - execute(TC_MEC_MEC013_SRV_UELOCSUB_001_OK()); - execute(TC_MEC_MEC013_SRV_UELOCSUB_001_BR()); - execute(TC_MEC_MEC013_SRV_UELOCSUB_002_OK()); - execute(TC_MEC_MEC013_SRV_UELOCSUB_002_NF()); - - execute(TC_MEC_MEC013_SRV_UETRACKSUB_001_OK()); - execute(TC_MEC_MEC013_SRV_UETRACKSUB_001_BR()); - execute(TC_MEC_MEC013_SRV_UETRACKSUB_002_OK()); - execute(TC_MEC_MEC013_SRV_UETRACKSUB_002_NF()); - - execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_OK()); - execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_BR()); - execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_NF()); - - execute(TC_MEC_MEC013_SRV_UEINFSUB_001_OK()); - execute(TC_MEC_MEC013_SRV_UEINFSUB_001_BR()); - execute(TC_MEC_MEC013_SRV_UEINFSUB_002_OK()); - execute(TC_MEC_MEC013_SRV_UEINFSUB_002_NF()); - -// execute(TC_MEC_PLAT_RLOC_001_OK()); -// execute(TC_MEC_PLAT_RLOC_001_NF()); - } - - if (PICS_APP_ENABLEMENT_API_SUPPORTED) { - /*execute(TC_MEC_SRV_TRANS_001_OK()); - execute(TC_MEC_SRV_TRAF_001_OK()); - execute(TC_MEC_SRV_TRAF_002_OK()); - execute(TC_MEC_SRV_TRAF_003_OK()); - execute(TC_MEC_SRV_TRAF_001_NF());*/ - } - - if (PICS_ENABLE_UE_APP_CTX) { - execute(TC_MEC_MEC016_MEO_UEAPPCTX_001_OK()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_001_BR()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_OK()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_BR()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_NF()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_003_OK()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_003_NF()); - execute(TC_MEC_MEC016_MEO_UEAPPS_001_OK()); - execute(TC_MEC_MEC016_MEO_UEAPPS_001_BR()); - execute(TC_MEC_MEC016_MEO_UEAPPS_001_NF()); - } - } - - /*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()); - execute(TC_MEC_MEC012_SRV_RNIS_011_BR()); - execute(TC_MEC_MEC012_SRV_RNIS_012_BR()); - } - if (PICS_RNIS_QUERY) { - execute(TC_MEC_MEC012_SRV_RNIS_016_OK()); - execute(TC_MEC_MEC012_SRV_RNIS_016_BR()); - execute(TC_MEC_MEC012_SRV_RNIS_016_NF()); - execute(TC_MEC_MEC012_SRV_RNIS_017_OK()); - execute(TC_MEC_MEC012_SRV_RNIS_017_BR()); - execute(TC_MEC_MEC012_SRV_RNIS_017_NF()); - execute(TC_MEC_MEC012_SRV_RNIS_018_OK()); - execute(TC_MEC_MEC012_SRV_RNIS_018_BR()); - execute(TC_MEC_MEC012_SRV_RNIS_018_NF()); - execute(TC_MEC_MEC012_SRV_RNIS_019_OK()); - execute(TC_MEC_MEC012_SRV_RNIS_019_BR()); - execute(TC_MEC_MEC012_SRV_RNIS_019_NF()); - } - }*/ - - if (PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED) { - execute(TC_MEC_MEC015_SRV_TM_001_OK()); - execute(TC_MEC_MEC015_SRV_TM_002_OK()); - execute(TC_MEC_MEC015_SRV_TM_002_BR()); - execute(TC_MEC_MEC015_SRV_TM_002_NF()); - } - } // End of 'control' statement - -} // End of module AtsMec_TestControl diff --git a/ttcn/AtsMec/AtsMec_Wlan/module.mk b/ttcn/AtsMec/AtsMec_Wlan/module.mk deleted file mode 100644 index 449db40..0000000 --- a/ttcn/AtsMec/AtsMec_Wlan/module.mk +++ /dev/null @@ -1,48 +0,0 @@ -suite := AtsMec - -sources := \ - AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn \ - AtsMec_TrafficManagementAPI_TestCases.ttcn \ - AtsMec_MultiAccessSteeringInfoAPI_TestCases.ttcn \ - AtsMec_LocationAPI_TestCases.ttcn \ - AtsMec_RnisAPI_TestCases.ttcn \ - AtsMec_TestControl.ttcn \ - AtsMec_UEAppInterfaceAPI_TestCases.ttcn \ - AtsMec_UEidentityAPI_TestCases.ttcn \ - AtsMec_V2XInformationServiceAPI_TestCases.ttcn \ - AtsMec_DeviceApplicationInterfaceAPI_TestCases.ttcn \ - AtsMec_WlanInformationAPI_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/EdgePlatformApplicationEnablementAPI \ - ../LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI \ - ../LibMec/TrafficManagementAPI \ - ../LibMec/LocationAPI \ - ../LibMec/RnisAPI \ - ../LibMec/UEAppInterfaceAPI \ - ../LibMec/UEidentityAPI \ - ../LibMec/V2XInformationServiceAPI \ - ../LibMec/DeviceApplicationInterfaceAPI \ - ../LibMec/WlanInformationAPI \ - ../LibMec/ApplicationMobilityServiceAPI \ - ../LibMec/FixedAccessInformationAPI \ - ../../ccsrc/Ports/LibHttp \ - ../../ccsrc/EncDec/LibHttp \ - ../../ccsrc/EncDec/LibMec \ - ../../ccsrc/Framework \ - ../../ccsrc/externals \ - ../../ccsrc/loggers \ - ../../ccsrc/Protocols/ETH \ - ../../ccsrc/Protocols/Http \ - ../../ccsrc/Protocols/Json \ - ../../ccsrc/Protocols/Pcap \ - ../../ccsrc/Protocols/Tcp \ - ../modules/titan.TestPorts.Common_Components.Abstract_Socket \ - diff --git a/ttcn/AtsMec/AtsMec_FixedAccessInfo/AtsMec_FixedAccessInfoAPI_TestCases.ttcn b/ttcn/AtsMec_FixedAccessInformationService/AtsMec_FixedAccessInformationServiceAPI_TestCases.ttcn similarity index 97% rename from ttcn/AtsMec/AtsMec_FixedAccessInfo/AtsMec_FixedAccessInfoAPI_TestCases.ttcn rename to ttcn/AtsMec_FixedAccessInformationService/AtsMec_FixedAccessInformationServiceAPI_TestCases.ttcn index 45ae338..8655817 100644 --- a/ttcn/AtsMec/AtsMec_FixedAccessInfo/AtsMec_FixedAccessInfoAPI_TestCases.ttcn +++ b/ttcn/AtsMec_FixedAccessInformationService/AtsMec_FixedAccessInformationServiceAPI_TestCases.ttcn @@ -9,7 +9,7 @@ * All rights reserved. * @see ETSI GS MEC 003, ETSI GS MEC 029 V2.1.1 */ -module AtsMec_FixedAccessInformationAPI_TestCases { +module AtsMec_FixedAccessInformationServiceAPI_TestCases { // Libcommon import from LibCommon_Time all; @@ -52,6 +52,34 @@ module AtsMec_FixedAccessInformationAPI_TestCases { setverdict(inconc); stop; } + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PX_FAI_FA_INFO_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_fai_fa_info( + mw_fa_info + ))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a FaInfo ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } [] tc_ac.timeout { log("*** " & testcasename() & ": INCONC: Expected message not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); @@ -1605,5 +1633,5 @@ module AtsMec_FixedAccessInformationAPI_TestCases { } // End of group fixedAccessInfoService -} // End of module AtsMec_FixedAccessInfoAPI_TestCases +} // End of module AtsMec_FixedAccessInformationServiceAPI_TestCases diff --git a/ttcn/AtsMec_FixedAccessInformationService/AtsMec_FixedAccessInformationServiceAPI_TestControl.ttcn b/ttcn/AtsMec_FixedAccessInformationService/AtsMec_FixedAccessInformationServiceAPI_TestControl.ttcn new file mode 100644 index 0000000..8aba18e --- /dev/null +++ b/ttcn/AtsMec_FixedAccessInformationService/AtsMec_FixedAccessInformationServiceAPI_TestControl.ttcn @@ -0,0 +1,19 @@ +module AtsMec_FixedAccessInformationServiceAPI_TestControl { + + // LibMec/FixedAccessInformationAPI + import from FixedAccessInformationServiceAPI_Pics all; + + // LibMec + import from LibMec_Pics all; + + // AtsMec_FixedAccessInfoAPI + import from AtsMec_FixedAccessInformationServiceAPI_TestCases all; + + control { + + if (PICS_MEC_PLAT and PICS_FAI_API_SUPPORTED) { + execute(TP_MEC_MEC029_SRV_FAIS_001_OK()); + } + } // End of 'control' statement + +} // End of module AtsMec_FixedAccessInformationServiceAPI_TestControl diff --git a/ttcn/AtsMec_FixedAccessInformationService/module.mk b/ttcn/AtsMec_FixedAccessInformationService/module.mk new file mode 100644 index 0000000..0d841e4 --- /dev/null +++ b/ttcn/AtsMec_FixedAccessInformationService/module.mk @@ -0,0 +1,36 @@ +suite := AtsMec_FixedAccessInfo + +sources := \ + AtsMec_FixedAccessInformationServiceAPI_TestCases.ttcn \ + AtsMec_FixedAccessInformationServiceAPI_TestControl.ttcn + +modules := ../LibCommon \ + ../../titan-test-system-framework/ttcn/LibHelpers \ + ../../titan-test-system-framework/ttcn/LibHttp \ + ../../titan-test-system-framework/ttcn/LibJson \ + ../patch_lib_http \ + ../LibMec \ + ../LibMec/LocationAPI \ + ../LibMec/EdgePlatformApplicationEnablementAPI \ + ../LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI \ + ../LibMec/TrafficManagementAPI \ + ../LibMec/RnisAPI \ + ../LibMec/UEAppInterfaceAPI \ + ../LibMec/UEidentityAPI \ + ../LibMec/V2XInformationServiceAPI \ + ../LibMec/DeviceApplicationInterfaceAPI \ + ../LibMec/WlanInformationAPI \ + ../LibMec/FixedAccessInformationServiceAPI \ + ../LibMec/ApplicationMobilityServiceAPI \ + ../../titan-test-system-framework/ccsrc/Framework \ + ../../titan-test-system-framework/ccsrc/loggers \ + ../../titan-test-system-framework/ccsrc/Protocols/Http \ + ../../titan-test-system-framework/ccsrc/Protocols/Tcp \ + ../../titan-test-system-framework/ccsrc/Helpers \ + ../../ccsrc/Ports/LibHttp \ + ../../ccsrc/EncDec/LibMec \ + ../../ccsrc/externals \ + ../../ccsrc/Protocols/Http \ + ../../ccsrc/Protocols/Json \ + ../modules/titan.TestPorts.Common_Components.Abstract_Socket \ + diff --git a/ttcn/AtsMec_Location/module.mk b/ttcn/AtsMec_Location/module.mk index 51cca8a..f40c553 100644 --- a/ttcn/AtsMec_Location/module.mk +++ b/ttcn/AtsMec_Location/module.mk @@ -2,11 +2,12 @@ suite := AtsMec_Location sources := \ AtsMec_LocationAPI_TestCases.ttcn \ - AtsMec_LocationAPI_TestControl.ttcn + AtsMec_LocationAPI_TestControl.ttcn modules := ../LibCommon \ ../../titan-test-system-framework/ttcn/LibHelpers \ ../../titan-test-system-framework/ttcn/LibHttp \ + ../../titan-test-system-framework/ttcn/LibJson \ ../patch_lib_http \ ../LibMec \ ../LibMec/LocationAPI \ @@ -19,6 +20,7 @@ modules := ../LibCommon \ ../LibMec/V2XInformationServiceAPI \ ../LibMec/DeviceApplicationInterfaceAPI \ ../LibMec/WlanInformationAPI \ + ../LibMec/FixedAccessInformationServiceAPI \ ../LibMec/ApplicationMobilityServiceAPI \ ../../titan-test-system-framework/ccsrc/Framework \ ../../titan-test-system-framework/ccsrc/loggers \ diff --git a/ttcn/AtsMec_Rnis/module.mk b/ttcn/AtsMec_Rnis/module.mk index bd30bc3..79f94ad 100644 --- a/ttcn/AtsMec_Rnis/module.mk +++ b/ttcn/AtsMec_Rnis/module.mk @@ -8,6 +8,7 @@ sources := \ modules := ../LibCommon \ ../../titan-test-system-framework/ttcn/LibHelpers \ ../../titan-test-system-framework/ttcn/LibHttp \ + ../../titan-test-system-framework/ttcn/LibJson \ ../patch_lib_http \ ../LibMec \ ../LibMec/EdgePlatformApplicationEnablementAPI \ @@ -20,6 +21,7 @@ modules := ../LibCommon \ ../LibMec/V2XInformationServiceAPI \ ../LibMec/DeviceApplicationInterfaceAPI \ ../LibMec/WlanInformationAPI \ + ../LibMec/FixedAccessInformationServiceAPI \ ../LibMec/ApplicationMobilityServiceAPI \ ../LibMec/FixedAccessInformationAPI \ ../../titan-test-system-framework/ccsrc/Framework \ diff --git a/ttcn/AtsMec/AtsMec_TrafficManagement/AtsMec_MultiAccessSteeringInfoAPI_TestCases.ttcn b/ttcn/AtsMec_TrafficManagement/AtsMec_MultiAccessSteeringInfoAPI_TestCases.ttcn similarity index 99% rename from ttcn/AtsMec/AtsMec_TrafficManagement/AtsMec_MultiAccessSteeringInfoAPI_TestCases.ttcn rename to ttcn/AtsMec_TrafficManagement/AtsMec_MultiAccessSteeringInfoAPI_TestCases.ttcn index e9021ce..03ec397 100644 --- a/ttcn/AtsMec/AtsMec_TrafficManagement/AtsMec_MultiAccessSteeringInfoAPI_TestCases.ttcn +++ b/ttcn/AtsMec_TrafficManagement/AtsMec_MultiAccessSteeringInfoAPI_TestCases.ttcn @@ -12,7 +12,7 @@ module AtsMec_MultiAccessSteeringInfoAPI_TestCases { // JSON - import from JSON all; + import from Json all; // Libcommon import from LibCommon_Time all; @@ -449,7 +449,7 @@ module AtsMec_MultiAccessSteeringInfoAPI_TestCases { var HttpMessage v_response; var charstring v_mts_session_id; var MtsSessionInfo v_mts_session_info; - var JSON.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("001")); + var Json.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("001")); // Test control if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { @@ -517,7 +517,7 @@ module AtsMec_MultiAccessSteeringInfoAPI_TestCases { var Headers v_headers; var charstring v_mts_session_id; var MtsSessionInfo v_mts_session_info; - var JSON.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("001")); + var Json.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("001")); // Test control if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { @@ -580,7 +580,7 @@ module AtsMec_MultiAccessSteeringInfoAPI_TestCases { var HttpMessage v_response; var charstring v_mts_session_id; var MtsSessionInfo v_mts_session_info; - var JSON.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("002")); + var Json.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("002")); // Test control if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { @@ -675,7 +675,7 @@ module AtsMec_MultiAccessSteeringInfoAPI_TestCases { var Headers v_headers; var charstring v_mts_session_id; var MtsSessionInfo v_mts_session_info; - var JSON.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("002")); + var Json.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("002")); // Test control if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { @@ -758,7 +758,7 @@ module AtsMec_MultiAccessSteeringInfoAPI_TestCases { testcase TC_MEC_MEC015_SRV_MTS_005_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; - var JSON.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("003")); + var Json.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("003")); // Test control if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { @@ -837,7 +837,7 @@ module AtsMec_MultiAccessSteeringInfoAPI_TestCases { var Headers v_headers; var charstring v_mts_session_id; var MtsSessionInfo v_mts_session_info; - var JSON.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("005")); + var Json.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("005")); // Test control if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { @@ -900,7 +900,7 @@ module AtsMec_MultiAccessSteeringInfoAPI_TestCases { var Headers v_headers; var charstring v_mts_session_id; var MtsSessionInfo v_mts_session_info; - var JSON.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("005")); + var Json.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("005")); // Test control if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { @@ -963,7 +963,7 @@ module AtsMec_MultiAccessSteeringInfoAPI_TestCases { var Headers v_headers; var charstring v_mts_session_id; var MtsSessionInfo v_mts_session_info; - var JSON.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("005")); + var Json.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("005")); // Test control if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { diff --git a/ttcn/AtsMec/AtsMec_TrafficManagement/AtsMec_TrafficManagementAPI_TestCases.ttcn b/ttcn/AtsMec_TrafficManagement/AtsMec_TrafficManagementAPI_TestCases.ttcn similarity index 99% rename from ttcn/AtsMec/AtsMec_TrafficManagement/AtsMec_TrafficManagementAPI_TestCases.ttcn rename to ttcn/AtsMec_TrafficManagement/AtsMec_TrafficManagementAPI_TestCases.ttcn index 920a31c..2d66097 100644 --- a/ttcn/AtsMec/AtsMec_TrafficManagement/AtsMec_TrafficManagementAPI_TestCases.ttcn +++ b/ttcn/AtsMec_TrafficManagement/AtsMec_TrafficManagementAPI_TestCases.ttcn @@ -12,7 +12,7 @@ module AtsMec_TrafficManagementAPI_TestCases { // JSON - import from JSON all; + import from Json all; // Libcommon import from LibCommon_Time all; @@ -286,7 +286,7 @@ module AtsMec_TrafficManagementAPI_TestCases { // Local variables var Headers v_headers; var HttpMessage v_response; - var JSON.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("001")); + var Json.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("001")); // Test control if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { @@ -364,7 +364,7 @@ module AtsMec_TrafficManagementAPI_TestCases { // Local variables var Headers v_headers; var HttpMessage v_response; - var JSON.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("002")); + var Json.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("002")); // Test control if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { @@ -659,7 +659,7 @@ module AtsMec_TrafficManagementAPI_TestCases { var HttpMessage v_response; var charstring v_bw_allocation_id; var BwInfo v_bw_info; - var JSON.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("001")); + var Json.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("001")); // Test control if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { @@ -727,7 +727,7 @@ module AtsMec_TrafficManagementAPI_TestCases { var Headers v_headers; var charstring v_bw_allocation_id; var BwInfo v_bw_info; - var JSON.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("001")); + var Json.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("001")); // Test control if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { @@ -790,7 +790,7 @@ module AtsMec_TrafficManagementAPI_TestCases { var HttpMessage v_response; var charstring v_bw_allocation_id; var BwInfo v_bw_info; - var JSON.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("002")); + var Json.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("002")); // Test control if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { @@ -871,7 +871,7 @@ module AtsMec_TrafficManagementAPI_TestCases { var Headers v_headers; var charstring v_bw_allocation_id; var BwInfo v_bw_info; - var JSON.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("002")); + var Json.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("002")); // Test control if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { @@ -947,7 +947,7 @@ module AtsMec_TrafficManagementAPI_TestCases { testcase TC_MEC_MEC015_SRV_TM_005_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; - var JSON.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("003")); + var Json.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("003")); // Test control if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { @@ -1020,7 +1020,7 @@ module AtsMec_TrafficManagementAPI_TestCases { var HttpMessage v_response; var charstring v_bw_allocation_id; var BwInfo v_bw_info; - var JSON.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("004")); + var Json.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("004")); // Test control if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { @@ -1101,7 +1101,7 @@ module AtsMec_TrafficManagementAPI_TestCases { var Headers v_headers; var charstring v_bw_allocation_id; var BwInfo v_bw_info; - var JSON.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("004")); + var Json.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("004")); // Test control if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { @@ -1179,7 +1179,7 @@ module AtsMec_TrafficManagementAPI_TestCases { var Headers v_headers; var charstring v_bw_allocation_id; var BwInfo v_bw_info; - var JSON.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("004")); + var Json.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("004")); // Test control if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { @@ -1251,7 +1251,7 @@ module AtsMec_TrafficManagementAPI_TestCases { var Headers v_headers; var charstring v_bw_allocation_id; var BwInfo v_bw_info; - var JSON.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("005")); + var Json.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("005")); // Test control if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { diff --git a/ttcn/AtsMec_TrafficManagement/AtsMec_TrafficManagementAPI_TestControl.ttcn b/ttcn/AtsMec_TrafficManagement/AtsMec_TrafficManagementAPI_TestControl.ttcn new file mode 100644 index 0000000..430b965 --- /dev/null +++ b/ttcn/AtsMec_TrafficManagement/AtsMec_TrafficManagementAPI_TestControl.ttcn @@ -0,0 +1,22 @@ +module AtsMec_TrafficManagementAPI_TestControl { + + // LibMec/TrafficManagementAPI + import from TrafficManagementAPI_Pics all; + + // LibMec + import from LibMec_Pics all; + + // AtsMec + import from AtsMec_TrafficManagementAPI_TestCases all; + + control { + + if (PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED) { + execute(TC_MEC_MEC015_SRV_TM_001_OK()); + execute(TC_MEC_MEC015_SRV_TM_002_OK()); + execute(TC_MEC_MEC015_SRV_TM_002_BR()); + execute(TC_MEC_MEC015_SRV_TM_002_NF()); + } + } // End of 'control' statement + +} // End of module AtsMec_TrafficManagementAPI_TestControl diff --git a/ttcn/AtsMec_TrafficManagement/module.mk b/ttcn/AtsMec_TrafficManagement/module.mk new file mode 100644 index 0000000..0fce725 --- /dev/null +++ b/ttcn/AtsMec_TrafficManagement/module.mk @@ -0,0 +1,36 @@ +suite := AtsMec_TrafficManagement + +sources := \ + AtsMec_TrafficManagementAPI_TestCases.ttcn \ + AtsMec_TrafficManagementAPI_TestCases.ttcn \ + AtsMec_TrafficManagementAPI_TestControl + +modules := ../LibCommon \ + ../../titan-test-system-framework/ttcn/LibHelpers \ + ../../titan-test-system-framework/ttcn/LibHttp \ + ../../titan-test-system-framework/ttcn/LibJson \ + ../patch_lib_http \ + ../LibMec \ + ../LibMec/LocationAPI \ + ../LibMec/EdgePlatformApplicationEnablementAPI \ + ../LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI \ + ../LibMec/TrafficManagementAPI \ + ../LibMec/RnisAPI \ + ../LibMec/UEAppInterfaceAPI \ + ../LibMec/UEidentityAPI \ + ../LibMec/V2XInformationServiceAPI \ + ../LibMec/DeviceApplicationInterfaceAPI \ + ../LibMec/WlanInformationAPI \ + ../LibMec/ApplicationMobilityServiceAPI \ + ../../titan-test-system-framework/ccsrc/Framework \ + ../../titan-test-system-framework/ccsrc/loggers \ + ../../titan-test-system-framework/ccsrc/Protocols/Http \ + ../../titan-test-system-framework/ccsrc/Protocols/Tcp \ + ../../titan-test-system-framework/ccsrc/Helpers \ + ../../ccsrc/Ports/LibHttp \ + ../../ccsrc/EncDec/LibMec \ + ../../ccsrc/externals \ + ../../ccsrc/Protocols/Http \ + ../../ccsrc/Protocols/Json \ + ../modules/titan.TestPorts.Common_Components.Abstract_Socket \ + diff --git a/ttcn/AtsMec/AtsMec_UEidentity/AtsMec_UEidentityAPI_TestCases.ttcn b/ttcn/AtsMec_UEidentity/AtsMec_UEidentityAPI_TestCases.ttcn similarity index 99% rename from ttcn/AtsMec/AtsMec_UEidentity/AtsMec_UEidentityAPI_TestCases.ttcn rename to ttcn/AtsMec_UEidentity/AtsMec_UEidentityAPI_TestCases.ttcn index 2e63169..9ef8643 100644 --- a/ttcn/AtsMec/AtsMec_UEidentity/AtsMec_UEidentityAPI_TestCases.ttcn +++ b/ttcn/AtsMec_UEidentity/AtsMec_UEidentityAPI_TestCases.ttcn @@ -25,6 +25,7 @@ module AtsMec_UEidentityAPI_TestCases { import from UEidentityAPI_Templates all; import from UEidentityAPI_Pics all; import from UEidentityAPI_Pixits all; + import from UEidentityAPI_Functions all; // LibMec import from LibMec_TypesAndValues all; diff --git a/ttcn/AtsMec_UEidentity/AtsMec_UEidentityAPI_TestControl.ttcn b/ttcn/AtsMec_UEidentity/AtsMec_UEidentityAPI_TestControl.ttcn new file mode 100644 index 0000000..f324d06 --- /dev/null +++ b/ttcn/AtsMec_UEidentity/AtsMec_UEidentityAPI_TestControl.ttcn @@ -0,0 +1,27 @@ +module AtsMec_UEidentityAPI_TestControl { + + // LibMec/UEidentityAPI + import from UEidentityAPI_Pics all; + + // LibMec + import from LibMec_Pics all; + + // AtsMec_UEidentityAPI + import from AtsMec_UEidentityAPI_TestCases all; + + control { + + if (PICS_MEC_PLAT and PICS_SERVICES) { + if (PICS_UE_IDENTITY_API_SUPPORTED) { + execute(TC_MEC_MEC014_SRV_UETAG_001_OK()); + execute(TC_MEC_MEC014_SRV_UETAG_001_BR()); + execute(TC_MEC_MEC014_SRV_UETAG_001_NF()); + execute(TC_MEC_MEC014_SRV_UETAG_002_OK()); + execute(TC_MEC_MEC014_SRV_UETAG_002_BR()); + execute(TC_MEC_MEC014_SRV_UETAG_002_PF()); + } + } + + } // End of 'control' statement + +} // End of module AtsMec_UEidentityAPI_TestControl diff --git a/ttcn/AtsMec_UEidentity/module.mk b/ttcn/AtsMec_UEidentity/module.mk new file mode 100644 index 0000000..ce0a0ee --- /dev/null +++ b/ttcn/AtsMec_UEidentity/module.mk @@ -0,0 +1,36 @@ +suite := AtsMec_UEidentity + +sources := \ + AtsMec_UEidentityAPI_TestCases.ttcn \ + AtsMec_UEidentityAPI_TestControl.ttcn \ + +modules := ../LibCommon \ + ../../titan-test-system-framework/ttcn/LibHelpers \ + ../../titan-test-system-framework/ttcn/LibHttp \ + ../../titan-test-system-framework/ttcn/LibJson \ + ../patch_lib_http \ + ../LibMec \ + ../LibMec/LocationAPI \ + ../LibMec/EdgePlatformApplicationEnablementAPI \ + ../LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI \ + ../LibMec/TrafficManagementAPI \ + ../LibMec/RnisAPI \ + ../LibMec/UEAppInterfaceAPI \ + ../LibMec/UEidentityAPI \ + ../LibMec/V2XInformationServiceAPI \ + ../LibMec/DeviceApplicationInterfaceAPI \ + ../LibMec/WlanInformationAPI \ + ../LibMec/FixedAccessInformationServiceAPI \ + ../LibMec/ApplicationMobilityServiceAPI \ + ../../titan-test-system-framework/ccsrc/Framework \ + ../../titan-test-system-framework/ccsrc/loggers \ + ../../titan-test-system-framework/ccsrc/Protocols/Http \ + ../../titan-test-system-framework/ccsrc/Protocols/Tcp \ + ../../titan-test-system-framework/ccsrc/Helpers \ + ../../ccsrc/Ports/LibHttp \ + ../../ccsrc/EncDec/LibMec \ + ../../ccsrc/externals \ + ../../ccsrc/Protocols/Http \ + ../../ccsrc/Protocols/Json \ + ../modules/titan.TestPorts.Common_Components.Abstract_Socket \ + diff --git a/ttcn/AtsMec/AtsMec_V2x/AtsMec_V2XInformationServiceAPI_TestCases.ttcn b/ttcn/AtsMec_V2XInformationService/AtsMec_V2XInformationServiceAPI_TestCases.ttcn similarity index 99% rename from ttcn/AtsMec/AtsMec_V2x/AtsMec_V2XInformationServiceAPI_TestCases.ttcn rename to ttcn/AtsMec_V2XInformationService/AtsMec_V2XInformationServiceAPI_TestCases.ttcn index 75e107e..ca8f28e 100644 --- a/ttcn/AtsMec/AtsMec_V2x/AtsMec_V2XInformationServiceAPI_TestCases.ttcn +++ b/ttcn/AtsMec_V2XInformationService/AtsMec_V2XInformationServiceAPI_TestCases.ttcn @@ -12,7 +12,7 @@ module AtsMec_V2XInformationServiceAPI_TestCases { // JSON - import from JSON all; + import from Json all; // Libcommon import from LibCommon_Time all; diff --git a/ttcn/AtsMec_V2XInformationService/AtsMec_V2XInformationServiceAPI_TestControl.ttcn b/ttcn/AtsMec_V2XInformationService/AtsMec_V2XInformationServiceAPI_TestControl.ttcn new file mode 100644 index 0000000..ee7c702 --- /dev/null +++ b/ttcn/AtsMec_V2XInformationService/AtsMec_V2XInformationServiceAPI_TestControl.ttcn @@ -0,0 +1,18 @@ +module AtsMec_V2XInformationServiceAPI_TestControl { + + // LibMec/LocationAPI + import from V2XInformationServiceAPI_Pics all; + + // LibMec + import from LibMec_Pics all; + + // AtsMec + import from AtsMec_V2XInformationServiceAPI_TestCases all; + + control { + + if (PICS_MEC_PLAT and PICS_SERVICES) { + } + } // End of 'control' statement + +} // End of module AtsMec_V2XInformationServiceAPI_TestControl diff --git a/ttcn/AtsMec_V2XInformationService/module.mk b/ttcn/AtsMec_V2XInformationService/module.mk new file mode 100644 index 0000000..a58df4a --- /dev/null +++ b/ttcn/AtsMec_V2XInformationService/module.mk @@ -0,0 +1,36 @@ +suite := AtsMec_V2XInformationService + +sources := \ + AtsMec_V2XInformationServiceAPI_TestCases.ttcn \ + AtsMec_V2XInformationServiceAPI_TestControl.ttcn + +modules := ../LibCommon \ + ../../titan-test-system-framework/ttcn/LibHelpers \ + ../../titan-test-system-framework/ttcn/LibHttp \ + ../../titan-test-system-framework/ttcn/LibJson \ + ../patch_lib_http \ + ../LibMec \ + ../LibMec/LocationAPI \ + ../LibMec/EdgePlatformApplicationEnablementAPI \ + ../LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI \ + ../LibMec/TrafficManagementAPI \ + ../LibMec/RnisAPI \ + ../LibMec/UEAppInterfaceAPI \ + ../LibMec/UEidentityAPI \ + ../LibMec/V2XInformationServiceAPI \ + ../LibMec/DeviceApplicationInterfaceAPI \ + ../LibMec/WlanInformationAPI \ + ../LibMec/FixedAccessInformationServiceAPI \ + ../LibMec/ApplicationMobilityServiceAPI \ + ../../titan-test-system-framework/ccsrc/Framework \ + ../../titan-test-system-framework/ccsrc/loggers \ + ../../titan-test-system-framework/ccsrc/Protocols/Http \ + ../../titan-test-system-framework/ccsrc/Protocols/Tcp \ + ../../titan-test-system-framework/ccsrc/Helpers \ + ../../ccsrc/Ports/LibHttp \ + ../../ccsrc/EncDec/LibMec \ + ../../ccsrc/externals \ + ../../ccsrc/Protocols/Http \ + ../../ccsrc/Protocols/Json \ + ../modules/titan.TestPorts.Common_Components.Abstract_Socket \ + diff --git a/ttcn/AtsMec/AtsMec_Wlan/AtsMec_WlanInformationAPI_TestCases.ttcn b/ttcn/AtsMec_WlanInformation/AtsMec_WlanInformationAPI_TestCases.ttcn similarity index 99% rename from ttcn/AtsMec/AtsMec_Wlan/AtsMec_WlanInformationAPI_TestCases.ttcn rename to ttcn/AtsMec_WlanInformation/AtsMec_WlanInformationAPI_TestCases.ttcn index 49a2d50..9ecbc2b 100644 --- a/ttcn/AtsMec/AtsMec_Wlan/AtsMec_WlanInformationAPI_TestCases.ttcn +++ b/ttcn/AtsMec_WlanInformation/AtsMec_WlanInformationAPI_TestCases.ttcn @@ -12,7 +12,7 @@ module AtsMec_WlanInformationAPI_TestCases { // JSON - import from JSON all; + import from Json all; // Libcommon import from LibCommon_Time all; diff --git a/ttcn/AtsMec_WlanInformation/AtsMec_WlanInformationAPI_TestControl.ttcn b/ttcn/AtsMec_WlanInformation/AtsMec_WlanInformationAPI_TestControl.ttcn new file mode 100644 index 0000000..90b10bf --- /dev/null +++ b/ttcn/AtsMec_WlanInformation/AtsMec_WlanInformationAPI_TestControl.ttcn @@ -0,0 +1,21 @@ +module AtsMec_WlanInformationAPI_TestControl { + + // LibMec/WlanInformationAPI + import from WlanInformationAPI_Pics all; + + // LibMec + import from LibMec_Pics all; + + // AtsMec + import from AtsMec_WlanInformationAPI_TestCases all; + + control { + + if (PICS_MEC_PLAT and PICS_WLAN_INFORMATION_API_SUPPORTED) { + execute(TC_MEC_MEC028_SRV_WAI_001_OK()); + execute(TC_MEC_MEC028_SRV_WAI_002_OK()); + } + + } // End of 'control' statement + +} // End of module AtsMec_WlanInformationAPI_TestControl diff --git a/ttcn/AtsMec_WlanInformation/module.mk b/ttcn/AtsMec_WlanInformation/module.mk new file mode 100644 index 0000000..390fd0d --- /dev/null +++ b/ttcn/AtsMec_WlanInformation/module.mk @@ -0,0 +1,36 @@ +suite := AtsMec_WlanInformation + +sources := \ + AtsMec_WlanInformationAPI_TestCases.ttcn \ + AtsMec_WlanInformationAPI_TestControl.ttcn + +modules := ../LibCommon \ + ../../titan-test-system-framework/ttcn/LibHelpers \ + ../../titan-test-system-framework/ttcn/LibHttp \ + ../../titan-test-system-framework/ttcn/LibJson \ + ../patch_lib_http \ + ../LibMec \ + ../LibMec/LocationAPI \ + ../LibMec/EdgePlatformApplicationEnablementAPI \ + ../LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI \ + ../LibMec/TrafficManagementAPI \ + ../LibMec/RnisAPI \ + ../LibMec/UEAppInterfaceAPI \ + ../LibMec/UEidentityAPI \ + ../LibMec/V2XInformationServiceAPI \ + ../LibMec/DeviceApplicationInterfaceAPI \ + ../LibMec/WlanInformationAPI \ + ../LibMec/FixedAccessInformationServiceAPI \ + ../LibMec/ApplicationMobilityServiceAPI \ + ../../titan-test-system-framework/ccsrc/Framework \ + ../../titan-test-system-framework/ccsrc/loggers \ + ../../titan-test-system-framework/ccsrc/Protocols/Http \ + ../../titan-test-system-framework/ccsrc/Protocols/Tcp \ + ../../titan-test-system-framework/ccsrc/Helpers \ + ../../ccsrc/Ports/LibHttp \ + ../../ccsrc/EncDec/LibMec \ + ../../ccsrc/externals \ + ../../ccsrc/Protocols/Http \ + ../../ccsrc/Protocols/Json \ + ../modules/titan.TestPorts.Common_Components.Abstract_Socket \ + diff --git a/ttcn/LibMec/Ams/ttcn/Ams_Pixits.ttcn b/ttcn/LibMec/Ams/ttcn/Ams_Pixits.ttcn index 17763e1..1a4870e 100644 --- a/ttcn/LibMec/Ams/ttcn/Ams_Pixits.ttcn +++ b/ttcn/LibMec/Ams/ttcn/Ams_Pixits.ttcn @@ -1,27 +1,27 @@ module Ams_Pixits { // JSON - import from JSON all; + import from Json all; // LibMec/LocationAPI import from Ams_TypesAndValues all; - modulepar JSON.String PX_APP_MOBILITY_SERVICE_ID := "KtRGymNQ84dG3mQfRepa"; + modulepar Json.String PX_APP_MOBILITY_SERVICE_ID := "KtRGymNQ84dG3mQfRepa"; - modulepar JSON.String PX_APP_INS_ID := "5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f"; + modulepar Json.String PX_APP_INS_ID := "5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f"; modulepar SubscriptionType PX_SUBSCRIPTION_TYPE := MobilityProcedureSubscription; - modulepar JSON.String PX_SUBSCRIPTION_ID := "e0deee2b-6e50-4f33-ab09-8bf0585025d3"; + 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.String PX_NON_EXISTENT_SUBSCRIPTION_ID := "NON_EXISTENT_SUBSCRIPTION_ID"; - modulepar JSON.String PX_NON_EXISTENT_APP_MOBILITY_SERVICE_ID := "PX_NON_EXISTENT_APP_MOBILITY_SERVICE_ID"; + modulepar Json.String PX_NON_EXISTENT_APP_MOBILITY_SERVICE_ID := "PX_NON_EXISTENT_APP_MOBILITY_SERVICE_ID"; - modulepar JSON.String PX_CALLBACK_REFERENCE := "http://127.0.0.1/callback"; + modulepar Json.String PX_CALLBACK_REFERENCE := "http://127.0.0.1/callback"; modulepar charstring PX_CALLBACK_URI := "http://127.0.0.1/callback"; - modulepar JSON.String PX_MEP_ID := ""; + modulepar Json.String PX_MEP_ID := ""; } // End of module LocationAPI_Pixits diff --git a/ttcn/LibMec/Ams/ttcn/Ams_Templates.ttcn b/ttcn/LibMec/Ams/ttcn/Ams_Templates.ttcn index 7d94af2..ee4630a 100644 --- a/ttcn/LibMec/Ams/ttcn/Ams_Templates.ttcn +++ b/ttcn/LibMec/Ams/ttcn/Ams_Templates.ttcn @@ -1,7 +1,7 @@ module Ams_Templates { // JSON - import from JSON all; + import from Json all; // LibCommon import from LibCommon_BasicTypesAndValues all; @@ -170,14 +170,14 @@ module Ams_Templates { associateId := p_associate_id } type record AmsSubscriptionLinkList { - JSON.AnyURI links, + 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 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 @@ -192,8 +192,8 @@ module Ams_Templates { 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 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 @@ -209,8 +209,8 @@ module Ams_Templates { 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 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 @@ -224,8 +224,8 @@ module Ams_Templates { 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 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 @@ -239,8 +239,8 @@ module Ams_Templates { 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) 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 ) := { @@ -253,7 +253,7 @@ module Ams_Templates { template (present) ExpiryNotification mw_expire_notification ( in template (omit) TimeStamp p_timestamp := omit, - in template (omit) JSON.AnyURI p_links := omit, + in template (omit) Json.AnyURI p_links := omit, in TimeStamp p_expiryDeadline ) := { timeStamp := p_timestamp, diff --git a/ttcn/LibMec/Ams/ttcn/Ams_TypesAndValues.ttcn b/ttcn/LibMec/Ams/ttcn/Ams_TypesAndValues.ttcn index 17959aa..dc4eb50 100644 --- a/ttcn/LibMec/Ams/ttcn/Ams_TypesAndValues.ttcn +++ b/ttcn/LibMec/Ams/ttcn/Ams_TypesAndValues.ttcn @@ -1,7 +1,7 @@ module Ams_TypesAndValues { // JSON -import from JSON all; +import from Json all; // LibCommon import from LibCommon_BasicTypesAndValues all; @@ -59,7 +59,7 @@ type record DeviceInformation { } -type JSON.AnyURI links; +type Json.AnyURI links; type enumerated SubscriptionType { MobilityProcedureSubscription, @@ -67,22 +67,22 @@ type enumerated SubscriptionType { } type record Subscription { - JSON.AnyURI href, + Json.AnyURI href, SubscriptionType subscriptionType } type record of AmsSubscriptionLinkList AmsSubscriptionLinkLists; type record AmsSubscriptionLinkList { - JSON.AnyURI links, + Json.AnyURI links, Subscription subscription } type record MobilityProcedureSubscriptionError { SubscriptionType subscriptionType, - JSON.AnyURI callbackReference, - JSON.AnyURI links optional, + Json.AnyURI callbackReference, + Json.AnyURI links optional, FilterCriteria filterCriteria, TimeStamp expiryDeadline optional } @@ -93,8 +93,8 @@ type record MobilityProcedureSubscriptionError { type record of MobilityProcedureSubscription_ MobilityProcedureSubscriptions; type record MobilityProcedureSubscription_ { SubscriptionType subscriptionType, - JSON.AnyURI callbackReference, - JSON.AnyURI links optional, + Json.AnyURI callbackReference, + Json.AnyURI links optional, FilterCriteria filterCriteria, TimeStamp expiryDeadline optional } @@ -128,15 +128,15 @@ type record AdjacentFilterCriteria { type record of ExpiryNotification ExpiryNotifications; type record ExpiryNotification { TimeStamp timeStamp, - JSON.AnyURI links optional, + Json.AnyURI links optional, TimeStamp expiryDeadline } type record of AdjacentAppInfoSubscription_ AdjacentAppInfoSubscriptions; type record AdjacentAppInfoSubscription_ { SubscriptionType subscriptionType, - JSON.AnyURI callbackReference, - JSON.AnyURI links optional, + Json.AnyURI callbackReference, + Json.AnyURI links optional, AdjacentFilterCriteria filterCriteria, TimeStamp expiryDeadline optional } @@ -211,9 +211,9 @@ type record AdjacentAppInfoSubscription_ { // * @member accuracy // */ // type record LocationInfo { -// JSON.Number latitude, -// JSON.Number longitude, -// JSON.Number altitude optional, +// Json.Number latitude, +// Json.Number longitude, +// Json.Number altitude optional, // UInt32 accuracy // } // End of type LocationInfo // @@ -247,7 +247,7 @@ type record AdjacentAppInfoSubscription_ { // /** // * @desc Identifier of access point, (reference ETSI TS 129 171). Where the E-CGI is made up of the PLMN and Cell Identity (28 bit string). Then the PLMN is made up of the 3 digit MCC & 2 or 3 digit MNC. The Cell Portion is an optional element // */ -// type JSON.String AccessPointId; +// type Json.String AccessPointId; // // /** // * @desc A type containing access point information. @@ -283,18 +283,18 @@ type record AdjacentAppInfoSubscription_ { // /** // * @desc Address of user (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI). // */ -// type JSON.String Address +// type Json.String Address // // /** // * @desc Reserved for future use. // */ -// type JSON.String AncillaryInfo; +// type Json.String AncillaryInfo; // // /** // * @desc CallBackData if passed by the application during the associated ZonalTrafficSubscription and UserTrackingSubscription operation. See [\ //REST_NetAPI_Common]. // */ -// type JSON.String CallbackData; +// type Json.String CallbackData; // // /** // * @desc Notification callback definition. @@ -307,7 +307,7 @@ type record AdjacentAppInfoSubscription_ { // /** // * @desc Uniquely identifies this create subscription request. If there is a communication failure during the request, using the same clientCorrelator when retrying the request allows the operator to avoid creating a duplicate subscription. // */ -// type JSON.String ClientCorrelator; +// type Json.String ClientCorrelator; // // /** // * @desc The connection type for the access point @@ -328,22 +328,22 @@ type record AdjacentAppInfoSubscription_ { // /** // * @desc Contextual information of a user location (e.g., aisle, floor, room number, etc.) // */ -// type JSON.String ContextLocationInfo; +// type Json.String ContextLocationInfo; // // /** // * @desc Zone ID // */ -// type JSON.String CurrentAccessPointId; +// type Json.String CurrentAccessPointId; // // /** // * @desc Period (in seconds) of time notifications are provided for. If set to \"0\" (zero), a default duration time, which is specified by the service policy, will be used. If the parameter is omitted, the notifications will continue until the maximum duration time, which is specified by the service policy, unless the notifications are stopped by deletion of subscription for notifications. This element MAY be given by the client during resource creation in order to signal the desired lifetime of the subscription. The server MUST return in this element the period of time for which the subscription will still be valid. // */ -// type JSON.Date Duration; +// type Json.Date Duration; // // /** // * @desc Interest realm of access point (e.g. geographical area, a type of industry etc.). // */ -// type JSON.String InterestRealm; +// type Json.String InterestRealm; // // /** // * @desc Link to other resources @@ -351,14 +351,14 @@ type record AdjacentAppInfoSubscription_ { // * @member href UTI // */ // type record Link { -// JSON.String rel, -// JSON.String href +// Json.String rel, +// Json.String href // } // // /** // * @desc The URL of your own listener application. // */ -// type JSON.String NotifyURL; +// type Json.String NotifyURL; // // /** // * @desc The number of access points within the zone @@ -407,22 +407,22 @@ type record AdjacentAppInfoSubscription_ { // /** // * @desc Zone ID // */ -// type JSON.String PreviousAccessPointId; +// type Json.String PreviousAccessPointId; // // /** // * @desc Self referring URL // */ -// type JSON.AnyURI ResourceURL; +// type Json.AnyURI ResourceURL; // // /** // * @desc Indicates the time of day for zonal presence notification. // */ -// type JSON.String Timestamp; +// type Json.String Timestamp; // // /** // * @desc Time zone of access point // */ -// type JSON.String Timezone; +// type Json.String Timezone; // // /** // * @desc User event @@ -514,7 +514,7 @@ type record AdjacentAppInfoSubscription_ { // /** // * @desc Identifier of zone // */ -// type JSON.String ZoneId; +// type Json.String ZoneId; // // /** // * @desc A type containing zone status notification. diff --git a/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_Functions.ttcn b/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_Functions.ttcn index 3e2f38a..d5f9d63 100644 --- a/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_Functions.ttcn +++ b/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_Functions.ttcn @@ -1,6 +1,6 @@ module ApplicationMobilityServiceAPI_Functions { // JSON - import from JSON all; + 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 index 640f088..0499a19 100644 --- a/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_Pics.ttcn +++ b/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_Pics.ttcn @@ -1,6 +1,6 @@ module ApplicationMobilityServiceAPI_Pics { // JSON - import from JSON all; + 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 index 18403ef..f07ed63 100644 --- a/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_Pixits.ttcn +++ b/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_Pixits.ttcn @@ -1,6 +1,6 @@ module ApplicationMobilityServiceAPI_Pixits { // JSON - import from JSON all; + 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 index b108563..e63aa9a 100644 --- a/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_Templates.ttcn +++ b/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_Templates.ttcn @@ -1,7 +1,7 @@ module ApplicationMobilityServiceAPI_Templates { // JSON - import from JSON all; + import from Json all; // LibMec/ApplicationMobilityServiceAPI import from ApplicationMobilityServiceAPI_TypesAndValues all; diff --git a/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_TypesAndValues.ttcn b/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_TypesAndValues.ttcn index b60fc87..4c4bf95 100644 --- a/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_TypesAndValues.ttcn @@ -1,7 +1,7 @@ module ApplicationMobilityServiceAPI_TypesAndValues { // JSON - import from JSON all; + import from Json all; // LibCommon import from LibCommon_BasicTypesAndValues all; @@ -22,7 +22,7 @@ module ApplicationMobilityServiceAPI_TypesAndValues { * @see ETSI GS MEC 021 Clause 7.5.2 Type: CommunicationInterface */ type record IpAddress { - JSON.String host, + Json.String host, UInt32 port_ } with { variant (port_) "name as 'port'"; diff --git a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Pixits.ttcn b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Pixits.ttcn index b80eed4..a8d9de7 100644 --- a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Pixits.ttcn +++ b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Pixits.ttcn @@ -1,55 +1,55 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Pixits { // JSON - import from JSON all; + 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_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_NON_EXISTING_APP_INSTANCE_ID := "5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1b"; - modulepar JSON.String PX_APP_ID := "5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1c"; + 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_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_GRANTING_ID := "e0deee2b-6e50-4f33-ab09-8bf0585025d3"; - modulepar JSON.String PX_NON_EXISTANT_GRANTING_ID := "PX_NON_EXISTANT_GRANTING_ID"; + 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_NAME := "APP_PKG_NAME" - modulepar JSON.String PX_APP_PKG_VERSION := "APP_PKG_VERSION" + modulepar Json.String PX_APP_PKG_VERSION := "APP_PKG_VERSION" - modulepar JSON.String PX_CHECKSUM := "CHECKSUM" + modulepar Json.String PX_CHECKSUM := "CHECKSUM" - modulepar JSON.String PX_APP_PKG_PATH := "APP_PKG_PATH" + 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_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_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_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.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.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_SUBSCRIPTION_ID := "e0deee2b-6e50-4f33-ab09-8bf0585025d3" - modulepar JSON.String PX_NON_EXISTENT_SUBSCRIPTION_ID := "NON_EXISTENT_SUBSCRIPTION_ID" + modulepar Json.String PX_NON_EXISTENT_SUBSCRIPTION_ID := "NON_EXISTENT_SUBSCRIPTION_ID" - modulepar JSON.AnyURI PX_APP_PKG_HREF := ""; + 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 index a4ea336..f2bd971 100644 --- a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Templates.ttcn +++ b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Templates.ttcn @@ -1,7 +1,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Templates { // JSON - import from JSON all; + import from Json all; // LibMec_EdgePlatformApplicationEnablementAPI import from EdgePlatformApplicationEnablementAPI_TypesAndValues all; @@ -90,13 +90,13 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Templates { } // End of template mw_grant_request_link template (value) ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.LinkType m_link_type( - in template (value) JSON.AnyURI p_href + 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 := ? + template (present) Json.AnyURI p_href := ? ) := { href := p_href } // End of template mw_link_type @@ -134,11 +134,11 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Templates { } // 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) 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:= ?, @@ -167,16 +167,16 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Templates { } // End of template mw_app_pkg_info template (value) Checksum m_checksum( - in JSON.String p_algorithm := "SHA256", - in JSON.String p_hash + 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 := ? + template (present) Json.String p_algorithm := ?, + template (present) Json.String p_hash := ? ) := { algorithm := p_algorithm, hash := p_hash @@ -195,7 +195,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Templates { } // 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) Json.AnyURI p_callbackUri, in template (value) AppPkgSubscriptionType p_subscriptionType := "AppPackageOnBoardingSubscription", in template (omit) AppPkgFilter p_appPkgFilter := omit ) := { @@ -205,9 +205,9 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Templates { } // 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) Json.String p_id, in template (value) AppPkgSubscriptionType p_subscriptionType := "AppPackageOnBoardingSubscription", - in template (value) JSON.AnyURI p_callbackUri, + in template (value) Json.AnyURI p_callbackUri, in template (value) AppPkgSubscriptionInfo_Link p_links ):= { id := p_id, @@ -217,9 +217,9 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Templates { } // End of template m_app_pkg_subscription_info template (present) AppPkgSubscriptionInfo mw_app_pkg_subscription_info( - template (present) JSON.String p_id := ?, + template (present) Json.String p_id := ?, template (present) AppPkgSubscriptionType p_subscriptionType := "AppPackageOnBoardingSubscription", - template (present) JSON.AnyURI p_callbackUri := ?, + template (present) Json.AnyURI p_callbackUri := ?, template (present) AppPkgSubscriptionInfo_Link p_links := ? ):= { id := p_id, @@ -229,12 +229,12 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Templates { } // 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) 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) Json.String p_appPkgId := ?, + template (present) Json.String p_appDId := ?, template (present) AppPkgInfo_OperationalState p_operationalState := ?, template (present) AppPkgNotification_Link p_links := ? ) := { @@ -249,13 +249,13 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Templates { } // End of template mw_app_pkg_notification template (value) AppPkgSubscriptionInfo_Link m_app_pkg_link( - in JSON.AnyURI p_href + 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 := ? + template (present) Json.AnyURI p_href := ? ) := { self_ := { href := p_href } } // End of template mw_app_pkg_link @@ -317,11 +317,11 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Templates { } // 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 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 + in template (omit) Json.String p_requestedPermissions := omit ) := { serName := p_serName, serCategory := p_serCategory, @@ -331,11 +331,11 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Templates { } // 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 (present) Json.String p_serName := ?, + template (present) Json.String p_version := ?, template CategoryRef p_serCategory := *, template TransportDependency p_serTransportDependencies := *, - template JSON.String p_requestedPermissions := * + template Json.String p_requestedPermissions := * ) := { serName := p_serName, serCategory := p_serCategory, @@ -349,9 +349,9 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Templates { 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 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, @@ -361,9 +361,9 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Templates { } // 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 (present) Json.String p_appDId := ?, + template Json.String p_appInstanceName := *, + template Json.String p_appInstanceDescription := *, template MepInformation p_appPlacementInfo := * ) := { appDId := p_appDId, @@ -373,20 +373,20 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Templates { } // 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 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 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) 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) 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 ) := { @@ -409,20 +409,20 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Templates { } // 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) 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 Json.String p_appInstanceName := *, + template Json.String p_appInstanceDescription := *, template VimConnectionInfo p_vimConnectionInfo := *, - template JSON.String p_nsInstanceId := *, - template JSON.String p_vnfInstanceId := *, + template Json.String p_nsInstanceId := *, + template Json.String p_vnfInstanceId := *, template InstantiatedAppState p_instantiatedAppState := *, template CommunicationInterface p_communicationInterface := * ) := { diff --git a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.ttcn b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.ttcn index 2513e20..97e8675 100644 --- a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.ttcn @@ -1,7 +1,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { // JSON - import from JSON all; + import from Json all; // LibCommon import from LibCommon_BasicTypesAndValues all; @@ -46,14 +46,14 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @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, + 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, @@ -123,9 +123,9 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @see ETSI GS MEC 010-2 Clause 6.2.1.7 Type: ServiceDescriptor */ type record ServiceDescriptor { - JSON.String serName, + Json.String serName, CategoryRef serCategory optional, - JSON.String version, + Json.String version, TransportsSupported transportsSupported optional } @@ -147,8 +147,8 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @see ETSI GS MEC 010-2 Clause 6.2.1.8 Type: FeatureDependency */ type record FeatureDependency { - JSON.String featureName, - JSON.String version + Json.String featureName, + Json.String version } /** @@ -162,7 +162,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @see ETSI GS MEC 010-2 Clause 6.2.1.9 Type: TrafficRuleDescriptor */ type record TrafficRuleDescriptor { - JSON.String trafficRuleId, + Json.String trafficRuleId, FilterType filterType, integer priority, TrafficFilter trafficFilter, @@ -209,18 +209,18 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @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, + 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 @@ -237,8 +237,8 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { type record InterfaceDescriptor { InterfaceType interfaceType, TunnelInfo tunnelInfo optional, - JSON.String srcMACAddress optional, - JSON.String dstMACAddress optional + Json.String srcMACAddress optional, + Json.String dstMACAddress optional } type enumerated InterfaceType { @@ -259,9 +259,9 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { */ type record TunnelInfo { TunnelType tunnelType, - JSON.String tunnelDstAddress, - JSON.String tunnelSrcAddress, - JSON.String tunnelSpecificData optional + Json.String tunnelDstAddress, + Json.String tunnelSrcAddress, + Json.String tunnelSpecificData optional } type enumerated TunnelType { @@ -280,9 +280,9 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @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, + Json.String dnsRuleId, + Json.String domainName, + Json.String ipAddressType, IpAddress ipAddress, integer ttl optional } @@ -324,11 +324,11 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @see ETSI GS MEC 010-2 Clause 6.2.1.17 Type: ServiceDependency */ type record ServiceDependency { - JSON.String serName, + Json.String serName, CategoryRef serCategory optional, - JSON.String version, + Json.String version, TransportDependency serTransportDependencies optional, - JSON.String requestedPermissions optional + Json.String requestedPermissions optional } /** @@ -344,7 +344,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { Labels labels } - type record length(1..infinity) of JSON.String Labels; + type record length(1..infinity) of Json.String Labels; /** * @desc The TransportDescriptor data type describes a transport @@ -358,13 +358,13 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @see ETSI GS MEC 010-2 Clause 6.2.1.19 Type: TransportDescriptor */ type record TransportDescriptor { - JSON.String name, - JSON.String description optional, + Json.String name, + Json.String description optional, TransportTypes type_, - JSON.String protocol, - JSON.String version, + Json.String protocol, + Json.String version, SecurityInfo security, - JSON.String implSpecificInfo optional + Json.String implSpecificInfo optional } /** @@ -374,8 +374,8 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @see ETSI GS MEC 010-2 Clause 6.2.1.20 Type: UserContextTransferCapability */ type record UserContextTransferCapability { - JSON.Bool statefulApplication, - JSON.Bool userContextTransferSupport optional + Json.Bool statefulApplication, + Json.Bool userContextTransferSupport optional } /** @@ -396,9 +396,9 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @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 + Json.Bool cellularNetwork optional, + Json.Bool wi_fiNetwork optional, + Json.Bool fixedAccessNetwork optional } with { variant (wi_fiNetwork) "name as 'wi-fiNetwork'"; } @@ -415,36 +415,36 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @see ETSI GS MEC 010-2 Clause 6.2.2.2 Type: LocationConstraints */ type record LocationConstraints { - JSON.String countryCode optional, + Json.String countryCode optional, CivicAddressElement civicAddressElement optional, Polygon area optional } type record CivicAddressElement { integer caType, - JSON.String caValue + Json.String caValue } type record Geometry { - JSON.String type_, + Json.String type_, Coordinates coordinates } with { variant (type_) "name as 'type'"; } - type record of JSON.Number Coordinate; + type record of Json.Number Coordinate; type record of Coordinate Coordinates; type record Property { - JSON.String key, - JSON.String value_ + Json.String key, + Json.String value_ } with { variant (value_) "name as 'value'"; } type record of Property Properties; type record Polygon { - JSON.String type_, + Json.String type_, Geometry geometry, Properties properties, - JSON.String this_ + Json.String this_ } with { variant (type_) "name as 'type'"; variant (this_) "name as 'this'"; @@ -459,9 +459,9 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @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, + Json.String appDId, + Json.String appInstanceName optional, + Json.String appInstanceDescription optional, MepInformation appPlacementInfo optional } @@ -486,18 +486,18 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @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, + 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, + Json.String nsInstanceId optional, + Json.String vnfInstanceId optional, InstantiationState instantiationState, InstantiatedAppState instantiatedAppState optional, CommunicationInterface communicationInterface optional, @@ -555,7 +555,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { variant "JSON: as number" } - type record length(1..infinity) of JSON.String AppInstances; + 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 @@ -564,22 +564,22 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @see ETSI GS MEC 010-2 Clause 6.2.2.5 Type: AppInstanceSubscriptionFilter */ type record AppsFromProvider { - JSON.String appProvider, + Json.String appProvider, AppProducts appProducts optional } type record length(1..infinity) of AppsFromProvider appsFromProviders; type record AppProduct { - JSON.String appName, + Json.String appName, Versions versions optional } type record length(1..infinity) of AppProduct AppProducts; type record Version { - JSON.String appSoftVersion, - JSON.String appDVersion optional + Json.String appSoftVersion, + Json.String appDVersion optional } type record length(1..infinity) of Version Versions; @@ -594,7 +594,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { */ type record AppLcmOpOccSubscriptionFilter { AppInstanceSubscriptionFilter appInstanceSubscriptionFilter optional, - JSON.String notificationTypes optional, + Json.String notificationTypes optional, OperationTypes operationTypes optional, OperationStates operationStates optional } @@ -679,11 +679,11 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @see ETSI GS MEC 010-2 Clause 6.2.2.10 Type: AppInstSubscriptionInfo */ type record AppInstSubscriptionInfo { - JSON.String id, - JSON.String subscriptionType, + Json.String id, + Json.String subscriptionType, AppInstanceState appInstanceState optional, AppInstanceSubscriptionFilter appInstanceSubscriptionFilter optional, - JSON.AnyURI callbackUri, + Json.AnyURI callbackUri, AppInstSubscriptionInfo_Link links } with { variant (links) "name as '_links'"; @@ -716,14 +716,14 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @see ETSI GS MEC 010-2 Clause 6.2.2.11 Type: AppInstNotification */ type record AppInstNotification { - JSON.String id, + Json.String id, NotificationType notificationType, AppInstanceState appInstanceState optional, - JSON.String subscriptionId, + Json.String subscriptionId, TimeStamp timeStamp, - JSON.String appInstanceId, - JSON.String appPkgId, - JSON.String appDId, + Json.String appInstanceId, + Json.String appPkgId, + Json.String appDId, LocationInformation appInstLocation optional, AppInstNotification_Links links } with { @@ -743,8 +743,8 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @see ETSI GS MEC 010-2 Clause 6.2.2.12 Type: AppInstSubscriptionRequest */ type record AppInstSubscriptionRequest { - JSON.String subscriptionType, - JSON.AnyURI callbackUri, + Json.String subscriptionType, + Json.AnyURI callbackUri, AppInstanceState appInstanceState optional, AppInstanceSubscriptionFilter appInstanceSubscriptionFilter optional } @@ -763,13 +763,13 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @see ETSI GS MEC 010-2 Clause 6.2.2.13 Type: AppLcmOpOcc */ type record AppLcmOpOcc { - JSON.String id, + Json.String id, OperationState operationState, TimeStamp stateEnteredTime, TimeStamp startTime, LcmOperation lcmOperation, OperationParams operationParams optional, - JSON.Bool isCancelPending optional, + Json.Bool isCancelPending optional, CancelMode cancelMode optional, AppLcmOpOcc_Link links } with { @@ -799,8 +799,8 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @see ETSI GS MEC 010-2 Clause 6.2.2.14 Type: AppLcmOpOccSubscriptionRequest */ type record AppLcmOpOccSubscriptionRequest { - JSON.String subscriptionType, - JSON.AnyURI callbackUri, + Json.String subscriptionType, + Json.AnyURI callbackUri, AppLcmOpOccSubscriptionFilter appLcmOpOccSubscriptionFilter optional } @@ -814,9 +814,9 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @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, + Json.String id, + Json.String subscriptionType, + Json.AnyURI callbackUri, AppLcmOpOccSubscriptionFilter appLcmOpOccSubscriptionFilter optional, AppLcmOpOccSubscriptionInfo_Link links } with { @@ -844,13 +844,13 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @see ETSI GS MEC 010-2 Clause 6.2.2.16 Type: AppLcmOpOccNotification */ type record AppLcmOpOccNotification { - JSON.String id, + Json.String id, NotificationType notificationType, OperationType operationType, OperationState operationState, - JSON.String subscriptionId, + Json.String subscriptionId, TimeStamp timeStamp, - JSON.String appInstanceId, + Json.String appInstanceId, AppLcmOpOccNotification_Link links } with { variant (links) "name as '_links'"; @@ -869,7 +869,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @see ETSI GS MEC 010-2 Clause 6.2.2.17 Type: MECHostInformation */ type record MECHostInformation { - JSON.String hostName optional, + Json.String hostName optional, KeyValuePairs hostId } @@ -884,9 +884,9 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @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, + Json.String id, + Json.String vimId optional, + Json.String vimType, KeyValuePairs interfaceInfo optional, KeyValuePairs accessInfo optional, KeyValuePairs extra optional @@ -911,7 +911,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { } type record SubscriptionLinkList_Link_Subscription { - JSON.AnyURI href, + Json.AnyURI href, AppInstanceSubscriptionType subscriptionType } @@ -921,7 +921,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @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; + type Json.String AppInstanceSubscriptionType; /** * @desc This data type represents the parameters for configuring the MEP to run an application instance @@ -958,8 +958,8 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @see ETSI GS MEC 010-2 Clause 6.2.2.22 Type: MepInformation */ type record MepInformation { - JSON.String mepName optional, - JSON.String mepId optional + Json.String mepName optional, + Json.String mepId optional } /** @@ -975,7 +975,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { AppInstIdTerminationCands appInstIdTerminationCands } - type record length(1..infinity) of JSON.String AppInstIdTerminationCands; + type record length(1..infinity) of Json.String AppInstIdTerminationCands; type record length(1..infinity) of TerminationOption TerminationOptions; @@ -987,8 +987,8 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @see ETSI GS MEC 010-2 Clause 6.2.2.25 Type: AppInstIdCreationSubscriptionRequest */ type record AppInstIdCreationSubscriptionRequest { - JSON.String subscriptionType, - JSON.AnyURI callbackUri, + Json.String subscriptionType, + Json.AnyURI callbackUri, AppInstanceSubscriptionFilter appInstanceSubscriptionFilter optional } @@ -1002,9 +1002,9 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @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, + Json.String id, + Json.String subscriptionType, + Json.AnyURI callbackUri, AppInstanceSubscriptionFilter appInstanceSubscriptionFilter optional, AppInstIdCreationSubscriptionInfo_Link links } with { @@ -1028,10 +1028,10 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @see ETSI GS MEC 010-2 Clause 6.2.2.27 Type: AppInstanceIdentifierCreationNotification */ type record AppInstanceIdentifierCreationNotification { - JSON.String id, + Json.String id, NotificationType notificationType, TimeStamp timeStamp, - JSON.String appInstanceId, + Json.String appInstanceId, AppInstanceIdentifierCreationNotification_Link links } with { variant (links) "name as '_links'"; @@ -1050,8 +1050,8 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @see ETSI GS MEC 010-2 Clause 6.2.2.28 Type: AppInstIdDeletionSubscriptionRequest */ type record AppInstIdDeletionSubscriptionRequest { - JSON.String subscriptionType, - JSON.AnyURI callbackUri, + Json.String subscriptionType, + Json.AnyURI callbackUri, AppInstanceSubscriptionFilter appInstanceSubscriptionFilter optional } @@ -1065,9 +1065,9 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @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, + Json.String id, + Json.String subscriptionType, + Json.AnyURI callbackUri, AppInstanceSubscriptionFilter appInstanceSubscriptionFilter optional, AppInstIdDeletionSubscriptionInfo_Link links } with { @@ -1091,11 +1091,11 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @see ETSI GS MEC 010-2 Clause 6.2.2.30 Type: AppInstanceIdentifierDeletionNotification */ type record AppInstanceIdentifierDeletionNotification { - JSON.String id, + Json.String id, NotificationType notificationType, - JSON.String subscriptionId, + Json.String subscriptionId, TimeStamp timeStamp, - JSON.String appInstanceId, + Json.String appInstanceId, AppInstanceIdentifierDeletionNotification_Link links } with { variant (links) "name as '_links'"; @@ -1114,9 +1114,9 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @see ETSI GS MEC 010-2 Clause 6.2.2.31 Type: LocationInformation */ type record LocationInformation { - JSON.String countryCode, + Json.String countryCode, CivicAddressElement civicAddress optional, - JSON.String geographicalPosition optional + Json.String geographicalPosition optional } /** @@ -1140,12 +1140,12 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @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, + Json.String appPkgName, + Json.String appPkgVersion, + Json.String appProvider optional, Checksum checksum, KeyValuePairs userDefinedData optional, - JSON.AnyURI appPkgPath + Json.AnyURI appPkgPath } /** @@ -1170,14 +1170,14 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @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, + 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, + Json.String signingCertificate optional, AppPkgSWImageInfo softwareImages, AppPkgArtifactInfo additionalArtifacts optional, OnboardingState onboardingState, @@ -1218,7 +1218,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { NOT_IN_USE } - type record length(1..infinity) of JSON.String AppPkgInfo_MecInfo; + type record length(1..infinity) of Json.String AppPkgInfo_MecInfo; type record AppPkgInfo_Links { LinkType self_, @@ -1238,9 +1238,9 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @see ETSI GS MEC 010-2 Clause 6.2.3.4 Type: AppPkgSubscriptionInfo */ type record AppPkgSubscriptionInfo { - JSON.String id, + Json.String id, AppPkgSubscriptionType subscriptionType, - JSON.AnyURI callbackUri, + Json.AnyURI callbackUri, AppPkgSubscriptionInfo_Link links } with { variant (links) "name as '_links'"; @@ -1277,7 +1277,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { } type record AppPkgSubscriptionLinkList_Link_Subscription { - JSON.AnyURI href, + Json.AnyURI href, AppPkgSubscriptionType subscriptionType } @@ -1296,12 +1296,12 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @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, + Json.String id, + Json.String notificationType, + Json.String subscriptionId, TimeStamp timeStamp, - JSON.String appPkgId, - JSON.String appDId, + Json.String appPkgId, + Json.String appDId, AppPkgInfo_OperationalState operationalState, AppPkgNotification_Link links } with { @@ -1320,7 +1320,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @see ETSI GS MEC 010-2 Clause 6.2.3.7 Type: AppPkgSubscription */ type record AppPkgSubscription { - JSON.AnyURI callbackUri, + Json.AnyURI callbackUri, AppPkgSubscriptionType subscriptionType, AppPkgFilter appPkgFilter optional } @@ -1338,7 +1338,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @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; + type Json.String AppPkgSubscriptionType; /** * @desc This data type represents subscription filter criteria to match application package @@ -1353,12 +1353,12 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @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, + 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 } @@ -1382,9 +1382,9 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @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, + Json.String appInstanceId, + Json.String appLcmOpOccId, + Json.String appDId, OperationType operation, ResourceDefinition addResources optional, ResourceDefinition tempResources optional, @@ -1410,10 +1410,10 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @see ETSI GS MEC 010-2 Clause 6.2.4.3 Type: ResourceDefinition */ type record ResourceDefinition { - JSON.String id, + Json.String id, ResourceDefinition_Type type_, - JSON.String vduId optional, - JSON.String resourceTemplateId, + Json.String vduId optional, + Json.String resourceTemplateId, ResourceDefinition_Resource resource } @@ -1426,7 +1426,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { type record ResourceDefinition_Resource { VimConnectionInfo vimConnectionInfo, - JSON.String resourceId + Json.String resourceId } /** @@ -1448,9 +1448,9 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @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, + Json.String id, + Json.String appInstanceId, + Json.String appLcmOpOccId, VimConnectionInfo vimConnections optional, ZoneInfo zones optional, ZoneGroupInfo zoneGroups optional, @@ -1484,10 +1484,10 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @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 + Json.String resourceDefinitionId, + Json.String vimConnectionId optional, + Json.String zoneId optional, + Json.String resourceGroupId optional } /** @@ -1498,9 +1498,9 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @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 + Json.String id, + Json.String zoneId, + Json.String vimConnectionId optional } /** @@ -1512,7 +1512,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { ZoneIds zoneId } - type record length(1..infinity) of JSON.String ZoneIds; + type record length(1..infinity) of Json.String ZoneIds; /** * @desc This type represents an external VL @@ -1524,9 +1524,9 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @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, + Json.String id, + Json.String vimConnectionId optional, + Json.String resourceId, AppExtCpData extCps, ExtLinkPortData extLinkPorts optional } @@ -1538,7 +1538,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @see ETSI GS MEC 010-2 Clause 6.2.4.9 Type: ExtLinkPortData */ type record ExtLinkPortData { - JSON.String id, + Json.String id, ResourceHandle resourceHandle } @@ -1550,9 +1550,9 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @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 + Json.String vimConnectionId optional, + Json.String resourceId, + Json.String vimLevelResourceType optional } /** @@ -1563,9 +1563,9 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @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 + Json.String vimConnectionId optional, + Json.String appDSoftwareImageId, + Json.String vimSoftwareImageId } /** @@ -1575,7 +1575,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @see ETSI GS MEC 010-2 Clause 6.2.4.12 Type: AppExtCpData */ type record AppExtCpData_ { - JSON.String cpdId, + Json.String cpdId, AppExtCpConfig cpConfig } @@ -1589,8 +1589,8 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @see ETSI GS MEC 010-2 Clause 6.2.4.13 Type: AppExtCpConfig */ type record AppExtCpConfig_ { - JSON.String cpInstanceId optional, - JSON.String linkPortId optional, + Json.String cpInstanceId optional, + Json.String linkPortId optional, CpProtocolData cpProtocolData optional } @@ -1620,7 +1620,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @see ETSI GS MEC 010-2 Clause 6.2.4.15 Type: IpOverEthernetAddressData */ type record IpOverEthernetAddressData { - JSON.String macAddress optional, + Json.String macAddress optional, IpAddresses ipAddresses optional } @@ -1646,12 +1646,12 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { IPV6 } - type record length(1..infinity) of JSON.String FixedAddresses; + type record length(1..infinity) of Json.String FixedAddresses; type record AddressRange { - JSON.String minAddress, - JSON.String maxAddress, - JSON.String subnetId optional + Json.String minAddress, + Json.String maxAddress, + Json.String subnetId optional } } // End of group granting_information_model @@ -1664,7 +1664,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @see ETSI GS MEC 010-2 Clause 6.2.5.2 Type: LinkType */ type record LinkType { - JSON.AnyURI href + Json.AnyURI href } /** * @desc This data type represents a list of key-value pairs @@ -1673,7 +1673,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @see ETSI GS MEC 010-2 Clause 6.2.5.3 Type: KeyValuePairs */ type record KeyValuePairs { - JSON.String key_name, + Json.String key_name, anytype key_value // FIXME To be refined } @@ -1705,8 +1705,8 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @see ETSI GS MEC 010-2 Clause 6.2.5.6 Type: Checksum */ type record Checksum { - JSON.String algorithm, - JSON.String hash + Json.String algorithm, + Json.String hash } } // End of group common_information_model diff --git a/ttcn/LibMec/DeviceApplicationInterfaceAPI/ttcn/DeviceApplicationInterfaceAPI_Functions.ttcn b/ttcn/LibMec/DeviceApplicationInterfaceAPI/ttcn/DeviceApplicationInterfaceAPI_Functions.ttcn index cabc783..f40ac61 100644 --- a/ttcn/LibMec/DeviceApplicationInterfaceAPI/ttcn/DeviceApplicationInterfaceAPI_Functions.ttcn +++ b/ttcn/LibMec/DeviceApplicationInterfaceAPI/ttcn/DeviceApplicationInterfaceAPI_Functions.ttcn @@ -2,7 +2,7 @@ module DeviceApplicationInterfaceAPI_Functions { // JSON - import from JSON all; + import from Json all; // LibCommon import from LibCommon_BasicTypesAndValues all; diff --git a/ttcn/LibMec/DeviceApplicationInterfaceAPI/ttcn/DeviceApplicationInterfaceAPI_Pixits.ttcn b/ttcn/LibMec/DeviceApplicationInterfaceAPI/ttcn/DeviceApplicationInterfaceAPI_Pixits.ttcn index 8fa9b27..49e31f2 100644 --- a/ttcn/LibMec/DeviceApplicationInterfaceAPI/ttcn/DeviceApplicationInterfaceAPI_Pixits.ttcn +++ b/ttcn/LibMec/DeviceApplicationInterfaceAPI/ttcn/DeviceApplicationInterfaceAPI_Pixits.ttcn @@ -1,7 +1,7 @@ module DeviceApplicationInterfaceAPI_Pixits { // JSON - import from JSON all; + import from Json all; modulepar charstring PX_DEVICE_APP_LIST_URI := "/dev_app/v1/app_list"; diff --git a/ttcn/LibMec/DeviceApplicationInterfaceAPI/ttcn/DeviceApplicationInterfaceAPI_Templates.ttcn b/ttcn/LibMec/DeviceApplicationInterfaceAPI/ttcn/DeviceApplicationInterfaceAPI_Templates.ttcn index 6071d1d..8b1ab83 100644 --- a/ttcn/LibMec/DeviceApplicationInterfaceAPI/ttcn/DeviceApplicationInterfaceAPI_Templates.ttcn +++ b/ttcn/LibMec/DeviceApplicationInterfaceAPI/ttcn/DeviceApplicationInterfaceAPI_Templates.ttcn @@ -1,7 +1,7 @@ module DeviceApplicationInterfaceAPI_Templates { // JSON - import from JSON all; + import from Json all; // LibCommon import from LibCommon_BasicTypesAndValues all; @@ -12,9 +12,9 @@ module DeviceApplicationInterfaceAPI_Templates { template (omit) AppContext m_device_app_context( - in template (value) JSON.String p_associateDevAppId, + in template (value) Json.String p_associateDevAppId, in template (value) ApplicationContext_AppInfo p_appInfo, - in template (omit) JSON.AnyURI p_callbackReference := omit, + in template (omit) Json.AnyURI p_callbackReference := omit, in template (omit) boolean p_appLocationUpdates := omit, in template (omit) boolean p_appAutoInstantiation := omit ) := { @@ -27,10 +27,10 @@ module DeviceApplicationInterfaceAPI_Templates { } // End of template m_device_app_context template (present) AppContext mw_device_app_context( - template (present) JSON.String p_contextId := ?, - template (present) JSON.String p_associateDevAppId := ?, + template (present) Json.String p_contextId := ?, + template (present) Json.String p_associateDevAppId := ?, template (present) ApplicationContext_AppInfo p_appInfo := ?, - template JSON.AnyURI p_callbackReference := *, + template Json.AnyURI p_callbackReference := *, template boolean p_appLocationUpdates := *, template boolean p_appAutoInstantiation := * ) := { @@ -43,14 +43,14 @@ module DeviceApplicationInterfaceAPI_Templates { } // End of template mw_device_app_context template (omit) ApplicationContext_AppInfo m_app_context_info( - in JSON.String p_appDId, - in JSON.String p_appName, - in JSON.String p_appProvider, - in JSON.String p_appDVersion, - in template (omit) JSON.String p_appDescription := omit, - in template (omit) JSON.String p_appSoftVersion := omit, + in Json.String p_appDId, + in Json.String p_appName, + in Json.String p_appProvider, + in Json.String p_appDVersion, + in template (omit) Json.String p_appDescription := omit, + in template (omit) Json.String p_appSoftVersion := omit, in template (omit) UserAppInstanceInfoList p_userAppInstanceInfo := omit, - in template (omit) JSON.AnyURI p_appPackageSource := omit + in template (omit) Json.AnyURI p_appPackageSource := omit ) := { appDId := p_appDId, appName := p_appName, @@ -63,14 +63,14 @@ module DeviceApplicationInterfaceAPI_Templates { } // End ot template m_app_context_info template (present) ApplicationContext_AppInfo mw_app_context_info( - template (present) JSON.String p_appDId := ?, - template (present) JSON.String p_appName := ?, - template (present) JSON.String p_appProvider := ?, - template (present) JSON.String p_appDVersion := ?, - template JSON.String p_appDescription := *, - template JSON.String p_appSoftVersion := *, + template (present) Json.String p_appDId := ?, + template (present) Json.String p_appName := ?, + template (present) Json.String p_appProvider := ?, + template (present) Json.String p_appDVersion := ?, + template Json.String p_appDescription := *, + template Json.String p_appSoftVersion := *, template UserAppInstanceInfoList p_userAppInstanceInfo := *, - template JSON.AnyURI p_appPackageSource := * + template Json.AnyURI p_appPackageSource := * ) := { appDId := p_appDId, appName := p_appName, @@ -83,7 +83,7 @@ module DeviceApplicationInterfaceAPI_Templates { } // End ot template mw_app_context_info template (value) ApplicationLocationAvailability m_application_location_availability( - in JSON.String p_associateDevAppId, + in Json.String p_associateDevAppId, in template (value) ApplicationLocationAvailability_AppInfo p_appInfo ) := { associateDevAppId := p_associateDevAppId, @@ -91,7 +91,7 @@ module DeviceApplicationInterfaceAPI_Templates { } // End of template m_application_location_availability template (present) ApplicationLocationAvailability mw_application_location_availability( - template (present) JSON.String p_associateDevAppId := ?, + template (present) Json.String p_associateDevAppId := ?, template (present) ApplicationLocationAvailability_AppInfo p_appInfo := ? ) := { associateDevAppId := p_associateDevAppId, @@ -99,14 +99,14 @@ module DeviceApplicationInterfaceAPI_Templates { } // End of template mw_application_location_availability template (omit) ApplicationLocationAvailability_AppInfo m_application_location_availability_info( - in JSON.String p_appDId, - in JSON.String p_appName, - in JSON.String p_appProvider, - in JSON.String p_appDVersion, - in template (omit) JSON.String p_appSoftVersion := omit, - in template (omit) JSON.String p_appDescription := omit, + in Json.String p_appDId, + in Json.String p_appName, + in Json.String p_appProvider, + in Json.String p_appDVersion, + in template (omit) Json.String p_appSoftVersion := omit, + in template (omit) Json.String p_appDescription := omit, in template (omit) AvailableLocationsList p_availableLocations := omit, - in template (omit) JSON.AnyURI p_appPackageSource := omit + in template (omit) Json.AnyURI p_appPackageSource := omit ) := { appDId := p_appDId, appName := p_appName, @@ -119,14 +119,14 @@ module DeviceApplicationInterfaceAPI_Templates { } // End of template m_application_location_availability_info template (present) ApplicationLocationAvailability_AppInfo mw_application_location_availability_info( - template (present) JSON.String p_appDId := ?, - template (present) JSON.String p_appName := ?, - template (present) JSON.String p_appProvider := ?, - template (present) JSON.String p_appDVersion := ?, - template JSON.String p_appSoftVersion := *, - template JSON.String p_appDescription := *, + template (present) Json.String p_appDId := ?, + template (present) Json.String p_appName := ?, + template (present) Json.String p_appProvider := ?, + template (present) Json.String p_appDVersion := ?, + template Json.String p_appSoftVersion := *, + template Json.String p_appDescription := *, template AvailableLocationsList p_availableLocations := *, - template JSON.AnyURI p_appPackageSource := * + template Json.AnyURI p_appPackageSource := * ) := { appDId := p_appDId, appName := p_appName, diff --git a/ttcn/LibMec/DeviceApplicationInterfaceAPI/ttcn/DeviceApplicationInterfaceAPI_TypesAndValues.ttcn b/ttcn/LibMec/DeviceApplicationInterfaceAPI/ttcn/DeviceApplicationInterfaceAPI_TypesAndValues.ttcn index c034556..07bb4c7 100644 --- a/ttcn/LibMec/DeviceApplicationInterfaceAPI/ttcn/DeviceApplicationInterfaceAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/DeviceApplicationInterfaceAPI/ttcn/DeviceApplicationInterfaceAPI_TypesAndValues.ttcn @@ -12,7 +12,7 @@ module DeviceApplicationInterfaceAPI_TypesAndValues { // JSON - import from JSON all; + import from Json all; // LibCommon import from LibCommon_BasicTypesAndValues all; @@ -50,30 +50,30 @@ module DeviceApplicationInterfaceAPI_TypesAndValues { * @member caValue Content of civic address element corresponding to the caType. The format caValue shall comply with section 3.4 of IETF RFC 4776 */ type record CivicAddressElement { - JSON.Integer caType, - JSON.String caValue + Json.Integer caType, + Json.String caValue } type record Geometry { - JSON.String type_, + Json.String type_, Coordinates coordinates } with { variant (type_) "name as 'type'"; } - type record of JSON.Number Coordinate; + type record of Json.Number Coordinate; type record of Coordinate Coordinates; type record Property { - JSON.String key, - JSON.String value_ + Json.String key, + Json.String value_ } with { variant (value_) "name as 'value'"; } type record of Property Properties; type record Polygon { - JSON.String type_, + Json.String type_, Geometry geometry, Properties properties, - JSON.String this_ + Json.String this_ } with { variant (type_) "name as 'type'"; variant (this_) "name as 'this'"; @@ -87,7 +87,7 @@ module DeviceApplicationInterfaceAPI_TypesAndValues { * @see ETSI GS MEC 016 Clause 6.5.2 Type: LocationConstraints */ type record LocationConstraints { - JSON.String countryCode optional, + Json.String countryCode optional, CivicAddressElement civicAddressElement optional, Polygon area optional } @@ -106,12 +106,12 @@ module DeviceApplicationInterfaceAPI_TypesAndValues { * @see ETSI GS MEC 016 Clause 6.2.2 Type: ApplicationList */ type record ApplicationList_AppInfo { - JSON.String appDId, - JSON.String appName, - JSON.String appProvider, - JSON.String appSoftVersion optional, - JSON.String appDVersion, - JSON.String appDescription optional, + Json.String appDId, + Json.String appName, + Json.String appProvider, + Json.String appSoftVersion optional, + Json.String appDVersion, + Json.String appDescription optional, LocationConstraintsList appLocation optional, AppCharcs appCharcs optional } @@ -121,7 +121,7 @@ module DeviceApplicationInterfaceAPI_TypesAndValues { * @member vendorId Vendor identifier */ type record VendorSpecificExt { - JSON.String vendorId + Json.String vendorId } /** @@ -153,8 +153,8 @@ module DeviceApplicationInterfaceAPI_TypesAndValues { * @see ETSI GS MEC 016 Clause 6.2.3 Type: AppContext */ type record UserAppInstanceInfo { - JSON.String appInstanceId optional, - JSON.AnyURI referenceURI optional, + Json.String appInstanceId optional, + Json.AnyURI referenceURI optional, LocationConstraints appLocation optional } type record of UserAppInstanceInfo UserAppInstanceInfoList; @@ -172,14 +172,14 @@ module DeviceApplicationInterfaceAPI_TypesAndValues { * @see ETSI GS MEC 016 Clause 6.2.3 Type: AppContext */ type record ApplicationContext_AppInfo { - JSON.String appDId, - JSON.String appName, - JSON.String appProvider, - JSON.String appSoftVersion optional, - JSON.String appDVersion, - JSON.String appDescription optional, + Json.String appDId, + Json.String appName, + Json.String appProvider, + Json.String appSoftVersion optional, + Json.String appDVersion, + Json.String appDescription optional, UserAppInstanceInfoList userAppInstanceInfo optional, - JSON.AnyURI appPackageSource optional + Json.AnyURI appPackageSource optional } /** @@ -193,9 +193,9 @@ module DeviceApplicationInterfaceAPI_TypesAndValues { * @see ETSI GS MEC 016 Clause 6.2.3 Type: AppContext */ type record AppContext { - JSON.String contextId optional, - JSON.String associateDevAppId, - JSON.AnyURI callbackReference optional, + Json.String contextId optional, + Json.String associateDevAppId, + Json.AnyURI callbackReference optional, boolean appLocationUpdates optional, boolean appAutoInstantiation optional, ApplicationContext_AppInfo appInfo @@ -224,14 +224,14 @@ module DeviceApplicationInterfaceAPI_TypesAndValues { * @see ETSI GS MEC 016 Clause 6.2.4 Type: ApplicationLocationAvailability */ type record ApplicationLocationAvailability_AppInfo { - JSON.String appDId, - JSON.String appName, - JSON.String appProvider, - JSON.String appSoftVersion optional, - JSON.String appDVersion, - JSON.String appDescription optional, + Json.String appDId, + Json.String appName, + Json.String appProvider, + Json.String appSoftVersion optional, + Json.String appDVersion, + Json.String appDescription optional, AvailableLocationsList availableLocations optional, - JSON.AnyURI appPackageSource optional + Json.AnyURI appPackageSource optional } /** @@ -241,7 +241,7 @@ module DeviceApplicationInterfaceAPI_TypesAndValues { * @see ETSI GS MEC 016 Clause 6.2.4 Type: ApplicationLocationAvailability */ type record ApplicationLocationAvailability { - JSON.String associateDevAppId, + Json.String associateDevAppId, ApplicationLocationAvailability_AppInfo appInfo } @@ -254,10 +254,10 @@ module DeviceApplicationInterfaceAPI_TypesAndValues { * @see ETSI GS MEC 016 Clause 6.4.2 Type: AddressChangeNotification */ type record AddressChangeNotification { - JSON.String notificationType, - JSON.String contextId, - JSON.String appInstanceId, - JSON.AnyURI referenceURI + Json.String notificationType, + Json.String contextId, + Json.String appInstanceId, + Json.AnyURI referenceURI } /** @@ -267,8 +267,8 @@ module DeviceApplicationInterfaceAPI_TypesAndValues { * @see ETSI GS MEC 016 Clause 6.4.3 Type: ApplicationContextDeleteNotification */ type record ApplicationContextDeleteNotification { - JSON.String notificationType, - JSON.String contextId + Json.String notificationType, + Json.String contextId } /** @@ -279,8 +279,8 @@ module DeviceApplicationInterfaceAPI_TypesAndValues { * @see ETSI GS MEC 016 Clause 6.4.4 Type: ApplicationContextDeleteNotification */ type record ApplicationContextUpdateNotification { - JSON.String notificationType, - JSON.String contextId, + Json.String notificationType, + Json.String contextId, UserAppInstanceInfoList userAppInstanceInfo } @@ -292,8 +292,8 @@ module DeviceApplicationInterfaceAPI_TypesAndValues { * @see ETSI GS MEC 016 Clause 6.4.5 Type: ApplicationLocationAvailabilityNotification */ type record ApplicationLocationAvailabilityNotification { - JSON.String notificationType, - JSON.String contextId, + Json.String notificationType, + Json.String contextId, AvailableLocationsList availableLocations } diff --git a/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Functions.ttcn b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Functions.ttcn index 9e6c807..7e3cb45 100644 --- a/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Functions.ttcn +++ b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Functions.ttcn @@ -1,7 +1,7 @@ module EdgePlatformApplicationEnablementAPI_Functions { // JSON - import from JSON all; + import from Json all; // LibCommon import from LibCommon_BasicTypesAndValues all; diff --git a/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Templates.ttcn b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Templates.ttcn index 58ef2f6..4584bc9 100644 --- a/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Templates.ttcn +++ b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Templates.ttcn @@ -5,7 +5,7 @@ module EdgePlatformApplicationEnablementAPI_Templates { // JSON - import from JSON all; + import from Json all; // LibCommon import from LibCommon_BasicTypesAndValues all; diff --git a/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_TypesAndValues.ttcn b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_TypesAndValues.ttcn index b5b4e78..30b0b36 100644 --- a/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_TypesAndValues.ttcn @@ -5,7 +5,7 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { // JSON - import from JSON all; + import from Json all; // LibCommon import from LibCommon_BasicTypesAndValues all; @@ -18,7 +18,7 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { /** * @desc Shall be set to AppTerminationNotification. */ - type JSON.String NotificationType; + type Json.String NotificationType; /** * @desc Operation that is being performed on the MEC @@ -54,7 +54,7 @@ in the case of stop. running */ type record AppReadyConfirmation { - JSON.String indication + Json.String indication } /** @@ -79,13 +79,13 @@ running /** * @desc It is used as the filtering criterion for the subscribed events. */ - type JSON.String AppInstanceId; + type Json.String AppInstanceId; /** * @desc URI selected by the mobile edge application instance to receive notifications on the subscribed mobile edge application instance management information. * This shall be included in both the request and the response." */ - type JSON.String AppTerminationNotificationSubscription_CallbackReference; + type Json.String AppTerminationNotificationSubscription_CallbackReference; /** * @desc This type represents the information that the mobile edge platform notifies the subscribed application instance about the corresponding application instance termination/stop. @@ -102,27 +102,27 @@ running /** * @desc Shall be set to AppTerminationNotificationSubscription. */ - type JSON.String SubscriptionType; + type Json.String SubscriptionType; /** * @desc Reference of the catalogue. */ - type JSON.String CategoryRef_Href; + type Json.String CategoryRef_Href; /** * @desc Unique identifier of the category. */ - type JSON.String CategoryRef_Id; + type Json.String CategoryRef_Id; /** * @desc Name of the category. */ - type JSON.String Name; + type Json.String Name; /** * @desc Category version. */ - type JSON.String CategoryRef_Version; + type Json.String CategoryRef_Version; /** * @desc This type represents the category reference. @@ -178,12 +178,12 @@ running /** * @desc IP address of the remote destination. */ - type JSON.String DestinationInterface_IpAddress; + type Json.String DestinationInterface_IpAddress; /** * @desc Source address identifies the MAC address of the interface. */ - type JSON.String DestinationInterface_MacAddress; + type Json.String DestinationInterface_MacAddress; /** * @desc This type represents the destination interface. @@ -200,17 +200,17 @@ running /** * @desc FQDN resolved by the DNS rule. */ - type JSON.String DomainName; + type Json.String DomainName; /** * @desc Identifies the DNS Rule. */ - type JSON.String DnsRule_Id; + type Json.String DnsRule_Id; /** * @desc IP address associated with the FQDN resolved by the DNS rule. */ - type JSON.String DnsRule_IpAddress; + type Json.String DnsRule_IpAddress; /** * @desc IP address type. @@ -250,7 +250,7 @@ running /** * @desc Host portion of the address. */ - type JSON.String Host; + type Json.String Host; /** * @desc Port portion of the address. @@ -282,7 +282,7 @@ running /** * @desc Entry point information of the service. */ - type JSON.String EndPointInfo_Uri; + type Json.String EndPointInfo_Uri; /** * @desc Entry point information of the service as string, formatted according to URI syntax. @@ -299,7 +299,7 @@ running /** * @desc URI referring to a resource. */ - type JSON.String Href; + type Json.String Href; /** * @desc Self-referring URI. @@ -359,7 +359,7 @@ running * @member subscriptionType Type of the subscription */ type record Subscription_ { - JSON.AnyURI href, + Json.AnyURI href, SubscriptionType subscriptionType } type record length(1..infinity) of Subscription_ Subscriptions; @@ -378,7 +378,7 @@ running /** * @desc The token endpoint. */ - type JSON.String TokenEndpoint; + type Json.String TokenEndpoint; /** * @desc Parameters related to use of OAuth 2.0. @@ -408,7 +408,7 @@ running /** * @desc URI selected by the mobile edge application instance to receive notifications on the subscribed mobile edge service availability information. This shall be included in both the request and the response. */ - type JSON.String SerAvailabilityNotificationSubscription_CallbackReference; + type Json.String SerAvailabilityNotificationSubscription_CallbackReference; /** * @desc This type represents a subscription to the notifications from the mobile edge platform regarding the availability of a mobile edge service or a list of mobile edge services. @@ -425,7 +425,7 @@ running /** * @desc Shall be set to SerAvailabilityNotificationSubscription. */ - type JSON.String SerAvailabilityNotificationSubscription_SubscriptionType; + type Json.String SerAvailabilityNotificationSubscription_SubscriptionType; /** * @desc Filtering criteria to match services for which events are requested to be reported @@ -435,7 +435,7 @@ running SerNameList serNames optional, CategoryRefList serCategories optional, ServiceStateList states optional, - JSON.Bool isLocal optional + Json.Bool isLocal optional } /** @@ -462,13 +462,13 @@ running /** * @desc Identifier of the service instance assigned by the MEPM / mobile edge platform. */ - type JSON.String SerInstanceId; + type Json.String SerInstanceId; 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 Json.String SerName; type record length(1..infinity) of SerName SerNameList; /** @@ -496,12 +496,12 @@ running /** * @desc Identifier of the platform-provided transport to be used by the service. Valid identifiers may be obtained using the \"Transport information query\" procedure. May be present in POST requests to signal the use of a platform-provided transport for the service, and shall be absent otherwise. */ - type JSON.String TransportId; + type Json.String TransportId; /** * @desc Service version. */ - type JSON.String ServiceInfo_Version; + type Json.String ServiceInfo_Version; /** * @desc Type of the change */ @@ -525,8 +525,8 @@ running TransportInfo transportInfo optional, SerializerType serializer, LocalityType scopeOfLocality optional, - JSON.Bool consumedLocalOnly optional, - JSON.Bool isLocal optional, + Json.Bool consumedLocalOnly optional, + Json.Bool isLocal optional, UInt32 livenessInterval optional, ServiceInfo_Link links } with { @@ -578,7 +578,7 @@ running /** * @desc NTP server address. */ - type JSON.String NtpServerAddr; + type Json.String NtpServerAddr; /** * @desc Address type of NTP server. @@ -591,7 +591,7 @@ running /** * @desc PTP Master IP Address. */ - type JSON.String NtpServers_PtpMasterIpAddress; + type Json.String NtpServers_PtpMasterIpAddress; /** * @desc PTP Master local priority. @@ -644,7 +644,7 @@ running /** * @desc Identify the traffic ip address. */ - type JSON.String TrafficFilter_Address; + type Json.String TrafficFilter_Address; type record of TrafficFilter_Address TrafficFilter_AddressList; /** @@ -655,13 +655,13 @@ running /** * @desc Identify the traffic ip address. */ - type JSON.String TrafficFilter_Port; + type Json.String TrafficFilter_Port; type record length(1..infinity) of TrafficFilter_Port TrafficFilter_PortList; /** * @desc Protocol of the traffic filter. */ - type JSON.String TrafficFilter_Protocol; + type Json.String TrafficFilter_Protocol; type record of TrafficFilter_Protocol TrafficFilter_ProtocolList; /** @@ -677,19 +677,19 @@ running /** * @desc Used for tag based traffic rule. */ - type JSON.String TrafficFilter_Tag; + type Json.String TrafficFilter_Tag; type record of TrafficFilter_Tag TrafficFilter_TagList; /** * @desc Used for GTP tunnel based traffic rule. */ - type JSON.String TrafficFilter_TunnelAddress; + type Json.String TrafficFilter_TunnelAddress; type record of TrafficFilter_TunnelAddress TrafficFilter_TunnelAddressList; /** * @desc Used for GTP tunnel based traffic rule. */ - type JSON.String TrafficFilter_TunnelPort; + type Json.String TrafficFilter_TunnelPort; type record of TrafficFilter_TunnelPort TrafficFilter_TunnelPortList; /** @@ -735,7 +735,7 @@ running /** * @desc Identify the traffic rule. */ - type JSON.String TrafficRule_Id; + type Json.String TrafficRule_Id; /** * @desc Priority of this traffic rule. If traffic rule conflicts, the one with higher priority take precedence. @@ -769,12 +769,12 @@ running /** * @desc Human-readable description of this transport. */ - type JSON.String TransportInfo_Description; + type Json.String TransportInfo_Description; /** * @desc The identifier of this transport. */ - type JSON.String TransportInfo_Id; + type Json.String TransportInfo_Id; /** * @desc Additional implementation specific details of the transport. @@ -784,17 +784,17 @@ running /** * @desc The name of this transport. */ - type JSON.String TransportInfo_Name; + type Json.String TransportInfo_Name; /** * @desc The name of the protocol used. Shall be set to HTTP for a REST API. */ - type JSON.String TransportInfo_Protocol; + type Json.String TransportInfo_Protocol; /** * @desc The version of the protocol used. */ - type JSON.String TransportInfo_Version; + type Json.String TransportInfo_Version; /** * @desc This type represents information about a transport endpoint. @@ -839,12 +839,12 @@ running /** * @desc Destination address of the tunnel. */ - type JSON.String TunnelInfo_TunnelDstAddress; + type Json.String TunnelInfo_TunnelDstAddress; /** * @desc Source address of the tunnel. */ - type JSON.String TunnelInfo_TunnelSrcAddress; + type Json.String TunnelInfo_TunnelSrcAddress; /** * @desc This type represents the tunnel information. diff --git a/ttcn/LibMec/FixedAccessInformationAPI/module.mk b/ttcn/LibMec/FixedAccessInformationServiceAPI/module.mk similarity index 100% rename from ttcn/LibMec/FixedAccessInformationAPI/module.mk rename to ttcn/LibMec/FixedAccessInformationServiceAPI/module.mk diff --git a/ttcn/LibMec/FixedAccessInformationAPI/ttcn/FixedAccessInformationServiceAPI_Pics.ttcn b/ttcn/LibMec/FixedAccessInformationServiceAPI/ttcn/FixedAccessInformationServiceAPI_Pics.ttcn similarity index 100% rename from ttcn/LibMec/FixedAccessInformationAPI/ttcn/FixedAccessInformationServiceAPI_Pics.ttcn rename to ttcn/LibMec/FixedAccessInformationServiceAPI/ttcn/FixedAccessInformationServiceAPI_Pics.ttcn diff --git a/ttcn/LibMec/FixedAccessInformationAPI/ttcn/FixedAccessInformationServiceAPI_Pixits.ttcn b/ttcn/LibMec/FixedAccessInformationServiceAPI/ttcn/FixedAccessInformationServiceAPI_Pixits.ttcn similarity index 64% rename from ttcn/LibMec/FixedAccessInformationAPI/ttcn/FixedAccessInformationServiceAPI_Pixits.ttcn rename to ttcn/LibMec/FixedAccessInformationServiceAPI/ttcn/FixedAccessInformationServiceAPI_Pixits.ttcn index 7581680..563b4f2 100644 --- a/ttcn/LibMec/FixedAccessInformationAPI/ttcn/FixedAccessInformationServiceAPI_Pixits.ttcn +++ b/ttcn/LibMec/FixedAccessInformationServiceAPI/ttcn/FixedAccessInformationServiceAPI_Pixits.ttcn @@ -1,7 +1,7 @@ module FixedAccessInformationServiceAPI_Pixits { // JSON - import from JSON all; + import from Json all; // LibMec_FixedAccessInformationServiceAPI import from FixedAccessInformationServiceAPI_TypesAndValues all; @@ -18,14 +18,14 @@ module FixedAccessInformationServiceAPI_Pixits { modulepar OnuId PX_NON_EXISTING_FAI_ONU_ID := ""; - modulepar JSON.String PX_FAI_SUB_ID := ""; + modulepar Json.String PX_FAI_SUB_ID := ""; - modulepar JSON.String PX_NON_EXISTING_FAI_SUB_ID := ""; + modulepar Json.String PX_NON_EXISTING_FAI_SUB_ID := ""; - modulepar JSON.AnyURI PX_ONU_ALARM_SUB_CALLBACK_URI := ""; + modulepar Json.AnyURI PX_ONU_ALARM_SUB_CALLBACK_URI := ""; - modulepar JSON.String PX_SUBSCRIPTION_ID := ""; + modulepar Json.String PX_SUBSCRIPTION_ID := ""; - modulepar JSON.String PX_NON_EXISTENT_SUBSCRIPTION_ID := ""; + modulepar Json.String PX_NON_EXISTENT_SUBSCRIPTION_ID := ""; } // End of module FixedAccessInformationServiceAPI_Pixits diff --git a/ttcn/LibMec/FixedAccessInformationAPI/ttcn/FixedAccessInformationServiceAPI_Templates.ttcn b/ttcn/LibMec/FixedAccessInformationServiceAPI/ttcn/FixedAccessInformationServiceAPI_Templates.ttcn similarity index 94% rename from ttcn/LibMec/FixedAccessInformationAPI/ttcn/FixedAccessInformationServiceAPI_Templates.ttcn rename to ttcn/LibMec/FixedAccessInformationServiceAPI/ttcn/FixedAccessInformationServiceAPI_Templates.ttcn index 91aecd4..1534408 100644 --- a/ttcn/LibMec/FixedAccessInformationAPI/ttcn/FixedAccessInformationServiceAPI_Templates.ttcn +++ b/ttcn/LibMec/FixedAccessInformationServiceAPI/ttcn/FixedAccessInformationServiceAPI_Templates.ttcn @@ -1,7 +1,7 @@ module FixedAccessInformationServiceAPI_Templates { // JSON - import from JSON all; + import from Json all; // LibCommon import from LibCommon_BasicTypesAndValues all; @@ -33,12 +33,12 @@ module FixedAccessInformationServiceAPI_Templates { template (omit) DeviceInfo m_device_info( in template (value) GatewayId p_gwId, in template (value) DeviceStatus p_deviceStatus, - in template (value) JSON.Number p_upTime, - in template (value) JSON.Number p_iPConnectionUpTime, - in template (value) JSON.Number p_totalBytesSent, - in template (value) JSON.Number p_totalBytesReceived, - in template (value) JSON.Number p_totalPacketsSent, - in template (value) JSON.Number p_totalPacketsReceived, + in template (value) Json.Number p_upTime, + in template (value) Json.Number p_iPConnectionUpTime, + in template (value) Json.Number p_totalBytesSent, + in template (value) Json.Number p_totalBytesReceived, + in template (value) Json.Number p_totalPacketsSent, + in template (value) Json.Number p_totalPacketsReceived, in template (omit) TimeStamp p_timeStamp := omit, in template (omit) DeviceId p_deviceId := omit, in template (omit) IPPingDiagnostics p_iPPingDiagnostics := omit, @@ -65,12 +65,12 @@ module FixedAccessInformationServiceAPI_Templates { template DeviceInfo mw_device_info( template (present) GatewayId p_gwId := ?, template (present) DeviceStatus p_deviceStatus := ?, - template (present) JSON.Number p_upTime := ?, - template (present) JSON.Number p_iPConnectionUpTime := ?, - template (present) JSON.Number p_totalBytesSent := ?, - template (present) JSON.Number p_totalBytesReceived := ?, - template (present) JSON.Number p_totalPacketsSent := ?, - template (present) JSON.Number p_totalPacketsReceived := ?, + template (present) Json.Number p_upTime := ?, + template (present) Json.Number p_iPConnectionUpTime := ?, + template (present) Json.Number p_totalBytesSent := ?, + template (present) Json.Number p_totalBytesReceived := ?, + template (present) Json.Number p_totalPacketsSent := ?, + template (present) Json.Number p_totalPacketsReceived := ?, template TimeStamp p_timeStamp := *, template DeviceId p_deviceId := *, template IPPingDiagnostics p_iPPingDiagnostics := *, @@ -155,7 +155,7 @@ module FixedAccessInformationServiceAPI_Templates { } // End of template m_wsubscription_link_list template (omit) OnuAlarmSubscription m_onu_alarm_subscription( - in template (value) JSON.AnyURI p_callbackReference, + in template (value) Json.AnyURI p_callbackReference, in template (value) FilterCriteriaOnuAlarm p_filterCriteriaOnuAlarm, in template (omit) Links p_links := omit, in template (omit) TimeStamp p_expiryDeadline := omit @@ -168,7 +168,7 @@ module FixedAccessInformationServiceAPI_Templates { } // End of template m_onu_alarm_subscription template (omit) OnuAlarmSubscription m_onu_alarm_subscription_bad_request( - in template (value) JSON.AnyURI p_callbackReference, + in template (value) Json.AnyURI p_callbackReference, in template (value) FilterCriteriaOnuAlarm p_filterCriteriaOnuAlarm, in template (omit) Links p_links := omit, in template (omit) TimeStamp p_expiryDeadline := omit @@ -177,7 +177,7 @@ module FixedAccessInformationServiceAPI_Templates { } // End of template m_onu_alarm_subscription_bad_request template OnuAlarmSubscription mw_onu_alarm_subscription( - template (present) JSON.AnyURI p_callbackReference := ?, + template (present) Json.AnyURI p_callbackReference := ?, template (present) FilterCriteriaOnuAlarm p_filterCriteriaOnuAlarm := ?, template Links p_links := *, template TimeStamp p_expiryDeadline := * diff --git a/ttcn/LibMec/FixedAccessInformationAPI/ttcn/FixedAccessInformationServiceAPI_TypesAndValues.ttcn b/ttcn/LibMec/FixedAccessInformationServiceAPI/ttcn/FixedAccessInformationServiceAPI_TypesAndValues.ttcn similarity index 93% rename from ttcn/LibMec/FixedAccessInformationAPI/ttcn/FixedAccessInformationServiceAPI_TypesAndValues.ttcn rename to ttcn/LibMec/FixedAccessInformationServiceAPI/ttcn/FixedAccessInformationServiceAPI_TypesAndValues.ttcn index 45c2466..d576b82 100644 --- a/ttcn/LibMec/FixedAccessInformationAPI/ttcn/FixedAccessInformationServiceAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/FixedAccessInformationServiceAPI/ttcn/FixedAccessInformationServiceAPI_TypesAndValues.ttcn @@ -1,7 +1,7 @@ module FixedAccessInformationServiceAPI_TypesAndValues { // JSON - import from JSON all; + import from Json all; // LibCommon import from LibCommon_BasicTypesAndValues all; @@ -49,9 +49,9 @@ module FixedAccessInformationServiceAPI_TypesAndValues { type record ConnectivityInfo { LastMileTech lastMileTech optional, InterfaceType interfaceType, - JSON.Number dsbw optional, - JSON.Number usbw optional, - JSON.Number latency optional + Json.Number dsbw optional, + Json.Number usbw optional, + Json.Number latency optional } /** @@ -87,17 +87,17 @@ module FixedAccessInformationServiceAPI_TypesAndValues { /** * @desc Latitude (DATUM=WGS84) -90 to 90 in decimal degree format DDD.ddd */ - type JSON.Number Latitude; + type Json.Number Latitude; /** * @desc Longitude (DATUM=WGS84) -180 to 180 in decimal degree format DDD.ddd */ - type JSON.Number Longitude; + type Json.Number Longitude; /** * @desc Postal code for the location */ - type JSON.String PostalCode; + type Json.String PostalCode; type record CpInfo_{ Latitude latitude optional, @@ -128,12 +128,12 @@ module FixedAccessInformationServiceAPI_TypesAndValues { GatewayId gwId, DeviceId deviceId optional, DeviceStatus deviceStatus, - JSON.Number upTime, - JSON.Number iPConnectionUpTime, - JSON.Number totalBytesSent, - JSON.Number totalBytesReceived, - JSON.Number totalPacketsSent, - JSON.Number totalPacketsReceived, + Json.Number upTime, + Json.Number iPConnectionUpTime, + Json.Number totalBytesSent, + Json.Number totalBytesReceived, + Json.Number totalPacketsSent, + Json.Number totalPacketsReceived, IPPingDiagnostics iPPingDiagnostics optional, TraceRouteDiagnostics traceRouteDiagnostics optional, DownloadDiagnostics downloadDiagnostics optional, @@ -143,12 +143,12 @@ module FixedAccessInformationServiceAPI_TypesAndValues { /** * @desc Information (typically the serial number) to identify an Internet Gateway Device through which the customer premises device is connected. */ - type record of JSON.String GatewayId; + type record of Json.String GatewayId; /** * @desc Typically, the serial number of the device. */ - type record of JSON.String DeviceId; + type record of Json.String DeviceId; /** * @desc Current operational status of the device. @@ -195,7 +195,7 @@ module FixedAccessInformationServiceAPI_TypesAndValues { /** * @desc Information (typically the serial number) to identify a Cable Modem at subscriber locations intended for use in conveying data communications on a cable data system. */ - type JSON.String CmdId; + type Json.String CmdId; /** * @desc It provides CM connectivity status information of the CM. @@ -210,18 +210,18 @@ module FixedAccessInformationServiceAPI_TypesAndValues { type record CmStatus_ { IfIndex ifIndex, CmRegState cmRegState, - JSON.Number resets, - JSON.Number lostSyncs, - JSON.Number invalidRegRsps, - JSON.Bool energyMgt1x1OperStatus, - JSON.Bool emDlsOperStatus + Json.Number resets, + Json.Number lostSyncs, + Json.Number invalidRegRsps, + Json.Bool energyMgt1x1OperStatus, + Json.Bool emDlsOperStatus } type record of CmStatus_ CmStatus; /** * @desc It denotes the MAC Domain interface index of the CM. */ - type JSON.String IfIndex; + type Json.String IfIndex; /** * @desc It defines the CM connectivity state. @@ -264,12 +264,12 @@ module FixedAccessInformationServiceAPI_TypesAndValues { */ type record CmDpvStats_ { IfIndex ifIndex, - JSON.Number lastMeasLatency, + Json.Number lastMeasLatency, TimeStamp lastMeasTime, - JSON.Number minLatency, - JSON.Number maxLatency, - JSON.Number avgLatency, - JSON.Number numMeas + Json.Number minLatency, + Json.Number maxLatency, + Json.Number avgLatency, + Json.Number numMeas } type record of CmDpvStats_ CmDpvStats; @@ -296,13 +296,13 @@ module FixedAccessInformationServiceAPI_TypesAndValues { * @member aqmDroppedPkts For upstream service flows on which AQM is enabled, this attribute counts the number of Packet Data PDUs classified to this service flow dropped due to Active Queue Management drop decisions. */ type record ServiceFlowInfo_ { - JSON.Number serviceFlowId, - JSON.Number pkts, + Json.Number serviceFlowId, + Json.Number pkts, TimeStamp timeCreated, - JSON.Number timeActive, - JSON.Number policedDropPkts, - JSON.Number policedDelayPkts, - JSON.Number aqmDroppedPkts + Json.Number timeActive, + Json.Number policedDropPkts, + Json.Number policedDelayPkts, + Json.Number aqmDroppedPkts } type record of ServiceFlowInfo_ ServiceFlowInfo; @@ -320,7 +320,7 @@ module FixedAccessInformationServiceAPI_TypesAndValues { OpticalNetworkInfo opticalNetworkInfo } - type JSON.String PonSYS_ID; + type Json.String PonSYS_ID; /** * @desc This type represents the information of the of an optical network (e.g., G-PON, XG-PON, NG-PON2, XGS-PON). @@ -342,7 +342,7 @@ module FixedAccessInformationServiceAPI_TypesAndValues { /** * @desc Information to identify an Optical Network Unit. */ - type JSON.String OnuId; + type Json.String OnuId; type record of OnuId OnuIds; /** @@ -400,7 +400,7 @@ module FixedAccessInformationServiceAPI_TypesAndValues { /** * @desc URI referring to a resource. */ - type JSON.String Href; + type Json.String Href; /** * @desc This type represents a list of links related to currently existing subscriptions for the service consumer. @@ -420,7 +420,7 @@ module FixedAccessInformationServiceAPI_TypesAndValues { * @member subscriptionType Type of subscription */ type record Subscription_ { - JSON.AnyURI href, + Json.AnyURI href, SubscriptionType subscriptionType } type record of Subscription_ Subscriptions; @@ -440,8 +440,8 @@ module FixedAccessInformationServiceAPI_TypesAndValues { * @desc This type represents a subscription to ONU alarm notifications from FAIS. */ type record OnuAlarmSubscription { - JSON.String subscriptionType, - JSON.AnyURI callbackReference, + Json.String subscriptionType, + Json.AnyURI callbackReference, Links links optional, FilterCriteriaOnuAlarm filterCriteriaOnuAlarm, TimeStamp expiryDeadline optional diff --git a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Functions.ttcn b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Functions.ttcn index fac2cf4..6035b6a 100644 --- a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Functions.ttcn +++ b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Functions.ttcn @@ -11,7 +11,7 @@ module LocationAPI_Functions { // JSON - import from JSON all; + import from Json all; // LibCommon import from LibCommon_BasicTypesAndValues all; diff --git a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Pixits.ttcn b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Pixits.ttcn index 2acb417..46cda75 100644 --- a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Pixits.ttcn +++ b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Pixits.ttcn @@ -1,7 +1,7 @@ module LocationAPI_Pixits { // JSON - import from JSON all; + import from Json all; // LibCommon import from LibCommon_BasicTypesAndValues all; @@ -51,11 +51,11 @@ module LocationAPI_Pixits { modulepar Address PX_UE_ZONAL_TRAF_SUB_URI := ""; - modulepar JSON.AnyURI PX_UE_LOC_QRY_URI := "/location/v2/queries/distance"; + modulepar Json.AnyURI PX_UE_LOC_QRY_URI := "/location/v2/queries/distance"; - modulepar JSON.Number PX_UE_COORD_LAT := -80.86302; + modulepar Json.Number PX_UE_COORD_LAT := -80.86302; - modulepar JSON.Number PX_UE_COORD_LONG := 41.277306; + modulepar Json.Number PX_UE_COORD_LONG := 41.277306; modulepar Address PX_ACR_SOME_IP := ""; diff --git a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Templates.ttcn b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Templates.ttcn index 1246561..a169aeb 100644 --- a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Templates.ttcn +++ b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Templates.ttcn @@ -1,7 +1,7 @@ module LocationAPI_Templates { // JSON - import from JSON all; + import from Json all; // LibCommon import from LibCommon_BasicTypesAndValues all; @@ -184,8 +184,8 @@ module LocationAPI_Templates { in ClientCorrelator p_clientCorrelator, in CallbackReference p_callbackReference, in Address p_address := PX_USER, - in JSON.Number p_frequency := 10.0, - in JSON.Number p_requestedAccuracy := 10.0 + in Json.Number p_frequency := 10.0, + in Json.Number p_requestedAccuracy := 10.0 ) := { clientCorrelator := p_clientCorrelator, callbackReference := p_callbackReference, @@ -199,8 +199,8 @@ module LocationAPI_Templates { template (present) ClientCorrelator p_clientCorrelator := ?, template (present) CallbackReference p_callbackReference := ?, template (present) Address p_address := PX_USER, - template (present) JSON.Number p_frequency := ?, - template (present) JSON.Number p_requestedAccuracy := ? + template (present) Json.Number p_frequency := ?, + template (present) Json.Number p_requestedAccuracy := ? ) := { clientCorrelator := p_clientCorrelator, callbackReference := p_callbackReference, @@ -243,12 +243,12 @@ module LocationAPI_Templates { in template (omit) ClientCorrelator p_clientCorrelator := omit, in template (value) CallbackReference p_callbackReference, 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 := 200.0, - in template (value) JSON.Number p_trackingAccuracy := 10.0, + 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 := 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.Bool p_checkImmediate := true, in template (value) UInt32 p_frequency := 10, in template (omit) ResourceURL p_resourceURL := omit ) := { @@ -273,12 +273,12 @@ module LocationAPI_Templates { template ClientCorrelator p_clientCorrelator := *, template (present) CallbackReference p_callbackReference := ?, template (present) Addresses p_address := ?, - template (present) JSON.Number p_latitude := ?, - template (present) JSON.Number p_longitude := ?, - template (present) JSON.Number p_radius := ?, - template (present) JSON.Number p_trackingAccuracy := ?, + template (present) Json.Number p_latitude := ?, + template (present) Json.Number p_longitude := ?, + template (present) Json.Number p_radius := ?, + template (present) Json.Number p_trackingAccuracy := ?, template (present) EnteringLeavingCriteria p_enteringLeavingCriteria := ?, - template (present) JSON.Bool p_checkImmediate := ?, + template (present) Json.Bool p_checkImmediate := ?, template (present) UInt32 p_frequency := ?, template ResourceURL p_resourceURL := * ) := { @@ -299,13 +299,13 @@ module LocationAPI_Templates { trackingAccuracy := p_trackingAccuracy } // End of template m_wcircle_notification_subscription - template (value) TerminalDistance m_terminal_distance(in JSON.Number p_distance) := { + template (value) TerminalDistance m_terminal_distance(in Json.Number p_distance) := { distance := p_distance, accuracy := omit, timestamp_ := omit } // End of template m_terminal_distance - template (present) TerminalDistance mw_terminal_distance(template (present) JSON.Number p_distance := ?) := { + template (present) TerminalDistance mw_terminal_distance(template (present) Json.Number p_distance := ?) := { distance := p_distance, accuracy := *, timestamp_ := * @@ -313,14 +313,14 @@ module LocationAPI_Templates { template (omit) DistanceNotificationSubscription m_distance_notification_subscription( in template (value) CallbackReference p_callbackReference, - in template (value) JSON.Bool p_checkImmediate := true, + in template (value) Json.Bool p_checkImmediate := true, 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_distance, 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 (value) Json.Number p_trackingAccuracy := 10.0, in template (omit) ResourceURL p_resourceURL := omit ) := { callbackReference := p_callbackReference, @@ -341,14 +341,14 @@ module LocationAPI_Templates { template DistanceNotificationSubscription mw_distance_notification_subscription( template (present) CallbackReference p_callbackReference := ?, - template (present) JSON.Bool p_checkImmediate := ?, + template (present) Json.Bool p_checkImmediate := ?, template ClientCorrelator p_clientCorrelator := *, template (present) DistanceCriteria p_criteria := ?, - template (present) JSON.Number p_distance := ?, + template (present) Json.Number p_distance := ?, template (present) UInt32 p_frequency := ?, template (present) Addresses p_monitoredAddress := ?, template Addresses p_referenceAddress := *, - template (present) JSON.Number p_trackingAccuracy := ?, + template (present) Json.Number p_trackingAccuracy := ?, template ResourceURL p_resourceURL := * ) := { callbackReference := p_callbackReference, diff --git a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn index 2b0134c..7206dfa 100644 --- a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn @@ -11,7 +11,7 @@ module LocationAPI_TypesAndValues { // JSON - import from JSON all; + import from Json all; // LibCommon import from LibCommon_BasicTypesAndValues all; @@ -84,9 +84,9 @@ module LocationAPI_TypesAndValues { UInt32 verticalUncertainty optional } - type record of JSON.Number Latitude; + type record of Json.Number Latitude; - type record of JSON.Number Longitude; + type record of Json.Number Longitude; /** * @desc A type containing location information with latitude, longitude and altitude, in addition the accuracy of the information are provided. @@ -109,7 +109,7 @@ module LocationAPI_TypesAndValues { type record LocationInfo { Latitude latitude, Longitude longitude, - JSON.Number altitude optional, + Json.Number altitude optional, UInt32 accuracy optional, UInt32 accuracySemiMinor optional, UInt32 accuracyAltitude optional, @@ -157,7 +157,7 @@ module LocationAPI_TypesAndValues { * @desc Identifier of access point, (reference ETSI TS 129 171). Where the E-CGI is made up of the PLMN and Cell Identity (28 bit string). Then the PLMN is made up of the 3 digit MCC & 2 or 3 digit MNC. The Cell Portion is an optional element * @see ETSI GS MEC 013 V2.1.1 (2019-09) 6.6.1 accessPointId */ - type JSON.String AccessPointId; + type Json.String AccessPointId; type UInt32 DateTimeStamp; // FIXME To be reviewed @@ -201,19 +201,19 @@ module LocationAPI_TypesAndValues { /** * @desc Address of user (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI). */ - type JSON.AnyURI Address + type Json.AnyURI Address type record of Address Addresses; /** * @desc Reserved for future use. */ - type JSON.String AncillaryInfo; + type Json.String AncillaryInfo; /** * @desc CallBackData if passed by the application during the associated ZonalTrafficSubscription and UserTrackingSubscription operation. See [\ REST_NetAPI_Common]. */ - type JSON.String CallbackData; + type Json.String CallbackData; /** * @desc Notification serialization format @@ -238,7 +238,7 @@ REST_NetAPI_Common]. /** * @desc Uniquely identifies this create subscription request. If there is a communication failure during the request, using the same clientCorrelator when retrying the request allows the operator to avoid creating a duplicate subscription. */ - type JSON.String ClientCorrelator; + type Json.String ClientCorrelator; /** * @desc The connection type for the access point @@ -259,22 +259,22 @@ REST_NetAPI_Common]. /** * @desc Contextual information of a user location (e.g., aisle, floor, room number, etc.) */ - type JSON.String ContextLocationInfo; + type Json.String ContextLocationInfo; /** * @desc Zone ID */ - type JSON.String CurrentAccessPointId; + type Json.String CurrentAccessPointId; /** * @desc Period (in seconds) of time notifications are provided for. If set to \"0\" (zero), a default duration time, which is specified by the service policy, will be used. If the parameter is omitted, the notifications will continue until the maximum duration time, which is specified by the service policy, unless the notifications are stopped by deletion of subscription for notifications. This element MAY be given by the client during resource creation in order to signal the desired lifetime of the subscription. The server MUST return in this element the period of time for which the subscription will still be valid. */ - type JSON.Date Duration; + type Json.Date Duration; /** * @desc Interest realm of access point (e.g. geographical area, a type of industry etc.). */ - type JSON.String InterestRealm; + type Json.String InterestRealm; /** * @desc Link to other resources @@ -282,14 +282,14 @@ REST_NetAPI_Common]. * @member href UTI */ type record Link { - JSON.String rel, - JSON.String href + Json.String rel, + Json.String href } /** * @desc The URL of your own listener application. */ - type JSON.String NotifyURL; + type Json.String NotifyURL; /** * @desc The number of access points within the zone @@ -347,17 +347,17 @@ REST_NetAPI_Common]. /** * @desc Zone ID */ - type JSON.String PreviousAccessPointId; + type Json.String PreviousAccessPointId; /** * @desc Self referring URL */ - type JSON.AnyURI ResourceURL; + type Json.AnyURI ResourceURL; /** * @desc Time zone of access point */ - type JSON.String Timezone; + type Json.String Timezone; /** * @desc User event @@ -425,8 +425,8 @@ REST_NetAPI_Common]. ClientCorrelator clientCorrelator optional, CallbackReference callbackReference, Address address_, - JSON.Number frequency, - JSON.Number requestedAccuracy, + Json.Number frequency, + Json.Number requestedAccuracy, ResourceURL resourceURL optional } with { variant (address_) "name as 'address'"; @@ -482,7 +482,7 @@ REST_NetAPI_Common]. /** * @desc Identifier of zone */ - type JSON.String ZoneId; + type Json.String ZoneId; /** * @desc A type containing zone status notification. @@ -549,19 +549,19 @@ REST_NetAPI_Common]. type record CircleNotificationSubscription { Addresses address_, CallbackReference callbackReference, - JSON.Bool checkImmediate, + Json.Bool checkImmediate, ClientCorrelator clientCorrelator optional, UInt32 count optional, UInt32 duration optional, EnteringLeavingCriteria enteringLeavingCriteria, UInt32 frequency, - JSON.Number latitude, + Json.Number latitude, Link link optional, - JSON.Number longitude, - JSON.Number radius, - JSON.AnyURI requester optional, + Json.Number longitude, + Json.Number radius, + Json.AnyURI requester optional, ResourceURL resourceURL optional, - JSON.Number trackingAccuracy + Json.Number trackingAccuracy } with { variant (address_) "name as 'address'"; } @@ -578,8 +578,8 @@ REST_NetAPI_Common]. * @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.Number distance, + Json.Number accuracy optional, TimeStamp timestamp_ optional } with { variant (timestamp_) "name as 'timestamp'"; @@ -614,19 +614,19 @@ REST_NetAPI_Common]. */ type record DistanceNotificationSubscription { CallbackReference callbackReference, - JSON.Bool checkImmediate, + Json.Bool checkImmediate, ClientCorrelator clientCorrelator optional, UInt32 count optional, DistanceCriteria criteria, - JSON.Number distance, + Json.Number distance, UInt32 duration optional, UInt32 frequency, Link link optional, Addresses monitoredAddress, Addresses referenceAddress optional, - JSON.AnyURI requester optional, + Json.AnyURI requester optional, ResourceURL resourceURL optional, - JSON.Number trackingAccuracy + Json.Number trackingAccuracy } /** @@ -650,13 +650,13 @@ REST_NetAPI_Common]. UInt32 frequency, Link link optional, UInt32 requestedAccuracy, - JSON.AnyURI requester optional, + Json.AnyURI requester optional, ResourceURL resourceURL optional } with { variant (address_) "name as 'address'"; } - type record of JSON.String Variables; + type record of Json.String Variables; /** * @desc Used to indicate a notification termination or cancellation * @member messageId Message identifier, either with prefix SVC or with prefix POL @@ -664,8 +664,8 @@ REST_NetAPI_Common]. * @member variables Variables to substitute into text string */ type record ServiceError { - JSON.String messageId, - JSON.String text, + Json.String messageId, + Json.String text, Variables variables optional } @@ -696,7 +696,7 @@ REST_NetAPI_Common]. type record SubscriptionNotification { CallbackData callbackData optional, DistanceCriteria distanceCriteria optional, - JSON.Bool isFinalNotification optional, + Json.Bool isFinalNotification optional, Link link optional, TerminalLocationList terminalLocation } diff --git a/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_Pixits.ttcn b/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_Pixits.ttcn index dc22098..c34cee9 100644 --- a/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_Pixits.ttcn +++ b/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_Pixits.ttcn @@ -1,7 +1,7 @@ module RnisAPI_Pixits { // JSON - import from JSON all; + import from Json all; // LibCommon import from LibCommon_BasicTypesAndValues all; @@ -9,9 +9,9 @@ module RnisAPI_Pixits { // LibMec/Rnis import from RnisAPI_TypesAndValues all; - modulepar JSON.String PX_SUBSCRIPTION_HREF_VALUE := "cell_change"; + modulepar Json.String PX_SUBSCRIPTION_HREF_VALUE := "cell_change"; - modulepar JSON.String PX_UNKNOWN_SUBSCRIPTION_ID := "0666"; + modulepar Json.String PX_UNKNOWN_SUBSCRIPTION_ID := "0666"; modulepar Link PX_LINKS_SELF := { self_ := { href := "http://example.com/exampleAPI/rni/v2/subscriptions" } }; @@ -19,7 +19,7 @@ module RnisAPI_Pixits { modulepar CallbackReference PX_CALLBACK_REFERENCE := "http://meAppClient.example.com/rni/v2/notifications/cell_change/77777"; - modulepar JSON.String PX_ASSOCIATE_ID_VALUE := "192.0.0.2"; + modulepar Json.String PX_ASSOCIATE_ID_VALUE := "192.0.0.2"; modulepar CellId PX_CELL_ID := "0x0800000A"; diff --git a/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_Templates.ttcn b/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_Templates.ttcn index 1536505..d31b301 100644 --- a/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_Templates.ttcn +++ b/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_Templates.ttcn @@ -1,7 +1,7 @@ module RnisAPI_Templates { // JSON - import from JSON all; + import from Json all; // LibCommon import from LibCommon_BasicTypesAndValues all; @@ -42,7 +42,7 @@ module RnisAPI_Templates { template (value) Subscription_ m_subscription( in LinkType p_href, - in JSON.String p_subscriptionType + in Json.String p_subscriptionType ) := { href := p_href, subscriptionType := p_subscriptionType @@ -50,7 +50,7 @@ module RnisAPI_Templates { template (present) Subscription_ mw_subscription( template (present) LinkType p_href := ?, - template (present) JSON.String p_subscriptionType := ? + template (present) Json.String p_subscriptionType := ? ) := { href := p_href, subscriptionType := p_subscriptionType @@ -544,7 +544,7 @@ module RnisAPI_Templates { template (value) AssociateId_ m_associate_id( in AssociateId_type p_type_, - in JSON.String p_value_ + in Json.String p_value_ ) := { type_ := p_type_, value_ := p_value_ @@ -552,7 +552,7 @@ module RnisAPI_Templates { template (present) AssociateId_ mw_associate_id( template (present) AssociateId_type p_type_ := ?, - template (present) JSON.String p_value_ := ? + template (present) Json.String p_value_ := ? ) := { type_ := p_type_, value_ := p_value_ @@ -575,16 +575,16 @@ module RnisAPI_Templates { } // End of template mw_ecgi template (value) Plmn m_plmn( - in JSON.String p_mcc, - in JSON.String p_mnc + in Json.String p_mcc, + in Json.String p_mnc ) := { mcc := p_mcc, mnc := p_mnc } // End of template m_plmn template (present) Plmn mw_plmn( - template (present) JSON.String p_mcc := ?, - template (present) JSON.String p_mnc := ? + template (present) Json.String p_mcc := ?, + template (present) Json.String p_mnc := ? ) := { mcc := p_mcc, mnc := p_mnc diff --git a/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_TypesAndValues.ttcn b/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_TypesAndValues.ttcn index 4687000..06c1e57 100644 --- a/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_TypesAndValues.ttcn @@ -5,7 +5,7 @@ module RnisAPI_TypesAndValues { // JSON - import from JSON all; + import from Json all; // LibCommon import from LibCommon_BasicTypesAndValues all; @@ -117,9 +117,9 @@ module RnisAPI_TypesAndValues { } type record of TempUeId_ TempUeId; - type JSON.String Mmec; + type Json.String Mmec; - type JSON.String Mtmsi; + type Json.String Mtmsi; /** * @desc S1 bearer information on eNB side @@ -128,8 +128,8 @@ module RnisAPI_TypesAndValues { * @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, - JSON.String tunnelId + Json.String ipAddress, + Json.String tunnelId } /** @@ -139,8 +139,8 @@ module RnisAPI_TypesAndValues { * @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, - JSON.String tunnelId + Json.String ipAddress, + Json.String tunnelId } /** @@ -159,12 +159,12 @@ module RnisAPI_TypesAndValues { /** * @desc Unique identifier for the mobile edge application instance", */ - type JSON.String AppInstanceId; + type Json.String AppInstanceId; /** * @desc Unique identifier allocated by the Mobile Edge application for the Information request */ - type JSON.String RequestId; + type Json.String RequestId; /** * @desc E-UTRAN CelI Global Identifier as defined in 3GPP TS 36.413 @@ -245,8 +245,8 @@ module RnisAPI_TypesAndValues { * @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, - JSON.String mnc + Json.String mcc, + Json.String mnc } type record of Plmn Plmns; @@ -254,13 +254,13 @@ 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; + 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; + type Json.String NrCellId; /** * @desc Information on UEs in the specific cell @@ -282,7 +282,7 @@ module RnisAPI_TypesAndValues { */ type record AssociateId_ { AssociateId_type type_, - JSON.String value_ + Json.String value_ } with { variant (type_) "name as 'type'"; variant (value_) "name as 'value'"; @@ -447,7 +447,7 @@ module RnisAPI_TypesAndValues { * @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, + Json.String subscriptionType, CallbackReference callbackReference, Link links optional, FilterCriteriaNrMrs filterCriteriaNrMrs, @@ -488,7 +488,7 @@ module RnisAPI_TypesAndValues { */ type record Subscription_ { LinkType href, - JSON.String subscriptionType + Json.String subscriptionType } type record of Subscription_ Subscription; @@ -502,7 +502,7 @@ module RnisAPI_TypesAndValues { * @see ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.3.6-1: Attributes of the MeasRepUeSubscription */ type record MeasRepUeSubscription { - JSON.String subscriptionType, + Json.String subscriptionType, CallbackReference callbackReference, Link links optional, FilterCriteriaAssocTri filterCriteriaAssocTri, @@ -522,7 +522,7 @@ module RnisAPI_TypesAndValues { * @see ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.3.9-1: Attributes of the S1BearerSubscription */ type record S1BearerSubscription { - JSON.String subscriptionType, + Json.String subscriptionType, CallbackReference callbackReference, Link links optional, EventType eventType, @@ -542,7 +542,7 @@ module RnisAPI_TypesAndValues { * @see ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.3.3-1: Attributes of the RabEstSubscription */ type record RabEstSubscription { - JSON.String subscriptionType, + Json.String subscriptionType, CallbackReference callbackReference, Link links optional, RabEstSubscription_FilterCriteriaQci filterCriteriaQci, @@ -561,7 +561,7 @@ module RnisAPI_TypesAndValues { * @see ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.3.4-1: Attributes of the RabModSubscription */ type record RabModSubscription { - JSON.String subscriptionType, + Json.String subscriptionType, CallbackReference callbackReference, Link links optional, RabModSubscription_FilterCriteriaQci filterCriteriaQci, @@ -580,7 +580,7 @@ module RnisAPI_TypesAndValues { * @see ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.3.5-1: Attributes of the RabRelSubscription */ type record RabRelSubscription { - JSON.String subscriptionType, + Json.String subscriptionType, CallbackReference callbackReference, Link links optional, RabModSubscription_FilterCriteriaQci filterCriteriaQci, @@ -599,7 +599,7 @@ module RnisAPI_TypesAndValues { * @see ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.3.8-1: Attributes of the CaReconfSubscription */ type record CaReConfSubscription { - JSON.String subscriptionType, + Json.String subscriptionType, CallbackReference callbackReference, Link links optional, FilterCriteriaAssoc filterCriteriaAssoc, @@ -618,7 +618,7 @@ module RnisAPI_TypesAndValues { * @see ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.3.2-1: Attributes of the CellChangeSubscription */ type record CellChangeSubscription { - JSON.String subscriptionType, + Json.String subscriptionType, CallbackReference callbackReference, Link links optional, FilterCriteriaAssocHo filterCriteriaAssocHo, @@ -635,7 +635,7 @@ module RnisAPI_TypesAndValues { * @member expiryDeadline */ type record MeasTaSubscription { - JSON.String subscriptionType, + Json.String subscriptionType, CallbackReference callbackReference, Link links, FilterCriteriaAssocHo filterCriteriaAssocHo, @@ -647,7 +647,7 @@ module RnisAPI_TypesAndValues { /** * @desc URL selected by the Mobile Edge application to receive notifications on the subscribed RNIS information */ - type JSON.AnyURI CallbackReference; + type Json.AnyURI CallbackReference; /** * @desc List of hyperlinks related to the resource @@ -664,7 +664,7 @@ module RnisAPI_TypesAndValues { * @see ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.5.2-1: Attributes of the LinkType */ type record LinkType { - JSON.AnyURI href + Json.AnyURI href } /** diff --git a/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Functions.ttcn b/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Functions.ttcn index d0721d5..c9a0eb4 100644 --- a/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Functions.ttcn +++ b/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Functions.ttcn @@ -1,7 +1,7 @@ module TrafficManagementAPI_Functions { // JSON - import from JSON all; + import from Json all; // LibCommon import from LibCommon_BasicTypesAndValues all; @@ -28,7 +28,7 @@ module TrafficManagementAPI_Functions { import from LibMec_Pixits all; function f_create_bw_allocation_resource( - in JSON.String p_app_instance_id, + in Json.String p_app_instance_id, out charstring p_bw_allocation_id, out BwInfo p_bw_info ) runs on HttpComponent { @@ -78,7 +78,7 @@ module TrafficManagementAPI_Functions { } // End of function f_create_bw_allocation_resource function f_delete_bw_allocation_resource( - in JSON.String p_app_instance_id, + in Json.String p_app_instance_id, in charstring p_bw_allocation_id ) runs on HttpComponent { var Headers v_headers; @@ -105,7 +105,7 @@ module TrafficManagementAPI_Functions { } // End of function f_delete_bw_allocation_resource function f_create_mts_session_info_resource( - in JSON.String p_app_instance_id, + in Json.String p_app_instance_id, out charstring p_mts_session_id, out MtsSessionInfo p_mts_session_info ) runs on HttpComponent { @@ -162,7 +162,7 @@ module TrafficManagementAPI_Functions { } // End of function f_create_mts_session_info_resource function f_delete_mts_session_info_resource( - in JSON.String p_app_instance_id, + in Json.String p_app_instance_id, in charstring p_mts_session_id ) runs on HttpComponent { var Headers v_headers; diff --git a/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Templates.ttcn b/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Templates.ttcn index 93e9faa..d4dbaf5 100644 --- a/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Templates.ttcn +++ b/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Templates.ttcn @@ -1,7 +1,7 @@ module TrafficManagementAPI_Templates { // JSON - import from JSON all; + import from Json all; // LibCommon import from LibCommon_BasicTypesAndValues all; diff --git a/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_TypesAndValues.ttcn b/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_TypesAndValues.ttcn index 6b46030..ad32259 100644 --- a/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_TypesAndValues.ttcn @@ -1,7 +1,7 @@ module TrafficManagementAPI_TypesAndValues { // JSON - import from JSON all; + import from Json all; // LibCommon import from LibCommon_BasicTypesAndValues all; @@ -58,7 +58,7 @@ module TrafficManagementAPI_TypesAndValues { /** * @desc Application instance identifier */ - type JSON.String AppInsId; + type Json.String AppInsId; /** * @desc Numeric value (0 - 255) corresponding to specific type of consumer @@ -107,7 +107,7 @@ module TrafficManagementAPI_TypesAndValues { /** * @desc Size of requested fixed BW allocation in [bps] */ - type JSON.String FixedAllocation; + type Json.String FixedAllocation; /** @@ -132,27 +132,27 @@ module TrafficManagementAPI_TypesAndValues { /** * @desc Source address identity of session (including range) */ - type JSON.String SourceIp; + type Json.String SourceIp; /** * @desc Source port identity of session */ - type record of JSON.String SourcePort; + type record of Json.String SourcePort; /** * @desc Destination address identity of session (including range) */ - type JSON.String DstAddress; + type Json.String DstAddress; /** * @desc Destination port identity of session */ - type record of JSON.String DstPort; + type record of Json.String DstPort; /** * @desc Protocol number */ - type JSON.String Protocol; + type Json.String Protocol; /** * @desc The information on access network connection diff --git a/ttcn/LibMec/UEAppInterfaceAPI/ttcn/UEAppInterfaceAPI_Templates.ttcn b/ttcn/LibMec/UEAppInterfaceAPI/ttcn/UEAppInterfaceAPI_Templates.ttcn index 30963cb..a8b4f35 100644 --- a/ttcn/LibMec/UEAppInterfaceAPI/ttcn/UEAppInterfaceAPI_Templates.ttcn +++ b/ttcn/LibMec/UEAppInterfaceAPI/ttcn/UEAppInterfaceAPI_Templates.ttcn @@ -5,7 +5,7 @@ module UEAppInterfaceAPI_Templates { // JSON - import from JSON all; + import from Json all; // LibCommon import from LibCommon_BasicTypesAndValues all; diff --git a/ttcn/LibMec/UEAppInterfaceAPI/ttcn/UEAppInterfaceAPI_TypesAndValues.ttcn b/ttcn/LibMec/UEAppInterfaceAPI/ttcn/UEAppInterfaceAPI_TypesAndValues.ttcn index 97e050a..3b78af7 100644 --- a/ttcn/LibMec/UEAppInterfaceAPI/ttcn/UEAppInterfaceAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/UEAppInterfaceAPI/ttcn/UEAppInterfaceAPI_TypesAndValues.ttcn @@ -5,7 +5,7 @@ module UEAppInterfaceAPI_TypesAndValues { // JSON - import from JSON all; + import from Json all; // LibCommon import from LibCommon_BasicTypesAndValues all; @@ -50,17 +50,17 @@ module UEAppInterfaceAPI_TypesAndValues { /** * @desc Uniquely identifies the application context in the MEC system. Assigned by the MEC system and included in the response. The length of the value shall not exceed 32 characters. */ - type JSON.String ContextId length(1..32) with {encode "length(1..32)"}; + type Json.String ContextId length(1..32) with {encode "length(1..32)"}; /** * @desc Uniquely identifies the UE application. Included in the request. The length of the value shall not exceed 32 characters. */ - type JSON.String AssociateUeAppId length(1..32) with {encode "length(1..32)"}; + type Json.String AssociateUeAppId length(1..32) with {encode "length(1..32)"}; /** * @desc Vendor identifier. The length of the value shall not exceed 32 characters. The rest of the structure of this vendor specific extension is not defined. */ - type JSON.String VendorId; + type Json.String VendorId; /** * @desc User applications available for the UE application. @@ -132,37 +132,37 @@ module UEAppInterfaceAPI_TypesAndValues { /** * @desc Name of the MEC application. The length of the value shall not exceed 32 characters. */ - type JSON.String AppName length(1..32) with {encode "length(1..32)"}; + type Json.String AppName length(1..32) with {encode "length(1..32)"}; /** * @desc Provider of the MEC application. The length of the value shall not exceed 32 characters. */ - type JSON.String AppProvider length(1..32) with {encode "length(1..32)"}; + type Json.String AppProvider length(1..32) with {encode "length(1..32)"}; /** * @desc Software version of the MEC application. The length of the value shall not exceed 32 characters. */ - type JSON.String AppSoftVersion length(1..32) with {encode "length(1..32)"}; + type Json.String AppSoftVersion length(1..32) with {encode "length(1..32)"}; /** * @desc Human readable description of the MEC application. NOTE the language support may be limited. The length of the value shall not exceed 128 characters. */ - type JSON.String AppDescription length(1..128) with {encode "length(1..128)"}; + type Json.String AppDescription length(1..128) with {encode "length(1..128)"}; /** * @desc URI assigned by the UE application to receive application lifecycle related notifications. Included in the request. This subscription stays alive for the lifetime of the application context. */ - type JSON.String CallbackReference; + type Json.String CallbackReference; /** * @desc Address of the user application. Used as the reference URL for the application. Assigned by the MEC system and included in the response. */ - type JSON.AnyURI ReferenceURL; + type Json.AnyURI ReferenceURL; /** * @desc URI of the application package. Included in the request if the application is not one in the ApplicationList. appPackageSource enables on-boarding of the application package into the MEC system. The application package shall comply with the definitions in clause 6.2.1.2 of ETSI GS MEC 010-2. */ - type JSON.AnyURI AppPackageSource; + type Json.AnyURI AppPackageSource; } with { encode "JSON" diff --git a/ttcn/LibMec/UEidentityAPI/module.mk b/ttcn/LibMec/UEidentityAPI/module.mk index 60c20d0..2e5bb0d 100644 --- a/ttcn/LibMec/UEidentityAPI/module.mk +++ b/ttcn/LibMec/UEidentityAPI/module.mk @@ -2,4 +2,5 @@ sources := \ ttcn/UEidentityAPI_Pics.ttcn \ ttcn/UEidentityAPI_Pixits.ttcn \ ttcn/UEidentityAPI_Templates.ttcn \ + ttcn/UEidentityAPI_Functions.ttcn \ ttcn/UEidentityAPI_TypesAndValues.ttcn diff --git a/ttcn/LibMec/UEidentityAPI/ttcn/UEidentityAPI_Functions.ttcn b/ttcn/LibMec/UEidentityAPI/ttcn/UEidentityAPI_Functions.ttcn new file mode 100644 index 0000000..7b48d64 --- /dev/null +++ b/ttcn/LibMec/UEidentityAPI/ttcn/UEidentityAPI_Functions.ttcn @@ -0,0 +1,83 @@ +module UEidentityAPI_Functions { + + // Libcommon + import from LibCommon_BasicTypesAndValues all; + import from LibCommon_Sync all; + + // LibMec + import from LibMec_Pixits all; + import from LibMec_Pics all; + + // LibMec_UEidentityAPI + import from UEidentityAPI_TypesAndValues all; + import from UEidentityAPI_Templates all; + import from UEidentityAPI_Pixits all; + + // LibHttp + import from LibHttp_TypesAndValues all; + import from LibHttp_JsonMessageBodyTypes all; + import from LibHttp_Templates all; + import from LibHttp_TestSystem all; + import from LibHttp_Templates all; + import from LibHttp_JsonTemplates all; + import from LibHttp_Pics all; + + /** + * @desc Check if the user is registered or not + * @param p_ue_identity_tag The UE identity tag + * @param p_headers The HTTP headers + * @return 0 if unregistered, 1 if registered, -1 otherwise + */ + function f_check_user_register_state( + in UeIdentityTag p_ue_identity_tag := PX_UE_IDENTITY_TAG, + in Headers p_headers + ) runs on HttpComponent return integer { + var HttpMessage v_response; + var integer v_result := -1; + + // Send request + httpPort.send( + m_http_request( + m_http_request_get( + "/" & PICS_ROOT_API & PX_ME_APP_Q_UE_IDENTITY_ID_URI & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/ue_identity_tag_info?ueIdentityTag=" & oct2char(unichar2oct(p_ue_identity_tag, "UTF-8")), + p_headers + ) + ) + ); + // Await for the response + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_ue_identity_tag_info( + mw_ue_identity_tag_info( + { *, mw_ue_identity_tag_item(PX_UE_IDENTITY_TAG), * } + )))))) -> value v_response { + tc_ac.stop; + + for (var integer v_i := 0; v_i < lengthof(v_response.response.body.json_body.ueIdentityTagInfo.ueIdentityTags); v_i := v_i + 1) { + if (v_response.response.body.json_body.ueIdentityTagInfo.ueIdentityTags[v_i].ueIdentityTag == p_ue_identity_tag) { + //log("Processing ", v_response.response.body.json_body.ueIdentityTagInfo.ueIdentityTags[v_i].ueIdentityTag); + //log("State ", v_response.response.body.json_body.ueIdentityTagInfo.ueIdentityTags[v_i].state); + if (v_response.response.body.json_body.ueIdentityTagInfo.ueIdentityTags[v_i].state == UNREGISTERED) { + v_result := 0; + } else if (v_response.response.body.json_body.ueIdentityTagInfo.ueIdentityTags[v_i].state == REGISTERED) { + v_result := 1; + } else if (v_response.response.body.json_body.ueIdentityTagInfo.ueIdentityTags[v_i].state == INVALID_STATE) { + v_result := 2; + } + break; + } + } + } + [] tc_ac.timeout { + } + } // End of 'alt' statement + + //log("<<< f_check_user_register_state: v_result: ", v_result); + return v_result; + } // End of function f_check_user_register_state + +} // End of module UEidentAPI_Functions \ No newline at end of file diff --git a/ttcn/LibMec/UEidentityAPI/ttcn/UEidentityAPI_Templates.ttcn b/ttcn/LibMec/UEidentityAPI/ttcn/UEidentityAPI_Templates.ttcn index c460ef1..a081e9a 100644 --- a/ttcn/LibMec/UEidentityAPI/ttcn/UEidentityAPI_Templates.ttcn +++ b/ttcn/LibMec/UEidentityAPI/ttcn/UEidentityAPI_Templates.ttcn @@ -1,7 +1,7 @@ module UEidentityAPI_Templates { // JSON - import from JSON all; + import from Json all; // LibCommon import from LibCommon_BasicTypesAndValues all; diff --git a/ttcn/LibMec/UEidentityAPI/ttcn/UEidentityAPI_TypesAndValues.ttcn b/ttcn/LibMec/UEidentityAPI/ttcn/UEidentityAPI_TypesAndValues.ttcn index dae40f1..14e9cb1 100644 --- a/ttcn/LibMec/UEidentityAPI/ttcn/UEidentityAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/UEidentityAPI/ttcn/UEidentityAPI_TypesAndValues.ttcn @@ -11,7 +11,7 @@ module UEidentityAPI_TypesAndValues { // JSON - import from JSON all; + import from Json all; // LibCommon import from LibCommon_BasicTypesAndValues all; @@ -29,7 +29,7 @@ module UEidentityAPI_TypesAndValues { * @desc Specific tag presented by a ME Application instance to a ME Platform * @see ETSI GS MEC 014 Clause 6.2.2 Type: UeIdentityTagInfo */ - type JSON.String UeIdentityTag; + type Json.String UeIdentityTag; /** * @desc Status of the resource ueIdentityTagInfo @@ -48,7 +48,7 @@ module UEidentityAPI_TypesAndValues { * @see ETSI GS MEC 014 Clause 6.2.2 Type: UeIdentityTagInfo */ type record UeIdentityTagItem { - JSON.String ueIdentityTag, + Json.String ueIdentityTag, State state } diff --git a/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Functions.ttcn b/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Functions.ttcn index a874c67..9af2041 100644 --- a/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Functions.ttcn +++ b/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Functions.ttcn @@ -11,7 +11,7 @@ module V2XInformationServiceAPI_Functions { // JSON - import from JSON all; + import from Json all; // LibCommon import from LibCommon_BasicTypesAndValues all; diff --git a/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Pixits.ttcn b/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Pixits.ttcn index 70f38ce..fb98a4a 100644 --- a/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Pixits.ttcn +++ b/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Pixits.ttcn @@ -4,7 +4,7 @@ module V2XInformationServiceAPI_Pixits { import from LibCommon_BasicTypesAndValues all; // JSON - import from JSON all; + import from Json all; modulepar charstring PX_V2X_ECGI := "ecgi,135792468"; @@ -26,13 +26,13 @@ module V2XInformationServiceAPI_Pixits { modulepar charstring PX_UNKNOWN_MNC := "796"; - modulepar JSON.AnyURI PX_PROV_UU_UNI_SUB_CALLBACK := ""; + modulepar Json.AnyURI PX_PROV_UU_UNI_SUB_CALLBACK := ""; - modulepar JSON.AnyURI PX_PROV_UU_MBMS_SUB_CALLBACK := ""; + modulepar Json.AnyURI PX_PROV_UU_MBMS_SUB_CALLBACK := ""; - modulepar JSON.AnyURI PX_PROV_PC5_SUB_CALLBACK := ""; + modulepar Json.AnyURI PX_PROV_PC5_SUB_CALLBACK := ""; - modulepar JSON.AnyURI PX_PROV_V2X_SUB_CALLBACK := ""; + modulepar Json.AnyURI PX_PROV_V2X_SUB_CALLBACK := ""; modulepar charstring PX_V2X_SERVER_IP_ADDRESS := ""; diff --git a/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Templates.ttcn b/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Templates.ttcn index 7cd78d2..f031f64 100644 --- a/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Templates.ttcn +++ b/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Templates.ttcn @@ -11,7 +11,7 @@ module V2XInformationServiceAPI_Templates { // JSON - import from JSON all; + import from Json all; // LibCommon import from LibCommon_BasicTypesAndValues all; @@ -69,7 +69,7 @@ module V2XInformationServiceAPI_Templates { } // End of template mw_pc5_provisioning_info template (omit) PredictedQos m_predicted_qos( - in template (value) JSON.String p_locationGranularity, + in template (value) Json.String p_locationGranularity, in template (value) PredictedQosRoutesList p_routes, in template (omit) TimeStamp p_timeGranularity := omit ) := { @@ -79,7 +79,7 @@ module V2XInformationServiceAPI_Templates { } // End of template m_predicted_qos template PredictedQos mw_predicted_qos( - template (present) JSON.String p_locationGranularity := ?, + template (present) Json.String p_locationGranularity := ?, template (present) PredictedQosRoutesList p_routes := ?, template TimeStamp p_timeGranularity := * ) := { @@ -141,23 +141,23 @@ module V2XInformationServiceAPI_Templates { } // End of template mw_location_info template (value) LocationInfoGeoArea m_location_info_geo_area( - in JSON.Number p_latitude, - in JSON.Number p_longitude + in Json.Number p_latitude, + in Json.Number p_longitude ) := { latitude := p_latitude, longitude := p_longitude } // End of m_location_info_geo_area template (present) LocationInfoGeoArea mw_location_info_geo_area( - template (present) JSON.Number p_latitude := ?, - template (present) JSON.Number p_longitude := ? + template (present) Json.Number p_latitude := ?, + template (present) Json.Number p_longitude := ? ) := { latitude := p_latitude, longitude := p_longitude } // End of mw_location_info_geo_area template (value) Ecgi m_ecgi( - in JSON.String p_cellId, + in Json.String p_cellId, in template (value) Plmn p_plmn ) := { cellId := { @@ -167,7 +167,7 @@ module V2XInformationServiceAPI_Templates { } // End of template m_ecgi template (present) Ecgi mw_ecgi( - template (present) JSON.String p_cellId := ?, + template (present) Json.String p_cellId := ?, template (present) Plmn p_plmn := ? ) := { cellId := { @@ -177,24 +177,24 @@ module V2XInformationServiceAPI_Templates { } // End of template mw_ecgi template (value) Plmn m_plmn( - in JSON.String p_mcc, - in JSON.String p_mnc + in Json.String p_mcc, + in Json.String p_mnc ) := { mcc := p_mcc, mnc := p_mnc } // End of template m_plmn template (present) Plmn mw_plmn( - template (present) JSON.String p_mcc := ?, - template (present) JSON.String p_mnc := ? + template (present) Json.String p_mcc := ?, + template (present) Json.String p_mnc := ? ) := { mcc := p_mcc, mnc := p_mnc } // End of template mw_plmn template (value) V2xMsgPublication m_v2x_message( - in JSON.String p_msgContent := "AgIAEPQ9JwVAWXGJVq3AIK5gAgAgADDUHgAAASAWhAMQpQcz/+H/+gAQAA==", - in JSON.String p_msgEncodeFormat := "base64", + in Json.String p_msgContent := "AgIAEPQ9JwVAWXGJVq3AIK5gAgAgADDUHgAAASAWhAMQpQcz/+H/+gAQAA==", + in Json.String p_msgEncodeFormat := "base64", in MsgType p_msgType := cam, in StdOrganization p_stdOrganization := ETSI ) := { @@ -205,8 +205,8 @@ module V2XInformationServiceAPI_Templates { } // End of template m_v2x_message template (present) V2xMsgPublication mw_v2x_message( - template (present) JSON.String p_msgContent := ?, - template (present) JSON.String p_msgEncodeFormat := "base64", + template (present) Json.String p_msgContent := ?, + template (present) Json.String p_msgEncodeFormat := "base64", template (present) MsgType p_msgType := ?, template (present) StdOrganization p_stdOrganization := ETSI ) := { @@ -217,7 +217,7 @@ module V2XInformationServiceAPI_Templates { } // End of template mw_v2x_message template (omit) ProvChgUuUniSubscription m_prov_chg_uu_uni_subscription( - in template (value) JSON.AnyURI p_callbackReference, + in template (value) Json.AnyURI p_callbackReference, in template (value) ProvChgUuUniSubscriptionFilterCriteria p_filterCriteria, in template (omit) LinkType p_links := omit, in template (omit) TimeStamp p_expiryDeadline := omit @@ -230,7 +230,7 @@ module V2XInformationServiceAPI_Templates { } // End of template m_prov_chg_uu_uni_subscription template (omit) ProvChgUuUniSubscription m_prov_chg_uu_uni_subscription_invalid( - in template (value) JSON.AnyURI p_callbackReference, + in template (value) Json.AnyURI p_callbackReference, in template (value) ProvChgUuUniSubscriptionFilterCriteria p_filterCriteria, in template (omit) LinkType p_links := omit, in template (omit) TimeStamp p_expiryDeadline := omit @@ -243,7 +243,7 @@ module V2XInformationServiceAPI_Templates { } // End of template m_prov_chg_uu_uni_subscription template ProvChgUuUniSubscription mw_prov_chg_uu_uni_subscription( - template (present) JSON.AnyURI p_callbackReference := ?, + template (present) Json.AnyURI p_callbackReference := ?, template (present) ProvChgUuUniSubscriptionFilterCriteria p_filterCriteria := ?, template LinkType p_links := *, template TimeStamp p_expiryDeadline := * @@ -276,23 +276,23 @@ module V2XInformationServiceAPI_Templates { } // End of template mw_prov_chg_uu_uni_filter_criteria template (value) V2xApplicationServer m_v2x_application_server( - in JSON.String p_ip_address, - in JSON.String p_udp_port + in Json.String p_ip_address, + in Json.String p_udp_port ) := { ipAddress := p_ip_address, udpPort := p_udp_port } // End of template m_v2x_application_server template (present) V2xApplicationServer mw_v2x_application_server( - template (present) JSON.String p_ip_address := ?, - template (present) JSON.String p_udp_port := ? + template (present) Json.String p_ip_address := ?, + template (present) Json.String p_udp_port := ? ) := { ipAddress := p_ip_address, udpPort := p_udp_port } // End of template mw_v2x_application_server template (omit) ProvChgUuMbmsSubscription m_prov_chg_uu_mbms_subscription( - in template (value) JSON.AnyURI p_callbackReference, + in template (value) Json.AnyURI p_callbackReference, in template (value) ProvChgUuMbmsSubscriptionFilterCriteria p_filterCriteria, in template (omit) LinkType p_links := omit, in template (omit) TimeStamp p_expiryDeadline := omit @@ -305,7 +305,7 @@ module V2XInformationServiceAPI_Templates { } // End of template m_prov_chg_uu_mbms_subscription template ProvChgUuMbmsSubscription mw_prov_chg_uu_mbms_subscription( - template (present) JSON.AnyURI p_callbackReference := ?, + template (present) Json.AnyURI p_callbackReference := ?, template (present) ProvChgUuMbmsSubscriptionFilterCriteria p_filterCriteria := ?, template LinkType p_links := *, template TimeStamp p_expiryDeadline := * @@ -358,25 +358,25 @@ module V2XInformationServiceAPI_Templates { } // End of template mw_v2x_server_usd template (value) SdpInfo m_sdp_info( - in JSON.String p_ipMulticastAddress, - in JSON.String p_portNumber + in Json.String p_ipMulticastAddress, + in Json.String p_portNumber ) := { ipMulticastAddress := p_ipMulticastAddress, portNumber := p_portNumber } // End of template m_sdp_info template (present) SdpInfo mw_sdp_info( - template (present) JSON.String p_ipMulticastAddress := ?, - template (present) JSON.String p_portNumber := ? + template (present) Json.String p_ipMulticastAddress := ?, + template (present) Json.String p_portNumber := ? ) := { ipMulticastAddress := p_ipMulticastAddress, portNumber := p_portNumber } // End of template mw_sdp_info template (value) Tmgi m_tmgi( - in JSON.String p_mbmsServiceId, - in JSON.String p_mcc, - in JSON.String p_mnc + in Json.String p_mbmsServiceId, + in Json.String p_mcc, + in Json.String p_mnc ) := { mbmsServiceId := p_mbmsServiceId, mcc := p_mcc, @@ -384,9 +384,9 @@ module V2XInformationServiceAPI_Templates { } // End of template m_tmgi template (present) Tmgi mw_tmgi( - template (present) JSON.String p_mbmsServiceId := ?, - template (present) JSON.String p_mcc := ?, - template (present) JSON.String p_mnc := ? + template (present) Json.String p_mbmsServiceId := ?, + template (present) Json.String p_mcc := ?, + template (present) Json.String p_mnc := ? ) := { mbmsServiceId := p_mbmsServiceId, mcc := p_mcc, @@ -394,7 +394,7 @@ module V2XInformationServiceAPI_Templates { } // End of template mw_tmgi template (omit) ProvChgPc5Subscription m_prov_chg_pc5_subscription( - in template (value) JSON.AnyURI p_callbackReference, + in template (value) Json.AnyURI p_callbackReference, in template (value) FilterCriteria p_filterCriteria, in template (omit) LinkType p_links := omit, in template (omit) TimeStamp p_expiryDeadline := omit @@ -407,7 +407,7 @@ module V2XInformationServiceAPI_Templates { } // End of template m_prov_chg_pc5_subscription template (present) ProvChgPc5Subscription mw_prov_chg_pc5_subscription( - template (present) JSON.AnyURI p_callbackReference := ?, + template (present) Json.AnyURI p_callbackReference := ?, template (present) FilterCriteria p_filterCriteria := ?, template LinkType p_links := *, template TimeStamp p_expiryDeadline := * @@ -420,7 +420,7 @@ module V2XInformationServiceAPI_Templates { } // End of template mw_prov_chg_pc5_subscription template (omit) FilterCriteria m_filter_criteria( - in template (value) JSON.String p_dstLayer2Id, + in template (value) Json.String p_dstLayer2Id, in template (value) LocationInfo p_locationInfo, in template (omit) Pc5NeighbourCellInfoList p_neighbourCellInfo := omit ) := { @@ -430,7 +430,7 @@ module V2XInformationServiceAPI_Templates { } // End of template m_filter_criteria template (present) FilterCriteria mw_filter_criteria( - template (present) JSON.String p_dstLayer2Id := ?, + template (present) Json.String p_dstLayer2Id := ?, template (present) LocationInfo p_locationInfo := ?, template Pc5NeighbourCellInfoList p_neighbourCellInfo := * ) := { @@ -440,7 +440,7 @@ module V2XInformationServiceAPI_Templates { } // End of template mw_filter_criteria template (omit) V2xMsgSubscription m_v2x_msg_subscription( - in template (value) JSON.AnyURI p_callbackReference, + in template (value) Json.AnyURI p_callbackReference, in template (value) V2xMsgSubscriptionFilterCriteria p_filterCriteria, in template (omit) LinkType p_links := omit, in template (omit) TimeStamp p_expiryDeadline := omit @@ -453,7 +453,7 @@ module V2XInformationServiceAPI_Templates { } // End of template m_v2x_msg_subscription template (present) V2xMsgSubscription mw_v2x_msg_subscription( - template (present) JSON.AnyURI p_callbackReference := ?, + template (present) Json.AnyURI p_callbackReference := ?, template (present) V2xMsgSubscriptionFilterCriteria p_filterCriteria := ?, template LinkType p_links := *, template TimeStamp p_expiryDeadline := * diff --git a/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_TypesAndValues.ttcn b/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_TypesAndValues.ttcn index 29ebd24..076dd00 100644 --- a/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_TypesAndValues.ttcn @@ -11,7 +11,7 @@ module V2XInformationServiceAPI_TypesAndValues { // JSON - import from JSON all; + import from Json all; // LibCommon import from LibCommon_BasicTypesAndValues all; @@ -21,7 +21,7 @@ module V2XInformationServiceAPI_TypesAndValues { * @see ETSI TS 136 413 */ type record CellId { - JSON.String cellId + Json.String cellId } /** @@ -99,8 +99,8 @@ module V2XInformationServiceAPI_TypesAndValues { * @see MEC030 Clause 6.5.3 Type: LocationInfo */ type record LocationInfoGeoArea { - JSON.Number latitude, - JSON.Number longitude + Json.Number latitude, + Json.Number longitude } /** @@ -125,7 +125,7 @@ module V2XInformationServiceAPI_TypesAndValues { type record Pc5NeighbourCellInfo { Ecgi ecgi, Plmn plmn, - JSON.String siV2xConfig + Json.String siV2xConfig } type record of Pc5NeighbourCellInfo Pc5NeighbourCellInfoList; @@ -137,7 +137,7 @@ module V2XInformationServiceAPI_TypesAndValues { * @see MEC030 Clause 6.2.4 Type: Pc5ProvisioningInfo */ type record Pc5ProvisioningInfoProInfoPc5 { - JSON.String dstLayer2Id, + Json.String dstLayer2Id, LocationInfo locationInfo, Pc5NeighbourCellInfoList neighbourCellInfo optional } @@ -161,8 +161,8 @@ module V2XInformationServiceAPI_TypesAndValues { * @see MEC030 Clause 6.5.4 Type: Plmn */ type record Plmn { - JSON.String mcc, - JSON.String mnc + Json.String mcc, + Json.String mnc } /** @@ -200,7 +200,7 @@ module V2XInformationServiceAPI_TypesAndValues { */ type record PredictedQos { TimeStamp timeGranularity optional, - JSON.String locationGranularity, + Json.String locationGranularity, PredictedQosRoutesList routes } @@ -213,10 +213,10 @@ module V2XInformationServiceAPI_TypesAndValues { * @see MEC030 Clause 6.4.4 Type: ProvChgPc5Notification */ type record ProvChgPc5Notification { - JSON.String dstLayer2Id optional, + Json.String dstLayer2Id optional, LocationInfo locationInfo, Pc5NeighbourCellInfoList neighbourCellInfo optional, - JSON.String notificationType, + Json.String notificationType, TimeStamp timeStamp optional } @@ -226,7 +226,7 @@ module V2XInformationServiceAPI_TypesAndValues { * @see MEC030 Clause 6.3.4 Type: ProvChgPc5Subscription */ type record LinkType { - JSON.AnyURI self_ + Json.AnyURI self_ } with { variant (self_) "name as 'self'"; } @@ -239,7 +239,7 @@ module V2XInformationServiceAPI_TypesAndValues { * @see MEC030 Clause 6.3.4 Type: ProvChgPc5Subscription */ type record FilterCriteria { - JSON.String dstLayer2Id, + Json.String dstLayer2Id, LocationInfo locationInfo, Pc5NeighbourCellInfoList neighbourCellInfo optional } @@ -255,10 +255,10 @@ module V2XInformationServiceAPI_TypesAndValues { */ type record ProvChgPc5Subscription { LinkType links optional, - JSON.AnyURI callbackReference, + Json.AnyURI callbackReference, TimeStamp expiryDeadline optional, FilterCriteria filterCriteria, - JSON.String subscriptionType + Json.String subscriptionType } with { variant (links) "name as '_links'"; } @@ -275,7 +275,7 @@ module V2XInformationServiceAPI_TypesAndValues { type record ProvChgUuMbmsNotification { LocationInfo locationInfo, UuMbmsNeighbourCellInfoList neighbourCellInfo optional, - JSON.String notificationType, + Json.String notificationType, TimeStamp timeStamp optional, V2xServerUsd v2xServerUsd optional } @@ -304,10 +304,10 @@ module V2XInformationServiceAPI_TypesAndValues { */ type record ProvChgUuMbmsSubscription { LinkType links optional, - JSON.AnyURI callbackReference, + Json.AnyURI callbackReference, TimeStamp expiryDeadline optional, ProvChgUuMbmsSubscriptionFilterCriteria filterCriteria, - JSON.String subscriptionType + Json.String subscriptionType } with { variant (links) "name as '_links'"; } @@ -324,7 +324,7 @@ module V2XInformationServiceAPI_TypesAndValues { type record ProvChgUuUniNotification { LocationInfo locationInfo, UuUniNeighbourCellInfoList neighbourCellInfo optional, - JSON.String notificationType, + Json.String notificationType, TimeStamp timeStamp optional, V2xApplicationServer v2xApplicationServer optional } @@ -353,10 +353,10 @@ module V2XInformationServiceAPI_TypesAndValues { */ type record ProvChgUuUniSubscription { LinkType links optional, - JSON.AnyURI callbackReference, + Json.AnyURI callbackReference, TimeStamp expiryDeadline optional, ProvChgUuUniSubscriptionFilterCriteria filterCriteria, - JSON.String subscriptionType + Json.String subscriptionType } with { variant (links) "name as '_links'"; } @@ -368,8 +368,8 @@ module V2XInformationServiceAPI_TypesAndValues { * @see MEC030 Clause 6.3.6 Type: SubscriptionLinkList */ type record SubscriptionsLink_ { - JSON.AnyURI href, - JSON.String subscriptionType + Json.AnyURI href, + Json.String subscriptionType } type record of SubscriptionsLink_ SubscriptionLinkList_; @@ -395,7 +395,7 @@ module V2XInformationServiceAPI_TypesAndValues { */ type record TddInfo { Earfcn earfcn, - JSON.String subframeAssignment, + Json.String subframeAssignment, TransmissionBandwidth transmissionBandwidth } @@ -417,7 +417,7 @@ module V2XInformationServiceAPI_TypesAndValues { Plmn plmn, TddInfo tddInfo } - type record of JSON.String MbmsServiceAreaIdentityList; + type record of Json.String MbmsServiceAreaIdentityList; type record of UuMbmsNeighbourCellInfo UuMbmsNeighbourCellInfoList; /** @@ -493,8 +493,8 @@ module V2XInformationServiceAPI_TypesAndValues { * @see MEC030 Clause 6.5.8 Type: V2xApplicationServer */ type record V2xApplicationServer { - JSON.String ipAddress, - JSON.String udpPort + Json.String ipAddress, + Json.String udpPort } /** @@ -529,8 +529,8 @@ module V2XInformationServiceAPI_TypesAndValues { * @see MEC030 Clause 6.2.6 Type: V2xMsgPublication */ type record V2xMsgPublication { - JSON.String msgContent, - JSON.String msgEncodeFormat, + Json.String msgContent, + Json.String msgEncodeFormat, MsgType msgType, StdOrganization stdOrganization } @@ -557,10 +557,10 @@ module V2XInformationServiceAPI_TypesAndValues { */ type record V2xMsgSubscription { LinkType links optional, - JSON.AnyURI callbackReference, + Json.AnyURI callbackReference, TimeStamp expiryDeadline optional, V2xMsgSubscriptionFilterCriteria filterCriteria, - JSON.String subscriptionType + Json.String subscriptionType } with { variant (links) "name as '_links'"; } @@ -586,12 +586,12 @@ module V2XInformationServiceAPI_TypesAndValues { * @see MEC030 Clause 6.4.5 Type: V2xMsgNotification */ type record V2xMsgNotification { - JSON.String notificationType, + Json.String notificationType, TimeStamp timeStamp, StdOrganization stdOrganization, MsgType msgType, - JSON.String msgEncodeFormat, - JSON.String msgContent, + Json.String msgEncodeFormat, + Json.String msgContent, V2xMsgNotificationLinks links } with { variant (links) "name as '_links'"; @@ -604,8 +604,8 @@ module V2XInformationServiceAPI_TypesAndValues { * @see MEC030 Clause 6.5.10 Type: V2xServerUsd */ type record SdpInfo { - JSON.String ipMulticastAddress, - JSON.String portNumber + Json.String ipMulticastAddress, + Json.String portNumber } type record of SdpInfo SdpInfoList; @@ -617,9 +617,9 @@ module V2XInformationServiceAPI_TypesAndValues { * @see MEC030 Clause 6.5.10 Type: V2xServerUsd */ type record Tmgi { - JSON.String mbmsServiceId, - JSON.String mcc, - JSON.String mnc + Json.String mbmsServiceId, + Json.String mcc, + Json.String mnc } /** @@ -634,7 +634,7 @@ module V2XInformationServiceAPI_TypesAndValues { SdpInfo sdpInfo, Tmgi tmgi } - type record of JSON.String ServiceAreaIdentifier; + type record of Json.String ServiceAreaIdentifier; } with { encode "JSON" diff --git a/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Functions.ttcn b/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Functions.ttcn index eeadfd6..0be7d86 100644 --- a/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Functions.ttcn +++ b/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Functions.ttcn @@ -11,7 +11,7 @@ module WlanInformationAPI_Functions { // JSON - import from JSON all; + import from Json all; // LibCommon import from LibCommon_BasicTypesAndValues all; diff --git a/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Pixits.ttcn b/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Pixits.ttcn index 7f6d43a..4f04fca 100644 --- a/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Pixits.ttcn +++ b/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Pixits.ttcn @@ -1,20 +1,20 @@ module WlanInformationAPI_Pixits { // JSON - import from JSON all; + import from Json all; modulepar charstring PX_WLAN_FILTER_FIELD := "ap/macId"; modulepar charstring PX_WLAN_FILTER_VALUE := "005C06060606"; - modulepar JSON.String PX_MAC_ID := "005C06060606"; + modulepar Json.String PX_MAC_ID := "005C06060606"; - modulepar JSON.AnyURI PX_ASSOC_STA_SUBSCRIPTION_CALLBACK := "https://127.0.0.1/wai/v1/assoc_notif"; + modulepar Json.AnyURI PX_ASSOC_STA_SUBSCRIPTION_CALLBACK := "https://127.0.0.1/wai/v1/assoc_notif"; - modulepar JSON.String PX_SSID := "WLAN_SSID"; + modulepar Json.String PX_SSID := "WLAN_SSID"; - modulepar JSON.String PX_IP_ADDRESS := "10.10.10.10"; + modulepar Json.String PX_IP_ADDRESS := "10.10.10.10"; - modulepar JSON.String PX_MEASUREMENT_ID := "1"; + 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 feea068..982baed 100644 --- a/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Templates.ttcn +++ b/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Templates.ttcn @@ -1,7 +1,7 @@ module WlanInformationAPI_Templates { // JSON - import from JSON all; + import from Json all; // LibCommon import from LibCommon_BasicTypesAndValues all; @@ -119,9 +119,9 @@ module WlanInformationAPI_Templates { } // End of template mw_sta_info template (omit) AssocStaSubscription m_assoc_sta_subscription( - in template (value) JSON.AnyURI p_callbackReference, + in template (value) Json.AnyURI p_callbackReference, in template (value) ApIdentity p_apId, - in template (omit) JSON.Bool p_requestTestNotification := omit, + 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, @@ -140,9 +140,9 @@ module WlanInformationAPI_Templates { } // 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) Json.AnyURI p_callbackReference, in template (value) ApIdentity p_apId, - in template (omit) JSON.Bool p_requestTestNotification := omit, + 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, @@ -161,9 +161,9 @@ module WlanInformationAPI_Templates { } // End of template m_assoc_sta_subscription_invalid template (present) AssocStaSubscription mw_assoc_sta_subscription( - template (present) JSON.AnyURI p_callbackReference := ?, + template (present) Json.AnyURI p_callbackReference := ?, template (present) ApIdentity p_apId := ?, - template JSON.Bool p_requestTestNotification := *, + template Json.Bool p_requestTestNotification := *, template WebsockNotifConfig p_websockNotifConfig := *, template LinkTypes p_links := *, template UInt8 p_notificationPeriod := *, @@ -182,9 +182,9 @@ module WlanInformationAPI_Templates { } // 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) Json.AnyURI p_callbackReference, in template (value) StaIdentities p_staId, - in template (omit) JSON.Bool p_requestTestNotification := omit, + 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, @@ -203,9 +203,9 @@ module WlanInformationAPI_Templates { } // 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) Json.AnyURI p_callbackReference, in template (value) StaIdentities p_staId, - in template (omit) JSON.Bool p_requestTestNotification := omit, + 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, @@ -224,9 +224,9 @@ module WlanInformationAPI_Templates { } // 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) Json.AnyURI p_callbackReference := ?, template (present) StaIdentities p_staId := ?, - template JSON.Bool p_requestTestNotification := *, + template Json.Bool p_requestTestNotification := *, template WebsockNotifConfig p_websockNotifConfig := *, template LinkTypes p_links := *, template UInt8 p_notificationPeriod := *, @@ -245,10 +245,10 @@ module WlanInformationAPI_Templates { } // 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 + 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, @@ -257,10 +257,10 @@ module WlanInformationAPI_Templates { } // 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 := * + 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, @@ -285,7 +285,7 @@ module WlanInformationAPI_Templates { } // End of template mw_subscription_link_list template (omit) ApIdentity m_ap_identity( - in JSON.String p_bssid, + in Json.String p_bssid, in template (omit) SsidList p_ssid := omit, in template (omit) IpAddressList p_ipAddress := omit ) := { @@ -295,7 +295,7 @@ module WlanInformationAPI_Templates { } // End of template m_ap_identity template (present) ApIdentity mw_ap_identity( - template (present) JSON.String p_bssid := ?, + template (present) Json.String p_bssid := ?, template SsidList p_ssid := *, template IpAddressList p_ipAddress := * ) := { @@ -321,16 +321,16 @@ module WlanInformationAPI_Templates { } // 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 + 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 := ? + template (present) Json.AnyURI p_href := ?, + template (present) Json.String p_measurementId := ? ) := { href := p_href, measurementId := p_measurementId @@ -339,7 +339,7 @@ module WlanInformationAPI_Templates { 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 Json.String p_measurementId, in template (value) MeasurementInfo p_measurementInfo ) := { links := p_links, @@ -351,7 +351,7 @@ module WlanInformationAPI_Templates { template (present) MeasurementConfig mw_measurement_config( template LinkTypes p_links := *, template (present) StaIdentities p_staId := ?, - template (present) JSON.String p_measurementId := ?, + template (present) Json.String p_measurementId := ?, template (present) MeasurementInfo p_measurementInfo := ? ) := { links := p_links, diff --git a/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_TypesAndValues.ttcn b/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_TypesAndValues.ttcn index 4ca5adb..35effc6 100644 --- a/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_TypesAndValues.ttcn @@ -11,7 +11,7 @@ module WlanInformationAPI_TypesAndValues { // JSON - import from JSON all; + import from Json all; // LibCommon import from LibCommon_BasicTypesAndValues all; @@ -37,8 +37,8 @@ module WlanInformationAPI_TypesAndValues { NanoSeconds nanoSeconds } - type record of JSON.String SsidList; - type record of JSON.String IpAddressList; + type record of Json.String SsidList; + type record of Json.String IpAddressList; /** * @desc Identifiers determining a specific 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 @@ -47,7 +47,7 @@ module WlanInformationAPI_TypesAndValues { * @see ETSI GS MEC 028 Clause 6.5.3 Type: ApIdentity */ type record ApIdentity { - JSON.String bssid, + Json.String bssid, SsidList ssid optional, IpAddressList ipAddress optional } @@ -257,39 +257,39 @@ module WlanInformationAPI_TypesAndValues { * @see ETSI GS MEC 028 Clause 6.5.20 Type: CivicLocation */ type record CivicLocation { - JSON.String country, - JSON.String ca0 optional, - JSON.String ca1 optional, - JSON.String ca2 optional, - JSON.String ca3 optional, - JSON.String ca4 optional, - JSON.String ca5 optional, - JSON.String ca6 optional, - JSON.String ca16 optional, - JSON.String ca17 optional, - JSON.String ca18 optional, - JSON.String ca19 optional, - JSON.String ca20 optional, - JSON.String ca21 optional, - JSON.String ca22 optional, - JSON.String ca23 optional, - JSON.String ca24 optional, - JSON.String ca25 optional, - JSON.String ca26 optional, - JSON.String ca27 optional, - JSON.String ca28 optional, - JSON.String ca29 optional, - JSON.String ca30 optional, - JSON.String ca31 optional, - JSON.String ca32 optional, - JSON.String ca33 optional, - JSON.String ca34 optional, - JSON.String ca35 optional, - JSON.String ca36 optional, - JSON.String ca37 optional, - JSON.String ca38 optional, - JSON.String ca39 optional, - JSON.String ca128 optional + Json.String country, + Json.String ca0 optional, + Json.String ca1 optional, + Json.String ca2 optional, + Json.String ca3 optional, + Json.String ca4 optional, + Json.String ca5 optional, + Json.String ca6 optional, + Json.String ca16 optional, + Json.String ca17 optional, + Json.String ca18 optional, + Json.String ca19 optional, + Json.String ca20 optional, + Json.String ca21 optional, + Json.String ca22 optional, + Json.String ca23 optional, + Json.String ca24 optional, + Json.String ca25 optional, + Json.String ca26 optional, + Json.String ca27 optional, + Json.String ca28 optional, + Json.String ca29 optional, + Json.String ca30 optional, + Json.String ca31 optional, + Json.String ca32 optional, + Json.String ca33 optional, + Json.String ca34 optional, + Json.String ca35 optional, + Json.String ca36 optional, + Json.String ca37 optional, + Json.String ca38 optional, + Json.String ca39 optional, + Json.String ca128 optional } /** @@ -312,10 +312,10 @@ module WlanInformationAPI_TypesAndValues { * @see ETSI GS MEC 028 Clause 6.5.11 Type: StaIdentity */ type record StaIdentity { - JSON.String macId, - JSON.String ssid optional, - JSON.String aid optional, - JSON.String ipAddress optional + Json.String macId, + Json.String ssid optional, + Json.String aid optional, + Json.String ipAddress optional } type record of StaIdentity StaIdentities; @@ -333,8 +333,8 @@ module WlanInformationAPI_TypesAndValues { */ type record NeighborReportItem { StaIdentity staId, - JSON.String measurementId, - JSON.String bssid, + Json.String measurementId, + Json.String bssid, UInt32 bssidInfo, UInt8 operatingClass, UInt8 channel, @@ -352,10 +352,10 @@ module WlanInformationAPI_TypesAndValues { * @see ETSI GS MEC 028 Clause 6.5.12 Type: ApAssociated */ type record ApAssociated { - JSON.String bssid, - JSON.String ssid optional, - JSON.String assocId optional, - JSON.String ipAddress optional + Json.String bssid, + Json.String ssid optional, + Json.String assocId optional, + Json.String ipAddress optional } /** @@ -370,13 +370,13 @@ module WlanInformationAPI_TypesAndValues { * @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 + Json.Bool failed, + Json.Bool fcsError, + Json.Bool multipleRetry, + Json.Bool frameDuplicate, + Json.Bool rtsFailure, + Json.Bool ackFailure, + Json.Bool retry } /** @@ -391,13 +391,13 @@ module WlanInformationAPI_TypesAndValues { * @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 + Json.Bool qosFailed, + Json.Bool qosRetry, + Json.Bool qosMultipleRetry, + Json.Bool qosFrameDuplicate, + Json.Bool qosRtsFailure, + Json.Bool qosAckFailure, + Json.Bool qosDiscarded } /** @@ -412,7 +412,7 @@ module WlanInformationAPI_TypesAndValues { */ type record ChannelLoadItem { StaIdentity staId optional, - JSON.String measurementId, + Json.String measurementId, UInt8 operatingClass, UInt8 channel, UInt8 measurementDuration, @@ -444,8 +444,8 @@ module WlanInformationAPI_TypesAndValues { * @see ETSI GS MEC 028 Clause 6.5.32 Type: NeighborReportConfig */ type record NeighborReportConfig { - JSON.String ssid optional, - JSON.String bssid optional + Json.String ssid optional, + Json.String bssid optional } /** @@ -560,8 +560,8 @@ module WlanInformationAPI_TypesAndValues { */ type record StaStatistics { StaIdentity staId optional, - JSON.String measurementId, - JSON.String measurementDuration, + Json.String measurementId, + Json.String measurementDuration, UInt8 groupIdentity, StaStatisticsGroupZeroData groupZeroData optional, StaStatisticsGroupOneData groupOneData optional, @@ -598,7 +598,7 @@ module WlanInformationAPI_TypesAndValues { * @see ETSI GS MEC 028 Clause 6.5.23 Type: LinkType */ type record LinkType { - JSON.AnyURI href + Json.AnyURI href } type record LinkTypes { @@ -638,8 +638,8 @@ module WlanInformationAPI_TypesAndValues { SsIds ssId optional, UInt32 reportingCondition } - type record of JSON.String BssIds; - type record of JSON.String SsIds; + type record of Json.String BssIds; + type record of Json.String SsIds; /** * @desc @@ -668,7 +668,7 @@ module WlanInformationAPI_TypesAndValues { */ type record BeaconReportItem { StaIdentity staId, - JSON.String measurementId, + Json.String measurementId, UInt32 channelId, BssIds bssId, SsIds ssId optional @@ -740,15 +740,15 @@ module WlanInformationAPI_TypesAndValues { type record MeasurementConfig { LinkTypes links optional, StaIdentities staId, - JSON.String measurementId, + Json.String measurementId, MeasurementInfo measurementInfo } with { variant (links) "name as '_links'"; } type record MeasurementConfig_MeasurementConfigLinkList { - JSON.AnyURI href, - JSON.String measurementId + Json.AnyURI href, + Json.String measurementId } /** @@ -791,9 +791,9 @@ module WlanInformationAPI_TypesAndValues { * @see ETSI GS MEC 028 Clause 6.3.2 Type: AssocStaSubscription */ type record AssocStaSubscription { - JSON.String subscriptionType, - JSON.AnyURI callbackReference optional, - JSON.Bool requestTestNotification optional, + Json.String subscriptionType, + Json.AnyURI callbackReference optional, + Json.Bool requestTestNotification optional, WebsockNotifConfig websockNotifConfig optional, LinkTypes links optional, ApIdentity apId, @@ -819,9 +819,9 @@ module WlanInformationAPI_TypesAndValues { * @see ETSI GS MEC 028 Clause 6.3.3 Type: StaDataRateSubscription */ type record StaDataRateSubscription { - JSON.String subscriptionType, - JSON.AnyURI callbackReference, - JSON.Bool requestTestNotification optional, + Json.String subscriptionType, + Json.AnyURI callbackReference, + Json.Bool requestTestNotification optional, WebsockNotifConfig websockNotifConfig optional, LinkTypes links optional, StaIdentities staId, @@ -840,8 +840,8 @@ module WlanInformationAPI_TypesAndValues { * @see ETSI GS MEC 028 Clause 6.3.4 Type: SubscriptionLinkList */ type record SubscriptionItem { - JSON.AnyURI href, - JSON.String subscriptionType + Json.AnyURI href, + Json.String subscriptionType } type record of SubscriptionItem Subscription; @@ -865,8 +865,8 @@ module WlanInformationAPI_TypesAndValues { * @see ETSI GS MEC 028 Clause 6.3.6 Type: WebsockNotifConfig */ type record WebsockNotifConfig { - JSON.AnyURI websocketUri optional, - JSON.Bool requestWebsocketUri optional + Json.AnyURI websocketUri optional, + Json.Bool requestWebsocketUri optional } /** @@ -878,7 +878,7 @@ module WlanInformationAPI_TypesAndValues { * @see ETSI GS MEC 028 Clause 6.4.2 Type: AssocStaNotification */ type record AssocStaNotification { - JSON.String notificationType, + Json.String notificationType, TimeStamp timeStamp optional, ApIdentity apId, StaIdentities staId optional @@ -892,7 +892,7 @@ module WlanInformationAPI_TypesAndValues { * @see ETSI GS MEC 028 Clause 6.4.3 Type: StaDataRateNotification */ type record StaDataRateNotification { - JSON.String notificationType, + Json.String notificationType, TimeStamp timeStamp optional, StaDataRates staDataRate optional } @@ -905,7 +905,7 @@ module WlanInformationAPI_TypesAndValues { * @see ETSI GS MEC 028 Clause 6.4.4 Type: ExpiryNotification */ type record ExpiryNotification { - JSON.String notificationType, + Json.String notificationType, LinkTypes links, TimeStamp expiryDeadline } with { diff --git a/ttcn/LibMec/module.mk b/ttcn/LibMec/module.mk index 3d489bc..d76a5ac 100644 --- a/ttcn/LibMec/module.mk +++ b/ttcn/LibMec/module.mk @@ -1,9 +1,7 @@ sources := \ - ttcn/JSON.ttcn \ ttcn/LibMec_Functions.ttcn \ ttcn/LibMec_Pics.ttcn \ ttcn/LibMec_Pixits.ttcn \ ttcn/LibMec_Templates.ttcn \ ttcn/LibMec_TypesAndValues.ttcn \ - diff --git a/ttcn/LibMec/ttcn/JSON.ttcn b/ttcn/LibMec/ttcn/JSON.ttcn deleted file mode 100644 index 5867bd3..0000000 --- a/ttcn/LibMec/ttcn/JSON.ttcn +++ /dev/null @@ -1,151 +0,0 @@ -module JSON { - - // These constants are used in the JSON date/time type definitions - const charstring - dash := "-", - cln := ":", - year := "[0-9]#4", - yearExpansion := "(-([1-9][0-9]#(0,))#(,1))#(,1)", - month := "(0[1-9]|1[0-2])", - dayOfMonth := "(0[1-9]|[12][0-9]|3[01])", - hour := "([01][0-9]|2[0-3])", - minute := "([0-5][0-9])", - second := "([0-5][0-9])", - sFraction := "(.[0-9]#(1,))#(,1)", - endOfDayExt := "24:00:00(.0#(1,))#(,1)", - nums := "[0-9]#(1,)", - ZorTimeZoneExt := "(Z|[+-]((0[0-9]|1[0-3]):[0-5][0-9]|14:00))#(,1)", - durTime := "(T[0-9]#(1,)"& - "(H([0-9]#(1,)(M([0-9]#(1,)(S|.[0-9]#(1,)S))#(,1)|.[0-9]#(1,)S|S))#(,1)|"& - "M([0-9]#(1,)(S|.[0-9]#(1,)S)|.[0-9]#(1,)M)#(,1)|"& - "S|"& - ".[0-9]#(1,)S))"; - type universal charstring utf8string; - type utf8string JSONCompatibleString - ( - char(0,0,0,9)..char(0,0,0,9), - char(0,0,0,10)..char(0,0,0,10), - char(0,0,0,13)..char(0,0,0,13), - char(0,0,0,32)..char(0,0,215,255), - char(0,0,224,0)..char(0,0,255,253), - char(0,1,0,0)..char(0,16,255,253) - ); - type utf8string JSONStringWithNoWhitespace - ( - char(0,0,0,33)..char(0,0,215,255), - char(0,0,224,0)..char(0,0,255,253), - char(0,1,0,0)..char(0,16,255,253) - ); - type utf8string JSONStringWithNoCRLFHT - ( - char(0,0,0,32)..char(0,0,215,255), - char(0,0,224,0)..char(0,0,255,253), - char(0,1,0,0)..char(0,16,255,253) - ); - - // JSON Number type (generic) - type float Number (!-infinity .. !infinity) /*with { - variant "JSON:number" - }*/; - // Integer type - type integer Integer (-infinity .. infinity) /*with { - variant "JSON:integer" - }*/; - // String type - type utf8string String /*with { - variant "JSON:string" - }*/; - type JSONStringWithNoCRLFHT NormalizedString /*with { - variant "JSON:normalizedString"; - }*/; - type JSONStringWithNoWhitespace Name /*with { - variant "JSON:Name"; - }*/; - type Name NCName /*with { - variant "JSON:NCName"; - }*/; - type NormalizedString Token /*with { - variant "JSON:token"; - }*/; - type JSONStringWithNoCRLFHT AnyURI /*with { - variant "JSON:anyURI"; - }*/; - type charstring Duration (pattern - "{dash}#(,1)P({nums}(Y({nums}(M({nums}D{durTime}#(,1)|{durTime}#(,1))|D{durTime}#(,1))|" & - "{durTime}#(,1))|M({nums}D{durTime}#(,1)|{durTime}#(,1))|D{durTime}#(,1))|{durTime})") - /*with { - variant "JSON:duration"; - }*/; - type charstring DateTime (pattern - "{yearExpansion}{year}{dash}{month}{dash}{dayOfMonth}T({hour}{cln}{minute}{cln}{second}" & - "{sFraction}|{endOfDayExt}){ZorTimeZoneExt}" ) - /*with { - variant "JSON:dateTime"; - }*/; - type charstring Time (pattern "({hour}{cln}{minute}{cln}{second}{sFraction}|{endOfDayExt}){ZorTimeZoneExt}" ) - /*with { - variant "JSON:time"; - }*/; - type charstring Date (pattern "{yearExpansion}{year}{dash}{month}{dash}{dayOfMonth}{ZorTimeZoneExt}" ) - /*with { - variant "JSON:date"; - }*/; - // Array type - /*type record of JSON.Values Array with { - variant "JSON:array" - }*/ - // Subsidiary array types - type record of JSON.String StrArray; /*with { - variant "JSON:array" - }*/ - type record of JSON.Number NumArray; /*with { - variant "JSON:array" - }*/ - type record of JSON.Integer IntArray; /*with { - variant "JSON:array" - } - type record of JSON.Bool BoolArray with { - variant "JSON:array" - } - type record of JSON.Object ObjArray with { - variant "JSON:array" - }*/ - // Object member - /*type record ObjectMember { - JSON.String name, - JSON.Values value_ - } with { - variant "JSON:objectMember" - }*/ - // Generic JSON object type - /*type record Object { - record length (1..infinity) of JSON.ObjectMember memberList optional - } with { - variant "JSON:object" - } - type union Values { - JSON.String str, - JSON.Number num, - JSON.Integer int, - JSON.Object object, - JSON.Array array, - JSON.StrArray strArray, - JSON.NumArray numArray, - JSON.IntArray intArray, - JSON.BoolArray boolArray, - JSON.ObjArray objArray, - JSON.Bool bool, - JSON.Null null_ - } with { - variant "asValue" - }*/ - - //JSON literals - //When only the true and false literals are allowed - type boolean Bool; /*with { variant "JSON:literal" }*/ - //When only the null literal is allowed - type enumerated Null { null_ }; /*with { variant "JSON:literal" }*/ - -} with { - encode "JSON" -} // End of module JSON diff --git a/ttcn/LibMec/ttcn/LibMec_Templates.ttcn b/ttcn/LibMec/ttcn/LibMec_Templates.ttcn index 7e7fed5..d5f8e82 100644 --- a/ttcn/LibMec/ttcn/LibMec_Templates.ttcn +++ b/ttcn/LibMec/ttcn/LibMec_Templates.ttcn @@ -1,7 +1,7 @@ module LibMec_Templates { // JSON - import from JSON all; + import from Json all; // LibCommon import from LibCommon_BasicTypesAndValues all; @@ -10,11 +10,11 @@ module LibMec_Templates { import from LibMec_TypesAndValues all; template (omit) ProblemDetails m_problem_details( - in template (omit) JSON.String p_type := omit, - in template (omit) JSON.String p_title := omit, + in template (omit) Json.String p_type := omit, + in template (omit) Json.String p_title := omit, in template (omit) UInt32 p_status := omit, - in template (value) JSON.String p_detail, - in template (omit) JSON.String p_instance := omit + in template (value) Json.String p_detail, + in template (omit) Json.String p_instance := omit ) := { type_ := p_type, title := p_title, @@ -24,11 +24,11 @@ module LibMec_Templates { } // End of template m_problem_details template ProblemDetails mw_problem_details( - template JSON.String p_type := *, - template JSON.String p_title := *, + template Json.String p_type := *, + template Json.String p_title := *, template UInt32 p_status := *, - template JSON.String p_detail := *, - template JSON.String p_instance := * + template Json.String p_detail := *, + template Json.String p_instance := * ) := { type_ := p_type, title := p_title, diff --git a/ttcn/LibMec/ttcn/LibMec_TypesAndValues.ttcn b/ttcn/LibMec/ttcn/LibMec_TypesAndValues.ttcn index e233530..829f2eb 100644 --- a/ttcn/LibMec/ttcn/LibMec_TypesAndValues.ttcn +++ b/ttcn/LibMec/ttcn/LibMec_TypesAndValues.ttcn @@ -1,7 +1,7 @@ module LibMec_TypesAndValues { // JSON - import from JSON all; + import from Json all; // LibCommon import from LibCommon_BasicTypesAndValues all; @@ -16,11 +16,11 @@ module LibMec_TypesAndValues { * @see IETF RFC 7807 Clause 3. The Problem Details JSON Object */ type record ProblemDetails { - JSON.String type_ optional, - JSON.String title optional, + Json.String type_ optional, + Json.String title optional, UInt32 status optional, - JSON.String detail, - JSON.String instance optional + Json.String detail, + Json.String instance optional } with { variant (type_) "name as 'type'"; } diff --git a/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn b/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn index ab6a82c..6b91648 100644 --- a/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn +++ b/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn @@ -20,6 +20,8 @@ module LibHttp_JsonMessageBodyTypes { import from DeviceApplicationInterfaceAPI_TypesAndValues all; // LibMec/WlanInformationAPI import from WlanInformationAPI_TypesAndValues all; + // LibMec/FixedAccessInformationServiceAPI + import from FixedAccessInformationServiceAPI_TypesAndValues all; // LibMec/V2XInformationServiceAPI import from V2XInformationServiceAPI_TypesAndValues all; @@ -134,6 +136,12 @@ module LibHttp_JsonMessageBodyTypes { WlanInformationAPI_TypesAndValues.SubscriptionLinkList subscriptionLinkList_wlan, MeasurementConfigLinkList measurementConfigLinkList, MeasurementConfig measurementConfig, + FaInfo faInfo, + DeviceInfo deviceInfo, + CableLineInfo cableLineInfo, + PonInfo ponInfo, + OnuAlarmSubscription onuAlarmSubscription, + FixedAccessInformationServiceAPI_TypesAndValues.SubscriptionLinkList subscriptionLinkList_fai, UuUnicastProvisioningInfo uuUnicastProvisioningInfo, UuMbmsProvisioningInfo uuMbmsProvisioningInfo, Pc5ProvisioningInfo pc5ProvisioningInfo, diff --git a/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn b/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn index 314242c..b4e9720 100644 --- a/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn +++ b/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn @@ -33,8 +33,9 @@ module LibHttp_JsonTemplates { // LibMec/UEAppInterfaceAPI import from UEAppInterfaceAPI_TypesAndValues all; + // LibMec/module FixedAccessInformationServiceAPI - //import from FixedAccessInformationServiceAPI_TypesAndValues all; + import from FixedAccessInformationServiceAPI_TypesAndValues all; // LibMec/DeviceApplicationInterfaceAPI import from DeviceApplicationInterfaceAPI_TypesAndValues all; @@ -1234,7 +1235,7 @@ group ams_api { } // End of group v2x_information_service - /*group fai { + group fai { template (value) JsonBody m_body_json_fai_fa_info( in template (value) FaInfo p_faInfo @@ -1309,5 +1310,5 @@ group ams_api { } // End of template mw_body_json_fai_onu_alarm_subscription_link_list } // End of group fai - */ + } // End of module LibHttp_JsonTemplates diff --git a/virtualization/docker-dev/Dockerfile b/virtualization/docker-dev/Dockerfile new file mode 100644 index 0000000..cae4b24 --- /dev/null +++ b/virtualization/docker-dev/Dockerfile @@ -0,0 +1,49 @@ +FROM alpine:latest + +# Install dependencies +RUN apk update && \ + apk add --no-cache sudo make git g++ diffutils expect openssl-dev libxml2-dev libxml2-utils libxslt-dev libtool ncurses-dev jsoncpp-dev readline-dev flex bison perl libexecinfo-dev bash libedit libedit-dev lksctp-tools lksctp-tools-dev libpcap-dev + +# Create user and sudouser +RUN \ + addgroup -g 1000 etsi && \ + adduser -S -D -u 1000 -G etsi -h /home/etsi -s /bin/bash etsi && \ + echo "etsi:etsi" | chpasswd && \ + echo "etsi ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers || exit 1 +USER etsi + +# Setup Hosts file at the boot time +RUN \ + echo 'sudo sh -c "cp /etc/hosts /etc/append && (echo \"127.0.1.1 $HOSTNAME\"; cat /etc/append) > /etc/hosts"' >> /home/etsi/.bashrc \ + echo 'sh' >> /home/etsi/.bashrc || exit 1 + +# Clone Titan +WORKDIR /home/etsi +RUN mkdir -p frameworks dev tmp && cd frameworks && git clone https://github.com/eclipse/titan.core.git || exit 1 +WORKDIR /home/etsi/frameworks/titan.core/ + +# Setup ENV variables +ENV TTCN3_DIR=/home/etsi/frameworks/titan.core/Install +ENV PATH=$TTCN3_DIR/bin:$PATH \ + LD_LIBRARY_PATH=$TTCN3_DIR/lib:$LD_LIBRARY_PATH + +# Set flags +RUN \ + echo "ALPINE_LINUX=yes" > Makefile.personal && \ + echo "TTCN3_DIR=$TTCN3_DIR" >> Makefile.personal && \ + echo "JNI=no" >> Makefile.personal && \ + echo "GUI=no" >> Makefile.personal && \ + echo "DEBUG=no" >> Makefile.personal || exit 1 + +# Build Titan +RUN \ + sed --in-place 's/LINUX_LIBS := -lxml2/LINUX_LIBS := -lxml2 -lpthread/g' ./core/Makefile && \ + make install && make clean || exit 1 + +WORKDIR /home/etsi/dev + +ENV ATS=AtsCise + +EXPOSE 30181/tcp + +ENTRYPOINT /home/yann/dev/cise/virtualization/docker/docker-entrypoint.sh diff --git a/virtualization/docker/Dockerfile.stfubuntu b/virtualization/docker-dev/Dockerfile.stfubuntu similarity index 100% rename from virtualization/docker/Dockerfile.stfubuntu rename to virtualization/docker-dev/Dockerfile.stfubuntu diff --git a/virtualization/docker-dev/README.md b/virtualization/docker-dev/README.md new file mode 100644 index 0000000..bc19714 --- /dev/null +++ b/virtualization/docker-dev/README.md @@ -0,0 +1,99 @@ +# HOWTO build docker images + +## General imformation + +Pre-requisites on your host machine: + +- Install [Docker](https://docs.docker.com/install/) + +#### From Windows host: + +- Install [Virtualbox](https://www.virtualbox.org/manual/ch01.html) +- Install any X Server. For example [VcXsrv](https://sourceforge.net/projects/vcxsrv/) + +#### From Mac host: + +- Install [Virtualbox](https://www.virtualbox.org/manual/ch01.html) +- Install [XQuartz](https://www.xquartz.org) + +#### From Linux host: + +- No other requirements + +## Build docker image + +For Windows host, rename ```build.cmd.a``` and ```run.cmd.a``` to ```build.cmd``` and ```run.cmd``` respectivelly. + +Special scrips ```build.sh``` (or ```build.cmd```) can be executed to automatically build all necessary images. + +There are several build stages: + +1. Build STF Ubuntu 18.04 image +2. Install Titan from Github +3. Install Eclipse and Titan Eclipse plugin into ~/frameworks/titan +4. Install asn1c into ~/frameworks/asn1c +5. Checkout STF569 sources from ETSI svn repository using default credentials +6. Build ASN.1 recoder library +7. Build certificate generation tool + +## Import and build MEC project + +### Run Docker image + +#### From Windows host: + +1. Authorize Docker container to interact with the XServer: +Go to the X Server installation directory and add the Docker container ip address to the file ```X0.hosts```: +``` +localhost +inet6:localhost +192.168.99.100 +``` + +Execute ```run.cmd``` or launch a command line window and run the command + +```docker run -it --net=host -e DISPLAY=192.168.99.1:0 mec_devel:latest``` + +NOTE: Modify the IP address in the command for the address of 'VirtualBox Hot-Only Network'. + +#### From Linux host: + +Execute ```run.sh``` or launch a command line window and run the command + +```sh +docker run -it --net=host -e DISPLAY=$DISPLAY \ +-v /tmp/.X11-unix:/tmp/.X11-unix mec_devel:latest +``` + +### Import eclipse project + +1. Whithin the docker container, on the linux command prompt type: + + ```eclipse -data ~/dev/Workspace``` + + Eclipse IDE shall be shown on the hosts Screen. + Possible problems: + - eclipse not found: check the PATH environment variable. It shall contain $HOME/bin path. Otherwise add it: + ```export PATH=$HOME/bin:$PATH``` + +2. Run "File -> Import" and import the ```~/dev/mec_devel/mec_devel.tpd``` file. + + This can take a time, be patient. + **Do not run build in eclipse**, we don't have enough time. + +### Build the project + +```cd ~/Workspace/mec_devel/bin``` + +```make``` + +Possible problems: + - Error in AbstractSocket build: Build it explicitly: + ```cd ~/Workspace/Abstract_Socket_CNL113384/bin_ssl && make``` + +### Execute tests +1. Launch eclipse: ```eclipse -data ~/dev/Workspace``` +2. Select configuration from the /etc/folder: + - AtsMec.cfg - Default MEC test suite. +3. Right-click on the configuration file and select **Run As -> TITAN Parallel launcher** + diff --git a/virtualization/docker/build.sh b/virtualization/docker-dev/build.sh similarity index 100% rename from virtualization/docker/build.sh rename to virtualization/docker-dev/build.sh diff --git a/virtualization/docker/home/etc/init.d/10-titan.sh b/virtualization/docker-dev/home/etc/init.d/10-titan.sh similarity index 100% rename from virtualization/docker/home/etc/init.d/10-titan.sh rename to virtualization/docker-dev/home/etc/init.d/10-titan.sh diff --git a/virtualization/docker/home/etc/init.d/20-eclipse.sh b/virtualization/docker-dev/home/etc/init.d/20-eclipse.sh similarity index 100% rename from virtualization/docker/home/etc/init.d/20-eclipse.sh rename to virtualization/docker-dev/home/etc/init.d/20-eclipse.sh diff --git a/virtualization/docker/home/etc/init.d/30-osip.sh b/virtualization/docker-dev/home/etc/init.d/30-osip.sh similarity index 100% rename from virtualization/docker/home/etc/init.d/30-osip.sh rename to virtualization/docker-dev/home/etc/init.d/30-osip.sh diff --git a/virtualization/docker/home/etc/init.d/40-ttf_t012.sh b/virtualization/docker-dev/home/etc/init.d/40-ttf_t012.sh similarity index 66% rename from virtualization/docker/home/etc/init.d/40-ttf_t012.sh rename to virtualization/docker-dev/home/etc/init.d/40-ttf_t012.sh index 2644264..4115e5c 100755 --- a/virtualization/docker/home/etc/init.d/40-ttf_t012.sh +++ b/virtualization/docker-dev/home/etc/init.d/40-ttf_t012.sh @@ -7,31 +7,37 @@ echo -e "*****************************\n* Checkout mec_devel sources\n********** mkdir -p ${HOME}/dev && cd ${HOME}/dev || exit 1 git clone --recurse-submodules --branch devel --single-branch https://forge.etsi.org/rep/mec/gs032p3-ttcn-test-suite.git mec_devel -cd /home/etsi/dev/mec_devel/titan-test-system-framework +cd ${HOME}/dev/mec_devel/titan-test-system-framework git checkout devel -cd /home/etsi/dev/mec_devel/ttcn +cd ${HOME}/dev/mec_devel/ttcn git clone https://forge.etsi.org/gitlab/LIBS/LibCommon.git ./LibCommon echo -e "*****************************\n* Set up environment\n*****************************\n" -cd /home/etsi/dev/mec_devel/scripts -ln -sf /home/etsi/dev/mec_devel/scripts/devenv.bash.ubuntu /home/etsi/devenv.bash -. /home/etsi/devenv.bash +cd ${HOME}/dev/mec_devel/scripts +ln -sf ${HOME}/dev/mec_devel/scripts/devenv.bash.ubuntu ${HOME}/devenv.bash +. ${HOME}/devenv.bash echo -e "*****************************\n* Apply patched \n*****************************\n" -cd /home/etsi/dev/mec_devel +cd ${HOME}/dev/mec_devel cp ./ttcn/patch_lib_common_titan/module.mk ./ttcn/LibCommon/ cp ./ttcn/patch_lib_common_titan/*.ttcn ./ttcn/LibCommon/ttcn echo -e "*****************************\n* Build Mec test suite\n*****************************\n" -export ATS=AtsMec_Location -make +cd ${HOME}/dev/mec_devel +export ATS_LIST="AtsMec_Location AtsMec_Rnis AtsMec_TrafficManagement AtsMec_UEidentity AtsMec_WlanInformation AtsMec_V2XInformationService" +for i in ${ATS_LIST} +do + export ATS=$i + make || exit 1 +done +rm -fr ./build || exit 1 cd ./etc/AtsMec_Location ln -sf AtsMec_Sandbox.cf_ AtsMec_Location.cfg echo -e "*****************************\n* Change sudo in command line\n*****************************\n" -cd /home/etsi/dev/mec_devel/scripts +cd ${HOME}/dev/mec_devel/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 /home/etsi/dev/mec_devel +cd ${HOME}/dev/mec_devel diff --git a/virtualization/docker/home/etc/init.d/50-doxygen.sh b/virtualization/docker-dev/home/etc/init.d/50-doxygen.sh similarity index 100% rename from virtualization/docker/home/etc/init.d/50-doxygen.sh rename to virtualization/docker-dev/home/etc/init.d/50-doxygen.sh diff --git a/virtualization/docker/home/etc/titan_repos.txt b/virtualization/docker-dev/home/etc/titan_repos.txt similarity index 100% rename from virtualization/docker/home/etc/titan_repos.txt rename to virtualization/docker-dev/home/etc/titan_repos.txt diff --git a/virtualization/docker/run.sh b/virtualization/docker-dev/run.sh similarity index 100% rename from virtualization/docker/run.sh rename to virtualization/docker-dev/run.sh diff --git a/virtualization/docker/Dockerfile b/virtualization/docker/Dockerfile index 82b376a..1047fb2 100644 --- a/virtualization/docker/Dockerfile +++ b/virtualization/docker/Dockerfile @@ -1,25 +1,49 @@ -FROM stfubuntu:18.04 +FROM alpine:latest + +# Install dependencies +RUN apk update && \ + apk add --no-cache sudo make git g++ diffutils expect openssl-dev libxml2-dev libxml2-utils libxslt-dev libtool ncurses-dev jsoncpp-dev readline-dev flex bison perl libexecinfo-dev bash libedit libedit-dev lksctp-tools lksctp-tools-dev libpcap-dev + +# Create user and sudouser +RUN \ + addgroup -g 1000 etsi && \ + adduser -S -D -u 1000 -G etsi -h /home/etsi -s /bin/bash etsi && \ + echo "etsi:etsi" | chpasswd && \ + echo "etsi ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers || exit 1 +USER etsi -LABEL ETSI mec_devel -LABEL description="mec_devel Docker Image" +# Setup Hosts file at the boot time +RUN \ + echo 'sudo sh -c "cp /etc/hosts /etc/append && (echo \"127.0.1.1 $HOSTNAME\"; cat /etc/append) > /etc/hosts"' >> /home/etsi/.bashrc \ + echo 'sh' >> /home/etsi/.bashrc || exit 1 -ENV TERM=linux \ - HOME=/home/etsi \ - HOSTNAME=docker-titan-mec_devel +# Clone Titan +WORKDIR /home/etsi +RUN mkdir -p frameworks dev tmp && cd frameworks && git clone https://github.com/eclipse/titan.core.git || exit 1 +WORKDIR /home/etsi/frameworks/titan.core/ -COPY home /home/etsi +# Setup ENV variables +ENV TTCN3_DIR=/home/etsi/frameworks/titan.core/Install +ENV PATH=$TTCN3_DIR/bin:$PATH \ + LD_LIBRARY_PATH=$TTCN3_DIR/lib:$LD_LIBRARY_PATH -RUN cd /home/etsi \ - && chown -R etsi:etsi . \ - && ls ./etc/init.d/*.sh | while read S; do chmod 0750 "$S" || exit 1; done +# Set flags +RUN \ + echo "ALPINE_LINUX=yes" > Makefile.personal && \ + echo "TTCN3_DIR=$TTCN3_DIR" >> Makefile.personal && \ + echo "JNI=no" >> Makefile.personal && \ + echo "GUI=no" >> Makefile.personal && \ + echo "DEBUG=no" >> Makefile.personal || exit 1 -USER etsi +# Build Titan +RUN \ + sed --in-place 's/LINUX_LIBS := -lxml2/LINUX_LIBS := -lxml2 -lpthread/g' ./core/Makefile && \ + make install && make clean || exit 1 + +WORKDIR /home/etsi/dev -RUN cd ${HOME} \ - && export PATH=$HOME/bin:$PATH \ - && ls ${HOME}/etc/init.d/*.sh | while read S; do /bin/bash -c "$S" || exit 1; done \ - && rm -fr ${HOME}/etc +ENV ATS=AtsCise -CMD ["/bin/bash"] +EXPOSE 443/tcp -# That's all Floks +ENTRYPOINT /home/yann/dev/cise/virtualization/docker/docker-entrypoint.sh diff --git a/virtualization/docker/README.md b/virtualization/docker/README.md index bc19714..7a19f29 100644 --- a/virtualization/docker/README.md +++ b/virtualization/docker/README.md @@ -22,78 +22,51 @@ Pre-requisites on your host machine: ## Build docker image -For Windows host, rename ```build.cmd.a``` and ```run.cmd.a``` to ```build.cmd``` and ```run.cmd``` respectivelly. +In this configuration, TITAN compiler is located on a Docker image and the sources and the outputs are located on the host. -Special scrips ```build.sh``` (or ```build.cmd```) can be executed to automatically build all necessary images. +Procedure on the host machine: +- Open a Terminal +- Clone the ETSI MEC Test System +- From the ETSI MEC Test System root directory, build the Docker image executing the following commands: -There are several build stages: - -1. Build STF Ubuntu 18.04 image -2. Install Titan from Github -3. Install Eclipse and Titan Eclipse plugin into ~/frameworks/titan -4. Install asn1c into ~/frameworks/asn1c -5. Checkout STF569 sources from ETSI svn repository using default credentials -6. Build ASN.1 recoder library -7. Build certificate generation tool - -## Import and build MEC project - -### Run Docker image - -#### From Windows host: - -1. Authorize Docker container to interact with the XServer: -Go to the X Server installation directory and add the Docker container ip address to the file ```X0.hosts```: -``` -localhost -inet6:localhost -192.168.99.100 +```sh +$ cd ./virtualization/docker +$ docker build --no-cache --tag alpine-mec -f Dockerfile --force-rm . +$ docker images ``` -Execute ```run.cmd``` or launch a command line window and run the command - -```docker run -it --net=host -e DISPLAY=192.168.99.1:0 mec_devel:latest``` - -NOTE: Modify the IP address in the command for the address of 'VirtualBox Hot-Only Network'. - -#### From Linux host: - -Execute ```run.sh``` or launch a command line window and run the command +To build the MEC Test Suite, execute the following command: ```sh -docker run -it --net=host -e DISPLAY=$DISPLAY \ --v /tmp/.X11-unix:/tmp/.X11-unix mec_devel:latest +$ ./docker-run.sh build ``` -### Import eclipse project - -1. Whithin the docker container, on the linux command prompt type: +Possble other options are 'clean' to remove all the build outputs or 'rebuild' to force a build of the Test Suite after a 'clean'. - ```eclipse -data ~/dev/Workspace``` +To retrieve the list of the available test cases, execute the following command: - Eclipse IDE shall be shown on the hosts Screen. - Possible problems: - - eclipse not found: check the PATH environment variable. It shall contain $HOME/bin path. Otherwise add it: - ```export PATH=$HOME/bin:$PATH``` - -2. Run "File -> Import" and import the ```~/dev/mec_devel/mec_devel.tpd``` file. +```sh +$ ./docker-run.sh list +``` - This can take a time, be patient. - **Do not run build in eclipse**, we don't have enough time. +Before to execute the MEC Test Suite, prepare, edit and update the configuration file: -### Build the project +```sh +$ ln -sf ../../etc/AtsXxx/AtsXxx_yyy.cf_ ../../etc/AtsXxx/AtsXxx.cfg +$ vi ../../etc/AtsXxx/AtsXxx.cfg # To update it +``` -```cd ~/Workspace/mec_devel/bin``` +To execute the MEC Test Suite, execute the following command: -```make``` +```sh +$ ./docker-run.sh run +``` -Possible problems: - - Error in AbstractSocket build: Build it explicitly: - ```cd ~/Workspace/Abstract_Socket_CNL113384/bin_ssl && make``` +Notes: +- The MEC Test System is listening on port 30181 +- Updating the file etc/AtsXxx/AtsXxx.cfg is about (e.g. etc/AtsMec_Location/AtsMec_Location.cfg): +. Selecting the test(s) to be executed +. Updating value of PICs and PIXITs +. Updating HTTP port setting -### Execute tests -1. Launch eclipse: ```eclipse -data ~/dev/Workspace``` -2. Select configuration from the /etc/folder: - - AtsMec.cfg - Default MEC test suite. -3. Right-click on the configuration file and select **Run As -> TITAN Parallel launcher** diff --git a/virtualization/docker/docker-entrypoint.sh b/virtualization/docker/docker-entrypoint.sh new file mode 100755 index 0000000..590d138 --- /dev/null +++ b/virtualization/docker/docker-entrypoint.sh @@ -0,0 +1,58 @@ +#!/usr/bin/env bash + +set -euo pipefail + +usage() { + echo "No command specified. Available commands:" + for i in $(echo $commands | sed "s/,/ /g") + do + echo " $i" + done +} + +commands="help,build,clean,list,modulepar,rebuild,run,version" + +if [ $# == 0 ]; then + usage + exit 1 +fi + +if [ $# == 2 ]; then + if [ "$2" != "" ]; then + export ATS=Ats$2 + cli="${GEN_DIR}/bin/$ATS" + echo "cli: $cli" + fi +fi + + +case "$1" in + build) + cd ${GEN_DIR} && make + ;; + clean) + cd ${GEN_DIR} && make clean + ;; + list) + ${cli} -l + ;; + modulepar) + ${cli} -p + ;; + rebuild) + cd ${GEN_DIR} && rm -fr ./bin ./build ; make + ;; + run) + cd ${GEN_DIR}/scripts && ./run_all.bash + ;; + version) + compiler -v + ;; + *) + usage + exit 1 + ;; +esac + +unset ATS +exit 0 \ No newline at end of file diff --git a/virtualization/docker/docker-run.sh b/virtualization/docker/docker-run.sh new file mode 100755 index 0000000..8766f4f --- /dev/null +++ b/virtualization/docker/docker-run.sh @@ -0,0 +1,13 @@ +#!/bin/bash +set -exo pipefail + +cd "$(dirname ${BASH_SOURCE})" + +docker run --rm -it \ + -w /home/yann/dev/gs032p3-ttcn-test-suite \ + -e GEN_DIR=/home/yann/dev/gs032p3-ttcn-test-suite \ + -p 0.0.0.0:443:443 \ + -u "$(id -u):$(id -g)" \ + -v "${PWD}/../..:/home/yann/dev/gs032p3-ttcn-test-suite" \ + --entrypoint /home/yann/dev/gs032p3-ttcn-test-suite/virtualization/docker/docker-entrypoint.sh \ + alpine-mec:latest "$@" -- GitLab From c73d3bb493e0082eb09006c610e9e8d011011adc Mon Sep 17 00:00:00 2001 From: YannGarcia Date: Thu, 1 Dec 2022 09:50:39 +0100 Subject: [PATCH 11/99] Bug fixed in module.mk --- titan-test-system-framework | 2 +- ttcn/AtsMec_Rnis/module.mk | 1 - ttcn/AtsMec_TrafficManagement/module.mk | 1 + 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/titan-test-system-framework b/titan-test-system-framework index bafc335..07e483b 160000 --- a/titan-test-system-framework +++ b/titan-test-system-framework @@ -1 +1 @@ -Subproject commit bafc335bf71b976a49fb9edd4237fc517d872834 +Subproject commit 07e483b6f5f83ea55de07fe84eaa924c7f401724 diff --git a/ttcn/AtsMec_Rnis/module.mk b/ttcn/AtsMec_Rnis/module.mk index 79f94ad..6402c87 100644 --- a/ttcn/AtsMec_Rnis/module.mk +++ b/ttcn/AtsMec_Rnis/module.mk @@ -23,7 +23,6 @@ modules := ../LibCommon \ ../LibMec/WlanInformationAPI \ ../LibMec/FixedAccessInformationServiceAPI \ ../LibMec/ApplicationMobilityServiceAPI \ - ../LibMec/FixedAccessInformationAPI \ ../../titan-test-system-framework/ccsrc/Framework \ ../../titan-test-system-framework/ccsrc/loggers \ ../../titan-test-system-framework/ccsrc/Protocols/Http \ diff --git a/ttcn/AtsMec_TrafficManagement/module.mk b/ttcn/AtsMec_TrafficManagement/module.mk index 0fce725..514accb 100644 --- a/ttcn/AtsMec_TrafficManagement/module.mk +++ b/ttcn/AtsMec_TrafficManagement/module.mk @@ -21,6 +21,7 @@ modules := ../LibCommon \ ../LibMec/V2XInformationServiceAPI \ ../LibMec/DeviceApplicationInterfaceAPI \ ../LibMec/WlanInformationAPI \ + ../LibMec/FixedAccessInformationServiceAPI \ ../LibMec/ApplicationMobilityServiceAPI \ ../../titan-test-system-framework/ccsrc/Framework \ ../../titan-test-system-framework/ccsrc/loggers \ -- GitLab From bb00840eac3bece3b0ca88dd57aafb2e0e65bb4e Mon Sep 17 00:00:00 2001 From: YannGarcia Date: Tue, 6 Dec 2022 12:20:19 +0100 Subject: [PATCH 12/99] Update LibCommon submodule --- .gitmodules | 5 ++-- README.md | 32 ++++++++++++++++++++-- virtualization/docker/docker-entrypoint.sh | 2 +- virtualization/docker/docker-run.sh | 9 +++--- 4 files changed, 38 insertions(+), 10 deletions(-) diff --git a/.gitmodules b/.gitmodules index d5daa64..1913e5a 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,5 @@ -[submodule "ttcn\\LibCommon"] - path = ttcn\\LibCommon - url = https://forge.etsi.org/rep/LIBS/LibCommon.git +[submodule "ttcn/LibCommon"] + path = ttcn/LibCommon [submodule "titan-test-system-framework"] path = titan-test-system-framework url = https://labs.etsi.org/rep/cti-tools/titan-test-system-framework.git diff --git a/README.md b/README.md index f409fcd..2fbf7f8 100644 --- a/README.md +++ b/README.md @@ -81,12 +81,41 @@ Pre-requisites on your host machine: Procedure on the host machine: - Open a Terminal - Clone the ETSI MEC Test System + +```sh +$ git clone --recurse-submodules --branch devel https://forge.etsi.org/rep/mec/gs032p3-ttcn-test-suite.git +$ cd ./gs032p3-ttcn-test-suite/titan-test-system-framework/ +$ git checkout devel +$ cd ./ttcn/LibHttp +$ ln -sf module_mec.mk module.mk +``` + +- Apply patches + +```sh +$ cd ../../.. +$ cp ./ttcn/patch_lib_common_titan/module.mk ./ttcn/LibCommon/ +$ cp ./ttcn/patch_lib_common_titan/*.ttcn ./ttcn/LibCommon/ttcn +``` + +$ +``` + - From the ETSI MEC Test System root directory, build the Docker image executing the following commands: ```sh $ cd ./virtualization/docker $ docker build --no-cache --tag alpine-mec -f Dockerfile --force-rm . $ docker images +REPOSITORY TAG IMAGE ID CREATED SIZE +alpine-mec latest dafa00e36515 23 seconds ago 623MB +alpine latest 49176f190c7e 13 days ago 7.05MB +``` + +To check that TITAN is well installed, execute the following command: + +```sh +$ ./docker-run.sh version ``` To build the MEC Test Suite, execute the following command: @@ -263,7 +292,7 @@ Procedure: - Clone the ETSI MEC Testing Framework project into $HOME/dev folder ```sh -$ git clone --recurse-submodules --branch gs032p3-ttcn-test-suite https://forge.etsi.org/rep/mec/gs032p3-ttcn-test-suite.git ./gs032p3-ttcn-test-suite +$ git clone --recurse-submodules --branch devel https://forge.etsi.org/rep/mec/gs032p3-ttcn-test-suite.git ./gs032p3-ttcn-test-suite $ cd /home/etsi/dev/gs032p3-ttcn-test-suite/titan-test-system-framework $ git checkout devel $ cd /home/etsi/dev/gs032p3-ttcn-test-suite/titan-test-system-framework/ttcn/LibHttp @@ -276,7 +305,6 @@ $ ln -sf module_mec.mk module.mk $ cd /home/etsi/dev/gs032p3-ttcn-test-suite $ 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/ ``` - Update your default environment with the content of the script $HOME/dev/gs032p3-ttcn-test-suite/scripts/devenv.bash.ubuntu diff --git a/virtualization/docker/docker-entrypoint.sh b/virtualization/docker/docker-entrypoint.sh index 590d138..7da0016 100755 --- a/virtualization/docker/docker-entrypoint.sh +++ b/virtualization/docker/docker-entrypoint.sh @@ -10,7 +10,7 @@ usage() { done } -commands="help,build,clean,list,modulepar,rebuild,run,version" +commands="help,build Mec_location,clean Mec_location,list Mec_location,modulepar,rebuild Mec_location,run Mec_location,version" if [ $# == 0 ]; then usage diff --git a/virtualization/docker/docker-run.sh b/virtualization/docker/docker-run.sh index 8766f4f..d1f51c5 100755 --- a/virtualization/docker/docker-run.sh +++ b/virtualization/docker/docker-run.sh @@ -3,11 +3,12 @@ set -exo pipefail cd "$(dirname ${BASH_SOURCE})" +PWD=`pwd`/../.. docker run --rm -it \ - -w /home/yann/dev/gs032p3-ttcn-test-suite \ - -e GEN_DIR=/home/yann/dev/gs032p3-ttcn-test-suite \ + -w $PWD \ + -e GEN_DIR=$PWD \ -p 0.0.0.0:443:443 \ -u "$(id -u):$(id -g)" \ - -v "${PWD}/../..:/home/yann/dev/gs032p3-ttcn-test-suite" \ - --entrypoint /home/yann/dev/gs032p3-ttcn-test-suite/virtualization/docker/docker-entrypoint.sh \ + -v "${PWD}:$PWD" \ + --entrypoint $PWD/virtualization/docker/docker-entrypoint.sh \ alpine-mec:latest "$@" -- GitLab From 8a3269d09de8e4f350252f9d6520b2224f83bf94 Mon Sep 17 00:00:00 2001 From: YannGarcia Date: Tue, 6 Dec 2022 12:22:19 +0100 Subject: [PATCH 13/99] Update LibCommon submodule --- .gitmodules | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitmodules b/.gitmodules index 1913e5a..9e2e0ac 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,5 +1,6 @@ [submodule "ttcn/LibCommon"] path = ttcn/LibCommon + url = https://forge.etsi.org/rep/LIBS/LibCommon.git [submodule "titan-test-system-framework"] path = titan-test-system-framework url = https://labs.etsi.org/rep/cti-tools/titan-test-system-framework.git -- GitLab From 10e2978423761511d231d5791a99a661a34770eb Mon Sep 17 00:00:00 2001 From: YannGarcia Date: Tue, 6 Dec 2022 12:33:08 +0100 Subject: [PATCH 14/99] Update LibCommon submodule --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 2fbf7f8..3b1db7b 100644 --- a/README.md +++ b/README.md @@ -121,7 +121,7 @@ $ ./docker-run.sh version To build the MEC Test Suite, execute the following command: ```sh -$ ./docker-run.sh build +$ ./docker-run.sh build Mec_Location ``` Possble other options are 'clean' to remove all the build outputs or 'rebuild' to force a build of the Test Suite after a 'clean'. @@ -129,7 +129,7 @@ Possble other options are 'clean' to remove all the build outputs or 'rebuild' t To retrieve the list of the available test cases, execute the following command: ```sh -$ ./docker-run.sh list +$ ./docker-run.sh list Mec_Location ``` Before to execute the MEC Test Suite, prepare, edit and update the configuration file: @@ -142,7 +142,7 @@ $ vi ../../etc/AtsXxx/AtsXxx.cfg # To update it To execute the MEC Test Suite, execute the following command: ```sh -$ ./docker-run.sh run +$ ./docker-run.sh run Mec_Location ``` Notes: -- GitLab From c9e29c050d5ae73f39f61f796c9351bdfc68f68a Mon Sep 17 00:00:00 2001 From: Laurent Velez Date: Tue, 6 Dec 2022 13:18:21 +0000 Subject: [PATCH 15/99] Remove useless package --- virtualization/docker/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/virtualization/docker/Dockerfile b/virtualization/docker/Dockerfile index 1047fb2..2fdb13d 100644 --- a/virtualization/docker/Dockerfile +++ b/virtualization/docker/Dockerfile @@ -2,7 +2,7 @@ FROM alpine:latest # Install dependencies RUN apk update && \ - apk add --no-cache sudo make git g++ diffutils expect openssl-dev libxml2-dev libxml2-utils libxslt-dev libtool ncurses-dev jsoncpp-dev readline-dev flex bison perl libexecinfo-dev bash libedit libedit-dev lksctp-tools lksctp-tools-dev libpcap-dev + apk add --no-cache sudo make git g++ diffutils expect openssl-dev libxml2-dev libxml2-utils libxslt-dev libtool ncurses-dev jsoncpp-dev readline-dev flex bison perl bash libedit libedit-dev lksctp-tools lksctp-tools-dev libpcap-dev # Create user and sudouser RUN \ -- GitLab From 5478fbf99d5ef388f7d162d70fb9d84c0a770779 Mon Sep 17 00:00:00 2001 From: Laurent Velez Date: Tue, 6 Dec 2022 13:19:13 +0000 Subject: [PATCH 16/99] Update README.md --- README.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/README.md b/README.md index 3b1db7b..3eb023e 100644 --- a/README.md +++ b/README.md @@ -98,9 +98,6 @@ $ cp ./ttcn/patch_lib_common_titan/module.mk ./ttcn/LibCommon/ $ cp ./ttcn/patch_lib_common_titan/*.ttcn ./ttcn/LibCommon/ttcn ``` -$ -``` - - From the ETSI MEC Test System root directory, build the Docker image executing the following commands: ```sh -- GitLab From 31c49a2b0234eec15af9930cc30922b199d2c9b0 Mon Sep 17 00:00:00 2001 From: YannGarcia Date: Thu, 15 Dec 2022 10:58:08 +0100 Subject: [PATCH 17/99] Enhance README file --- README.md | 10 ++-- ...ec_Lewis.cf_ => AtsMec_Location_Lewis.cf_} | 0 ...ockoon.cf_ => AtsMec_Location_Mockoon.cf_} | 0 ...andbox.cf_ => AtsMec_Location_Sandbox.cf_} | 6 +- gs032p3-ttcn-test-suite.code-workspace | 60 +++++++++++++++++++ 5 files changed, 68 insertions(+), 8 deletions(-) rename etc/AtsMec_Location/{AtsMec_Lewis.cf_ => AtsMec_Location_Lewis.cf_} (100%) rename etc/AtsMec_Location/{AtsMec_Mockoon.cf_ => AtsMec_Location_Mockoon.cf_} (100%) rename etc/AtsMec_Location/{AtsMec_Sandbox.cf_ => AtsMec_Location_Sandbox.cf_} (96%) create mode 100644 gs032p3-ttcn-test-suite.code-workspace diff --git a/README.md b/README.md index 3eb023e..2407730 100644 --- a/README.md +++ b/README.md @@ -132,8 +132,8 @@ $ ./docker-run.sh list Mec_Location Before to execute the MEC Test Suite, prepare, edit and update the configuration file: ```sh -$ ln -sf ../../etc/AtsXxx/AtsXxx_yyy.cf_ ../../etc/AtsXxx/AtsXxx.cfg -$ vi ../../etc/AtsXxx/AtsXxx.cfg # To update it +$ ln -sf ../../etc/AtsXxx/AtsXxx_yyy.cf_ ../../etc/AtsXxx/AtsXxx.cfg # e.g. ln -sf ../../etc/AtsMec_Location/AtsMec_Location_Sandbox.cf_ ../../etc/AtsMec_Location/AtsMec_Location.cfg +$ vi ../../etc/AtsXxx/AtsXxx.cfg # To update it, e.g. vi ../../etc/AtsMec_Location/AtsMec_Location.cfg ``` To execute the MEC Test Suite, execute the following command: @@ -309,7 +309,7 @@ $ cp ./ttcn/patch_lib_common_titan/*.ttcn ./ttcn/LibCommon/ - Switch to the next clause (Usage) -## Generate certificates for TLS and MEC security support +# Generate certificates for TLS and MEC security support This clause describes how generate certificates desrived from Let's encrypt certificate. These certificate will be used for TS mutual authentication and for MEC Security tests. NOTE: @@ -330,7 +330,7 @@ $ sudo certbot certonly --debug --mec-tls-cert --config-dir $HOME/var/ssl --work NOTE: For testing certificate generation and renewal, use the certbot's --dry-run option. -## Usage +# Usage This clause describes how to compile and execute an Abstract Test Suite. @@ -372,7 +372,7 @@ $ ./run-all.bash - The log files are located in ../logs folder. You can edit them using any editor or using the Eclipse TITAN log plugins -## How to Report a Bug +# How to Report a Bug The ETSI MEC Testing Framework project is under constant development, so it is possible that you will encounter a bug while using it. Please report bugs at cti_support at etsi dot org. diff --git a/etc/AtsMec_Location/AtsMec_Lewis.cf_ b/etc/AtsMec_Location/AtsMec_Location_Lewis.cf_ similarity index 100% rename from etc/AtsMec_Location/AtsMec_Lewis.cf_ rename to etc/AtsMec_Location/AtsMec_Location_Lewis.cf_ diff --git a/etc/AtsMec_Location/AtsMec_Mockoon.cf_ b/etc/AtsMec_Location/AtsMec_Location_Mockoon.cf_ similarity index 100% rename from etc/AtsMec_Location/AtsMec_Mockoon.cf_ rename to etc/AtsMec_Location/AtsMec_Location_Mockoon.cf_ diff --git a/etc/AtsMec_Location/AtsMec_Sandbox.cf_ b/etc/AtsMec_Location/AtsMec_Location_Sandbox.cf_ similarity index 96% rename from etc/AtsMec_Location/AtsMec_Sandbox.cf_ rename to etc/AtsMec_Location/AtsMec_Location_Sandbox.cf_ index 83dd334..094c53d 100644 --- a/etc/AtsMec_Location/AtsMec_Sandbox.cf_ +++ b/etc/AtsMec_Location/AtsMec_Location_Sandbox.cf_ @@ -8,13 +8,13 @@ LibCommon_Time.PX_TAC := 30.0 LibCommon_Sync.PX_TSYNC_TIME_LIMIT := 30.0; LibCommon_Sync.PX_TSHUT_DOWN_TIME_LIMIT := 30.0; -LibHttp_Pics.PICS_HEADER_HOST := "sandbox-mec.etsi.org" #"192.168.1.39" +LibHttp_Pics.PICS_HEADER_HOST := "try-mec.etsi.org" #"192.168.1.39" LibHttp_Pics.PICS_HEADER_CONTENT_TYPE := "application/json" LibHttp_Pics.PICS_USE_TOKEN_HEADER := true #LibHttp_Pics.PICS_TOKEN_HEADER := "Basic WrongToken" -LibMec_Pics.PICS_ROOT_API := "/sbx8tunqyy/mep1" # Need to sign in on https://sandbox-mec.etsi.org/, section 'Try-it from your MEC application' +LibMec_Pics.PICS_ROOT_API := "/sbx1w3aaas/mep1" # Need to sign in on https://sandbox-mec.etsi.org/, section 'Try-it from your MEC application' LibMec_Pics.PICS_MEC_PLAT := true @@ -48,7 +48,7 @@ LogEventTypes:= Yes [TESTPORT_PARAMETERS] # In this section you can specify parameters that are passed to Test Ports. -system.httpPort.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server=sandbox-mec.etsi.org,port=443,use_ssl=1,trusted_ca_list=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem,privkey=/home/yann/var/ssl/archive/yanngarcia.ddns.net/privkey1.pem,certificate=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem)" +system.httpPort.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server=try-mec.etsi.org,port=443,use_ssl=1,trusted_ca_list=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem,privkey=/home/yann/var/ssl/archive/yanngarcia.ddns.net/privkey1.pem,certificate=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem)" system.httpPort_notif.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server_mode=1,local_port=443,use_ssl=1,mutual_auth=1,mutual_tls=1,trusted_ca_list=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem,privkey=/home/yann/var/ssl/archive/yanngarcia.ddns.net/privkey1.pem,certificate=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem)" [DEFINE] diff --git a/gs032p3-ttcn-test-suite.code-workspace b/gs032p3-ttcn-test-suite.code-workspace new file mode 100644 index 0000000..90c9d36 --- /dev/null +++ b/gs032p3-ttcn-test-suite.code-workspace @@ -0,0 +1,60 @@ +{ + "folders": [ + { + "path": "." + } + ], + "settings": { + "files.associations": { + "array": "cpp", + "bit": "cpp", + "*.tcc": "cpp", + "bitset": "cpp", + "cctype": "cpp", + "chrono": "cpp", + "clocale": "cpp", + "cmath": "cpp", + "condition_variable": "cpp", + "cstdarg": "cpp", + "cstddef": "cpp", + "cstdint": "cpp", + "cstdio": "cpp", + "cstdlib": "cpp", + "cstring": "cpp", + "ctime": "cpp", + "cwchar": "cpp", + "cwctype": "cpp", + "deque": "cpp", + "map": "cpp", + "unordered_map": "cpp", + "vector": "cpp", + "exception": "cpp", + "fstream": "cpp", + "functional": "cpp", + "initializer_list": "cpp", + "iomanip": "cpp", + "iosfwd": "cpp", + "iostream": "cpp", + "istream": "cpp", + "limits": "cpp", + "memory": "cpp", + "memory_resource": "cpp", + "new": "cpp", + "optional": "cpp", + "ostream": "cpp", + "ratio": "cpp", + "regex": "cpp", + "shared_mutex": "cpp", + "sstream": "cpp", + "stdexcept": "cpp", + "streambuf": "cpp", + "string": "cpp", + "string_view": "cpp", + "system_error": "cpp", + "type_traits": "cpp", + "tuple": "cpp", + "typeinfo": "cpp", + "utility": "cpp" + } + } +} \ No newline at end of file -- GitLab From 04c0b9f47628d74d1cda062daadd49de332908d3 Mon Sep 17 00:00:00 2001 From: YannGarcia Date: Tue, 24 Jan 2023 10:08:32 +0100 Subject: [PATCH 18/99] Add typing for MEC033 and MEC040 --- titan-test-system-framework | 2 +- ...mApplicationEnablementAPI_TestControl.ttcn | 126 ------------ .../module.mk | 48 ----- ...ormApplicationEnablementAPI_TestCases.ttcn | 0 ...mApplicationEnablementAPI_TestControl.ttcn | 19 ++ .../module.mk | 36 ++++ ...plicationEnablementAPI_TypesAndValues.ttcn | 12 ++ ttcn/LibMec/FederationEnablementAPI/module.mk | 5 + ...ederationEnablementAPI_TypesAndValues.ttcn | 39 ++++ ttcn/LibMec/IotAPI/module.mk | 6 + .../IotAPI/ttcn/IotAPI_TypesAndValues.ttcn | 185 ++++++++++++++++++ 11 files changed, 303 insertions(+), 175 deletions(-) delete mode 100644 ttcn/AtsMec/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestControl.ttcn delete mode 100644 ttcn/AtsMec/AtsMec_EdgePlatformApplicationEnablement/module.mk rename ttcn/{AtsMec => }/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn (100%) create mode 100644 ttcn/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestControl.ttcn create mode 100644 ttcn/AtsMec_EdgePlatformApplicationEnablement/module.mk create mode 100644 ttcn/LibMec/FederationEnablementAPI/module.mk create mode 100644 ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_TypesAndValues.ttcn create mode 100644 ttcn/LibMec/IotAPI/module.mk create mode 100644 ttcn/LibMec/IotAPI/ttcn/IotAPI_TypesAndValues.ttcn diff --git a/titan-test-system-framework b/titan-test-system-framework index 07e483b..b3e32ae 160000 --- a/titan-test-system-framework +++ b/titan-test-system-framework @@ -1 +1 @@ -Subproject commit 07e483b6f5f83ea55de07fe84eaa924c7f401724 +Subproject commit b3e32ae45e559819ba3eab8ba748a03ff6fdd284 diff --git a/ttcn/AtsMec/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestControl.ttcn b/ttcn/AtsMec/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestControl.ttcn deleted file mode 100644 index 4c74736..0000000 --- a/ttcn/AtsMec/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestControl.ttcn +++ /dev/null @@ -1,126 +0,0 @@ -module AtsMec_TestControl { - - // LibMec/LocationAPI - import from LocationAPI_Pics all; - // LibMec/UEidentityAPI - import from UEidentityAPI_Pics all; - // LibMec/RnisAPI - import from RnisAPI_Pics all; - // LibMec/TrafficManagementAPI - import from TrafficManagementAPI_Pics all; - // LibMec/AppEnablementAPI - import from EdgePlatformApplicationEnablementAPI_Pics all; - // LibMec/UEAppInterfaceAPI - import from UEAppInterfaceAPI_Pics all; - - // LibMec - import from LibMec_Pics all; - - // AtsMec - import from AtsMec_LocationAPI_TestCases all; - import from AtsMec_UEidentityAPI_TestCases all; -// import from AtsMec_RadioNodeLocationAPI_TestCases all; - import from AtsMec_RnisAPI_TestCases all; - import from AtsMec_TrafficManagementAPI_TestCases all; - import from AtsMec_EdgePlatformApplicationEnablementAPI_TestCases all; - import from AtsMec_UEAppInterfaceAPI_TestCases all; - - control { - - if (PICS_MEC_PLAT and PICS_SERVICES) { - if (PICS_UE_IDENTITY_API_SUPPORTED) { - execute(TC_MEC_MEC014_SRV_UETAG_001_OK()); - execute(TC_MEC_MEC014_SRV_UETAG_001_BR()); - execute(TC_MEC_MEC014_SRV_UETAG_001_NF()); - execute(TC_MEC_MEC014_SRV_UETAG_002_OK()); - execute(TC_MEC_MEC014_SRV_UETAG_002_BR()); - execute(TC_MEC_MEC014_SRV_UETAG_002_PF()); - } - if (PICS_LOCATION_API_SUPPORTED) { - execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_OK()); - execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_BR()); - execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_NF()); - - execute(TC_MEC_MEC013_SRV_UELOCSUB_001_OK()); - execute(TC_MEC_MEC013_SRV_UELOCSUB_001_BR()); - execute(TC_MEC_MEC013_SRV_UELOCSUB_002_OK()); - execute(TC_MEC_MEC013_SRV_UELOCSUB_002_NF()); - - execute(TC_MEC_MEC013_SRV_UETRACKSUB_001_OK()); - execute(TC_MEC_MEC013_SRV_UETRACKSUB_001_BR()); - execute(TC_MEC_MEC013_SRV_UETRACKSUB_002_OK()); - execute(TC_MEC_MEC013_SRV_UETRACKSUB_002_NF()); - - execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_OK()); - execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_BR()); - execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_NF()); - - execute(TC_MEC_MEC013_SRV_UEINFSUB_001_OK()); - execute(TC_MEC_MEC013_SRV_UEINFSUB_001_BR()); - execute(TC_MEC_MEC013_SRV_UEINFSUB_002_OK()); - execute(TC_MEC_MEC013_SRV_UEINFSUB_002_NF()); - -// execute(TC_MEC_PLAT_RLOC_001_OK()); -// execute(TC_MEC_PLAT_RLOC_001_NF()); - } - - if (PICS_APP_ENABLEMENT_API_SUPPORTED) { - /*execute(TC_MEC_SRV_TRANS_001_OK()); - execute(TC_MEC_SRV_TRAF_001_OK()); - execute(TC_MEC_SRV_TRAF_002_OK()); - execute(TC_MEC_SRV_TRAF_003_OK()); - execute(TC_MEC_SRV_TRAF_001_NF());*/ - } - - if (PICS_ENABLE_UE_APP_CTX) { - execute(TC_MEC_MEC016_MEO_UEAPPCTX_001_OK()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_001_BR()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_OK()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_BR()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_NF()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_003_OK()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_003_NF()); - execute(TC_MEC_MEC016_MEO_UEAPPS_001_OK()); - execute(TC_MEC_MEC016_MEO_UEAPPS_001_BR()); - execute(TC_MEC_MEC016_MEO_UEAPPS_001_NF()); - } - } - - /*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()); - execute(TC_MEC_MEC012_SRV_RNIS_011_BR()); - execute(TC_MEC_MEC012_SRV_RNIS_012_BR()); - } - if (PICS_RNIS_QUERY) { - execute(TC_MEC_MEC012_SRV_RNIS_016_OK()); - execute(TC_MEC_MEC012_SRV_RNIS_016_BR()); - execute(TC_MEC_MEC012_SRV_RNIS_016_NF()); - execute(TC_MEC_MEC012_SRV_RNIS_017_OK()); - execute(TC_MEC_MEC012_SRV_RNIS_017_BR()); - execute(TC_MEC_MEC012_SRV_RNIS_017_NF()); - execute(TC_MEC_MEC012_SRV_RNIS_018_OK()); - execute(TC_MEC_MEC012_SRV_RNIS_018_BR()); - execute(TC_MEC_MEC012_SRV_RNIS_018_NF()); - execute(TC_MEC_MEC012_SRV_RNIS_019_OK()); - execute(TC_MEC_MEC012_SRV_RNIS_019_BR()); - execute(TC_MEC_MEC012_SRV_RNIS_019_NF()); - } - }*/ - - if (PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED) { - execute(TC_MEC_MEC015_SRV_TM_001_OK()); - execute(TC_MEC_MEC015_SRV_TM_002_OK()); - execute(TC_MEC_MEC015_SRV_TM_002_BR()); - execute(TC_MEC_MEC015_SRV_TM_002_NF()); - } - } // End of 'control' statement - -} // End of module AtsMec_TestControl diff --git a/ttcn/AtsMec/AtsMec_EdgePlatformApplicationEnablement/module.mk b/ttcn/AtsMec/AtsMec_EdgePlatformApplicationEnablement/module.mk deleted file mode 100644 index 449db40..0000000 --- a/ttcn/AtsMec/AtsMec_EdgePlatformApplicationEnablement/module.mk +++ /dev/null @@ -1,48 +0,0 @@ -suite := AtsMec - -sources := \ - AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn \ - AtsMec_TrafficManagementAPI_TestCases.ttcn \ - AtsMec_MultiAccessSteeringInfoAPI_TestCases.ttcn \ - AtsMec_LocationAPI_TestCases.ttcn \ - AtsMec_RnisAPI_TestCases.ttcn \ - AtsMec_TestControl.ttcn \ - AtsMec_UEAppInterfaceAPI_TestCases.ttcn \ - AtsMec_UEidentityAPI_TestCases.ttcn \ - AtsMec_V2XInformationServiceAPI_TestCases.ttcn \ - AtsMec_DeviceApplicationInterfaceAPI_TestCases.ttcn \ - AtsMec_WlanInformationAPI_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/EdgePlatformApplicationEnablementAPI \ - ../LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI \ - ../LibMec/TrafficManagementAPI \ - ../LibMec/LocationAPI \ - ../LibMec/RnisAPI \ - ../LibMec/UEAppInterfaceAPI \ - ../LibMec/UEidentityAPI \ - ../LibMec/V2XInformationServiceAPI \ - ../LibMec/DeviceApplicationInterfaceAPI \ - ../LibMec/WlanInformationAPI \ - ../LibMec/ApplicationMobilityServiceAPI \ - ../LibMec/FixedAccessInformationAPI \ - ../../ccsrc/Ports/LibHttp \ - ../../ccsrc/EncDec/LibHttp \ - ../../ccsrc/EncDec/LibMec \ - ../../ccsrc/Framework \ - ../../ccsrc/externals \ - ../../ccsrc/loggers \ - ../../ccsrc/Protocols/ETH \ - ../../ccsrc/Protocols/Http \ - ../../ccsrc/Protocols/Json \ - ../../ccsrc/Protocols/Pcap \ - ../../ccsrc/Protocols/Tcp \ - ../modules/titan.TestPorts.Common_Components.Abstract_Socket \ - diff --git a/ttcn/AtsMec/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn b/ttcn/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn similarity index 100% rename from ttcn/AtsMec/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn rename to ttcn/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn diff --git a/ttcn/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestControl.ttcn b/ttcn/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestControl.ttcn new file mode 100644 index 0000000..0f71a6c --- /dev/null +++ b/ttcn/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestControl.ttcn @@ -0,0 +1,19 @@ +module AtsMec_EdgePlatformApplicationEnablementAPI_TestControl { + + // LibMec/AppEnablementAPI + import from EdgePlatformApplicationEnablementAPI_Pics all; + + // LibMec + import from LibMec_Pics all; + + // AtsMec_EdgePlatformApplicationEnablementAPI + import from AtsMec_EdgePlatformApplicationEnablementAPI_TestCases all; + + control { + + if (PICS_MEC_PLAT and PICS_SERVICES) { + } + + } // End of 'control' statement + +} // End of module AtsMec_EdgePlatformApplicationEnablementAPI_TestControl diff --git a/ttcn/AtsMec_EdgePlatformApplicationEnablement/module.mk b/ttcn/AtsMec_EdgePlatformApplicationEnablement/module.mk new file mode 100644 index 0000000..a9e6d00 --- /dev/null +++ b/ttcn/AtsMec_EdgePlatformApplicationEnablement/module.mk @@ -0,0 +1,36 @@ +suite := AtsMec_EdgePlatformApplicationEnablement + +sources := \ + AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn \ + AtsMec_EdgePlatformApplicationEnablementAPI_TestControl.ttcn + +modules := ../LibCommon \ + ../../titan-test-system-framework/ttcn/LibHelpers \ + ../../titan-test-system-framework/ttcn/LibHttp \ + ../../titan-test-system-framework/ttcn/LibJson \ + ../patch_lib_http \ + ../LibMec \ + ../LibMec/LocationAPI \ + ../LibMec/EdgePlatformApplicationEnablementAPI \ + ../LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI \ + ../LibMec/TrafficManagementAPI \ + ../LibMec/RnisAPI \ + ../LibMec/UEAppInterfaceAPI \ + ../LibMec/UEidentityAPI \ + ../LibMec/V2XInformationServiceAPI \ + ../LibMec/DeviceApplicationInterfaceAPI \ + ../LibMec/WlanInformationAPI \ + ../LibMec/FixedAccessInformationServiceAPI \ + ../LibMec/ApplicationMobilityServiceAPI \ + ../../titan-test-system-framework/ccsrc/Framework \ + ../../titan-test-system-framework/ccsrc/loggers \ + ../../titan-test-system-framework/ccsrc/Protocols/Http \ + ../../titan-test-system-framework/ccsrc/Protocols/Tcp \ + ../../titan-test-system-framework/ccsrc/Helpers \ + ../../ccsrc/Ports/LibHttp \ + ../../ccsrc/EncDec/LibMec \ + ../../ccsrc/externals \ + ../../ccsrc/Protocols/Http \ + ../../ccsrc/Protocols/Json \ + ../modules/titan.TestPorts.Common_Components.Abstract_Socket \ + diff --git a/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_TypesAndValues.ttcn b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_TypesAndValues.ttcn index 30b0b36..ede77b5 100644 --- a/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_TypesAndValues.ttcn @@ -291,6 +291,8 @@ running /** * @desc This type represents a type of link and may be referenced from data structures. + * @member href URI referring to a resource + * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 6.3.2-1: Attributes of the LinkType */ type record LinkType { Href href @@ -337,6 +339,12 @@ running variant (links) "name as '_links'"; } + /** + * @desc This type represents a list of links related to currently existing subscriptions for a MEC application instance. + * @member self_ Self-referring URI + * @member subscriptions The MEC application instance's subscriptions + * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 6.2.2-1: Attributes of the SubscriptionLinkList + */ type record Links { LinkType self_, Subscriptions subscriptions @@ -346,6 +354,8 @@ running /** * @desc This type represents a list of links related to currently existing subscriptions for a MEC application instance. + * @member links Object containing hyperlinks related to the resource + * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 6.2.2-1: Attributes of the SubscriptionLinkList */ type record SubscriptionLinkList { Links links @@ -357,6 +367,7 @@ running * @desc The MEC application instance's subscriptions * @member href URI referring to the subscription * @member subscriptionType Type of the subscription + * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 6.2.2-1: Attributes of the SubscriptionLinkList */ type record Subscription_ { Json.AnyURI href, @@ -752,6 +763,7 @@ running /** * @desc This type represents the general information of a traffic rule. + * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 7.1.2.2-1: Attributes of TrafficRule */ type record TrafficRule { TrafficRule_Id trafficRuleId, diff --git a/ttcn/LibMec/FederationEnablementAPI/module.mk b/ttcn/LibMec/FederationEnablementAPI/module.mk new file mode 100644 index 0000000..a7bdf52 --- /dev/null +++ b/ttcn/LibMec/FederationEnablementAPI/module.mk @@ -0,0 +1,5 @@ +sources := \ + ttcn/FederationEnablementAPI_Pics.ttcn \ + ttcn/FederationEnablementAPI_Pixits.ttcn \ + ttcn/FederationEnablementAPI_Templates.ttcn \ + ttcn/FederationEnablementAPI_TypesAndValues.ttcn diff --git a/ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_TypesAndValues.ttcn b/ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_TypesAndValues.ttcn new file mode 100644 index 0000000..d32ddd7 --- /dev/null +++ b/ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_TypesAndValues.ttcn @@ -0,0 +1,39 @@ +/** + * @desc The ETSI MEC ISG MEC040 Radio Network Information API described using OpenAPI + * @see TODO + */ +module FederationEnablementAPI_TypesAndValues { + + // JSON + import from Json all; + + // LibCommon + import from LibCommon_BasicTypesAndValues all; + + /** + * @desc Information provided by the MEC orchestrator as a part of the "Registration of MEC system to the federation" + * @member systemId Identifier of the MEC system + * @member systemName The name of the MEC system + * @member systemProvider Provider of the MEC system + * @see Draft ETSI GS MEC 040 V3.1.3 (2022-12) Table 6.2.2-1: Attributes of SystemInfo + */ + type record SystemInfo { + Json.String systemId optional, // Shall be absent in POST request + Json.String systemName, + Json.String systemProvider + } // End of type SystemInfo + + /** + * @desc information provided by MEC orchestrator as a part of the "Update of MEC system(s) to the federation" + * @member systemName The name of the MEC system + * @member endpoint Endpoint information (e.g. URI, FQDN, IP address) of MEC federator + * @see Draft ETSI GS MEC 040 V3.1.3 (2022-12) Table 6.2.3-1: Attributes of SystemInfoUpdate + */ + type record SystemInfoUpdate { + Json.String systemName optional, + EndPointInfo endpoint optional + } // End of type SystemInfoUpdate + +} with { + encode "JSON" +} // End of module FederationEnablementAPI_TypesAndValues \ No newline at end of file diff --git a/ttcn/LibMec/IotAPI/module.mk b/ttcn/LibMec/IotAPI/module.mk new file mode 100644 index 0000000..1d3e297 --- /dev/null +++ b/ttcn/LibMec/IotAPI/module.mk @@ -0,0 +1,6 @@ +sources := \ + ttcn/IotAPI_Pics.ttcn \ + ttcn/IotAPI_Pixits.ttcn \ + ttcn/IotAPI_Templates.ttcn \ + ttcn/IotAPI_TypesAndValues.ttcn \ + ../EdgePlatformApplicationEnablementAPI\/EdgePlatformApplicationEnablementAPI_TypesAndValues.ttcn diff --git a/ttcn/LibMec/IotAPI/ttcn/IotAPI_TypesAndValues.ttcn b/ttcn/LibMec/IotAPI/ttcn/IotAPI_TypesAndValues.ttcn new file mode 100644 index 0000000..48d34be --- /dev/null +++ b/ttcn/LibMec/IotAPI/ttcn/IotAPI_TypesAndValues.ttcn @@ -0,0 +1,185 @@ +/** + * @desc The ETSI MEC ISG MEC033 Radio Network Information API described using OpenAPI + * @see https://www.etsi.org/deliver/etsi_gs/MEC/001_099/033/03.01.01_60/gs_MEC033v030101p.pdf + */ +module IotAPI_TypesAndValues { + + // JSON + import from Json all; + + // LibCommon + import from LibCommon_BasicTypesAndValues all; + + // MEC-011 + import from EdgePlatformApplicationEnablementAPI_TypesAndValues all; + + /** + * @desc Information associated to an IoT device + * @member deviceAuthenticationInfo Information needed for secondary authentication of the IoT device to the data network + * @member deviceMetadata Additional information about the IoT device + * @member gpsi GPSI of the IoT device if 5G-enabled + * @member pei PEI of the IoT device if 5G-enabled + * @member supi SUPI of the IoT device if 5G-enabled + * @member msisdn MSISDN of the IoT device if LTE-enabled + * @member imei IMEI of the IoT device if LTE-enabled + * @member imsi IMSI of the IoT device if LTE-enabled + * @member iccid ICCID of the IoT device + * @member deviceId Human-readable identifier of the IoT device + * @member requestedMecTrafficRule MEC traffic rules the IoT device is requested to be associated to + * @member requestedIotPlatformId IoT platform to which the IoT device is requested to be associated to + * @member deviceSpecificMessageFormats Format of the messages to be published by the MEC IoTS on the user transport provided by the associated IoT platform in case the MEC IoTS acts on behalf of the IoT device + * @member downlinkInfo Downlink communication configuration of the user transport provided by the associated IoT platform in case the MEC IoTS acts on behalf of the IoT device + * @member clientCertificate Client-side SSL/TLS certificate to be used by the MEC IoTS to interact with the user transport provided by the associated IoT platform in case the MEC IoTS acts on behalf of the IoT device + * @member enabled Indication whether the IoT device has a valid associated traffic rule (TRUE) or not (FALSE) + * @see ETSI GS MEC 033 V3.1.1 (2022-12) Table 6.2.2-1: Definition of type DeviceInfo + */ + type record DeviceInfo { + Json.String deviceAuthenticationInfo, + record of Json.String deviceMetadata optional, + Json.String gpsi optional, + Json.String pei optional, + Json.String supi optional, + Json.String msisdn optional, + Json.String imei optional, + Json.String imsi optional, + Json.String iccid optional, + Json.String deviceId, + TrafficRuleDescriptorList requestedMecTrafficRule optional, + Json.String requestedIotPlatformId optional, + DeviceSpecificMessageFormats deviceSpecificMessageFormats optional, + DownlinkInfo downlinkInfo optional, + Json.String clientCertificate optional, + Json.Bool + } // End of type DeviceInfo + + /** + * @desc + * @member eventMsgFormat Event message format configuration + * @member uplinkMsgFormat Uplink message format configuration + */ + type record DeviceSpecificMessageFormats { + EventMsg eventMsgFormat optional, + UplinkMsg uplinkMsgFormat optional + } // End of type DeviceSpecificMessageFormats + + /** + * @desc Downlink communication configuration of the user transport provided by the associated IoT platform in case the MEC IoTS acts on behalf of the IoT device + * @member downlinkTopic Topic associated to the IoT device + * @member devicePort UDP port to be used by the MEC IoTS for the outgoing downlink packets towards the IoT device + */ + type record DownlinkInfo { + Json.String downlinkTopic optional, + Json.Number devicePort optional + } // End of type DownlinkInfo + + /** + * @desc Information associated to a IoT platform + * @member iotPlatformId Identifier of the IoT platform + * @member userTransportInfoInformation about the user transport(s) provided by the IoT platform + * @member customServicesTransportInfo Transport enabling access to vendor-specific services provided by the IoT platform. The data + * @member enabled Indication whether the IoT platform is capable of providing user transports and vendor-specific services (TRUE) or not (FALSE) + * @see ETSI GS MEC 033 V3.1.1 (2022-12) Table 6.2.3-1: Definition of type IotPlatformInfo + */ + type record IotPlatformInfo { + Json.String iotPlatformId, + MBTransportInfoList userTransportInfo, + TransportInfoList customServicesTransportInfo optional, + Json.Bool enabled + } // End of IotPlatformInfo + + /** + * @desc User transport based on a message bus + * @member id The identifier of this transport as per ETSI GS MEC 011 [i.2] + * @member name The name of this transport as per ETSI GS MEC 011 [i.2] + * @member description Human-readable description of this transport as per ETSI GS MEC 011 [i.2] + * @member type_ Type of the transport + * @member protocol The name of the protocol used + * @member version The version of the protocol used as per ETSI GS MEC 011 [i.2] + * @member endpoint Information about the endpoint to access the transport as per ETSI GS MEC 011 [i.2] + * @member security Information about the security used by the transport as per ETSI GS MEC 011 [i.2] + * @member implSpecificInfo Additional implementation specific details of the transport + * @see ETSI GS MEC 033 V3.1.1 (2022-12) Table 6.3.2-1: Definition of type MBTransportInfo + */ + type record MBTransportInfo { + Json.String id String, + Json.String name, + Json.String description optional, + TransportType type_, + Json.String protocol, + Json.String version , + EndPointInfo endpoint, + SecurityInfo security, + ImplSpecificInfo implSpecificInfo Structure (inlined) 1 Additional implementation specific details of the transport. + } // End of type MBTransportInfo + type record of MBTransportInfo MBTransportInfoList; + + /** + * @desc + * @member eventTopics Topics used to publish events related to the established session between the IoT device(s) and the end IoT application(s) on the user transport + * @member uplinkTopics Topics used to publish data generated by the IoT device(s) on the user transport, in order to be consumed by the end IoT application(s) + * @member downlinkTopics Topics used to publish data generated by the IoT applications(s) on the user transport, in order to be consumed by the end IoT device(s) + * @see ETSI GS MEC 033 V3.1.1 (2022-12) Table 6.3.2-1: Definition of type MBTransportInfo + */ + type record ImplSpecificInfo { + EventTopics eventTopics optional, + UplinkTopics uplinkTopics optional, + DownlinkTopics downlinkTopics optional + } // End of type ImplSpecificInfo + type record of Json.String EventTopics; + type record of Json.String UplinkTopics; + type record of Json.String DownlinkTopics; + + type record of TrafficRuleDescriptor TrafficRuleDescriptorList; + type record of TransportInfo TransportInfoList; + + /** + * @desc Defines the format of the messages to be published on the user transport in order to provide application-specific information about events related to the established session between the IoT device and the end IoT application(s) + * @member eventTopic Topic where the message containing application-specific information should be published + * @member selectedSerializer Type of serializer to be used for the topic as per ETSI GS MEC 011 [i.2] + * @member includeDeviceAddr Indication whether to include the IP address of the IoT device (TRUE) or not (FALSE) + * @member includeDeviceMetadata Indication whether to include the metadata about the IoT device (TRUE) or not (FALSE) + * @member includeSupi Indication whether to include the SUPI of the IoT device (TRUE) or not (FALSE) + * @member includeImsi Indication whether to include the IMSI of the IoT device (TRUE) or not (FALSE) + * @member inclueIccid Indication whether to include the ICCID of the IoT device (TRUE) or not (FALSE) + * @member includeDeviceId Indication whether to include the humanreadable identified of the IoT device (TRUE) or not (FALSE) + * @member + * @see ETSI GS MEC 033 V3.1.1 (2022-12) Table 6.3.3-1: Definition of type EventMsg + */ + type record EventMsg { + Json.String eventTopic, + SerializerType selectedSerializer SerializerType, + Json.Bool includeDeviceAddr optional, + Json.Bool includeDeviceMetadata optional, + Json.Bool includeSupi optional, + Json.Bool includeImsi optional, + Json.Bool includeIccid optional, + Json.Bool includeDeviceId optional + } // End ot type EventMsg + + /** + * @desc Defines the format of the messages containing uplink data generated by the IoT device to be published on the user transport + * @member uplinkTopic Topic where the message containing the data generated by the IoT device(s) should be published, in order to be consumed by the end IoT application(s). + * @member selectedSerializer Type of serializer to be used for the topic as per ETSI GS MEC 011 [i.2] + * @member includeDeviceAddr Indication whether to include the IP address of the IoT device (TRUE) or not (FALSE) + * @member includeDeviceMetadata Indication whether to include the metadata about the IoT device (TRUE) or not (FALSE) + * @member includeSupi Indication whether to include the SUPI of the IoT device (TRUE) or not (FALSE) + * @member includeImsi Indication whether to include the IMSI of the IoT device (TRUE) or not (FALSE) + * @member inclueIccid Indication whether to include the ICCID of the IoT device (TRUE) or not (FALSE) + * @member includeDeviceId Indication whether to include the humanreadable identified of the IoT device (TRUE) or not (FALSE) + * @member + * @see ETSI GS MEC 033 V3.1.1 (2022-12) Table 6.3.4-1: Definition of type UplinkMsg + */ + type record UplinkMsg { + Json.String uplinkTopic, + SerializerType selectedSerializer SerializerType, + Json.Bool includeDeviceAddr optional, + Json.Bool includeDeviceMetadata optional, + Json.Bool includeSupi optional, + Json.Bool includeImsi optional, + Json.Bool includeIccid optional, + Json.Bool includeDeviceId optional + } // End ot type UplinkMsg + +} with { + encode "JSON" +} // End of module IotAPI_TypesAndValues \ No newline at end of file -- GitLab From 1fbd9beaab219c95a0faeb3c27304b5c461fbfda Mon Sep 17 00:00:00 2001 From: YannGarcia Date: Mon, 30 Jan 2023 15:02:30 +0100 Subject: [PATCH 19/99] Add skeleton for MEC040 and MEC033. Review typing for MEC011 --- gs032p3-ttcn-test-suite.code-workspace | 3 + ...Mec_FederationEnablementAPI_TestCases.ttcn | 0 ...c_FederationEnablementAPI_TestControl.ttcn | 0 ttcn/AtsMec_FederationEnablement/module.mk | 38 ++++ ttcn/AtsMec_Iot/AtsMec_IoTAPI_TestCases.ttcn | 0 .../AtsMec_Iot/AtsMec_IoTAPI_TestControl.ttcn | 0 ttcn/AtsMec_Iot/module.mk | 38 ++++ ...ycleAndOperationGrantingAPI_Templates.ttcn | 4 +- ...ndOperationGrantingAPI_TypesAndValues.ttcn | 119 +++++++++-- ...ormApplicationEnablementAPI_Templates.ttcn | 20 +- ...plicationEnablementAPI_TypesAndValues.ttcn | 185 ++++++++++++++++-- ttcn/LibMec/IotAPI/module.mk | 2 +- .../ttcn/LibHttp_JsonMessageBodyTypes.ttcn | 2 +- .../ttcn/LibHttp_JsonTemplates.ttcn | 8 +- 14 files changed, 374 insertions(+), 45 deletions(-) create mode 100644 ttcn/AtsMec_FederationEnablement/AtsMec_FederationEnablementAPI_TestCases.ttcn create mode 100644 ttcn/AtsMec_FederationEnablement/AtsMec_FederationEnablementAPI_TestControl.ttcn create mode 100644 ttcn/AtsMec_FederationEnablement/module.mk create mode 100644 ttcn/AtsMec_Iot/AtsMec_IoTAPI_TestCases.ttcn create mode 100644 ttcn/AtsMec_Iot/AtsMec_IoTAPI_TestControl.ttcn create mode 100644 ttcn/AtsMec_Iot/module.mk diff --git a/gs032p3-ttcn-test-suite.code-workspace b/gs032p3-ttcn-test-suite.code-workspace index 90c9d36..6894bd4 100644 --- a/gs032p3-ttcn-test-suite.code-workspace +++ b/gs032p3-ttcn-test-suite.code-workspace @@ -2,6 +2,9 @@ "folders": [ { "path": "." + }, + { + "path": "../gs032p2-test-purposes" } ], "settings": { diff --git a/ttcn/AtsMec_FederationEnablement/AtsMec_FederationEnablementAPI_TestCases.ttcn b/ttcn/AtsMec_FederationEnablement/AtsMec_FederationEnablementAPI_TestCases.ttcn new file mode 100644 index 0000000..e69de29 diff --git a/ttcn/AtsMec_FederationEnablement/AtsMec_FederationEnablementAPI_TestControl.ttcn b/ttcn/AtsMec_FederationEnablement/AtsMec_FederationEnablementAPI_TestControl.ttcn new file mode 100644 index 0000000..e69de29 diff --git a/ttcn/AtsMec_FederationEnablement/module.mk b/ttcn/AtsMec_FederationEnablement/module.mk new file mode 100644 index 0000000..dc03f6d --- /dev/null +++ b/ttcn/AtsMec_FederationEnablement/module.mk @@ -0,0 +1,38 @@ +suite := AtsMec_FederationEnablement + +sources := \ + AtsMec_FederationEnablementAPI_TestCases.ttcn \ + AtsMec_FederationEnablementAPI_TestControl.ttcn + +modules := ../LibCommon \ + ../../titan-test-system-framework/ttcn/LibHelpers \ + ../../titan-test-system-framework/ttcn/LibHttp \ + ../../titan-test-system-framework/ttcn/LibJson \ + ../patch_lib_http \ + ../LibMec \ + ../LibMec/LocationAPI \ + ../LibMec/EdgePlatformApplicationEnablementAPI \ + ../LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI \ + ../LibMec/TrafficManagementAPI \ + ../LibMec/RnisAPI \ + ../LibMec/UEAppInterfaceAPI \ + ../LibMec/UEidentityAPI \ + ../LibMec/V2XInformationServiceAPI \ + ../LibMec/DeviceApplicationInterfaceAPI \ + ../LibMec/WlanInformationAPI \ + ../LibMec/FixedAccessInformationServiceAPI \ + ../LibMec/ApplicationMobilityServiceAPI \ + ../LibMec/IoTAPI \ + ../LibMec/FederationEnablementAPI \ + ../../titan-test-system-framework/ccsrc/Framework \ + ../../titan-test-system-framework/ccsrc/loggers \ + ../../titan-test-system-framework/ccsrc/Protocols/Http \ + ../../titan-test-system-framework/ccsrc/Protocols/Tcp \ + ../../titan-test-system-framework/ccsrc/Helpers \ + ../../ccsrc/Ports/LibHttp \ + ../../ccsrc/EncDec/LibMec \ + ../../ccsrc/externals \ + ../../ccsrc/Protocols/Http \ + ../../ccsrc/Protocols/Json \ + ../modules/titan.TestPorts.Common_Components.Abstract_Socket \ + diff --git a/ttcn/AtsMec_Iot/AtsMec_IoTAPI_TestCases.ttcn b/ttcn/AtsMec_Iot/AtsMec_IoTAPI_TestCases.ttcn new file mode 100644 index 0000000..e69de29 diff --git a/ttcn/AtsMec_Iot/AtsMec_IoTAPI_TestControl.ttcn b/ttcn/AtsMec_Iot/AtsMec_IoTAPI_TestControl.ttcn new file mode 100644 index 0000000..e69de29 diff --git a/ttcn/AtsMec_Iot/module.mk b/ttcn/AtsMec_Iot/module.mk new file mode 100644 index 0000000..e7966c8 --- /dev/null +++ b/ttcn/AtsMec_Iot/module.mk @@ -0,0 +1,38 @@ +suite := AtsMec_IoT + +sources := \ + AtsMec_IoTAPI_TestCases.ttcn \ + AtsMec_IoTAPI_TestControl.ttcn + +modules := ../LibCommon \ + ../../titan-test-system-framework/ttcn/LibHelpers \ + ../../titan-test-system-framework/ttcn/LibHttp \ + ../../titan-test-system-framework/ttcn/LibJson \ + ../patch_lib_http \ + ../LibMec \ + ../LibMec/LocationAPI \ + ../LibMec/EdgePlatformApplicationEnablementAPI \ + ../LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI \ + ../LibMec/TrafficManagementAPI \ + ../LibMec/RnisAPI \ + ../LibMec/UEAppInterfaceAPI \ + ../LibMec/UEidentityAPI \ + ../LibMec/V2XInformationServiceAPI \ + ../LibMec/DeviceApplicationInterfaceAPI \ + ../LibMec/WlanInformationAPI \ + ../LibMec/FixedAccessInformationServiceAPI \ + ../LibMec/ApplicationMobilityServiceAPI \ + ../LibMec/IoTAPI \ + ../LibMec/FederationEnablementAPI \ + ../../titan-test-system-framework/ccsrc/Framework \ + ../../titan-test-system-framework/ccsrc/loggers \ + ../../titan-test-system-framework/ccsrc/Protocols/Http \ + ../../titan-test-system-framework/ccsrc/Protocols/Tcp \ + ../../titan-test-system-framework/ccsrc/Helpers \ + ../../ccsrc/Ports/LibHttp \ + ../../ccsrc/EncDec/LibMec \ + ../../ccsrc/externals \ + ../../ccsrc/Protocols/Http \ + ../../ccsrc/Protocols/Json \ + ../modules/titan.TestPorts.Common_Components.Abstract_Socket \ + diff --git a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Templates.ttcn b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Templates.ttcn index f2bd971..4e19cc4 100644 --- a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Templates.ttcn +++ b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Templates.ttcn @@ -319,7 +319,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Templates { 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) ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.CategoryRef p_serCategory := omit, in template (omit) TransportDependency p_serTransportDependencies := omit, in template (omit) Json.String p_requestedPermissions := omit ) := { @@ -333,7 +333,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Templates { template (present) ServiceDependency mw_service_dependency( template (present) Json.String p_serName := ?, template (present) Json.String p_version := ?, - template CategoryRef p_serCategory := *, + template ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.CategoryRef p_serCategory := *, template TransportDependency p_serTransportDependencies := *, template Json.String p_requestedPermissions := * ) := { diff --git a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.ttcn b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.ttcn index 97e8675..83abeee 100644 --- a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.ttcn @@ -9,12 +9,103 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { // LibMec import from LibMec_TypesAndValues all; - // LibMec_EdgePlatformApplicationEnablementAPI - import from EdgePlatformApplicationEnablementAPI_TypesAndValues all; - // LibMec_ApplicationMobilityServiceAPI import from ApplicationMobilityServiceAPI_TypesAndValues all; + group edge_platform_application_enablement { + + /** + * @desc The enumeration TransportType represents types of transports. + * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 8.1.6.4-1: Enumeration TransportType + */ + type enumerated TransportType { + REST_HTTP, + MB_TOPIC_BASED, + MB_ROUTING, + MB_PUBSUB, + RPC, + RPC_STREAMING, + WEBSOCKET + } + + /** + * @desc List of supported OAuth 2.0 grant types. + */ + type enumerated GrantTypes { + OAUTH2_AUTHORIZATION_CODE, + OAUTH2_IMPLICIT_GRANT, + OAUTH2_RESOURCE_OWNER, + OAUTH2_CLIENT_CREDENTIALS + } + type record length(1..4) of GrantTypes GrantTypesList; + + /** + * @desc The token endpoint. + */ + type Json.String TokenEndpoint; + + /** + * @desc Parameters related to use of OAuth 2.0. + */ + type record OAuth2Info { + GrantTypesList grantTypes, + TokenEndpoint tokenEndpoint + } + + /** + * @desc This type represents security information related to a transport. + * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 8.1.5.4-1: Attributes of SecurityInfo + */ + type record SecurityInfo { + OAuth2Info oAuth2Info optional, + UInt8 extentions optional + } + + /** + * @desc The enumeration SerializerTypes represents types of serializers. + * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 8.1.6.3-1: Enumeration SerializerType + */ + type enumerated SerializerType { + JSON, + XML, + PROTOBUF3, + RAW // Used for invalid behavior + } + + /** + * @desc Reference of the catalogue. + */ + type Json.String CategoryRef_Href; + + /** + * @desc Unique identifier of the category. + */ + type Json.String CategoryRef_Id; + + /** + * @desc Name of the category. + */ + type Json.String Name; + + /** + * @desc Category version. + */ + type Json.String CategoryRef_Version; + + /** + * @desc This type represents the category reference. + */ + type record CategoryRef { + CategoryRef_Href href, + CategoryRef_Id id, + Name name, + CategoryRef_Version version + } + + type Json.String NotificationType; + + } // End of group edge_platform_application_enablement + group application_descriptor_information_model { /** @@ -262,7 +353,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { Json.String tunnelDstAddress, Json.String tunnelSrcAddress, Json.String tunnelSpecificData optional - } + } type enumerated TunnelType { GTP_U, @@ -285,7 +376,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { Json.String ipAddressType, IpAddress ipAddress, integer ttl optional - } + } /** * @desc The LatencyDescriptor data type describes latency requirements for a MEC application @@ -294,7 +385,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { */ type record LatencyDescriptor { UInt32 maxLatency - } + } /** * @desc The TerminateAppInstanceOpConfig data type supports the specification of MEC application requirements related to terminate application instance operation configuration @@ -329,7 +420,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { 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) @@ -342,7 +433,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { TransportDescriptor transport, SerializerType serializers, Labels labels - } + } type record length(1..infinity) of Json.String Labels; @@ -350,7 +441,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @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 type_ Type of the transport, as defined in the TransportType 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 @@ -360,12 +451,14 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { type record TransportDescriptor { Json.String name, Json.String description optional, - TransportTypes type_, + TransportType type_, Json.String protocol, Json.String version, SecurityInfo security, Json.String implSpecificInfo optional - } + } with { + variant (type_) "name as 'type'"; + } /** * @desc This data type represents the information of user context transfer capability of application @@ -376,7 +469,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { type record UserContextTransferCapability { Json.Bool statefulApplication, Json.Bool userContextTransferSupport optional - } + } /** * @desc This data type represents the network policy in the application instantiation and operation @@ -386,7 +479,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { */ type record AppNetworkPolicy { SteeredNetwork steeredNetwork - } + } /** * @desc Provides an option for the application to specify a type of network to carry the application traffic diff --git a/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Templates.ttcn b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Templates.ttcn index 4584bc9..b3e3d5f 100644 --- a/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Templates.ttcn +++ b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Templates.ttcn @@ -52,17 +52,17 @@ module EdgePlatformApplicationEnablementAPI_Templates { extentions := * } // End of template mw_security_info - template (value) TransportInfo_Endpoint m_end_point_uris( - in template (value) EndPointInfo_UriList p_uris - ) := { + template (value) EndpointInfo m_end_point_uris( + in template (value) EndPointInfo_UriList 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 := ? - ) := { + template (present) EndpointInfo mw_end_point_uris( + template (present) EndPointInfo_UriList p_uris := ? + ) := { uris := p_uris, addresses := *, alternative := * @@ -205,10 +205,10 @@ module EdgePlatformApplicationEnablementAPI_Templates { template (value) TransportInfo m_transport_info( in TransportInfo_Id p_id, in TransportInfo_Name p_name, - in TransportTypes p_type_, + in TransportType p_type_, in TransportInfo_Protocol p_protocol, in TransportInfo_Version p_version, - in template (value) TransportInfo_Endpoint p_endpoint, + in template (value) EndpointInfo p_endpoint, in template (value) SecurityInfo p_security ) := { id := p_id, @@ -225,10 +225,10 @@ module EdgePlatformApplicationEnablementAPI_Templates { template (present) TransportInfo mw_transport_info( template (present) TransportInfo_Id p_id := ?, template (present) TransportInfo_Name p_name := ?, - template (present) TransportTypes p_type_ := ?, + template (present) TransportType p_type_ := ?, template (present) TransportInfo_Protocol p_protocol := ?, template (present) TransportInfo_Version p_version := ?, - template (present) TransportInfo_Endpoint p_endpoint := ?, + template (present) EndpointInfo p_endpoint := ?, template (present) SecurityInfo p_security := ? ) := { id := p_id, diff --git a/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_TypesAndValues.ttcn b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_TypesAndValues.ttcn index ede77b5..0b58937 100644 --- a/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_TypesAndValues.ttcn @@ -1,6 +1,6 @@ /** * @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_mec011v020201p.pdf + * @see https://www.etsi.org/deliver/etsi_gs/MEC/001_099/011/03.01.01_60/gs_MEC011v030101p.pdf */ module EdgePlatformApplicationEnablementAPI_TypesAndValues { @@ -10,6 +10,9 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { // LibCommon import from LibCommon_BasicTypesAndValues all; + // MEC-10-2 + import from ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues all; + /** * @desc Maximum timeout value in seconds for graceful termination or graceful stop of an application instance. */ @@ -30,6 +33,11 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { /** * @desc This type represents the information that the mobile edge platform notifies the subscribed application instance about the corresponding application instance termination/stop. + * @member notificationType Shall be set to "AppTerminationNotification" + * @member operationAction Operation that is being performed on the MEC application instance + * @member maxGracefulTimeout Maximum non-zero timeout value in seconds for graceful termination or graceful stop of an application instance + * @member links Object containing hyperlinks related to the resource + * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 7.1.4.2-1: Attributes of AppTerminationNotification */ type record AppTerminationNotification { NotificationType notificationType, @@ -42,16 +50,19 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { /** * @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. + * that the application has completed its application level related terminate/stop actions, e.g. retention of application state + * in the case of stop. + * @member operationAction Operation that is being performed on the MEC application instance + * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 7.1.4.3-1: Attributes of AppTerminationConfirmation */ 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 + * @desc This type represents the information that the MEC application instance indicates to the MEC platform that it is up and running + * @member indication Indication about the MEC application instance + * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 7.1.4.4-1: Attributes of AppReadyConfirmation */ type record AppReadyConfirmation { Json.String indication @@ -59,6 +70,7 @@ running /** * @desc Represents possible states of a MEC service instance + * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 8.1.6.6-1: Enumeration ServiceState */ type enumerated ServiceState { ACTIVE (0), @@ -69,6 +81,10 @@ running /** * @desc This type represents the liveness information of a MEC service instance + * @member state Liveness state of the MEC service instance + * @member timeStamp The time when the last "heartbeat" message was received by MEC platform + * @member interval The interval (in seconds) between two consecutive "heartbeat" messages (see clause 8.2.10.3.3) that MEC platform has determined. + * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 8.1.2.4-1: Attributes of ServiceLivenessInfo */ type record ServiceLivenessInfo { ServiceState state, @@ -89,6 +105,11 @@ running /** * @desc This type represents the information that the mobile edge platform notifies the subscribed application instance about the corresponding application instance termination/stop. + * @member subscriptionType Shall be set to "AppTerminationNotificationSubscription" + * @member callbackReference URI selected by the MEC application instance to receive notifications on the subscribed MEC application instance management information + * @member links Object containing hyperlinks related to the resource + * @member appInstanceId It is used as the filtering criterion for the subscribed events + * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 7.1.3.2-1: Attributes of AppTerminationNotificationSubscription */ type record AppTerminationNotificationSubscription { SubscriptionType subscriptionType, @@ -147,6 +168,7 @@ running /** * @desc Platform Time Source status. 1 = TRACEABLE - time source is locked to the UTC time source. 2 = NONTRACEABLE - time source is not locked to the UTC time source. + * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 7.1.2.5-1: Attributes of CurrentTime */ type enumerated TimeSourceStatus { TRACEABLE (1), @@ -158,6 +180,7 @@ running * @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. * @member timeSourceStatus Platform Time Source status. 1 = TRACEABLE - time source is locked to the UTC time source. 2 = NONTRACEABLE - time source is not locked to the UTC time source. + * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 7.1.2.5-1: Attributes of CurrentTime */ type record CurrentTime { Seconds seconds, @@ -165,6 +188,45 @@ running TimeSourceStatus timeSourceStatus } + /** + * @desc This type represents the information provided by the MEC application instance as part of the "application registration request" and "application registration update" messages + * @member appName Name of the application. It shall be consistent with the appName in the AppD, if an AppD is available + * @member appProvider Provider of the application. It shall be consistent with the appProvider in the AppD, if an AppD is available + * @member appCategory Category of the application + * @member appDId The application descriptor identifier + * @member appInstanceId Identifier of the application instance + * @member endpoint Endpoint information (e.g. URI, FQDN, IP address) of the application server, which is part of the application functionalities + * @member appServiceRequired Describes services a MEC application requires to run + * @member appServiceOptional Describes services a MEC application may use if available + * @member appFeatureRequired Describes features a MEC application requires to run + * @member appFeatureOptional Describes features a MEC application may use if available + * @member isInsByMec Indicate whether the application instance is instantiated by the MEC Management + * @member appProfile Can be mapped to EAS profile as defined in ETSI TS 129 558 [19] + * @see ETSI GS MEC 011 V3.1.1 (2022-09) 7.1.2.6-1: Attributes of AppInfo + */ + type record AppInfo { + Json.String appName, + Json.String appProvider optional, + CategoryRef appCategory optional, + Json.String appDId optional, + Json.String appInstanceId optional, + EndpointInfo endpoint optional, + ServiceDependency appServiceRequired optional, + ServiceDependency appServiceOptional optional, + FeatureDependency appFeatureRequired optional, + FeatureDependency appFeatureOptional optional, + Json.Bool isInsByMec optional, + AppProfile appProfile optional + } // End of type AppInfo + + /** + * @desc + * @see ETSI TS 129 558 V17.2.0 + */ + type record AppProfile { + // TODO + } // End of type AppProfile + /** * @desc Type of the interface. */ @@ -187,6 +249,12 @@ running /** * @desc This type represents the destination interface. + * member interfaceType Type of the interface, e.g. TUNNEL, MAC, IP, etc + * member tunnelInfo Included only if the destination interface type is "tunnel" + * member srcMacAddress If the interface type is "MAC", source address identifies the MAC address of the interface + * member dstMacAddress If the interface type is "MAC", destination address identifies the MAC address of the interface + * member dstIpAddress If the interface type is "IP", destination address identifies the IP address of the remote destination + * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 7.1.5.3-1: Attributes of DestinationInterface */ type record DestinationInterface { InterfaceType interfaceType, @@ -235,7 +303,14 @@ running type UInt32 Ttl; /** - * @desc This type represents the general information of a DNS rule. + * @desc This type represents the general information of a DNS rule + * member dnsRuleId Identifies the DNS Rule + * member domainName FQDN resolved by the DNS rule + * member ipAddressType 1 Specify the IP address type, value: IP_V6, IP_V4 + * member ipAddress IP address associated with the FQDN resolved by the DNS rule + * member ttl Time to live value, in seconds. + * member state Contains the DNS rule state: ACTIVE, INACTIVE + * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 7.1.2.3-1: Attributes of DnsRule */ type record DnsRule { DnsRule_Id dnsRuleId, @@ -289,6 +364,11 @@ running */ type record length(1..infinity) of EndPointInfo_Uri EndPointInfo_UriList; + /** + * @desc Fully Qualified Domain Name of the service. + */ + type record length(1..infinity) of Json.String EndPointInfo_FqdnList; + /** * @desc This type represents a type of link and may be referenced from data structures. * @member href URI referring to a resource @@ -401,6 +481,7 @@ running /** * @desc This type represents security information related to a transport. + * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 8.1.5.4-1: Attributes of SecurityInfo */ type record SecurityInfo { OAuth2Info oAuth2Info optional, @@ -440,6 +521,12 @@ running /** * @desc Filtering criteria to match services for which events are requested to be reported + * @member serInstanceIds Identifiers of service instances about which to report events + * @member serNames Names of services about which to report events + * @member serCategories Categories of services about which to report events + * @member states States of the services about which to report events + * @member isLocal Restrict event reporting to whether the service is local to the MEC platform where the subscription is managed + * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 8.1.3.2-1: Attributes of SerAvailabilityNotificationSubscription */ type record FilteringCriteria { SerInstanceIdList serInstanceIds optional, @@ -460,6 +547,7 @@ running /** * @desc The enumeration SerializerTypes represents types of serializers. + * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 8.1.6.3-1: Enumeration SerializerType */ type enumerated SerializerType { JSON, @@ -494,6 +582,7 @@ running /** * @desc Contains the types of locality. + * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 8.1.6.5-1: Enumeration LocalityType */ type enumerated LocalityType { MEC_SYSTEM, @@ -525,6 +614,20 @@ running /** * @desc This type represents the general information of a mobile edge service. + * @member serInstanceId Identifier of the service instance assigned by the MEPM/MEC platform + * @member serName The name of the service + * @member serCategory A Category reference + * @member version The version of the service + * @member state Contains the service state + * @member transportId Identifier of the platform-provided transport to be used by the service + * @member transportInfo Information regarding the transport used by the service + * @member serializer Indicate the supported serialization format of the service + * @member scopeOfLocality The scope of locality as expressed by "consumedLocalOnly" and "isLocal". + * @member consumedLocalOnly Indicate whether the service can only be consumed by the MEC applications located in the same locality (as defined by scopeOfLocality) as this service instance (TRUE) or not (FALSE) + * @member isLocal Indicate whether the service is located in the same locality (as defined by scopeOfLocality) as the consuming MEC application (TRUE) or not (FALSE) + * @member livenessInterval Interval (in seconds) between two consecutive "heartbeat" messages + * @member links Links to resources related to this resource + * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 8.1.2.2-1: Attributes of ServiceInfo */ type record ServiceInfo { SerInstanceId serInstanceId optional, @@ -611,6 +714,14 @@ running /** * @desc NTP server detail. + * @member ntpServerAddrType Address type of NTP server + * @member ntpServerAddr NTP server address + * @member minPollingInterval Minimum poll interval for NTP messages + * @member maxPollingInterval Maximum poll interval for NTP messages + * @member localPriority NTP server local priority + * @member authenticationOption NTP authentication option + * @member authenticationKeyNum Authentication key number + * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 7.1.2.4-1: Attributes of TimingCaps */ type record NtpServers { NtpServerAddrType ntpServerAddrType, @@ -644,7 +755,11 @@ running } /** - * @desc This type represents the information provided by the mobile edge platform in response to the Timing capabilities Query message. + * @desc This type represents the information provided by the mobile edge platform in response to the Timing capabilities Query message + * @member timeStamp + * @member ntpServers Number of available NTP servers + * @member ptpMasters Number of available PTP Servers (referred to as "masters" in IEEE 1588-2019™ [i.2]) + * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 7.1.2.4-1: Attributes of TimingCaps */ type record TimingCaps { TimeStamp timeStamp optional, @@ -705,6 +820,20 @@ running /** * @desc This type represents the traffic filter. + * @member srcAddress An IP address or a range of IP address + * @member dstAddress An IP address or a range of IP address + * @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 srcTunnelAddress Used 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 dstTunnelPort 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 011 V3.1.1 (2022-09) Table 7.1.5.2-1: Attributes of TrafficFilter */ type record TrafficFilter { TrafficFilter_AddressList srcAddress optional, @@ -762,7 +891,14 @@ running } /** - * @desc This type represents the general information of a traffic rule. + * @desc This type represents the general information of a traffic rule + * member trafficRuleId Identify the traffic rule. + * member filterType Definition of filter per FLOW or PACKET + * member priority Priority of this traffic rule within the range 0 to 255] + * member trafficFilter The filter used to identify specific packets that need to be handled by the MEC host + * member action The action of the MEC host data plane when a packet matches the trafficFilter + * member dstInterface Describes the destination interface information + * member state Contains the traffic rule state: ACTIVE, INACTIVE * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 7.1.2.2-1: Attributes of TrafficRule */ type record TrafficRule { @@ -809,25 +945,41 @@ running type Json.String TransportInfo_Version; /** - * @desc This type represents information about a transport endpoint. + * @desc This type represents information about a transport endpoint + * @member uris Entry point information of the service as string, formatted according to URI syntax (see IETF RFC 3986 [8]) + * @member fqdn Fully Qualified Domain Name of the service + * @member addresses Entry point information of the service as one or more pairs of IP address and port + * @member alternativeEntry point information of the service in a format defined by an implementation, or in an external specification + * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 8.1.5.3-1: Attributes of EndpointInfo */ - type record TransportInfo_Endpoint { + type record EndpointInfo { EndPointInfo_UriList uris optional, + EndPointInfo_FqdnList fqdn optional, EndPointInfo_AddressList addresses optional, EndPointInfo_Alternative alternative optional } /** * @desc This type represents the general information of a mobile edge service. + * @member id The identifier of this transport + * @member name The name of this transport + * @member description Human-readable description of this transport + * @member type_ Type of the transport + * @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 endpoint Information about the endpoint to access the transport + * @member security Information about the security used by the transport + * @member implSpecificInfo Additional implementation specific details of the transport + * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 8.1.2.3-1: Attributes of TransportInfo */ type record TransportInfo { TransportInfo_Id id, TransportInfo_Name name, TransportInfo_Description description optional, - TransportTypes type_, + TransportType type_, TransportInfo_Protocol protocol, TransportInfo_Version version, - TransportInfo_Endpoint endpoint, + EndpointInfo endpoint, SecurityInfo security, TransportInfo_ImplSpecificInfo implSpecificInfo optional } with { @@ -836,9 +988,10 @@ running type record of TransportInfo TransportInfoList; /** - * @desc The enumeration TransportTypes represents types of transports. + * @desc The enumeration TransportType represents types of transports. + * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 8.1.6.4-1: Enumeration TransportType */ - type enumerated TransportTypes { + type enumerated TransportType { REST_HTTP, MB_TOPIC_BASED, MB_ROUTING, @@ -868,6 +1021,10 @@ running /** * @desc This type represents the tunnel information. + * @member tunnelType Type of the tunnel, e.g. GTP_U, GRE, etc + * @member tunnelDstAddress Destination address of the tunnel + * @member tunnelSrcAddress Source address of the tunnel + * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 7.1.5.4-1: Attributes of TunnelInfo */ type record TunnelInfo { TunnelInfo_TunnelType tunnelType, diff --git a/ttcn/LibMec/IotAPI/module.mk b/ttcn/LibMec/IotAPI/module.mk index 1d3e297..d3033e4 100644 --- a/ttcn/LibMec/IotAPI/module.mk +++ b/ttcn/LibMec/IotAPI/module.mk @@ -3,4 +3,4 @@ sources := \ ttcn/IotAPI_Pixits.ttcn \ ttcn/IotAPI_Templates.ttcn \ ttcn/IotAPI_TypesAndValues.ttcn \ - ../EdgePlatformApplicationEnablementAPI\/EdgePlatformApplicationEnablementAPI_TypesAndValues.ttcn + ../../ttcn/EdgePlatformApplicationEnablementAPI/EdgePlatformApplicationEnablementAPI_TypesAndValues.ttcn diff --git a/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn b/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn index 6b91648..75ff0a7 100644 --- a/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn +++ b/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn @@ -112,7 +112,7 @@ module LibHttp_JsonMessageBodyTypes { /* AppLCM_TypesAndValues.SubscriptionInfo subscriptionInfo, */ /* AppLCM_TypesAndValues.Notification lcmNotification, */ UEAppInterfaceAPI_TypesAndValues.AppContext appContext, - AppInfo appInfo, + UEAppInterfaceAPI_TypesAndValues.AppInfo appInfo, ServiceInfoList serviceInfoList, ServiceInfo serviceInfo, EdgePlatformApplicationEnablementAPI_TypesAndValues.SubscriptionLinkList subscriptionLinkList_app_ens, diff --git a/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn b/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn index b4e9720..5f713e6 100644 --- a/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn +++ b/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn @@ -934,14 +934,14 @@ group ams_api { } // End of template mw_body_json_app_context template (value) JsonBody m_body_json_app_info( - in template (value) AppInfo p_appInfo - ) := { + in template (value) UEAppInterfaceAPI_TypesAndValues.AppInfo p_appInfo + ) := { appInfo := p_appInfo } // End of template m_body_json_app_info template (present) JsonBody mw_body_json_app_info( - template (present) AppInfo p_appInfo := ? - ) := { + template (present) UEAppInterfaceAPI_TypesAndValues.AppInfo p_appInfo := ? + ) := { appInfo := p_appInfo } // End of template mw_body_json_app_info -- GitLab From 99728e6c3ad1e0350084dbd5bfab8617be2ed43e Mon Sep 17 00:00:00 2001 From: YannGarcia Date: Mon, 13 Feb 2023 11:46:40 +0100 Subject: [PATCH 20/99] Update skeleton for MEC040 and MEC033 --- ccsrc/Protocols/Http/http_codec_mec.cc | 9 ++- ...Mec_FederationEnablementAPI_TestCases.ttcn | 25 +++++++ ...c_FederationEnablementAPI_TestControl.ttcn | 16 +++++ ttcn/AtsMec_IoT/AtsMec_IoTAPI_TestCases.ttcn | 25 +++++++ .../AtsMec_IoT/AtsMec_IoTAPI_TestControl.ttcn | 16 +++++ ttcn/{AtsMec_Iot => AtsMec_IoT}/module.mk | 0 ttcn/AtsMec_Iot/AtsMec_IoTAPI_TestCases.ttcn | 0 .../AtsMec_Iot/AtsMec_IoTAPI_TestControl.ttcn | 0 ...ormApplicationEnablementAPI_Templates.ttcn | 8 +-- ...plicationEnablementAPI_TypesAndValues.ttcn | 66 +++++++++---------- ttcn/LibMec/FederationEnablementAPI/module.mk | 1 + .../FederationEnablementAPI_Functions.ttcn | 3 + .../ttcn/FederationEnablementAPI_Pics.ttcn | 3 + .../ttcn/FederationEnablementAPI_Pixits.ttcn | 3 + .../FederationEnablementAPI_Templates.ttcn | 3 + ...ederationEnablementAPI_TypesAndValues.ttcn | 4 +- ttcn/LibMec/IoTAPI/module.mk | 6 ++ ttcn/LibMec/IoTAPI/ttcn/IoTAPI_Functions.ttcn | 3 + ttcn/LibMec/IoTAPI/ttcn/IoTAPI_Pics.ttcn | 3 + ttcn/LibMec/IoTAPI/ttcn/IoTAPI_Pixits.ttcn | 3 + ttcn/LibMec/IoTAPI/ttcn/IoTAPI_Templates.ttcn | 3 + .../ttcn/IoTAPI_TypesAndValues.ttcn} | 29 ++++---- ttcn/LibMec/IotAPI/module.mk | 6 -- .../LibCommon_Sync.ttcn | 1 + 24 files changed, 176 insertions(+), 60 deletions(-) create mode 100644 ttcn/AtsMec_IoT/AtsMec_IoTAPI_TestCases.ttcn create mode 100644 ttcn/AtsMec_IoT/AtsMec_IoTAPI_TestControl.ttcn rename ttcn/{AtsMec_Iot => AtsMec_IoT}/module.mk (100%) delete mode 100644 ttcn/AtsMec_Iot/AtsMec_IoTAPI_TestCases.ttcn delete mode 100644 ttcn/AtsMec_Iot/AtsMec_IoTAPI_TestControl.ttcn create mode 100644 ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_Functions.ttcn create mode 100644 ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_Pics.ttcn create mode 100644 ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_Pixits.ttcn create mode 100644 ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_Templates.ttcn create mode 100644 ttcn/LibMec/IoTAPI/module.mk create mode 100644 ttcn/LibMec/IoTAPI/ttcn/IoTAPI_Functions.ttcn create mode 100644 ttcn/LibMec/IoTAPI/ttcn/IoTAPI_Pics.ttcn create mode 100644 ttcn/LibMec/IoTAPI/ttcn/IoTAPI_Pixits.ttcn create mode 100644 ttcn/LibMec/IoTAPI/ttcn/IoTAPI_Templates.ttcn rename ttcn/LibMec/{IotAPI/ttcn/IotAPI_TypesAndValues.ttcn => IoTAPI/ttcn/IoTAPI_TypesAndValues.ttcn} (91%) delete mode 100644 ttcn/LibMec/IotAPI/module.mk diff --git a/ccsrc/Protocols/Http/http_codec_mec.cc b/ccsrc/Protocols/Http/http_codec_mec.cc index f6df151..362bdac 100644 --- a/ccsrc/Protocols/Http/http_codec_mec.cc +++ b/ccsrc/Protocols/Http/http_codec_mec.cc @@ -28,13 +28,16 @@ bool http_codec_mec::decode_body_json(const OCTETSTRING &p_data, LibHttp__JsonMe loggers::get_instance().log(">>> http_codec_mec::decode_body_json"); if (_codecs["json"].get() != nullptr) { - loggers::get_instance().log("http_codec::decode_body: Call 'json_codec'"); + loggers::get_instance().log("http_codec::decode_body_json: Call 'json_codec'"); if (_codecs["json"]->decode(p_data, (Record_Type&)p_json_body, p_params) == -1) { - loggers::get_instance().warning("http_codec::decode_body: Failed to decode JSON message"); + loggers::get_instance().warning("http_codec::decode_body_json: Failed to decode JSON message"); p_json_body.raw() = CHARSTRING(p_data.lengthof(), (char*)static_cast(p_data)); } else { - loggers::get_instance().log_msg("http_codec::decode_body: Decoded message:", p_json_body); + loggers::get_instance().log_msg("http_codec::decode_body_json: Decoded message:", p_json_body); } + } else { + loggers::get_instance().error("http_codec::decode_body_json: Codec not found"); + return false; } return true; diff --git a/ttcn/AtsMec_FederationEnablement/AtsMec_FederationEnablementAPI_TestCases.ttcn b/ttcn/AtsMec_FederationEnablement/AtsMec_FederationEnablementAPI_TestCases.ttcn index e69de29..121d712 100644 --- a/ttcn/AtsMec_FederationEnablement/AtsMec_FederationEnablementAPI_TestCases.ttcn +++ b/ttcn/AtsMec_FederationEnablement/AtsMec_FederationEnablementAPI_TestCases.ttcn @@ -0,0 +1,25 @@ +module AtsMec_FederationEnablementAPI_TestCases { + + // Libcommon + import from LibCommon_Sync all; + + // LibHttp + import from LibHttp_TypesAndValues all; + import from LibHttp_Functions all; + import from LibHttp_Templates all; + import from LibHttp_JsonTemplates all; + import from LibHttp_TestSystem all; + + // LibMec/FederationEnablementAPI + import from FederationEnablementAPI_TypesAndValues all; + import from FederationEnablementAPI_Templates all; + import from FederationEnablementAPI_Functions all; + import from FederationEnablementAPI_Pics all; + import from FederationEnablementAPI_Pixits all; + + // LibMec + import from LibMec_Functions all; + import from LibMec_Pics all; + import from LibMec_Pixits all; + +} // End of module AtsMec_FederationEnablementAPI_TestCases diff --git a/ttcn/AtsMec_FederationEnablement/AtsMec_FederationEnablementAPI_TestControl.ttcn b/ttcn/AtsMec_FederationEnablement/AtsMec_FederationEnablementAPI_TestControl.ttcn index e69de29..73c204b 100644 --- a/ttcn/AtsMec_FederationEnablement/AtsMec_FederationEnablementAPI_TestControl.ttcn +++ b/ttcn/AtsMec_FederationEnablement/AtsMec_FederationEnablementAPI_TestControl.ttcn @@ -0,0 +1,16 @@ +module AtsMec_FederationEnablementAPI_TestControl { + + // LibMec/FederationEnablementAPI + import from FederationEnablementAPI_Pics all; + + // LibMec + import from LibMec_Pics all; + + // AtsMec_FederationEnablementAPI + import from AtsMec_FederationEnablementAPI_TestCases all; + + control { + + } // End of 'control' statement + +} // End of module AtsMec_FederationEnablementAPI_TestControl diff --git a/ttcn/AtsMec_IoT/AtsMec_IoTAPI_TestCases.ttcn b/ttcn/AtsMec_IoT/AtsMec_IoTAPI_TestCases.ttcn new file mode 100644 index 0000000..f02d4df --- /dev/null +++ b/ttcn/AtsMec_IoT/AtsMec_IoTAPI_TestCases.ttcn @@ -0,0 +1,25 @@ +module AtsMec_IoTAPI_TestCases { + + // Libcommon + import from LibCommon_Sync all; + + // LibHttp + import from LibHttp_TypesAndValues all; + import from LibHttp_Functions all; + import from LibHttp_Templates all; + import from LibHttp_JsonTemplates all; + import from LibHttp_TestSystem all; + + // LibMec/IoTAPI + import from IoTAPI_TypesAndValues all; + import from IoTAPI_Templates all; + import from IoTAPI_Functions all; + import from IoTAPI_Pics all; + import from IoTAPI_Pixits all; + + // LibMec + import from LibMec_Functions all; + import from LibMec_Pics all; + import from LibMec_Pixits all; + +} // End of module AtsMec_IoTAPI_TestCases diff --git a/ttcn/AtsMec_IoT/AtsMec_IoTAPI_TestControl.ttcn b/ttcn/AtsMec_IoT/AtsMec_IoTAPI_TestControl.ttcn new file mode 100644 index 0000000..ad2c195 --- /dev/null +++ b/ttcn/AtsMec_IoT/AtsMec_IoTAPI_TestControl.ttcn @@ -0,0 +1,16 @@ +module AtsMec_IoTAPI_TestControl { + + // LibMec/IoTAPI + import from IoTAPI_Pics all; + + // LibMec + import from LibMec_Pics all; + + // AtsMec_IoTAPI + import from AtsMec_IoTAPI_TestCases all; + + control { + + } // End of 'control' statement + +} // End of module AtsMec_IoTAPI_TestControl diff --git a/ttcn/AtsMec_Iot/module.mk b/ttcn/AtsMec_IoT/module.mk similarity index 100% rename from ttcn/AtsMec_Iot/module.mk rename to ttcn/AtsMec_IoT/module.mk diff --git a/ttcn/AtsMec_Iot/AtsMec_IoTAPI_TestCases.ttcn b/ttcn/AtsMec_Iot/AtsMec_IoTAPI_TestCases.ttcn deleted file mode 100644 index e69de29..0000000 diff --git a/ttcn/AtsMec_Iot/AtsMec_IoTAPI_TestControl.ttcn b/ttcn/AtsMec_Iot/AtsMec_IoTAPI_TestControl.ttcn deleted file mode 100644 index e69de29..0000000 diff --git a/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Templates.ttcn b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Templates.ttcn index b3e3d5f..fd90167 100644 --- a/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Templates.ttcn +++ b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Templates.ttcn @@ -52,7 +52,7 @@ module EdgePlatformApplicationEnablementAPI_Templates { extentions := * } // End of template mw_security_info - template (value) EndpointInfo m_end_point_uris( + template (value) EndPointInfo m_end_point_uris( in template (value) EndPointInfo_UriList p_uris ) := { uris := p_uris, @@ -60,7 +60,7 @@ module EdgePlatformApplicationEnablementAPI_Templates { alternative := omit } // End of template m_end_point_uris - template (present) EndpointInfo mw_end_point_uris( + template (present) EndPointInfo mw_end_point_uris( template (present) EndPointInfo_UriList p_uris := ? ) := { uris := p_uris, @@ -208,7 +208,7 @@ module EdgePlatformApplicationEnablementAPI_Templates { in TransportType p_type_, in TransportInfo_Protocol p_protocol, in TransportInfo_Version p_version, - in template (value) EndpointInfo p_endpoint, + in template (value) EndPointInfo p_endpoint, in template (value) SecurityInfo p_security ) := { id := p_id, @@ -228,7 +228,7 @@ module EdgePlatformApplicationEnablementAPI_Templates { template (present) TransportType p_type_ := ?, template (present) TransportInfo_Protocol p_protocol := ?, template (present) TransportInfo_Version p_version := ?, - template (present) EndpointInfo p_endpoint := ?, + template (present) EndPointInfo p_endpoint := ?, template (present) SecurityInfo p_security := ? ) := { id := p_id, diff --git a/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_TypesAndValues.ttcn b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_TypesAndValues.ttcn index 0b58937..f34deb8 100644 --- a/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_TypesAndValues.ttcn @@ -68,35 +68,6 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { Json.String indication } - /** - * @desc Represents possible states of a MEC service instance - * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 8.1.6.6-1: Enumeration ServiceState - */ - 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 - * @member state Liveness state of the MEC service instance - * @member timeStamp The time when the last "heartbeat" message was received by MEC platform - * @member interval The interval (in seconds) between two consecutive "heartbeat" messages (see clause 8.2.10.3.3) that MEC platform has determined. - * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 8.1.2.4-1: Attributes of ServiceLivenessInfo - */ - type record ServiceLivenessInfo { - ServiceState state, - TimeStamp timeStamp, - integer interval - } - - /** - * @desc It is used as the filtering criterion for the subscribed events. - */ - type Json.String AppInstanceId; - /** * @desc URI selected by the mobile edge application instance to receive notifications on the subscribed mobile edge application instance management information. * This shall be included in both the request and the response." @@ -125,6 +96,35 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { */ type Json.String SubscriptionType; + /** + * @desc It is used as the filtering criterion for the subscribed events. + */ + type Json.String AppInstanceId; + + /** + * @desc Represents possible states of a MEC service instance + * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 8.1.6.6-1: Enumeration ServiceState + */ + 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 + * @member state Liveness state of the MEC service instance + * @member timeStamp The time when the last "heartbeat" message was received by MEC platform + * @member interval The interval (in seconds) between two consecutive "heartbeat" messages (see clause 8.2.10.3.3) that MEC platform has determined. + * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 8.1.2.4-1: Attributes of ServiceLivenessInfo + */ + type record ServiceLivenessInfo { + ServiceState state, + TimeStamp timeStamp, + integer interval + } + /** * @desc Reference of the catalogue. */ @@ -210,7 +210,7 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { CategoryRef appCategory optional, Json.String appDId optional, Json.String appInstanceId optional, - EndpointInfo endpoint optional, + EndPointInfo endpoint optional, ServiceDependency appServiceRequired optional, ServiceDependency appServiceOptional optional, FeatureDependency appFeatureRequired optional, @@ -950,9 +950,9 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { * @member fqdn Fully Qualified Domain Name of the service * @member addresses Entry point information of the service as one or more pairs of IP address and port * @member alternativeEntry point information of the service in a format defined by an implementation, or in an external specification - * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 8.1.5.3-1: Attributes of EndpointInfo + * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 8.1.5.3-1: Attributes of EndPointInfo */ - type record EndpointInfo { + type record EndPointInfo { EndPointInfo_UriList uris optional, EndPointInfo_FqdnList fqdn optional, EndPointInfo_AddressList addresses optional, @@ -979,7 +979,7 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { TransportType type_, TransportInfo_Protocol protocol, TransportInfo_Version version, - EndpointInfo endpoint, + EndPointInfo endpoint, SecurityInfo security, TransportInfo_ImplSpecificInfo implSpecificInfo optional } with { diff --git a/ttcn/LibMec/FederationEnablementAPI/module.mk b/ttcn/LibMec/FederationEnablementAPI/module.mk index a7bdf52..ff13bd4 100644 --- a/ttcn/LibMec/FederationEnablementAPI/module.mk +++ b/ttcn/LibMec/FederationEnablementAPI/module.mk @@ -2,4 +2,5 @@ sources := \ ttcn/FederationEnablementAPI_Pics.ttcn \ ttcn/FederationEnablementAPI_Pixits.ttcn \ ttcn/FederationEnablementAPI_Templates.ttcn \ + ttcn/FederationEnablementAPI_Functions.ttcn \ ttcn/FederationEnablementAPI_TypesAndValues.ttcn diff --git a/ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_Functions.ttcn b/ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_Functions.ttcn new file mode 100644 index 0000000..92a7a6a --- /dev/null +++ b/ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_Functions.ttcn @@ -0,0 +1,3 @@ +module FederationEnablementAPI_Functions { + +} // End of modue FederationEnablementAPI_Functions \ No newline at end of file diff --git a/ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_Pics.ttcn b/ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_Pics.ttcn new file mode 100644 index 0000000..a04be3d --- /dev/null +++ b/ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_Pics.ttcn @@ -0,0 +1,3 @@ +module FederationEnablementAPI_Pics { + +} // End of module FederationEnablementAPI_Pics \ No newline at end of file diff --git a/ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_Pixits.ttcn b/ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_Pixits.ttcn new file mode 100644 index 0000000..ba1c4a9 --- /dev/null +++ b/ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_Pixits.ttcn @@ -0,0 +1,3 @@ +module FederationEnablementAPI_Pixits { + +} // End of module FederationEnablementAPI_Pixits \ No newline at end of file diff --git a/ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_Templates.ttcn b/ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_Templates.ttcn new file mode 100644 index 0000000..77eebbe --- /dev/null +++ b/ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_Templates.ttcn @@ -0,0 +1,3 @@ +module FederationEnablementAPI_Templates { + +} // End of module FederationEnablementAPI_Templates \ No newline at end of file diff --git a/ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_TypesAndValues.ttcn b/ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_TypesAndValues.ttcn index d32ddd7..1e7895b 100644 --- a/ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_TypesAndValues.ttcn @@ -9,6 +9,8 @@ module FederationEnablementAPI_TypesAndValues { // LibCommon import from LibCommon_BasicTypesAndValues all; + + import from EdgePlatformApplicationEnablementAPI_TypesAndValues all; /** * @desc Information provided by the MEC orchestrator as a part of the "Registration of MEC system to the federation" @@ -31,7 +33,7 @@ module FederationEnablementAPI_TypesAndValues { */ type record SystemInfoUpdate { Json.String systemName optional, - EndPointInfo endpoint optional + EdgePlatformApplicationEnablementAPI_TypesAndValues.EndPointInfo endpoint optional } // End of type SystemInfoUpdate } with { diff --git a/ttcn/LibMec/IoTAPI/module.mk b/ttcn/LibMec/IoTAPI/module.mk new file mode 100644 index 0000000..150ca46 --- /dev/null +++ b/ttcn/LibMec/IoTAPI/module.mk @@ -0,0 +1,6 @@ +sources := \ + ttcn/IoTAPI_Pics.ttcn \ + ttcn/IoTAPI_Pixits.ttcn \ + ttcn/IoTAPI_Templates.ttcn \ + ttcn/IoTAPI_Functions.ttcn \ + ttcn/IoTAPI_TypesAndValues.ttcn diff --git a/ttcn/LibMec/IoTAPI/ttcn/IoTAPI_Functions.ttcn b/ttcn/LibMec/IoTAPI/ttcn/IoTAPI_Functions.ttcn new file mode 100644 index 0000000..3a5a360 --- /dev/null +++ b/ttcn/LibMec/IoTAPI/ttcn/IoTAPI_Functions.ttcn @@ -0,0 +1,3 @@ +module IoTAPI_Functions { + +} // End of IoTAPI_Functions diff --git a/ttcn/LibMec/IoTAPI/ttcn/IoTAPI_Pics.ttcn b/ttcn/LibMec/IoTAPI/ttcn/IoTAPI_Pics.ttcn new file mode 100644 index 0000000..9d74084 --- /dev/null +++ b/ttcn/LibMec/IoTAPI/ttcn/IoTAPI_Pics.ttcn @@ -0,0 +1,3 @@ +module IoTAPI_Pics { + +} // End of IoTAPI_Pics diff --git a/ttcn/LibMec/IoTAPI/ttcn/IoTAPI_Pixits.ttcn b/ttcn/LibMec/IoTAPI/ttcn/IoTAPI_Pixits.ttcn new file mode 100644 index 0000000..9a5c93b --- /dev/null +++ b/ttcn/LibMec/IoTAPI/ttcn/IoTAPI_Pixits.ttcn @@ -0,0 +1,3 @@ +module IoTAPI_Pixits { + +} // End of IoTAPI_Pixits diff --git a/ttcn/LibMec/IoTAPI/ttcn/IoTAPI_Templates.ttcn b/ttcn/LibMec/IoTAPI/ttcn/IoTAPI_Templates.ttcn new file mode 100644 index 0000000..a27bba0 --- /dev/null +++ b/ttcn/LibMec/IoTAPI/ttcn/IoTAPI_Templates.ttcn @@ -0,0 +1,3 @@ +module IoTAPI_Templates { + +} // End of IoTAPI_Templates diff --git a/ttcn/LibMec/IotAPI/ttcn/IotAPI_TypesAndValues.ttcn b/ttcn/LibMec/IoTAPI/ttcn/IoTAPI_TypesAndValues.ttcn similarity index 91% rename from ttcn/LibMec/IotAPI/ttcn/IotAPI_TypesAndValues.ttcn rename to ttcn/LibMec/IoTAPI/ttcn/IoTAPI_TypesAndValues.ttcn index 48d34be..94f21a9 100644 --- a/ttcn/LibMec/IotAPI/ttcn/IotAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/IoTAPI/ttcn/IoTAPI_TypesAndValues.ttcn @@ -2,7 +2,7 @@ * @desc The ETSI MEC ISG MEC033 Radio Network Information API described using OpenAPI * @see https://www.etsi.org/deliver/etsi_gs/MEC/001_099/033/03.01.01_60/gs_MEC033v030101p.pdf */ -module IotAPI_TypesAndValues { +module IoTAPI_TypesAndValues { // JSON import from Json all; @@ -10,9 +10,12 @@ module IotAPI_TypesAndValues { // LibCommon import from LibCommon_BasicTypesAndValues all; + // MEC-010-1 + import from ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues all; + // MEC-011 import from EdgePlatformApplicationEnablementAPI_TypesAndValues all; - + /** * @desc Information associated to an IoT device * @member deviceAuthenticationInfo Information needed for secondary authentication of the IoT device to the data network @@ -49,7 +52,7 @@ module IotAPI_TypesAndValues { DeviceSpecificMessageFormats deviceSpecificMessageFormats optional, DownlinkInfo downlinkInfo optional, Json.String clientCertificate optional, - Json.Bool + Json.Bool enabled } // End of type DeviceInfo /** @@ -101,15 +104,15 @@ module IotAPI_TypesAndValues { * @see ETSI GS MEC 033 V3.1.1 (2022-12) Table 6.3.2-1: Definition of type MBTransportInfo */ type record MBTransportInfo { - Json.String id String, + Json.String id, Json.String name, Json.String description optional, - TransportType type_, + EdgePlatformApplicationEnablementAPI_TypesAndValues.TransportType type_, Json.String protocol, Json.String version , - EndPointInfo endpoint, - SecurityInfo security, - ImplSpecificInfo implSpecificInfo Structure (inlined) 1 Additional implementation specific details of the transport. + EdgePlatformApplicationEnablementAPI_TypesAndValues.EndPointInfo endpoint, + EdgePlatformApplicationEnablementAPI_TypesAndValues.SecurityInfo security, + ImplSpecificInfo implSpecificInfo } // End of type MBTransportInfo type record of MBTransportInfo MBTransportInfoList; @@ -129,8 +132,8 @@ module IotAPI_TypesAndValues { type record of Json.String UplinkTopics; type record of Json.String DownlinkTopics; - type record of TrafficRuleDescriptor TrafficRuleDescriptorList; - type record of TransportInfo TransportInfoList; + type record of ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.TrafficRuleDescriptor TrafficRuleDescriptorList; + type record of EdgePlatformApplicationEnablementAPI_TypesAndValues.TransportInfo TransportInfoList; /** * @desc Defines the format of the messages to be published on the user transport in order to provide application-specific information about events related to the established session between the IoT device and the end IoT application(s) @@ -147,7 +150,7 @@ module IotAPI_TypesAndValues { */ type record EventMsg { Json.String eventTopic, - SerializerType selectedSerializer SerializerType, + EdgePlatformApplicationEnablementAPI_TypesAndValues.SerializerType selectedSerializer, Json.Bool includeDeviceAddr optional, Json.Bool includeDeviceMetadata optional, Json.Bool includeSupi optional, @@ -171,7 +174,7 @@ module IotAPI_TypesAndValues { */ type record UplinkMsg { Json.String uplinkTopic, - SerializerType selectedSerializer SerializerType, + EdgePlatformApplicationEnablementAPI_TypesAndValues.SerializerType selectedSerializer, Json.Bool includeDeviceAddr optional, Json.Bool includeDeviceMetadata optional, Json.Bool includeSupi optional, @@ -182,4 +185,4 @@ module IotAPI_TypesAndValues { } with { encode "JSON" -} // End of module IotAPI_TypesAndValues \ No newline at end of file +} // End of module IoTAPI_TypesAndValues \ No newline at end of file diff --git a/ttcn/LibMec/IotAPI/module.mk b/ttcn/LibMec/IotAPI/module.mk deleted file mode 100644 index d3033e4..0000000 --- a/ttcn/LibMec/IotAPI/module.mk +++ /dev/null @@ -1,6 +0,0 @@ -sources := \ - ttcn/IotAPI_Pics.ttcn \ - ttcn/IotAPI_Pixits.ttcn \ - ttcn/IotAPI_Templates.ttcn \ - ttcn/IotAPI_TypesAndValues.ttcn \ - ../../ttcn/EdgePlatformApplicationEnablementAPI/EdgePlatformApplicationEnablementAPI_TypesAndValues.ttcn diff --git a/ttcn/patch_lib_common_titan/LibCommon_Sync.ttcn b/ttcn/patch_lib_common_titan/LibCommon_Sync.ttcn index 38e29df..7b95770 100644 --- a/ttcn/patch_lib_common_titan/LibCommon_Sync.ttcn +++ b/ttcn/patch_lib_common_titan/LibCommon_Sync.ttcn @@ -777,6 +777,7 @@ module LibCommon_Sync { // leave it to be ok to receive anything else // in case that the user has added any non-sync ports to // his/her server component type definition! + repeat; } [] tc_sync.timeout{ log("**** f_serverSyncClientsTimed: A client is not responding within specified time limit - sync server is sending stop to all clients! ****"); -- GitLab From 25f887a19dbdef1e5f707940afa296c85612f295 Mon Sep 17 00:00:00 2001 From: YannGarcia Date: Fri, 24 Feb 2023 07:45:43 +0100 Subject: [PATCH 21/99] Reorganize patch_lib_common_titan --- README.md | 4 +- titan-test-system-framework | 2 +- ttcn/LibMec/ttcn/LibMec_Pixits.ttcn | 6 +- .../module/src/Abstract_Socket.cc | 2 +- .../LibCommon_BasicTypesAndValues.ttcn | 64 +- .../LibCommon_DataStrings.ttcn | 168 ++ .../LibCommon_Sync.ttcn | 4 +- .../ttcn/LibCommon_BasicTypesAndValues.ttcn | 247 +++ .../ttcn/LibCommon_Sync.ttcn | 1359 +++++++++++++++++ .../docker-dev/home/etc/init.d/40-ttf_t012.sh | 4 +- virtualization/vagrant/provisioner.bash | 4 +- 11 files changed, 1819 insertions(+), 45 deletions(-) create mode 100644 ttcn/patch_lib_common_titan/LibCommon_DataStrings.ttcn create mode 100644 ttcn/patch_lib_common_titan/ttcn/LibCommon_BasicTypesAndValues.ttcn create mode 100644 ttcn/patch_lib_common_titan/ttcn/LibCommon_Sync.ttcn diff --git a/README.md b/README.md index 2407730..7ae085f 100644 --- a/README.md +++ b/README.md @@ -95,7 +95,7 @@ $ ln -sf module_mec.mk module.mk ```sh $ cd ../../.. $ cp ./ttcn/patch_lib_common_titan/module.mk ./ttcn/LibCommon/ -$ cp ./ttcn/patch_lib_common_titan/*.ttcn ./ttcn/LibCommon/ttcn +$ cp ./ttcn/patch_lib_common_titan/ttcn/*.ttcn ./ttcn/LibCommon/ttcn ``` - From the ETSI MEC Test System root directory, build the Docker image executing the following commands: @@ -301,7 +301,7 @@ $ ln -sf module_mec.mk module.mk ```sh $ cd /home/etsi/dev/gs032p3-ttcn-test-suite $ cp ./ttcn/patch_lib_common_titan/module.mk ./ttcn/LibCommon/ -$ cp ./ttcn/patch_lib_common_titan/*.ttcn ./ttcn/LibCommon/ +$ cp ./ttcn/patch_lib_common_titan/ttcn/*.ttcn ./ttcn/LibCommon/ttcn ``` - Update your default environment with the content of the script $HOME/dev/gs032p3-ttcn-test-suite/scripts/devenv.bash.ubuntu diff --git a/titan-test-system-framework b/titan-test-system-framework index b3e32ae..3c00b81 160000 --- a/titan-test-system-framework +++ b/titan-test-system-framework @@ -1 +1 @@ -Subproject commit b3e32ae45e559819ba3eab8ba748a03ff6fdd284 +Subproject commit 3c00b81c1e158922c83ae0c0de5288631dd1a2be diff --git a/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn b/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn index c694216..0ebeb92 100644 --- a/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn +++ b/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn @@ -68,13 +68,13 @@ module LibMec_Pixits { modulepar charstring PX_MEC_SVC_MGMT_APPS_URI := "/mec_service_mgmt/v1/applications"; - modulepar charstring PX_ME_APP_SUPPORT_TIMING_CURRENT_URI := "/mec_app_support/v1/timing/current_time"; + modulepar charstring PX_ME_APP_SUPPORT_TIMING_CURRENT_URI := "//timing/current_time"; - modulepar charstring PX_ME_APP_SUPPORT_URI := "/mec_app_support/v1/applications"; + modulepar charstring PX_ME_APP_SUPPORT_URI := "/applications"; modulepar charstring PX_MEC_SVC_MGMT_SVC_URI := "/mec_service_mgmt/v1/services"; - modulepar charstring PX_ME_APP_SUPPORT_TIMING_CAPS_URI := "/mec_app_support/v1/timing/timing_caps"; + modulepar charstring PX_ME_APP_SUPPORT_TIMING_CAPS_URI := "//timing/timing_caps"; modulepar charstring PX_FAI_FA_INFO_URI := "/fai/v1/fa_info"; diff --git a/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/src/Abstract_Socket.cc b/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/src/Abstract_Socket.cc index fcff30b..38bc8f5 100644 --- a/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/src/Abstract_Socket.cc +++ b/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/src/Abstract_Socket.cc @@ -43,7 +43,7 @@ #endif -#define AS_TCP_CHUNCK_SIZE 4096 +#define AS_TCP_CHUNCK_SIZE 4096 + 1024 #define AS_SSL_CHUNCK_SIZE 16384 // Used for the 'address already in use' bug workaround #define AS_DEADLOCK_COUNTER 16 diff --git a/ttcn/patch_lib_common_titan/LibCommon_BasicTypesAndValues.ttcn b/ttcn/patch_lib_common_titan/LibCommon_BasicTypesAndValues.ttcn index 5758c7c..9b5477d 100644 --- a/ttcn/patch_lib_common_titan/LibCommon_BasicTypesAndValues.ttcn +++ b/ttcn/patch_lib_common_titan/LibCommon_BasicTypesAndValues.ttcn @@ -172,38 +172,38 @@ const integer c_int32Max := 2147483647; type integer Int; - type integer Int1 (c_int1Min .. c_int1Max) with { variant "1 bit, COMP(2scompl)" }; - type integer Int2 (c_int2Min .. c_int2Max) with { variant "2 bit, COMP(2scompl)" }; - type integer Int3 (c_int3Min .. c_int3Max) with { variant "3 bit, COMP(2scompl)" }; - type integer Int4 (c_int4Min .. c_int4Max) with { variant "4 bit, COMP(2scompl)" }; - type integer Int5 (c_int5Min .. c_int5Max) with { variant "5 bit, COMP(2scompl)" }; - type integer Int6 (c_int6Min .. c_int6Max) with { variant "6 bit, COMP(2scompl)" }; - type integer Int7 (c_int7Min .. c_int7Max) with { variant "7 bit, COMP(2scompl)" }; - type integer Int8 (c_int8Min .. c_int8Max) with { variant "8 bit, COMP(2scompl)" }; - type integer Int9 (c_int9Min .. c_int9Max) with { variant "9 bit, COMP(2scompl)" }; - type integer Int10 (c_int10Min .. c_int10Max) with { variant "10 bit, COMP(2scompl)" }; - type integer Int11 (c_int11Min .. c_int11Max) with { variant "11 bit, COMP(2scompl)" }; - type integer Int12 (c_int12Min .. c_int12Max) with { variant "12 bit, COMP(2scompl)" }; - type integer Int13 (c_int13Min .. c_int13Max) with { variant "13 bit, COMP(2scompl)" }; - type integer Int14 (c_int14Min .. c_int14Max) with { variant "14 bit, COMP(2scompl)" }; - type integer Int15 (c_int15Min .. c_int15Max) with { variant "15 bit, COMP(2scompl)" }; - type integer Int16 (c_int16Min .. c_int16Max) with { variant "16 bit, COMP(2scompl)" }; - type integer Int17 (c_int17Min .. c_int17Max) with { variant "17 bit, COMP(2scompl)" }; - type integer Int18 (c_int18Min .. c_int18Max) with { variant "18 bit, COMP(2scompl)" }; - type integer Int19 (c_int19Min .. c_int19Max) with { variant "19 bit, COMP(2scompl)" }; - type integer Int20 (c_int20Min .. c_int20Max) with { variant "20 bit, COMP(2scompl)" }; - type integer Int21 (c_int21Min .. c_int21Max) with { variant "21 bit, COMP(2scompl)" }; - type integer Int22 (c_int22Min .. c_int22Max) with { variant "22 bit, COMP(2scompl)" }; - type integer Int23 (c_int23Min .. c_int23Max) with { variant "23 bit, COMP(2scompl)" }; - type integer Int24 (c_int24Min .. c_int24Max) with { variant "24 bit, COMP(2scompl)" }; - type integer Int25 (c_int25Min .. c_int25Max) with { variant "25 bit, COMP(2scompl)" }; - type integer Int26 (c_int26Min .. c_int26Max) with { variant "26 bit, COMP(2scompl)" }; - type integer Int27 (c_int27Min .. c_int27Max) with { variant "27 bit, COMP(2scompl)" }; - type integer Int28 (c_int28Min .. c_int28Max) with { variant "28 bit, COMP(2scompl)" }; - type integer Int29 (c_int29Min .. c_int29Max) with { variant "29 bit, COMP(2scompl)" }; - type integer Int30 (c_int30Min .. c_int30Max) with { variant "30 bit, COMP(2scompl)" }; - type integer Int31 (c_int31Min .. c_int31Max) with { variant "31 bit, COMP(2scompl)" }; - type integer Int32 (c_int32Min .. c_int32Max) with { variant "32 bit, COMP(2scompl)" }; + type integer Int1 (c_int1Min .. c_int1Max) with { variant "1 bit"}; + type integer Int2 (c_int2Min .. c_int2Max) with { variant "2 bit"}; + type integer Int3 (c_int3Min .. c_int3Max) with { variant "3 bit"}; + type integer Int4 (c_int4Min .. c_int4Max) with { variant "4 bit"}; + type integer Int5 (c_int5Min .. c_int5Max) with { variant "5 bit"}; + type integer Int6 (c_int6Min .. c_int6Max) with { variant "6 bit"}; + type integer Int7 (c_int7Min .. c_int7Max) with { variant "7 bit"}; + type integer Int8 (c_int8Min .. c_int8Max) with { variant "8 bit"}; + type integer Int9 (c_int9Min .. c_int9Max) with { variant "9 bit"}; + type integer Int10 (c_int10Min .. c_int10Max) with { variant "10 bit"}; + type integer Int11 (c_int11Min .. c_int11Max) with { variant "11 bit"}; + type integer Int12 (c_int12Min .. c_int12Max) with { variant "12 bit"}; + type integer Int13 (c_int13Min .. c_int13Max) with { variant "13 bit"}; + type integer Int14 (c_int14Min .. c_int14Max) with { variant "14 bit"}; + type integer Int15 (c_int15Min .. c_int15Max) with { variant "15 bit"}; + type integer Int16 (c_int16Min .. c_int16Max) with { variant "16 bit"}; + type integer Int17 (c_int17Min .. c_int17Max) with { variant "17 bit"}; + type integer Int18 (c_int18Min .. c_int18Max) with { variant "18 bit"}; + type integer Int19 (c_int19Min .. c_int19Max) with { variant "19 bit"}; + type integer Int20 (c_int20Min .. c_int20Max) with { variant "20 bit"}; + type integer Int21 (c_int21Min .. c_int21Max) with { variant "21 bit"}; + type integer Int22 (c_int22Min .. c_int22Max) with { variant "22 bit"}; + type integer Int23 (c_int23Min .. c_int23Max) with { variant "23 bit"}; + type integer Int24 (c_int24Min .. c_int24Max) with { variant "24 bit"}; + type integer Int25 (c_int25Min .. c_int25Max) with { variant "25 bit"}; + type integer Int26 (c_int26Min .. c_int26Max) with { variant "26 bit"}; + type integer Int27 (c_int27Min .. c_int27Max) with { variant "27 bit"}; + type integer Int28 (c_int28Min .. c_int28Max) with { variant "28 bit"}; + type integer Int29 (c_int29Min .. c_int29Max) with { variant "29 bit"}; + type integer Int30 (c_int30Min .. c_int30Max) with { variant "30 bit"}; + type integer Int31 (c_int31Min .. c_int31Max) with { variant "31 bit"}; + type integer Int32 (c_int32Min .. c_int32Max) with { variant "32 bit"}; } // end group signedIntegerDefintions diff --git a/ttcn/patch_lib_common_titan/LibCommon_DataStrings.ttcn b/ttcn/patch_lib_common_titan/LibCommon_DataStrings.ttcn new file mode 100644 index 0000000..9bfbe61 --- /dev/null +++ b/ttcn/patch_lib_common_titan/LibCommon_DataStrings.ttcn @@ -0,0 +1,168 @@ +/** + * + * @author ETSI + * @version $URL$ + * $Id$ + * @desc A collection of data string type and value definitions which + * may be useful in the implementation of any TTCN-3 test + * suite. "Data string" refers to TTCN-3 hexstring, octetstring + * and bitstring types. + * @remark End users should be aware that any changes made to the in + * definitions this module may be overwritten in future releases. + * End users are encouraged to contact the distributers of this + * module regarding their modifications or additions so that future + * updates will include your changes. + * @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 LibCommon_DataStrings { + + /** + * @remark Number in name indicates string length in number of + * _bits_ + */ + group bitStringSubTypes { + + type bitstring Bit1 length(1) with {encode "length(1)"}; + type bitstring Bit2 length(2) with {encode "length(2)"}; + type bitstring Bit3 length(3) with {encode "length(3)"}; + type bitstring Bit4 length(4) with {encode "length(4)"}; + type bitstring Bit5 length(5) with {encode "length(5)"}; + type bitstring Bit6 length(6) with {encode "length(6)"}; + type bitstring Bit7 length(7) with {encode "length(7)"}; + type bitstring Bit8 length(8) with {encode "length(8)"}; + type bitstring Bit9 length(9) with {encode "length(9)"}; + type bitstring Bit10 length(10) with {encode "length(10)"}; + type bitstring Bit11 length(11) with {encode "length(11)"}; + type bitstring Bit12 length(12) with {encode "length(12)"}; + type bitstring Bit13 length(13) with {encode "length(13)"}; + type bitstring Bit14 length(14) with {encode "length(14)"}; + type bitstring Bit15 length(15) with {encode "length(15)"}; + type bitstring Bit16 length(16) with {encode "length(16)"}; + type bitstring Bit17 length(17) with {encode "length(17)"}; + type bitstring Bit18 length(18) with {encode "length(18)"}; + type bitstring Bit19 length(19) with {encode "length(19)"}; + type bitstring Bit20 length(20) with {encode "length(20)"}; + type bitstring Bit21 length(21) with {encode "length(21)"}; + type bitstring Bit22 length(22) with {encode "length(22)"}; + type bitstring Bit23 length(23) with {encode "length(23)"}; + type bitstring Bit24 length(24) with {encode "length(24)"}; + type bitstring Bit25 length(25) with {encode "length(25)"}; + type bitstring Bit26 length(26) with {encode "length(26)"}; + type bitstring Bit27 length(27) with {encode "length(27)"}; + type bitstring Bit28 length(28) with {encode "length(28)"}; + type bitstring Bit29 length(29) with {encode "length(29)"}; + type bitstring Bit30 length(30) with {encode "length(30)"}; + type bitstring Bit31 length(31) with {encode "length(31)"}; + type bitstring Bit32 length(32) with {encode "length(32)"}; + type bitstring Bit40 length(40) with {encode "length(40)"}; + + type bitstring Bit48 length(48) with {encode "length(48)"}; + type bitstring Bit64 length(64) with {encode "length(64)"}; + type bitstring Bit72 length(72) with {encode "length(72)"}; + type bitstring Bit128 length(128) with {encode "length(128)"}; + type bitstring Bit144 length(144) with {encode "length(144)"}; + type bitstring Bit256 length(256) with {encode "length(256)"}; + + } // end group bitStringSubTypes + + group zeroedBits { + + const Bit1 c_1ZeroBit := int2bit(0,1); + const Bit2 c_2ZeroBits := int2bit(0,2); + const Bit4 c_4ZeroBits := int2bit(0,4); + const Bit5 c_5ZeroBits := int2bit(0,5); + const Bit6 c_6ZeroBits := int2bit(0,6); + const Bit8 c_8ZeroBits := int2bit(0,8); + const Bit14 c_14ZeroBits := int2bit(0,14); + const Bit64 c_64ZeroBits := int2bit(0,64); + + }//end group zeroedBits + + /** + * @remark Number in name indicates string length in number of + * _octets_ + */ + group octetStringSubTypes { + + type octetstring Oct1 length(1) with {encode "length(1)"}; + type octetstring Oct2 length(2) with {encode "length(2)"}; + type octetstring Oct3 length(3) with {encode "length(3)"}; + type octetstring Oct4 length(4) with {encode "length(4)"}; + type octetstring Oct5 length(5) with {encode "length(5)"}; + type octetstring Oct6 length(6) with {encode "length(6)"}; + type octetstring Oct7 length(7) with {encode "length(7)"}; + type octetstring Oct8 length(8) with {encode "length(8)"}; + type octetstring Oct9 length(9) with {encode "length(9)"}; + type octetstring Oct10 length(10) with {encode "length(10)"}; + type octetstring Oct11 length(11) with {encode "length(11)"}; + type octetstring Oct12 length(12) with {encode "length(12)"}; + type octetstring Oct13 length(13) with {encode "length(13)"}; + type octetstring Oct14 length(14) with {encode "length(14)"}; + type octetstring Oct15 length(15) with {encode "length(15)"}; + type octetstring Oct16 length(16) with {encode "length(16)"}; + + type octetstring Oct20 length(20) with {encode "length(20)"}; + type octetstring Oct32 length(32) with {encode "length(32)"}; + type octetstring Oct48 length(48) with {encode "length(48)"}; + type octetstring Oct64 length(64) with {encode "length(64)"}; + type octetstring Oct80 length(80) with {encode "length(80)"}; + type octetstring Oct96 length(96) with {encode "length(96)"}; + type octetstring Oct128 length(128) with {encode "length(128)"}; + type octetstring Oct160 length(160) with {encode "length(160)"}; + type octetstring Oct320 length(320) with {encode "length(320)"}; + type octetstring Oct640 length(640) with {encode "length(640)"}; + type octetstring Oct1280 length(1280) with {encode "length(1280)"}; + type octetstring Oct1380 length(1380) with {encode "length(1380)"}; + + type octetstring Oct0to3 length(0..3) with {encode "length(0..3)"}; + type octetstring Oct0to8 length(0..16) with {encode "length(0..8)"}; + type octetstring Oct0to12 length(0..12) with {encode "length(0..12)"}; + type octetstring Oct0to16 length(0..16) with {encode "length(0..16)"}; + type octetstring Oct0to31 length(0..31) with {encode "length(0..31)"}; + type octetstring Oct0to20 length(0..20) with {encode "length(0..20)"}; + type octetstring Oct0to30 length(0..20) with {encode "length(0..30)"}; + type octetstring Oct0to127 length(0..127) with {encode "length(0..127)"}; + type octetstring Oct0to255 length(0..255) with {encode "length(0..255)"}; + + type octetstring Oct1to15 length(1..15) with {encode "length(1..15)"}; + type octetstring Oct1to31 length(1..31) with {encode "length(1..31)"}; + type octetstring Oct1to128 length(1..128) with {encode "length(1..128)"}; + type octetstring Oct1to254 length(1..254) with {encode "length(1..254)"}; + type octetstring Oct1to255 length(1..255) with {encode "length(1..255)"}; + + type octetstring Oct4to16 length(4..16) with {encode "length(4..16)"}; + type octetstring Oct6to15 length(6..15) with {encode "length(6..15)"}; + + } // end group octetStringSubTypes + + group zeroedBytes { + const Oct1 c_1ZeroByte := int2oct(0,1); + const Oct2 c_2ZeroBytes := int2oct(0,2); + const Oct4 c_4ZeroBytes := int2oct(0,4); + const Oct6 c_6ZeroBytes := int2oct(0,6); + const Oct8 c_8ZeroBytes := int2oct(0,8); + const Oct9 c_9ZeroBytes := int2oct(0,9); + const Oct12 c_12ZeroBytes := int2oct(0,12); + const Oct16 c_16ZeroBytes := int2oct(0,16); + const Oct20 c_20ZeroBytes := int2oct(0,20); + + const Oct80 c_80ZeroBytes := int2oct(0,80); + const Oct160 c_160ZeroBytes := int2oct(0,160); + const Oct320 c_320ZeroBytes := int2oct(0,320); + const Oct640 c_640ZeroBytes := int2oct(0,640); + const Oct1280 c_1280ZeroBytes := int2oct(0,1280); + const Oct1380 c_1380ZeroBytes := int2oct(0,1380); + const octetstring c_256ZeroBytes := int2oct(0,256); + const octetstring c_1KZeroBytes := int2oct(0,1024); + const octetstring c_4KZeroBytes := int2oct(0,4096); + const octetstring c_16KZeroBytes := int2oct(0,16384); + const octetstring c_64KZeroBytes := int2oct(0,65536); + const octetstring c_128KZeroBytes := int2oct(0,131072); + + }//end group zeroedBytes + +} // end module LibCommon_DataStrings diff --git a/ttcn/patch_lib_common_titan/LibCommon_Sync.ttcn b/ttcn/patch_lib_common_titan/LibCommon_Sync.ttcn index 7b95770..5b2ae66 100644 --- a/ttcn/patch_lib_common_titan/LibCommon_Sync.ttcn +++ b/ttcn/patch_lib_common_titan/LibCommon_Sync.ttcn @@ -1,7 +1,7 @@ /** * @author ETSI - * @version $URL: https://oldforge.etsi.org/svn/LibCommon/tags/v1.4.0/ttcn/LibCommon_Sync.ttcn $ - * $Id: LibCommon_Sync.ttcn 66 2017-03-06 09:59:41Z filatov $ + * @version $URL$ + * $Id$ * @desc This module implements _one_ generic synchronization mechanism * for TTCN-3 test cases with one or more test components. * Key concept is here that one test component acts as a diff --git a/ttcn/patch_lib_common_titan/ttcn/LibCommon_BasicTypesAndValues.ttcn b/ttcn/patch_lib_common_titan/ttcn/LibCommon_BasicTypesAndValues.ttcn new file mode 100644 index 0000000..5758c7c --- /dev/null +++ b/ttcn/patch_lib_common_titan/ttcn/LibCommon_BasicTypesAndValues.ttcn @@ -0,0 +1,247 @@ +/** + * @author ETSI + * @version $URL$ + * $Id$ + * @desc A collection of basic type and value definitions which may be + * useful in the implementation of any TTCN-3 test suite.

      + * @remark End users should be aware that any changes made to the in + * definitions this module may be overwritten in future releases. + * End users are encouraged to contact the distributers of this + * module regarding their modifications or additions so that future + * updates will include your changes. + * @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 LibCommon_BasicTypesAndValues { + + /** + * @remark Number in subtype name always indicates encoding length + * in _bits_ + */ + group unsignedIntegerDefintions { + + const integer c_uInt1Max := 1; + const integer c_uInt2Max := 3; + const integer c_uInt3Max := 7; + const integer c_uInt4Max := 15; + const integer c_uInt5Max := 31; + const integer c_uInt6Max := 63; + const integer c_uInt7Max := 127; + const integer c_uInt8Max := 255; + const integer c_uInt9Max := 511; + const integer c_uInt10Max := 1023; + const integer c_uInt11Max := 2047; + const integer c_uInt12Max := 4095; + const integer c_uInt13Max := 8191; + const integer c_uInt14Max := 16383; + const integer c_uInt15Max := 32767; + const integer c_uInt16Max := 65535; + const integer c_uInt17Max := 131071; + const integer c_uInt18Max := 262143; + const integer c_uInt19Max := 524287; + const integer c_uInt20Max := 1048575; + const integer c_uInt21Max := 2097151; + const integer c_uInt22Max := 4194303; + const integer c_uInt23Max := 8388607; + const integer c_uInt24Max := 16777215; + const integer c_uInt25Max := 33554431; + const integer c_uInt26Max := 67108863; + const integer c_uInt27Max := 134217727; + const integer c_uInt28Max := 268435456; + const integer c_uInt29Max := 536870911; + const integer c_uInt30Max := 1073741823; + const integer c_uInt31Max := 2147483647; + const integer c_uInt32Max := 4294967295; + const integer c_uInt36Max := 68719476735; + const integer c_uInt48Max := 281474976710655; + const integer c_uInt52Max := 4503599627370495; + const integer c_uInt64Max := 18446744073709551615; + + type integer UInt (0 .. infinity); + type integer UInt1 (0 .. c_uInt1Max) with {variant "unsigned 1 bit"}; + type integer UInt2 (0 .. c_uInt2Max) with {variant "unsigned 2 bit"}; + type integer UInt3 (0 .. c_uInt3Max) with {variant "unsigned 3 bit"}; + type integer UInt4 (0 .. c_uInt4Max) with {variant "unsigned 4 bit"}; + type integer UInt5 (0 .. c_uInt5Max) with {variant "unsigned 5 bit"}; + type integer UInt6 (0 .. c_uInt6Max) with {variant "unsigned 6 bit"}; + type integer UInt7 (0 .. c_uInt7Max) with {variant "unsigned 7 bit"}; + type integer UInt8 (0 .. c_uInt8Max) with {variant "unsigned 8 bit"}; + type integer UInt9 (0 .. c_uInt9Max) with {variant "unsigned 9 bit"}; + type integer UInt10 (0 .. c_uInt10Max) with {variant "unsigned 10 bit"}; + type integer UInt11 (0 .. c_uInt11Max) with {variant "unsigned 11 bit"}; + type integer UInt12 (0 .. c_uInt12Max) with {variant "unsigned 12 bit"}; + type integer UInt13 (0 .. c_uInt13Max) with {variant "unsigned 13 bit"}; + type integer UInt14 (0 .. c_uInt14Max) with {variant "unsigned 14 bit"}; + type integer UInt15 (0 .. c_uInt15Max) with {variant "unsigned 15 bit"}; + type integer UInt16 (0 .. c_uInt16Max) with {variant "unsigned 16 bit"}; + type integer UInt17 (0 .. c_uInt17Max) with {variant "unsigned 17 bit"}; + type integer UInt18 (0 .. c_uInt18Max) with {variant "unsigned 18 bit"}; + type integer UInt19 (0 .. c_uInt19Max) with {variant "unsigned 19 bit"}; + type integer UInt20 (0 .. c_uInt20Max) with {variant "unsigned 20 bit"}; + type integer UInt21 (0 .. c_uInt21Max) with {variant "unsigned 21 bit"}; + type integer UInt22 (0 .. c_uInt22Max) with {variant "unsigned 22 bit"}; + type integer UInt23 (0 .. c_uInt23Max) with {variant "unsigned 23 bit"}; + type integer UInt24 (0 .. c_uInt24Max) with {variant "unsigned 24 bit"}; + type integer UInt25 (0 .. c_uInt25Max) with {variant "unsigned 25 bit"}; + type integer UInt26 (0 .. c_uInt26Max) with {variant "unsigned 26 bit"}; + type integer UInt27 (0 .. c_uInt27Max) with {variant "unsigned 27 bit"}; + type integer UInt28 (0 .. c_uInt28Max) with {variant "unsigned 28 bit"}; + type integer UInt29 (0 .. c_uInt29Max) with {variant "unsigned 29 bit"}; + type integer UInt30 (0 .. c_uInt30Max) with {variant "unsigned 30 bit"}; + type integer UInt31 (0 .. c_uInt31Max) with {variant "unsigned 31 bit"}; + type integer UInt32 (0 .. c_uInt32Max) with {variant "unsigned 32 bit"}; + type integer UInt36 (0 .. c_uInt36Max) with {variant "unsigned 36 bit"}; + type integer UInt48 (0 .. c_uInt48Max) with {variant "unsigned 48 bit"}; + type integer UInt52 (0 .. c_uInt52Max) with {variant "unsigned 52 bit"}; + type integer UInt64 (0 .. c_uInt64Max) with {variant "unsigned 64 bit"}; + + } // end group unsignedIntegerDefintions + + /** + * @remark Number in subtype name always indicates encoding length + * in _bits_ + */ + group signedIntegerDefintions { + + const integer c_int1Min := -1; + const integer c_int1Max := 0; + const integer c_int2Min := -2; + const integer c_int2Max := 1; + const integer c_int3Min := -4; + const integer c_int3Max := 3; + const integer c_int4Min := -8; + const integer c_int4Max := 7; + const integer c_int5Min := -16; + const integer c_int5Max := 15; + const integer c_int6Min := -32; + const integer c_int6Max := 31; + const integer c_int7Min := -64; + const integer c_int7Max := 63; + const integer c_int8Min := -128; + const integer c_int8Max := 127; + const integer c_int9Min := -256; + const integer c_int9Max := 255; + const integer c_int10Min := -512; + const integer c_int10Max := 511; + const integer c_int11Min := -1024; + const integer c_int11Max := 1023; + const integer c_int12Min := -2048; + const integer c_int12Max := 2047; + const integer c_int13Min := -4096; + const integer c_int13Max := 4095; + const integer c_int14Min := -8192; + const integer c_int14Max := 8191; + const integer c_int15Min := -16384; + const integer c_int15Max := 16383; + const integer c_int16Min := -32768; + const integer c_int16Max := 32767; + const integer c_int17Min := -65536; + const integer c_int17Max := 65535; + const integer c_int18Min := -131072; + const integer c_int18Max := 131071; + const integer c_int19Min := -262144; + const integer c_int19Max := 262143; + const integer c_int20Min := -524288; + const integer c_int20Max := 524287; + const integer c_int21Min := -1048576; + const integer c_int21Max := 1048575; + const integer c_int22Min := -2097152; + const integer c_int22Max := 2097151; + const integer c_int23Min := -4194304; + const integer c_int23Max := 4194303; + const integer c_int24Min := -8388608; + const integer c_int24Max := 8388607; + const integer c_int25Min := -16777216; + const integer c_int25Max := 16777215; + const integer c_int26Min := -33554432; + const integer c_int26Max := 33554431; + const integer c_int27Min := -67108864; + const integer c_int27Max := 67108863; + const integer c_int28Min := -134217728; + const integer c_int28Max := 134217727; + const integer c_int29Min := -268435456; + const integer c_int29Max := 268435456; + const integer c_int30Min := -536870912; + const integer c_int30Max := 536870911; + const integer c_int31Min := -1073741824; + const integer c_int31Max := 1073741823; + const integer c_int32Min := -2147483648; + const integer c_int32Max := 2147483647; + + type integer Int; + type integer Int1 (c_int1Min .. c_int1Max) with { variant "1 bit, COMP(2scompl)" }; + type integer Int2 (c_int2Min .. c_int2Max) with { variant "2 bit, COMP(2scompl)" }; + type integer Int3 (c_int3Min .. c_int3Max) with { variant "3 bit, COMP(2scompl)" }; + type integer Int4 (c_int4Min .. c_int4Max) with { variant "4 bit, COMP(2scompl)" }; + type integer Int5 (c_int5Min .. c_int5Max) with { variant "5 bit, COMP(2scompl)" }; + type integer Int6 (c_int6Min .. c_int6Max) with { variant "6 bit, COMP(2scompl)" }; + type integer Int7 (c_int7Min .. c_int7Max) with { variant "7 bit, COMP(2scompl)" }; + type integer Int8 (c_int8Min .. c_int8Max) with { variant "8 bit, COMP(2scompl)" }; + type integer Int9 (c_int9Min .. c_int9Max) with { variant "9 bit, COMP(2scompl)" }; + type integer Int10 (c_int10Min .. c_int10Max) with { variant "10 bit, COMP(2scompl)" }; + type integer Int11 (c_int11Min .. c_int11Max) with { variant "11 bit, COMP(2scompl)" }; + type integer Int12 (c_int12Min .. c_int12Max) with { variant "12 bit, COMP(2scompl)" }; + type integer Int13 (c_int13Min .. c_int13Max) with { variant "13 bit, COMP(2scompl)" }; + type integer Int14 (c_int14Min .. c_int14Max) with { variant "14 bit, COMP(2scompl)" }; + type integer Int15 (c_int15Min .. c_int15Max) with { variant "15 bit, COMP(2scompl)" }; + type integer Int16 (c_int16Min .. c_int16Max) with { variant "16 bit, COMP(2scompl)" }; + type integer Int17 (c_int17Min .. c_int17Max) with { variant "17 bit, COMP(2scompl)" }; + type integer Int18 (c_int18Min .. c_int18Max) with { variant "18 bit, COMP(2scompl)" }; + type integer Int19 (c_int19Min .. c_int19Max) with { variant "19 bit, COMP(2scompl)" }; + type integer Int20 (c_int20Min .. c_int20Max) with { variant "20 bit, COMP(2scompl)" }; + type integer Int21 (c_int21Min .. c_int21Max) with { variant "21 bit, COMP(2scompl)" }; + type integer Int22 (c_int22Min .. c_int22Max) with { variant "22 bit, COMP(2scompl)" }; + type integer Int23 (c_int23Min .. c_int23Max) with { variant "23 bit, COMP(2scompl)" }; + type integer Int24 (c_int24Min .. c_int24Max) with { variant "24 bit, COMP(2scompl)" }; + type integer Int25 (c_int25Min .. c_int25Max) with { variant "25 bit, COMP(2scompl)" }; + type integer Int26 (c_int26Min .. c_int26Max) with { variant "26 bit, COMP(2scompl)" }; + type integer Int27 (c_int27Min .. c_int27Max) with { variant "27 bit, COMP(2scompl)" }; + type integer Int28 (c_int28Min .. c_int28Max) with { variant "28 bit, COMP(2scompl)" }; + type integer Int29 (c_int29Min .. c_int29Max) with { variant "29 bit, COMP(2scompl)" }; + type integer Int30 (c_int30Min .. c_int30Max) with { variant "30 bit, COMP(2scompl)" }; + type integer Int31 (c_int31Min .. c_int31Max) with { variant "31 bit, COMP(2scompl)" }; + type integer Int32 (c_int32Min .. c_int32Max) with { variant "32 bit, COMP(2scompl)" }; + + } // end group signedIntegerDefintions + + group zeroedIntegers { + + const UInt1 c_uInt1Zero := 0; + const UInt2 c_uInt2Zero := 0; + const UInt3 c_uInt3Zero := 0; + const UInt4 c_uInt4Zero := 0; + const UInt5 c_uInt5Zero := 0; + const UInt6 c_uInt6Zero := 0; + const UInt7 c_uInt7Zero := 0; + const UInt8 c_uInt8Zero := 0; + const UInt10 c_uInt10Zero := 0; + const UInt12 c_uInt12Zero := 0; + const UInt14 c_uInt14Zero := 0; + const UInt16 c_uInt16Zero := 0; + const UInt24 c_uInt24Zero := 0; + const UInt32 c_uInt32Zero := 0; + const UInt48 c_uInt48Zero := 0; + + }//end group zeroedInt + + /** + * @remark Number in subtype name always indicates encoding length + * in _bits_ + */ + group booleanDefintions { + + type boolean Bool1 with { variant "1 bit" }; + type boolean Bool2 with { variant "2 bit" }; + type boolean Bool3 with { variant "3 bit" }; + type boolean Bool4 with { variant "4 bit" }; + type boolean Bool5 with { variant "5 bit" }; + type boolean Bool6 with { variant "6 bit" }; + type boolean Bool7 with { variant "7 bit" }; + type boolean Bool8 with { variant "8 bit" }; + + } // end group booleanDefintions + +} // end module LibCommon_BasicTypesAndValues diff --git a/ttcn/patch_lib_common_titan/ttcn/LibCommon_Sync.ttcn b/ttcn/patch_lib_common_titan/ttcn/LibCommon_Sync.ttcn new file mode 100644 index 0000000..7b95770 --- /dev/null +++ b/ttcn/patch_lib_common_titan/ttcn/LibCommon_Sync.ttcn @@ -0,0 +1,1359 @@ +/** + * @author ETSI + * @version $URL: https://oldforge.etsi.org/svn/LibCommon/tags/v1.4.0/ttcn/LibCommon_Sync.ttcn $ + * $Id: LibCommon_Sync.ttcn 66 2017-03-06 09:59:41Z filatov $ + * @desc This module implements _one_ generic synchronization mechanism + * for TTCN-3 test cases with one or more test components. + * Key concept is here that one test component acts as a + * synchronization server which listens and triggers one or more + * synchronization clients. It is recomended to use the MTC always as + * the synchronization server but in theory also a PTC can act as such + * a server.

      + * This synchronization is used by calling a function on + * the server test component to wait for a desired amount of clients + * to notify the server that they have reached a specific synchronization + * point. Each client test component must call another + * function to perform this notification.

      + * In the event that a client is not able to reach a synchronization + * point the server sends out a signal to all clients to abort the + * test case. This signal is a STOP message which can be caught by + * a test component default which in turn can then run a proper + * shut down behavior based on the current state of the test + * component.

      + * Note that this synchronization mechanism can also be used + * in a special mode called "self synchronization" when a test case + * only has one test component. Here, the test component in essence + * acts as a server and client at the same time. The main benefit of + * using self synchoronization is that the same shutdown mechanisms + * can also be reused fomr the multi component test cases.

      + * This module contains a lot of TTCN-3 definitions. It has been + * structured into tree main groups to help the user to identify + * quickly relevant TTCN-3 definitions. For rookie users of this + * module basicUserRelevantDefinitions should offer all the needed + * definitions. Advanced users can consider use of definitions in + * advancedUserRelevantDefinitions. Finally, internalDefinitions + * are definitions which are required for the module to work + * properly but do not need to be used in your code. Remember that + * the main motiviation of this sychronization module is to offer + * are _simple_ user interface. Practice has shown that when writing + * actual test component behavior _only a handful_ of functions + * usually wind up being used! Also check the synchronization examples + * module for example uses of this synchronization mechanism.

      + * The invocation of the sync functions is also closely tied + * to the verdict control functions which should also be reviewed + * prior to using this module.

      + * This module has been derived from EtsiCommon_Synchronization + * which was created in ETSIs STF256/276. It has been kept + * intentionally separate to avoid conflicts with future ETSI + * test suite releases. + * @see LibCommon_Sync.basicUserRelevantDefinitions + * @see LibCommon_Sync.advancedUserRelevantDefinitions + * @remark End users should be aware that any changes made to the in + * definitions this module may be overwritten in future releases. + * End users are encouraged to contact the distributers of this + * module regarding their modifications or additions so that future + * updates will include your changes. + * @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 LibCommon_Sync { + + //Common + import from LibCommon_BasicTypesAndValues { type UInt } ; + import from LibCommon_AbstractData all; + import from LibCommon_VerdictControl all; + + group basicUserRelevantDefinitions { + + group importantSyncTypeDefinitions { + + group compTypeRelated { + + /** + * @desc This type is used to be the base of any synchronization + * behavior which is to be executed on a sync server + * component. The test component which acts as a + * sync server in a test case must NOT directly use + * this component type in its runs on clause! + * Note that server synchronization functions may be + * invoked by a test component as long as its + * component type is type compatible to this component + * type definition! + */ + type component BaseSyncComp { + port SyncPort syncPort; + timer tc_sync := PX_TSYNC_TIME_LIMIT; + } + + /** + * @desc This type is used to define any synchronization + * behavior which is to be executed on a sync server + * component. The test component which acts as a + * sync server in a test case may - but does + * not have to - directly use this component type its + * runs on clause. + * Note that server synchronization functions may be + * invoked by a test component as long as its + * component type is type compatible to this component + * type definition! + */ + type component ServerSyncComp extends BaseSyncComp { + timer tc_shutDown := PX_TSHUT_DOWN_TIME_LIMIT; + } + + /** + * @desc This type is used to define any synchronization + * behavior which is to be executed on a sync client + * component. The test component(s) which act as a + * sync client in a test case may - but do not have + * to - directly use this component type their runs + * on clause. + * Note that server synchronization functions may be + * invoked by a test component as long as its + * component type is type compatible to this component + * type definition! + */ + type component ClientSyncComp extends BaseSyncComp { + var StringStack v_stateStack:= c_initStringStack; + var TestcaseStep vc_testcaseStep := e_preamble; + } + + /** + * @desc This type is used to define any synchronization + * behavior which is relevant to non-concurrent test + * cases. + * Note that self synchronization functions may be + * invoked by a test component as long as its + * component type is type compatible to this component + * type definition! + * Note also that this type is type compatible to the + * ClientSyncComp type so that shutdown altsteps from + * concurrent test cases can also be reused in single + * component test cases! + * @see LibCommon_Sync.ClientSyncComp + */ + type component SelfSyncComp extends ClientSyncComp { + port SyncPort syncSendPort; + } + + /** + * @desc This port type must be imported into test suites + * when defining test component types which are + * type compatible to a synchronization component + * type + * @see LibCommon_Sync.SelfSyncComp + * @see LibCommon_Sync.ServerSyncComp + * @see LibCommon_Sync.ClientSyncComp + */ + type port SyncPort message { + inout SyncCmd + } with { + extension "internal" + } + + + /** + * @desc Describes in which step of execution is the testcase + */ + type enumerated TestcaseStep { + e_preamble, + e_testBody, + e_postamble + } + + } // end compTypeRelated + + group standardSyncPointNames { + const charstring c_prDone := "preambleDone"; + const charstring c_poDone := "postambleDone"; + const charstring c_tbDone := "testBodyDone"; + const charstring c_initDone := "initDone"; + } + + } // end group importantSyncTypeDefinitions + + group syncCompTestConfiguration { + + /** + * @desc Calls self connect function if invoking + * component is the MTC or otherwise connects the client + * the server. This function allows to implement preambles + * in a way that they can be used by test components + * in both non-concurrent as well as concurrent test + * cases! + * @remark This function should _not_ be called if the MTC + * acts as a client (and not a server) in a concurrent + * test case. In this case f_connect4ClientSync + * should be used instead. + * @see LibCommon_Sync.f_connect4SelfSync + * @see LibCommon_Sync.f_connect4ClientSync + */ + function f_connect4SelfOrClientSync() + runs on SelfSyncComp { + if ( self == mtc ) { + f_connect4SelfSync(); + } else { + f_connect4ClientSync(); + } + } + + /** + * @desc Calls self connect function if the invoking + * component is the MTC or otherwise disconnects the client + * from the server. This function allows to implement + * postambles in a way that they can be used in both + * non-concurrent as well as concurrent test cases. + * @remark This function should _not_ be called if the MTC + * acts as a client (and not a server) in a concurrent + * test case. In this case f_disconnect4ClientSync + * should be used instead. + * @see LibCommon_Sync.f_disconnect4SelfSync + * @see LibCommon_Sync.f_disconnect4ClientSync + */ + function f_disconnect4SelfOrClientSync() + runs on SelfSyncComp { + if ( self == mtc ) { + f_disconnect4SelfSync(); + } else { + f_disconnect4ClientSync(); + } + } + + } // end group syncCompTestConfiguration + + group syncFunctions { + + /** + * @desc Implements synchronization of 2 clients from server side + * on one or more synchronization points. + * If problem occurs, then server sends STOP to all clients. + * Waits for PX_TSYNC_TIME_LIMIT to let clients + * finish executing their behavior until this + * synchronization point. After passing all synchronization + * points successfuly the server waits for all clients + * to stop. + * See f_serverSyncClientsTimed for overwriting this + * the timing constraint! + * This function sets the server component verdict. + * @remark The use of this function requires prior connection of + * the server sync ports! + * @see LibCommon_Sync.f_connect4SelfOrClientSync + * @see LibCommon_Sync.PX_TSYNC_TIME_LIMIT + * @see LibCommon_Sync.f_serverSyncClientsTimed + * @see LibCommon_Sync.f_serverWaitForAllClientsToStop + * @param p_syncPointIds list of synchronization point name/ids + */ + function f_serverSync2ClientsAndStop( in SyncPointList p_syncPointIds ) + runs on ServerSyncComp { + f_serverSyncNClientsAndStop(2, p_syncPointIds); + } + + /** + * @desc Implements synchronization of 3 clients from server side + * on one or more synchronization points. + * If problem occurs, then server sends STOP to all clients. + * Waits for PX_TSYNC_TIME_LIMIT to let clients + * finish executing their behavior until this + * synchronization point. After passing all synchronization + * points successfuly the server waits for all clients + * to stop. + * See f_serverSyncClientsTimed for overwriting this + * the timing constraint! + * This function sets the server component verdict. + * @remark The use of this function requires prior connection of + * the server sync ports! + * @see LibCommon_Sync.f_connect4SelfOrClientSync + * @see LibCommon_Sync.PX_TSYNC_TIME_LIMIT + * @see LibCommon_Sync.f_serverSyncClientsTimed + * @see LibCommon_Sync.f_serverWaitForAllClientsToStop + * @param p_syncPointIds list of synchronization point name/ids + */ + function f_serverSync3ClientsAndStop( in SyncPointList p_syncPointIds ) + runs on ServerSyncComp { + f_serverSyncNClientsAndStop(3, p_syncPointIds); + } + + /** + * @desc Implements synchronization of 4 clients from server side + * on one or more synchronization points. + * If problem occurs, then server sends STOP to all clients. + * Waits for PX_TSYNC_TIME_LIMIT to let clients + * finish executing their behavior until this + * synchronization point. After passing all synchronization + * points successfuly the server waits for all clients + * to stop. + * See f_serverSyncClientsTimed for overwriting this + * the timing constraint! + * This function sets the server component verdict. + * @remark The use of this function requires prior connection of + * the server sync ports! + * @see LibCommon_Sync.f_connect4SelfOrClientSync + * @see LibCommon_Sync.PX_TSYNC_TIME_LIMIT + * @see LibCommon_Sync.f_serverSyncClientsTimed + * @see LibCommon_Sync.f_serverWaitForAllClientsToStop + * @param p_syncPointIds list of synchronization point name/ids + */ + function f_serverSync4ClientsAndStop( in SyncPointList p_syncPointIds ) + runs on ServerSyncComp { + f_serverSyncNClientsAndStop(4, p_syncPointIds); + } + + /** + * @desc Implements synchronization of N clients from server side + * on one or more synchronization points. + * If problem occurs, then server sends STOP to all clients. + * Waits for PX_TSYNC_TIME_LIMIT to let clients + * finish executing their behavior until this + * synchronization point. After passing all synchronization + * points successfuly the server waits for all clients + * to stop. + * See f_serverSyncClientsTimed for overwriting this + * the timing constraint! + * This function sets the server component verdict. + * @remark The use of this function requires prior connection of + * the server sync ports! + * @see LibCommon_Sync.f_connect4SelfOrClientSync + * @see LibCommon_Sync.PX_TSYNC_TIME_LIMIT + * @see LibCommon_Sync.f_serverSyncClientsTimed + * @see LibCommon_Sync.f_serverWaitForAllClientsToStop + * @param p_numClients number of synchronization clients + * @param p_syncPointIds list of synchronization point name/ids + */ + function f_serverSyncNClientsAndStop ( + in UInt p_numClients, + in SyncPointList p_syncPointIds ) + runs on ServerSyncComp { + var integer i, v_noOfSyncIds := sizeof(p_syncPointIds); + for ( i := 0; i < v_noOfSyncIds; i := i+1 ) { + f_serverSyncClientsTimed ( + p_numClients, + valueof(p_syncPointIds[i]), + PX_TSYNC_TIME_LIMIT ); + } + f_serverWaitForAllClientsToStop(); + } + + /** + * @desc Implements synchronization of 2 clients and 1 UT from server side + * on one or more synchronization points. + * If problem occurs, then server sends STOP to all clients. + * Waits for PX_TSYNC_TIME_LIMIT to let clients + * finish executing their behavior until this + * synchronization point. After passing all synchronization + * points successfuly the server waits for all clients + * to stop. + * See f_serverSyncClientsTimed for overwriting this + * the timing constraint! + * This function sets the server component verdict. + * @remark The use of this function requires prior connection of + * the server sync ports! + * @see LibCommon_Sync.f_connect4SelfOrClientSync + * @see LibCommon_Sync.PX_TSYNC_TIME_LIMIT + * @see LibCommon_Sync.f_serverSyncClientsTimed + * @see LibCommon_Sync.f_serverWaitForAllClientsToStop + * @param p_syncPointIds list of synchronization point name/ids + */ + function f_serverSync2ClientsUtAndStop( in SyncPointList p_syncPointIds ) + runs on ServerSyncComp { + var integer i, v_noOfSyncIds := sizeof(p_syncPointIds); + for ( i := 0; i < v_noOfSyncIds; i := i+1 ) { + f_serverSyncClientsTimed(3,valueof(p_syncPointIds[i]), PX_TSYNC_TIME_LIMIT); + } + f_serverWaitForAllClientsToStop(); + } + + /** + * @desc Calls either self synchronization function if + * invoking component is the MTC, otherwise + * calls client synchronization. After that it + * sets the verdict based on the specified return code. + * This function allows to implement TTCN-3 functions + * in a way that they can be used in both non-concurrent + * as well as concurrent test cases. + * @remark This function should _not_ be called if the MTC + * acts as a client (and not a server) in a concurrent + * test case. In this case f_clientSyncAndVerdict + * should be used instead. + * @param p_syncPoint Synchronization point name/id + * @param p_ret Current behavior execution status + * @see LibCommon_Sync.f_clientSyncAndVerdict + * @see LibCommon_VerdictControl.f_setVerdict + */ + function f_selfOrClientSyncAndVerdict( in charstring p_syncPoint, + in FncRetCode p_ret) + runs on SelfSyncComp { + if ( self == mtc ) { + // then assume we are running non-conurrent test case + f_selfSyncAndVerdict(p_syncPoint, p_ret); + } else { + f_clientSyncAndVerdict(p_syncPoint, p_ret); + } + } + + /** + * @desc Calls either self synchronization function if + * invoking component is the MTC, otherwise + * calls client synchronization. After that it + * sets a preamble specific verdict based on the + * specified return code. + * This function allows to implement TTCN-3 functions + * in a way that they can be used in both non-concurrent + * as well as concurrent test cases. + * @remark This function should _not_ be called if the MTC + * acts as a client (and not a server) in a concurrent + * test case. In this case f_clientSyncAndVerdictPreamble + * should be used instead. + * @param p_syncPoint Synchronization point name/id + * @param p_ret Current behavior execution status + * @see LibCommon_Sync.f_clientSyncAndVerdict + * @see LibCommon_VerdictControl.f_setVerdictPreamble + */ + function f_selfOrClientSyncAndVerdictPreamble( in charstring p_syncPoint, + in FncRetCode p_ret) + runs on SelfSyncComp { + if ( self == mtc ) { + // then assume we are running non-conurrent test case + f_selfSyncAndVerdictPreamble(p_syncPoint, p_ret); + } else { + f_clientSyncAndVerdictPreamble(p_syncPoint, p_ret); + } + } + + /** + * @desc Calls either self synchronization function if + * invoking component is the MTC, otherwise + * calls client synchronization. After that it + * sets a preamble specific verdict based on the + * specified return code. + * This function allows to implement TTCN-3 functions + * in a way that they can be used in both non-concurrent + * as well as concurrent test cases. + * @remark This function should _not_ be called if the MTC + * acts as a client (and not a server) in a concurrent + * test case. In this case f_clientSyncAndVerdictTestBody + * should be used instead. + * @param p_syncPoint Synchronization point name/id + * @param p_ret Current behavior execution status + * @see LibCommon_Sync.f_clientSyncAndVerdict + * @see LibCommon_VerdictControl.f_setVerdictPreamble + */ + function f_selfOrClientSyncAndVerdictTestBody( in charstring p_syncPoint, + in FncRetCode p_ret) + runs on SelfSyncComp { + if ( self == mtc ) { + // then assume we are running non-conurrent test case + f_selfSyncAndVerdictTestBody(p_syncPoint, p_ret); + } else { + f_clientSyncAndVerdictTestBody(p_syncPoint, p_ret); + } + } + + /** + * @desc Function kept for backward compatibility + * @see f_selfOrClientSyncAndVerdictPreamble + * + */ + function f_selfOrClientSyncAndVerdictPR( in charstring p_syncPoint, + in FncRetCode p_ret) + runs on SelfSyncComp { + f_selfOrClientSyncAndVerdictPreamble(p_syncPoint, p_ret); + } + + } // end group syncFunctions + + group syncCompStateHandling { + + /** + * + * @desc This function updates the state (stack) of a + * sync client or self sync component. This stack is + * key in the shutdown handling of test components. + * It adds the new state name to the top of the + * sync component stack of states. + * The state will only be added in case of a current + * execution status of e_success. + * @param p_newSyncCompState Name of state which was attempted to be reached. + * @param p_ret Current behavior execution status + * @remark If the state of component changes this function must be + * _at least_ called from your test suite prior to f_selfSync + * or f_clientSync which is the only definite place for the + * shutdown default invocation! + * @see LibCommon_Sync.a_dummyShutDown + * @see LibCommon_Sync.f_selfSync + * @see LibCommon_Sync.f_clientSync + */ + function f_addSyncCompState(in charstring p_newSyncCompState, + in FncRetCode p_ret) + runs on ClientSyncComp { + if ( p_ret == e_success ) { + if ( f_isItemOnStringStack(v_stateStack,p_newSyncCompState) ) { + log("**** f_addSyncCompState: WARNING: Attempt to add state which is already on sync state stack! No additition done.****"); + } else { + f_pushStringStack(v_stateStack,p_newSyncCompState); + } + } + } // end function f_addSyncCompState + + /** + * + * @desc This function returns the top state on the sync + * state stack of a sync client or self sync + * component and removes it from the stack + * This function cna be used, e.g., in a while + * statement within a postamble or shutdown + * implementation + * @param p_state State on top of the state stack. + * @return false if state stack is empty, true otherwise + * @see LibCommon_Sync.a_dummyShutDown + */ + function f_getTopSyncCompState( out charstring p_state ) + runs on ClientSyncComp + return boolean { + if ( not f_peekStringStackTop(v_stateStack,p_state) ) { + p_state := "IDLE"; + return false; + } + f_popStringStack(v_stateStack); + return true; + } // end function f_getTopSyncCompState + + /* + * @desc This function removes the last state on the state stack + * of a sync client or self sync component. + * This stack is key in the shutdown handling of test + * components. + * @see LibCommon_Sync.a_dummyShutDown + */ + function f_popSyncCompState() + runs on ClientSyncComp { + f_popStringStack(v_stateStack); + } // end function f_popSyncCompState + + /** + * + * @desc This function returns the top state on the sync state + * stack of a sync client or self sync component. It + * does not remove it from the stack + * This stack is key in the shutdown handling of test + * components. + * @param p_state State on top of the state stack. + * @return false if state stack is empty, true otherwise + * @see LibCommon_Sync.a_dummyShutDown + */ + function f_peekTopSyncCompState(out charstring p_state) + runs on ClientSyncComp + return boolean { + return f_peekStringStackTop(v_stateStack,p_state); + } // end function f_peekTopSyncCompState + + /** + * @desc This function checks if the sync state stack + * of a sync client or self sync component is empty. + * This stack is key in the shutdown handling of test + * components. + * @see LibCommon_Sync.a_dummyShutDown + */ + function f_isSyncCompStateStackEmpty() + runs on ClientSyncComp + return boolean { + return f_isStringStackEmpty(v_stateStack); + } // end function f_isSyncCompStateStackEmpty + + } // end group syncCompStateHandling + + group shutDownAltsteps { + + /** + * @desc This is an example of a shutdown altstep which can be + * used as a "template" for a interface specific shutdown + * altstep or possily as a first temporary solution in + * test case development.

      + * This altstep shall be activated as a default as the + * first statement in each test case function which drives + * an interface, i.e., in MTC behavior of single component + * and in each client behavior of multi component test + * cases.
      + * The required behavior from this altstep is to:

      + * 1) expect the STOP either via the test component + * syncPort

      + * 2) upon its arrival it should shut down the SUT + * gracefully based on the current component state

      + * The current component state should have been + * previously kept uptodate from a test suite via the + * f_addSyncCompState function. This default will then be + * (automatically) invoked either from within f_selfSync + * or f_clientSync.
      + * Note that shutdown defaults can be written as + * _interface specific_ - they do not need to be test case + * or test component specific! See another example of a + * shutdown altstep in the sync module. + * @see LibCommon_Sync.f_addSyncCompState + * @see LibCommon_Sync.f_selfSync + * @see LibCommon_Sync.f_clientSync + * @see LibCommon_SyncExamples.a_exampleShutDown + * @remark Your application specific shutdown altstep + * implementation(s) should _not_ be defined in this + * module but as part of your test suite or application specific + * modules. + */ + altstep a_dummyShutDown() + runs on SelfSyncComp { + [] syncPort.receive(m_syncServerStop){ + var charstring v_state := ""; + tc_sync.stop; + log("**** a_dummyShutDown: Test component received STOP signal from sync server - going to IDLE state ****"); + while ( f_getTopSyncCompState(v_state) ) { + if ( v_state == "x" ) { + // then do something + } else if ( v_state == "y" ) { + // then do something else + } + } // end while + f_disconnect4SelfOrClientSync(); + // unmap/disconnect more if needed + log("**** a_dummyShutDown: -> Test component stopping itself now! ****") ; + stop ; + } + } // end altstep a_dummyShutDown + + /** + * @desc Shutdown alstep in case the sync server is requesting shutdown. + * + * @remark User shall stop the component + */ + altstep a_shutdown() + runs on ClientSyncComp { + [] syncPort.receive(m_syncServerStop){ + tc_sync.stop ; + log("**** a_shutdown: Test component received STOP signal from MTC **** "); + } + } + + } // end group shutDownAltsteps + + } // end group basicUserRelevantDefinitions + + group advancedUserRelevantDefinitions { + + group serverRelated { + + /** + * @desc Implements synchronization of "n" clients from server + * side. If a problem occurs, then server sends STOP to + * all clients. Waits for PX_TSYNC_TIME_LIMIT to let + * clients finish executing their behavior until this + * synchronization point. See f_serverSyncClientsTimed for + * overwriting this later timing constraint! + * This function sets the server component verdict. + * @remark The use of this function requires prior connection of + * the server sync port! + * @see LibCommon_Sync.f_connect4SelfOrClientSync + * @see LibCommon_Sync.PX_TSYNC_TIME_LIMIT + * @see LibCommon_Sync.f_serverSyncClientsTimed + * @param p_noOfClients number of clients to be synchronized + * @param p_syncId synchronization point name/id + */ + function f_serverSyncClients( in UInt p_noOfClients, in charstring p_syncId ) + runs on ServerSyncComp { + f_serverSyncClientsTimed(p_noOfClients,p_syncId, PX_TSYNC_TIME_LIMIT); + } + + /** + * @desc Implements synchronization of "n" clients from server + * side including intermediate synchronization. + * If a problem occurs, then server sends STOP to + * all clients. Waits for PX_TSYNC_TIME_LIMIT to let + * clients finish executing their behavior until this + * synchronization point. See f_serverSyncClientsTimed for + * overwriting this later timing constraint! + * This function sets the server component verdict. + * @remark The use of this function requires prior connection of + * the server sync port! + * @see LibCommon_Sync.f_connect4SelfOrClientSync + * @see LibCommon_Sync.PX_TSYNC_TIME_LIMIT + * @see LibCommon_Sync.f_serverSyncClientsTimed + * @param p_noOfClients number of clients to be synchronized + * @param p_syncId synchronization point name/id + */ + function f_serverSyncClientsIntermediateSync( in UInt p_noOfClients, in charstring p_syncId, in UInt p_NoOfClientIntermediate, in template (present) charstring p_syncIdIntermediate ) + runs on ServerSyncComp { + f_serverSyncClientsTimedIntermediateSync(p_noOfClients,p_syncId, p_NoOfClientIntermediate, p_syncIdIntermediate, PX_TSYNC_TIME_LIMIT); + } + + /** + * @desc Handles synchronization of clients from server side. + * If problem occurs, then server sends STOP to all clients. + * This function sets the server verdict. + * @remark The use of this function requires prior connection of + * the server sync ports! + * @param p_NoOfClients number of clients to be synchronized + * @param p_syncId synchronization point name/id + * @param p_execTimeLimit time limit given to all clients to finish the execution + * of their behavior up to this synchronization point + * @see LibCommon_Sync.f_connect4SelfOrClientSync + */ + function f_serverSyncClientsTimed(in UInt p_NoOfClients, + in charstring p_syncId, + float p_execTimeLimit ) + runs on ServerSyncComp { + f_serverSyncClientsTimedIntermediateSync(p_NoOfClients, p_syncId, 0, ?, p_execTimeLimit ) + } // end function f_serverSyncClientsTimed + + /** @desc Handles synchronization of clients from server side including + * intermediate synchronization. + * If problem occurs, then server sends STOP to all clients. + * This function sets the server verdict. + * @remark The use of this function requires prior connection of + * the server sync ports! + * @param p_NoOfClients number of clients to be synchronized + * @param p_syncId synchronization point name/id + * @param p_execTimeLimit time limit given to all clients to finish the execution + * of their behavior up to this synchronization point + * @see LibCommon_Sync.f_connect4SelfOrClientSync + * @return execution status + */ + function f_serverSyncClientsTimedIntermediateSync( in UInt p_NoOfClients, + in charstring p_syncId, in UInt p_NoOfClientIntermediate, in template (present) charstring p_syncIdIntermediate, + float p_execTimeLimit ) + runs on ServerSyncComp { + + var integer v_noOfRecvdSyncMsgs := 0, v_noOfRecvdSyncMsgsIntermediate := 0; + var boolean v_stopClients := false; + var ClientSyncCompList v_clientRefs := {}, v_clientRefsIntermediate := {}; + var ClientSyncComp v_clientRef; + + if ( p_syncId == c_prDone ) { + log("**** f_serverSyncClientsTimed: Sync server now starting PREAMBLE synchronization ... ****") ; + } else if ( p_syncId == c_tbDone ) { + log("**** f_serverSyncClientsTimed: Sync server now starting TEST BODY synchronization ... ****") ; + } else if ( p_syncId == c_initDone ) { + log("**** f_serverSyncClientsTimed: Sync server now starting UPPER TESTER synchronization ... ****") ; + } else { + log("**** f_serverSyncClientsTimed: Sync server now starting handling of next synchronization point ... ****") ; + } + tc_sync.start(p_execTimeLimit) ; + alt{ + [v_noOfRecvdSyncMsgsIntermediate != p_NoOfClientIntermediate] syncPort.receive(m_syncClientReady(p_syncIdIntermediate)) -> sender v_clientRef { + if(not f_isPresentInArray(v_clientRef, v_clientRefsIntermediate)) { + v_clientRefsIntermediate[v_noOfRecvdSyncMsgsIntermediate] := v_clientRef; + v_noOfRecvdSyncMsgsIntermediate := v_noOfRecvdSyncMsgsIntermediate + 1; + if (v_noOfRecvdSyncMsgsIntermediate == p_NoOfClientIntermediate) { + f_serverSendToAllClients(v_clientRefsIntermediate, m_syncServerReady(p_syncIdIntermediate)); + } + } + repeat; + } + [] syncPort.receive(m_syncClientReady(p_syncId)) -> sender v_clientRef { + if(not f_isPresentInArray(v_clientRef, v_clientRefs)) { + v_clientRefs[v_noOfRecvdSyncMsgs] := v_clientRef; + v_noOfRecvdSyncMsgs := v_noOfRecvdSyncMsgs + 1; + } + if ( v_noOfRecvdSyncMsgs != p_NoOfClients ) { repeat; } + } + [] syncPort.receive(m_syncClientStop) -> sender v_clientRef { + log("**** f_serverSyncClientsTimed: Sync server received STOP signal from a client - server will wait for all clients to reach their next synchronization point and then stop them! ****") ; + v_stopClients := true; + if(not f_isPresentInArray(v_clientRef, v_clientRefs)) { + v_clientRefs[v_noOfRecvdSyncMsgs] := v_clientRef; + v_noOfRecvdSyncMsgs := v_noOfRecvdSyncMsgs + 1; + } + if ( v_noOfRecvdSyncMsgs != p_NoOfClients ) { repeat; } + + } + [] syncPort.receive(m_syncClientReady(?)) -> sender v_clientRef { + log("**** f_serverSyncClientsTimed: Sync server received client sync message with incorrect synchronization point id which is currently not handled - server will stop all clients! ****") ; + v_stopClients := true; + if(not f_isPresentInArray(v_clientRef, v_clientRefs)) { + v_clientRefs[v_noOfRecvdSyncMsgs] := v_clientRef; + } + } + [] syncPort.receive(SyncCmd :? ) { + log("**** f_serverSyncClientsTimed: Sync server received (invalid) sync message from other sync server - server will stop all clients! ****") ; + v_stopClients := true; } + [] any port.receive { + // leave it to be ok to receive anything else + // in case that the user has added any non-sync ports to + // his/her server component type definition! + repeat; + } + [] tc_sync.timeout{ + log("**** f_serverSyncClientsTimed: A client is not responding within specified time limit - sync server is sending stop to all clients! ****"); + v_stopClients := true; } + } //end alt + if (v_noOfRecvdSyncMsgsIntermediate != p_NoOfClientIntermediate) { + v_stopClients := true; + } + tc_sync.stop ; + if ( v_stopClients ) { + setverdict(inconc); + // then send out STOP sync msg + f_serverSendToAllClients(v_clientRefs, m_syncServerStop); + f_serverWaitForAllClientsToShutDown(); // function will never return! + } else { + setverdict(pass); + // then send out READY sync msg + f_serverSendToAllClients(v_clientRefs, m_syncServerReady(p_syncId)); + if ( p_syncId == c_prDone ) { + log("**** f_serverSyncClientsTimed: Sync server successfully passed PREAMBLE synchronization point. ****") ; + } else if ( p_syncId == c_tbDone ) { + log("**** f_serverSyncClientsTimed: Sync server successfully passed TEST BODY synchronization point. ****") ; + } else { + log("**** f_serverSyncClientsTimed: Sync server successfully passed synchronization point. ****") ; + } + } + } // end function f_serverSyncClientsTimedIntermediateSync + + /** + * @desc This function is intended only for use on the sync + * server component in concurrent TTCN-3 test cases. + * It waits for all components to finish execution within + * the PX_TSYNC_TIME_LIMIT. If a timeout occurs + * the server will stop all clients. + * This function sets the server component verdict. + */ + function f_serverWaitForAllClientsToStop() + runs on ServerSyncComp { + tc_sync.start; + alt { + [] all component.done { + tc_sync.stop; + log("**** f_serverWaitForAllClientsToStop: All sync clients have finished their execution. Sync server now terminating test case. ****") ; + } + [] tc_sync.timeout { + log("**** f_serverWaitForAllClientsToStop: Not all sync clients have finshed execution within the sync time limit. Sync server will stop test case! ****") ; + stop; + } + } // end alt + setverdict(pass); + } // end function f_serverWaitForAllClientsToStop + + } // end group serverRelated + + group clientRelated { + + /** + * @desc This function creates the connection needed to + * execute client synchronization functions + * @see LibCommon_Sync.f_clientSync + * @see LibCommon_Sync.f_clientSendStop + */ + function f_connect4ClientSync() + runs on ClientSyncComp { + connect(self:syncPort, mtc:syncPort); + }// end function f_connect4ClientSync + + /** + * @desc This function removes the connection needed + * to execute client synchronization functions + * @see LibCommon_Sync.f_clientSync + * @see LibCommon_Sync.f_clientSendStop + */ + function f_disconnect4ClientSync() + runs on ClientSyncComp { + disconnect(self:syncPort, mtc:syncPort); + }// end function f_disconnect4ClientSync + + /** + * @desc This function combines client verdict setting with its + * synchronization for use,e.g, after or within a + * test body implementation. + * Note that such premables can _not_ be reused in non- + * concurrent test cases. This can be achieved by using + * the f_selfOrClientSyncAndVerdict function instead. + * This function sets the client component verdict. + * @param p_syncId Synchronization point name/id + * @param p_ret Current behavior execution status + * @remark The use of this function requires prior connection + * of the client sync port! + * @see LibCommon_Sync.f_connect4ClientSync + * @see LibCommon_Sync.f_connect4SelfOrClientSync + * @see LibCommon_VerdictControl.f_setVerdict + * @see LibCommon_Sync.f_selfOrClientSyncAndVerdict + */ + function f_clientSyncAndVerdict(in charstring p_syncId, + in FncRetCode p_ret) + runs on ClientSyncComp { + if(vc_testcaseStep == e_preamble) { + f_clientSyncAndVerdictPreamble(p_syncId, p_ret); + } else if(vc_testcaseStep == e_testBody) { + f_clientSyncAndVerdictTestBody(p_syncId, p_ret); + } + else { + f_clientSyncAndVerdictPostamble(p_syncId, p_ret); + } + } + + /** + * @desc This function combines client verdict setting with its + * synchronization for use after or within a preamble + * implementation. + * Note that such preambles can _not_ be reused in non- + * concurrent test cases. + * This function sets the client component verdict. + * @remark The use of this function requires prior connection + * of the client sync port! + * @see LibCommon_Sync.f_connect4ClientSync + * @see LibCommon_Sync.f_connect4SelfOrClientSync + * @see LibCommon_VerdictControl.f_setVerdictPreamble + * @param p_syncId Synchronization point name/id + * @param p_ret Current behavior execution status + */ + function f_clientSyncAndVerdictPreamble(in charstring p_syncId , + FncRetCode p_ret) + runs on ClientSyncComp { + f_setVerdictPreamble(p_ret); + f_clientSync(p_syncId,p_ret); + vc_testcaseStep := e_testBody; + } + + /** + * @desc This function combines client verdict setting with its + * synchronization for use,e.g, after or within a + * test body implementation. + * Note that such premables can _not_ be reused in non- + * concurrent test cases. This can be achieved by using + * the f_selfOrClientSyncAndVerdict function instead. + * This function sets the client component verdict. + * @param p_syncId Synchronization point name/id + * @param p_ret Current behavior execution status + * @remark The use of this function requires prior connection + * of the client sync port! + * @see LibCommon_Sync.f_connect4ClientSync + * @see LibCommon_Sync.f_connect4SelfOrClientSync + * @see LibCommon_VerdictControl.f_setVerdict + * @see LibCommon_Sync.f_selfOrClientSyncAndVerdict + */ + function f_clientSyncAndVerdictTestBody(in charstring p_syncId, + in FncRetCode p_ret) + runs on ClientSyncComp { + f_setVerdict(p_ret); + f_clientSync(p_syncId,p_ret); + vc_testcaseStep := e_postamble; + } + + /** + * @desc This function combines client verdict setting with its + * synchronization for use after or within a + * postamble implementation. + * Note that such prostambles can _not_ be reused in non- + * concurrent test cases. + * This function sets the client component verdict. + * @remark The use of this function requires prior connection + * of the client sync port! + * @see LibCommon_Sync.f_connect4ClientSync + * @see LibCommon_Sync.f_connect4SelfOrClientSync + * @see LibCommon_VerdictControl.f_setVerdictPostamble + * @param p_syncId Synchronization point name/id + * @param p_ret Current behavior execution status + */ + function f_clientSyncAndVerdictPostamble(in charstring p_syncId , + in FncRetCode p_ret) + runs on ClientSyncComp { + f_setVerdictPostamble(p_ret); + f_clientSync(p_syncId,p_ret); + } + + /** + * @desc This function handles synchronization of a sync client + * with the server. In case of successful execution it sends + * a READY message to the server and waits the READY back. + * The time used for waiting is defined by PX_TSYNC_TIME_LIMIT. + * In case of a non successful execution status it + * sends a STOP message to the server. + * In both cases the receipt of a STOP message or no + * response from the server it will trigger the shutdown + * default (if activated). + * This function will set only the client verdict to INCONC + * (and stop its execution) if no STOP response is received + * from the server within the PX_TSYNC_TIME_LIMIT + * or if no shutdown default is activated. In all other + * cases the client verdict is NOT set. + * @param p_syncId Synchronization point name/id + * @param p_ret Current behavior execution status + * @remark The use of this function requires prior connection + * of the client sync port! + * @see LibCommon_Sync.f_connect4ClientSync + * @see LibCommon_Sync.f_connect4SelfOrClientSync + * @see LibCommon_Sync.PX_TSYNC_TIME_LIMIT + * @see LibCommon_Sync.a_dummyShutDown + * @see LibCommon_Sync.f_clientSendStop + * @return Updated execution status + */ + function f_clientSync( in charstring p_syncId , + in FncRetCode p_ret ) + runs on ClientSyncComp + return FncRetCode{ + + if (p_ret == e_success){ + syncPort.send(m_syncClientReady(p_syncId)); + tc_sync.start; + alt{ + [] syncPort.receive(m_syncServerReady(p_syncId)){ + tc_sync.stop ; } + [] tc_sync.timeout{ + log("**** f_clientSync: Sync client did not receive message from sync server within the specified time limit - sync client will ask sync server to stop test case! ****") ; + f_clientSendStop(); } // function will not return! + } //end alt + } //end if + else { + log("**** f_clientSync: Execution status indicates that execution of test component behavior was not successful - sync client will ask sync server to stop test case! ****") ; + f_clientSendStop(); // function will not return! + } + if ( p_syncId == c_prDone ) { + log("**** f_clientSync: Sync client successfully passed PREAMBLE synchronization point. ****") ; + } else if ( p_syncId == c_tbDone ) { + log("**** f_clientSync: Sync client successfully passed TEST BODY synchronization point. ****") ; + } else { + log("**** f_clientSync: Sync client successfully passed synchronization point. ****") ; + } + return e_success ; + + } // end function f_clientSync + + /** + * @desc This function can be used to request the shutdown a + * multi component test case _prior_ to reaching a + * synchronization point. It sends a STOP message to + * the sync server and awaits then the STOP from the server + * which will trigger the shutdown default (if activated). + * This function will set the server verdict to INCONC (and + * stop the test case) if no shutdown default is activated. + * This function will set only the client verdict to INCONC + * (and stop its execution) if no STOP response is received + * from the server within the PX_TSYNC_TIME_LIMIT + * or if no shutdown default is activated. In all other + * cases the client verdict is NOT set. + * @remark The use of this function requires prior connection + * of the client sync port! + * @see LibCommon_Sync.f_connect4ClientSync + * @see LibCommon_Sync.f_connect4SelfOrClientSync + * @see LibCommon_Sync.PX_TSYNC_TIME_LIMIT + * @see LibCommon_Sync.a_dummyShutDown + */ + function f_clientSendStop() + runs on ClientSyncComp { + log("**** f_clientSendStop: Sync client requesting from server to stop test case (including itself). ****") ; + syncPort.send(m_syncClientStop) ; + tc_sync.start; + alt{ + [] tc_sync.timeout{ + log("**** f_clientSendStop: Stopping sync client without shutdown - either no shutdown default active or no stop received from server. ****") ; + setverdict(inconc); + stop ; + } + }//end alt + tc_sync.stop; + stop; // stop here if shutdown default does not stop + } + + } // end group clientRelated + + } // end group advancedUserRelevantDefinitions + + group otherSyncModuleDefinitions { + + group syncModuleparams { + /** + * + * @desc Default time limit for a sync client to reach a + * synchronization point + */ + modulepar float PX_TSYNC_TIME_LIMIT := 120.0; + + /* + * @desc Default time limit for a sync client to finish + * its execution of the shutdown default + */ + modulepar float PX_TSHUT_DOWN_TIME_LIMIT := 120.0; + } + + group otherSyncTypes { + + type record of charstring SyncPointList; + + type record of ClientSyncComp ClientSyncCompList; + + } // end group otherSyncTypes + + group otherSelfSyncRelatedDefinitions { + + /** + * @desc This function creates the connection needed to + * execute self sync functions + * @see LibCommon_Sync.f_selfSync + * @see LibCommon_Sync.f_selfSyncStop + */ + function f_connect4SelfSync() + runs on SelfSyncComp { + connect(self:syncSendPort, self:syncPort); + }// end function f_connect4SelfSync + + /** + * @desc This function removes the connection needed + * to execute self sync functions + * @see LibCommon_Sync.f_selfSync + * @see LibCommon_Sync.f_selfSyncStop + */ + function f_disconnect4SelfSync() + runs on SelfSyncComp { + disconnect(self:syncSendPort, self:syncPort); + }// end function f_disconnect4SelfSync + + /** + * @desc This function combines MTC verdict setting with self + * synchronization for use in the preamble / test body / postamble + * @param p_syncId Synchronization point name/id + * @param p_ret Current behavior execution status + * @see LibCommon_VerdictControl.f_setVerdict + * @see LibCommon_Sync.f_selfSync + * @see LibCommon_Sync.a_dummyShutDown + */ + function f_selfSyncAndVerdict( in charstring p_syncId, + in FncRetCode p_ret ) + runs on SelfSyncComp { + if(vc_testcaseStep == e_preamble) { + f_selfSyncAndVerdictPreamble(p_syncId, p_ret); + } else if(vc_testcaseStep == e_testBody) { + f_selfSyncAndVerdictTestBody(p_syncId, p_ret); + } + else { + f_selfSyncAndVerdictPostamble(p_syncId, p_ret); + } + } + + /** + * @desc This function combines MTC verdict setting with self + * synchronization for use after the preamble. + * @param p_syncId Synchronization point name/id + * @param p_ret Current behavior execution status + * @see LibCommon_VerdictControl.f_setVerdictPreamble + * @see LibCommon_Sync.f_selfSync + */ + function f_selfSyncAndVerdictPreamble( in charstring p_syncId, + in FncRetCode p_ret ) + runs on SelfSyncComp { + f_setVerdictPreOrPostamble(p_ret); + f_selfSync(p_syncId,p_ret); + vc_testcaseStep := e_testBody; + } + + /** + * @desc This function combines MTC verdict setting with self + * synchronization for use after the test body. + * @param p_syncId Synchronization point name/id + * @param p_ret Current behavior execution status + * @see LibCommon_VerdictControl.f_setVerdict + * @see LibCommon_Sync.f_selfSync + */ + function f_selfSyncAndVerdictTestBody( in charstring p_syncId, + in FncRetCode p_ret ) + runs on SelfSyncComp { + f_setVerdict(p_ret); + f_selfSync(p_syncId,p_ret); + vc_testcaseStep := e_postamble; + } + + /** + * @desc This function combines MTC verdict setting with self + * synchronization for use after the postamble. + * @param p_syncId Synchronization point name/id + * @param p_ret Current behavior execution status + * @see LibCommon_VerdictControl.f_setVerdictPostamble + * @see LibCommon_Sync.f_selfSync + */ + function f_selfSyncAndVerdictPostamble( in charstring p_syncId , + in FncRetCode p_ret ) + runs on SelfSyncComp { + f_setVerdictPreOrPostamble(p_ret); + f_selfSync(p_syncId,p_ret); + } + + /** + * @desc This function synchronizes a MTC with itself. In case + * of a non successful execution status it sends a STOP + * message to itself and invokes that way the + * shutdown default (if activated). + * This function will set the server verdict to INCONC (and + * stop the test case) if no shutdown default is activated. + * Otherwise no verdict is set. + * @remark Sync ports should be connected prior to the invocation + * of this function! + * @param p_syncId Synchronization point name/id + * @param p_ret Current behavior execution status + * @return Updated execution status + * @see LibCommon_Sync.f_connect4SelfSync + * @see LibCommon_Sync.a_dummyShutDown + */ + function f_selfSync( in charstring p_syncId , + in FncRetCode p_ret ) + runs on SelfSyncComp + return FncRetCode{ + if (p_ret != e_success){ + f_selfSyncStop() ; // function will not return! + } + if ( p_syncId == c_prDone ) { + log("**** f_selfSync: Successfully passed PREAMBLE synchronization point. ****") ; + } else if ( p_syncId == c_tbDone ) { + log("**** f_selfSync: Successfully passed TEST BODY synchronization point. ****") ; + } else { + log("**** f_selfSync: Successfully passed synchronization point. ****") ; + } + return e_success ; + }// end function f_selfSync + + /** + * @desc This function can be used to shut down a test case _prior_ + * to reaching a synchronization point. it sends a STOP + * message to itself and invokes that way the + * shutdown default (if activated). + * This function will set the server verdict to INCONC (and + * stop the test case) if no shutdown default is activated. + * Otherwise no verdict is set. + * @remark Sync ports should be connected prior to the invocation + * of this function! + * @see LibCommon_Sync.f_connect4SelfSync + */ + function f_selfSyncStop() + runs on SelfSyncComp { + + log("**** f_selfSyncStop: MTC requests to stop test case (itself). ****") ; + syncSendPort.send(m_syncServerStop) ; // this MUST be _server_ for the default to catch! + tc_sync.start(PX_TSYNC_TIME_LIMIT); + alt{ + [] tc_sync.timeout{ + log("**** f_selfSyncStop: Stopping MTC without shutdown - either no shutdown default active or missing syncPort connection ****") ; + setverdict(inconc); + stop ; + } + }//end alt + tc_sync.stop; + stop; // if shutdown default is not activated or if it does not stop + } // end function f_selfSyncStop + + } // end group otherSelfSyncRelatedDefinitions + + /** + * + * @desc The sychronization protocol is conceptually based on + * named synchronization. Each synchronization point + * has it own specific synchronization message. This + * makes each synchronization unique, and allows, e.g., to + * ensure that a server synchronizes only clients which have + * reached the same synchronization point. + */ + group syncProtocolDefinition { + + type union SyncCmd { + ClientReady clientReady, + ServerReady serverReady, + ClientStop clientStop, + ServerStop serverStop + } + + type record ClientReady { + charstring syncPointId + } + + type record ServerReady { + charstring syncPointId + } + + type record ClientStop {} + + type record ServerStop {} + + } // end group syncProtocolDefinition + + group syncMessages { + template SyncCmd m_syncClientReady( template (present) charstring p_syncId ) := { + clientReady := { p_syncId } + } + + template SyncCmd m_syncServerReady( template (present) charstring p_syncId ) := { + serverReady := { p_syncId } + } + + template SyncCmd m_syncClientStop := { + clientStop := {} + } + + template SyncCmd m_syncServerStop := { + serverStop := {} + } + + } // end group syncMessages + + group otherSyncFunctions { + + /** + * @desc Makes server send a sync message to all known clients + * @param p_clientRefs List of client references to which the message is to be send + * @param p_syncCmd The actual synchronization message to be sent out + */ + function f_serverSendToAllClients( in ClientSyncCompList p_clientRefs, + in template (value) SyncCmd p_syncCmd) + runs on ServerSyncComp { + var integer i:=0; + for (i:=0; i< sizeof(p_clientRefs); i:=i+1 ){ + syncPort.send(p_syncCmd) to valueof(p_clientRefs[i]); + } + } // end function f_serverSendToAllClients + + /** + * @desc This function is intended only for use on server in concurrent + * TTCN-3 test cases. It waits for all components to shut down + * within the PX_TSHUT_DOWN_TIME_LIMIT. If a timeout occurs + * it aborts the test case (no matter how far clients got with their + * shutdown). + * This function sets the server verdict. + */ + function f_serverWaitForAllClientsToShutDown() + runs on ServerSyncComp { + + tc_shutDown.start(PX_TSHUT_DOWN_TIME_LIMIT); + alt { + [] syncPort.receive { + // clients may still try to send some sync message + } + [] all component.done { + tc_shutDown.stop; + log("**** f_serverWaitForAllClientsToShutDown: All components have properly shut down. Sync server will now terminate the test case. ****") ; + } + [] tc_shutDown.timeout { + log("**** f_serverWaitForAllClientsToShutDown: Not all clients have properly shutdown within the shut down time limit. Sync server will now terminate test case! ****") ; + } + } // end alt + // cover case that shut down default is NOT activated + setverdict(inconc); + //mtc.stop; + syncPort.send(m_syncServerStop) to self; // this MUST be _server_ for the default to catch! + tc_sync.start(PX_TSYNC_TIME_LIMIT); + alt{ + [] tc_sync.timeout{ + log("**** f_selfSyncStop: Stopping MTC without shutdown - either no shutdown default active or missing syncPort connection ****") ; + setverdict(inconc); + stop ; + } + }//end alt + tc_sync.stop; + stop; // if shutdown default is not activated or if it does not stop + } // end function f_serverWaitForAllClientsToShutDown + + function f_isPresentInArray(in ClientSyncComp p_clientRef, in ClientSyncCompList p_clientRefs) + return boolean { + var integer i; + for(i:=0; i < sizeof(p_clientRefs); i:=i+1) { + if(p_clientRefs[i] == p_clientRef) { + return true; + } + } + return false; + } + } // end group otherSyncFunctions + + } // end group otherSyncDefinitions + +} // end module LibCommon_Sync diff --git a/virtualization/docker-dev/home/etc/init.d/40-ttf_t012.sh b/virtualization/docker-dev/home/etc/init.d/40-ttf_t012.sh index 4115e5c..ab701a5 100755 --- a/virtualization/docker-dev/home/etc/init.d/40-ttf_t012.sh +++ b/virtualization/docker-dev/home/etc/init.d/40-ttf_t012.sh @@ -6,7 +6,7 @@ set -vx echo -e "*****************************\n* Checkout mec_devel sources\n*****************************\n" mkdir -p ${HOME}/dev && cd ${HOME}/dev || exit 1 -git clone --recurse-submodules --branch devel --single-branch https://forge.etsi.org/rep/mec/gs032p3-ttcn-test-suite.git mec_devel +git clone --recurse-submodules --branch devel https://forge.etsi.org/rep/mec/gs032p3-ttcn-test-suite.git mec_devel cd ${HOME}/dev/mec_devel/titan-test-system-framework git checkout devel cd ${HOME}/dev/mec_devel/ttcn @@ -20,7 +20,7 @@ ln -sf ${HOME}/dev/mec_devel/scripts/devenv.bash.ubuntu ${HOME}/devenv.bash echo -e "*****************************\n* Apply patched \n*****************************\n" cd ${HOME}/dev/mec_devel cp ./ttcn/patch_lib_common_titan/module.mk ./ttcn/LibCommon/ -cp ./ttcn/patch_lib_common_titan/*.ttcn ./ttcn/LibCommon/ttcn +cp ./ttcn/patch_lib_common_titan/ttcn/*.ttcn ./ttcn/LibCommon/ttcn echo -e "*****************************\n* Build Mec test suite\n*****************************\n" cd ${HOME}/dev/mec_devel diff --git a/virtualization/vagrant/provisioner.bash b/virtualization/vagrant/provisioner.bash index 420a225..82a7d07 100755 --- a/virtualization/vagrant/provisioner.bash +++ b/virtualization/vagrant/provisioner.bash @@ -82,7 +82,7 @@ echo ". ~/devenv.bash" >> /home/vagrant/.bashrc # Clone project cd /home/vagrant/dev -git clone --recurse-submodules --branch devel --single-branch https://forge.etsi.org/rep/mec/gs032p3-ttcn-test-suite.git mec_devel +git clone --recurse-submodules --branch devel https://forge.etsi.org/rep/mec/gs032p3-ttcn-test-suite.git mec_devel cd /home/vagrant/dev/mec_devel/titan-test-system-framework git checkout devel cd /home/vagrant/dev/mec_devel/ttcn @@ -102,7 +102,7 @@ ln -sf /home/vagrant/dev/mec_devel/scripts/devenv.bash.ubuntu /home/vagrant/deve # Apply patch cd /home/vagrant/dev/mec_devel cp ./ttcn/patch_lib_common_titan/module.mk ./ttcn/LibCommon/ -cp ./ttcn/patch_lib_common_titan/*.ttcn ./ttcn/LibCommon/ttcn +cp ./ttcn/patch_lib_common_titan/ttcn/*.ttcn ./ttcn/LibCommon/ttcn # Change user in cfg files cd ${HOME}/dev/mec_devel/scripts || exit 1 -- GitLab From 9a64913a2381f4db789791565e130e91097832ac Mon Sep 17 00:00:00 2001 From: YannGarcia Date: Mon, 17 Apr 2023 12:04:01 +0200 Subject: [PATCH 22/99] Update typing for MEC-013 and MEC-015 --- etc/AtsMec_Location/AtsMec_Location_Lewis.cf_ | 4 +- .../AtsMec_Location_Mockoon.cf_ | 6 +- .../AtsMec_Location_Sandbox.cf_ | 6 +- titan-test-system-framework | 2 +- ...AtsMec_TrafficManagementAPI_TestCases.ttcn | 4 +- .../LocationAPI/ttcn/LocationAPI_Pixits.ttcn | 4 +- .../ttcn/LocationAPI_Templates.ttcn | 135 +-- .../ttcn/LocationAPI_TypesAndValues.ttcn | 979 +++++++++++++----- .../ttcn/TrafficManagementAPI_Functions.ttcn | 2 +- .../ttcn/TrafficManagementAPI_Templates.ttcn | 32 +- .../TrafficManagementAPI_TypesAndValues.ttcn | 115 +- ttcn/LibMec/ttcn/LibMec_Pixits.ttcn | 14 +- .../ttcn/LibHttp_JsonTemplates.ttcn | 36 - 13 files changed, 896 insertions(+), 443 deletions(-) diff --git a/etc/AtsMec_Location/AtsMec_Location_Lewis.cf_ b/etc/AtsMec_Location/AtsMec_Location_Lewis.cf_ index 4255964..384e475 100644 --- a/etc/AtsMec_Location/AtsMec_Location_Lewis.cf_ +++ b/etc/AtsMec_Location/AtsMec_Location_Lewis.cf_ @@ -17,8 +17,8 @@ LibHttp_Pics.PICS_USE_TOKEN_HEADER := true LibMec_Pics.PICS_ROOT_API := "etsi-013" # 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_ME_APP_Q_ZONE_ID_URI := "/location/v3/zones" +LibMec_Pixits.PX_ME_APP_Q_USERS_LIST_URI := "/location/v3/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" diff --git a/etc/AtsMec_Location/AtsMec_Location_Mockoon.cf_ b/etc/AtsMec_Location/AtsMec_Location_Mockoon.cf_ index 7909087..52e927a 100644 --- a/etc/AtsMec_Location/AtsMec_Location_Mockoon.cf_ +++ b/etc/AtsMec_Location/AtsMec_Location_Mockoon.cf_ @@ -63,9 +63,9 @@ 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 := "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_CALLBACK_REF_URL := { notifyURL := "http://yanngarcia.ddns.net/location/v3/notif/1", callbackData := omit, notificationFormat := omit } +LocationAPI_Pixits.PX_AREA_SUB_CALLBACK_URI := { notifyURL := "http://yanngarcia.ddns.net/location/v3/notif/1", callbackData := omit, notificationFormat := omit } +LocationAPI_Pixits.PX_UE_DIST_SUB_CALLBACK_URI := { notifyURL := "http://yanngarcia.ddns.net/location/v3/notif/1", callbackData := omit, notificationFormat := omit } LocationAPI_Pixits.PX_UE_COORD_LAT := 43.729538 LocationAPI_Pixits.PX_UE_COORD_LONG := 7.413819 diff --git a/etc/AtsMec_Location/AtsMec_Location_Sandbox.cf_ b/etc/AtsMec_Location/AtsMec_Location_Sandbox.cf_ index 094c53d..b9c2f57 100644 --- a/etc/AtsMec_Location/AtsMec_Location_Sandbox.cf_ +++ b/etc/AtsMec_Location/AtsMec_Location_Sandbox.cf_ @@ -26,9 +26,9 @@ 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 := "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_CALLBACK_REF_URL := { notifyURL := "http://yanngarcia.ddns.net/location/v3/notif/1", callbackData := omit, notificationFormat := omit } +LocationAPI_Pixits.PX_AREA_SUB_CALLBACK_URI := { notifyURL := "http://yanngarcia.ddns.net/location/v3/notif/1", callbackData := omit, notificationFormat := omit } +LocationAPI_Pixits.PX_UE_DIST_SUB_CALLBACK_URI := { notifyURL := "http://yanngarcia.ddns.net/location/v3/notif/1", callbackData := omit, notificationFormat := omit } LocationAPI_Pixits.PX_UE_COORD_LAT := 43.729538 LocationAPI_Pixits.PX_UE_COORD_LONG := 7.413819 diff --git a/titan-test-system-framework b/titan-test-system-framework index 3c00b81..0a28ff3 160000 --- a/titan-test-system-framework +++ b/titan-test-system-framework @@ -1 +1 @@ -Subproject commit 3c00b81c1e158922c83ae0c0de5288631dd1a2be +Subproject commit 0a28ff34d9ca15d6ed481dad98485210e4d6e179 diff --git a/ttcn/AtsMec_TrafficManagement/AtsMec_TrafficManagementAPI_TestCases.ttcn b/ttcn/AtsMec_TrafficManagement/AtsMec_TrafficManagementAPI_TestCases.ttcn index 2d66097..cf5a3c5 100644 --- a/ttcn/AtsMec_TrafficManagement/AtsMec_TrafficManagementAPI_TestCases.ttcn +++ b/ttcn/AtsMec_TrafficManagement/AtsMec_TrafficManagementAPI_TestCases.ttcn @@ -392,7 +392,7 @@ module AtsMec_TrafficManagementAPI_TestCases { SESSION_SPECIFIC_BW_ALLOCATION, // Request type "1024", // FixedAllocation Downlink, // AllocationDirection - { m_session_filter("10.10.10.10", { "1010" }) } + { m_session_filter("10.10.10.10", 1010) } ) ) ) @@ -543,7 +543,7 @@ module AtsMec_TrafficManagementAPI_TestCases { APPLICATION_SPECIFIC_BW_ALLOCATION, // Request type "1024", // FixedAllocation Downlink, // AllocationDirection - { m_session_filter("10.10.10.10", { "1010" }) } // MEC015 Clause 7.2.2 Type: BwInfo Table 7.2.2-1: Elements of BwInfo, sessionFilter shall be omit + { m_session_filter("10.10.10.10", 1010) } // MEC015 Clause 7.2.2 Type: BwInfo Table 7.2.2-1: Elements of BwInfo, sessionFilter shall be omit ) ) ) diff --git a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Pixits.ttcn b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Pixits.ttcn index 46cda75..1a397ef 100644 --- a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Pixits.ttcn +++ b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Pixits.ttcn @@ -27,7 +27,7 @@ module LocationAPI_Pixits { modulepar ZoneId PX_NON_EXISTENT_ZONE_ID := "zone51"; - modulepar ResourceURL PX_RESOURCE_URL := "http://meep-loc-serv/etsi-013/location/v2/users/ue1"; + modulepar ResourceURL PX_RESOURCE_URL := "http://meep-loc-serv/etsi-013/location/v3/users/ue1"; modulepar NumberOfAccessPoints PX_NB_ACCESS_POINTS := 3; @@ -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/distance"; + modulepar Json.AnyURI PX_UE_LOC_QRY_URI := "/location/v3/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 a169aeb..71ac97c 100644 --- a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Templates.ttcn +++ b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Templates.ttcn @@ -20,8 +20,8 @@ module LocationAPI_Templates { address_ := p_address, accessPointId := p_access_point_id, zoneId := p_zone_id, - timestamp_ := p_timestamp, resourceURL := p_resource_url, + timestamp_ := p_timestamp, locationInfo := omit, contextLocationInfo := omit, ancillaryInfo := omit @@ -37,8 +37,8 @@ module LocationAPI_Templates { address_ := p_address, accessPointId := p_access_point_id, zoneId := p_zone_id, - timestamp_ := p_timestamp, resourceURL := p_resource_url, + timestamp_ := p_timestamp, locationInfo := *, contextLocationInfo := *, ancillaryInfo := * @@ -210,41 +210,12 @@ module LocationAPI_Templates { resourceURL := * } // End of template mw_periodic_tracking_subscription - template (value) ZonalTrafficSubscription m_zonal_traffic_subscription( - in ClientCorrelator p_client_correlator, - in CallbackReference p_callback_reference, - 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 := p_user_event_criteria, - duration := omit, - resourceURL := omit - } // End of template m_zonal_traffic_subscription - - template (present) ZonalTrafficSubscription mw_zonal_traffic_subscription( - template (present) ClientCorrelator p_client_correlator := ?, - template (present) CallbackReference p_callback_reference := ?, - template (present) ZoneId p_zone_id := ? - ) := { - clientCorrelator := p_client_correlator, - callbackReference := p_callback_reference, - zoneId := p_zone_id, - interestRealm := *, - userEventCriteria := *, - duration := *, - resourceURL := * - } // End of template mw_zonal_traffic_subscription - template (omit) CircleNotificationSubscription m_circle_notification_subscription( in template (omit) ClientCorrelator p_clientCorrelator := omit, in template (value) CallbackReference p_callbackReference, 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) Latitude p_latitude := PX_UE_COORD_LAT, + in template (value) Longitude p_longitude := PX_UE_COORD_LONG, 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, @@ -273,8 +244,8 @@ module LocationAPI_Templates { template ClientCorrelator p_clientCorrelator := *, template (present) CallbackReference p_callbackReference := ?, template (present) Addresses p_address := ?, - template (present) Json.Number p_latitude := ?, - template (present) Json.Number p_longitude := ?, + template (present) Latitude p_latitude := ?, + template (present) Longitude p_longitude := ?, template (present) Json.Number p_radius := ?, template (present) Json.Number p_trackingAccuracy := ?, template (present) EnteringLeavingCriteria p_enteringLeavingCriteria := ?, @@ -311,98 +282,4 @@ module LocationAPI_Templates { timestamp_ := * } // End of template mw_terminal_distance - template (omit) DistanceNotificationSubscription m_distance_notification_subscription( - in template (value) CallbackReference p_callbackReference, - in template (value) Json.Bool p_checkImmediate := true, - in template (omit) ClientCorrelator p_clientCorrelator := omit, - in template (value) DistanceCriteria p_criteria := AllWithinDistance, - in template (value) Json.Number p_distance, - 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 - ) := { - callbackReference := p_callbackReference, - checkImmediate := p_checkImmediate, - clientCorrelator := p_clientCorrelator, - count := omit, - criteria := p_criteria, - distance := p_distance, - duration := omit, - frequency := p_frequency, - link := omit, - monitoredAddress := p_monitoredAddress, - referenceAddress := p_referenceAddress, - requester := omit, - resourceURL := p_resourceURL, - trackingAccuracy := p_trackingAccuracy - } // End of template m_distance_notification_subscription - - template DistanceNotificationSubscription mw_distance_notification_subscription( - template (present) CallbackReference p_callbackReference := ?, - template (present) Json.Bool p_checkImmediate := ?, - template ClientCorrelator p_clientCorrelator := *, - template (present) DistanceCriteria p_criteria := ?, - template (present) Json.Number p_distance := ?, - template (present) UInt32 p_frequency := ?, - template (present) Addresses p_monitoredAddress := ?, - template Addresses p_referenceAddress := *, - template (present) Json.Number p_trackingAccuracy := ?, - template ResourceURL p_resourceURL := * - ) := { - callbackReference := p_callbackReference, - checkImmediate := p_checkImmediate, - clientCorrelator := p_clientCorrelator, - count := *, - criteria := p_criteria, - distance := p_distance, - duration := *, - frequency := p_frequency, - link := *, - monitoredAddress := p_monitoredAddress, - referenceAddress := p_referenceAddress, - requester := *, - resourceURL := p_resourceURL, - trackingAccuracy := p_trackingAccuracy - } // End of template mw_distance_notification_subscription - - template (omit) PeriodicNotificationSubscription m_periodic_notification_subscription( - in template (value) Addresses p_address, - in template (value) CallbackReference p_callbackReference, - 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 - ) := { - address_ := p_address, - callbackReference := p_callbackReference, - clientCorrelator := p_clientCorrelator, - duration := omit, - frequency := p_frequency, - link := omit, - requestedAccuracy := p_requestedAccuracy, - requester := omit, - resourceURL := p_resourceURL - } // End of template m_periodic_notification_subscription - - template PeriodicNotificationSubscription mw_periodic_notification_subscription( - template (present) Addresses p_address := ?, - template (present) CallbackReference p_callbackReference := ?, - template (present) UInt32 p_frequency := ?, - template (present) UInt32 p_requestedAccuracy := ?, - template ClientCorrelator p_clientCorrelator := *, - template ResourceURL p_resourceURL := * - ) := { - address_ := p_address, - callbackReference := p_callbackReference, - clientCorrelator := p_clientCorrelator, - duration := *, - frequency := p_frequency, - link := *, - requestedAccuracy := p_requestedAccuracy, - requester := *, - resourceURL := p_resourceURL - } // End of template mw_periodic_notification_subscription - } // End of module LocationAPI_Templates diff --git a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn index 7206dfa..46cf247 100644 --- a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn @@ -1,8 +1,8 @@ /** - * @author ETSI / STF569 + * @author ETSI / STF569 / TTF T027 * @version $Url$ * $Id$ - * @desc Types ANd Values for ETSI GS MEC 013 V2.1.1 (2019-09) + * @desc Types ANd Values for ETSI GS MEC 013 V3.1.1 (2019-09) * @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. @@ -30,7 +30,7 @@ module LocationAPI_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 - * @see ETSI GS MEC 013 V2.1.1 (2019-09) Clause 6.5.2 Type: TimeStamp + * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.5.2 Type: TimeStamp */ type record TimeStamp { Seconds seconds, @@ -38,56 +38,91 @@ module LocationAPI_TypesAndValues { } /** - * @desc A type containing list of users. - * @member user Collection of the zone information list. + * @desc This type represents a list of UserInfo. + * @member user Collection of the user location information list. * @member resourceURL Self referring URL. - * @see ETSI GS MEC 013 V2.1.1 (2019-09) Clause 6.2.2 Type: UserInfo + * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.2.5 Type: UserList */ - type record of UserInfo UserInfos; type record UserList { UserInfos user optional, - ResourceURL resourceURL + ResourceURL resourceURL optional } + type record of UserInfo UserInfos; /** - * @desc Shape information, as detailed in [14], associated with the reported location coordinate - * @see ETSI GS MEC 013 V2.1.1 (2019-09) Table 6.5.3-1: Definition of type LocationInfo + * @desc This type represents configuration for the delivery of subscription notifications over Websockets + * @member websocketUri Set by location server 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 013 V3.1.1 (2023-01) Clause 6.5.4 Type: WebsockNotifConfig */ - type enumerated Shape { - ELLIPSOID_ARC (1), - ELLIPSOID_POINT (2), - ELLIPSOID_POINT_ALTITUDE (3), - ELLIPSOID_POINT_ALTITUDE_UNCERT_ELLIPSOID (4), - ELLIPSOID_POINT_UNCERT_CIRCLE (5), - ELLIPSOID_POINT_UNCERT_ELLIPSE (6), - POLYGON (7) - } with { - variant "JSON: as number" + type record WebsockNotifConfig { + Json.AnyURI websocketUri optional, + Json.Bool requestWebsocketUri optional } /** - * @desc Velocity information, as detailed in [14], associated with the reported location coordinate - * @see ETSI GS MEC 013 V2.1.1 (2019-09) Table 6.5.3-1: Definition of type LocationInfo + * @desc This type represents some requirements about reporting the event of user locationreportingLocationReq This IE shall be set to true if a location estimate is required for each event report + * @member accessPointList One or more access points forming a monitoring area that could be any shape + * @member zoneId Identifier of zone (e.g. zone001) to monitor + * @member occurrenceInfo One time only report indication + * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.5.5 Type: UserEventPara */ - type enumerated VelocityType { - HORIZONTAL (1), - HORIZONTAL_VERTICAL (2), - HORIZONTAL_UNCERT (3), - HORIZONTAL_VERTICAL_UNCERT (4) - } + type record UserEventPara { + Json.Bool reportingLocationReq optional, + AccessPointList accessPointList optional, + ZoneId zoneId optional, + OccurrenceInfo occurrenceInfo optional + } // End of type UserEventPara - type record Velocity { - VelocityType velocityType, - UInt32 bearing, - UInt32 horizontalSpeed, - Int32 verticalSpeed optional, - UInt32 verticalUncertainty optional - } + /** + * @desc This type represents the parameters that control the report times and frequency + * @member minimumInterval Minimum interval between reports in case frequently reporting. Unit is second. + * @member maximumFrequency Maximum frequency (in seconds) of notifications per subscription + * @member maximumCount Maximum number of notifications. For no maximum, either do not include this element or specify a value of zero. Default value is 0 + * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.5.6 Type: ReportingCtrl + */ + type record ReportingCtrl { + Json.UInteger minimumInterval optional, + Json.UInteger maximumFrequency optional, + Json.UInteger maximumCount optional + } // End of type ReportingCtrl + + /** + * @desc This type represents the parameters that describe an area + * @member shape The shape of the area monitored + * @member points Shall include one point if the shape is CIRCLE + * @member radius + * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.5.7 Type: AreaInfo + */ + type record AreaInfo { + Shae shape, + Points points, + Json.UInteger radius optional + } // End of type AreaInfo + + /** + * @desc Location latitude, expressed in the range -90° to +90° + */ type record of Json.Number Latitude; + /** + * @desc Location longitude, expressed in the range -180° to +180° + */ type record of Json.Number Longitude; + /** + * @desc This type represents the geographical location of a point + * @member latitude Location latitude, expressed in the range -90° to +90° + * @member longitude Location longitude, expressed in the range -180° to +180° + * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.5.8 Type: Point + */ + type record Point { + Latitude latitude, + Longitude longitude + } // End of type Point + type record of Point Points; + /** * @desc A type containing location information with latitude, longitude and altitude, in addition the accuracy of the information are provided. * @member latitude Location latitude, expressed in the range -90° to +90°. Cardinality greater than one only if "shape" equals 7. @@ -104,7 +139,7 @@ module LocationAPI_TypesAndValues { * @member includedAngle Present only if \"shape\" equals 6 * @member shape Shape information, as detailed in [14], associated with the reported location coordinate * @member velocity Structure with attributes relating to the target entity’s velocity, as defined in [14] - * @see ETSI GS MEC 013 V2.1.1 (2019-09) Clause 6.5.3 Type: LocationInfo + * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.5.3 Type: LocationInfo */ type record LocationInfo { Latitude latitude, @@ -126,6 +161,63 @@ module LocationAPI_TypesAndValues { variant (timestamp_) "name as 'timestamp'"; } // End of type LocationInfo + /** + * @desc Shape information, as detailed in [14], associated with the reported location coordinate + * @see ETSI GS MEC 013 V3.1.1 (2023-01) Table 6.5.3-1: Definition of type LocationInfo + */ + type enumerated Shape { + ELLIPSOID_ARC (1), + ELLIPSOID_POINT (2), + ELLIPSOID_POINT_ALTITUDE (3), + ELLIPSOID_POINT_ALTITUDE_UNCERT_ELLIPSOID (4), + ELLIPSOID_POINT_UNCERT_CIRCLE (5), + ELLIPSOID_POINT_UNCERT_ELLIPSE (6), + POLYGON (7) + } with { + variant "JSON: as number" + } + + /** + * @desc Velocity information, as detailed in [14], associated with the reported location coordinate + * @see ETSI GS MEC 013 V3.1.1 (2023-01) Table 6.5.3-1: Definition of type LocationInfo + */ + type enumerated VelocityType { + HORIZONTAL (1), + HORIZONTAL_VERTICAL (2), + HORIZONTAL_UNCERT (3), + HORIZONTAL_VERTICAL_UNCERT (4), + ELLIPSOID_POINT_UNCERT_CIRCLE (5), + ELLIPSOID_POINT_UNCERT_ELLIPSE (6), + POLYGON (7) + } with { + variant "JSON: as number" + } + + /** + * @desc Structure with attributes relating to the target entity's velocity + * @member velocityType Velocity information + * @member bearing Bearing, expressed in the range 0° to 360° + * @member horizontalSpeed Horizontal speed + * @member uncertainty Horizontal uncertainty + * @member verticalSpeed Vertical speed, expressed in km/h + * @member verticalUncertainty Vertical uncertainty + * @see ETSI GS MEC 013 V3.1.1 (2023-01) Table 6.5.3-1: Definition of type LocationInfo + */ + type record Velocity { + VelocityType velocityType, + Json.UInteger bearing, + Json.UInteger horizontalSpeed, + Json.UInteger uncertainty optional, + Json.Integer verticalSpeed optional, + Json.UInteger verticalUncertainty optional + } // End of type Velocity + + /** + * @desc Identifier of access point, (reference ETSI TS 129 171). Where the E-CGI is made up of the PLMN and Cell Identity (28 bit string). Then the PLMN is made up of the 3 digit MCC & 2 or 3 digit MNC. The Cell Portion is an optional element + * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.6.1 accessPointId + */ + type Json.String AccessPointId; + /** * @desc A type containing zone information. * @member zoneId Identifier of zone @@ -133,6 +225,8 @@ module LocationAPI_TypesAndValues { * @member numberOfUnservicableAccessPoints Number of inoperable access points within the zone. * @member numberOfUsers The number of users currently on the access point. * @member resourceURL Self referring URL. + * @see OMA-TS-REST_NetAPI_ZonalPresence-V1_0-20160308-C Clause 5.2.2.2 Type: ZoneInfo + * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.2.1 Zonal presence data types */ type record ZoneInfo { ZoneId zoneId, @@ -146,6 +240,8 @@ module LocationAPI_TypesAndValues { * @desc Collection of the zone information list. * @member zone Collection of the zone information list. * @member resourceURL Self referring URL. + * @see OMA-TS-REST_NetAPI_ZonalPresence-V1_0-20160308-C Clause 5.2.2.1 Type: ZoneList + * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.2.1 Zonal presence data types */ type record of ZoneInfo ZoneInfos; type record ZoneList { @@ -153,12 +249,6 @@ module LocationAPI_TypesAndValues { ResourceURL resourceURL } - /** - * @desc Identifier of access point, (reference ETSI TS 129 171). Where the E-CGI is made up of the PLMN and Cell Identity (28 bit string). Then the PLMN is made up of the 3 digit MCC & 2 or 3 digit MNC. The Cell Portion is an optional element - * @see ETSI GS MEC 013 V2.1.1 (2019-09) 6.6.1 accessPointId - */ - type Json.String AccessPointId; - type UInt32 DateTimeStamp; // FIXME To be reviewed /** @@ -170,6 +260,8 @@ module LocationAPI_TypesAndValues { * @member interestRealm Interest realm of access point * @member timezone Time zone of access point * @member resourceURL Self referring URL. + * @see OMA-TS-REST_NetAPI_ZonalPresence-V1_0-20160308-C Clause 5.2.2.4 Type: AccessPointInfo + * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.2.1 Zonal presence data types */ type record AccessPointInfo { AccessPointId accessPointId, @@ -181,6 +273,7 @@ module LocationAPI_TypesAndValues { DateTimeStamp timezone optional, ResourceURL resourceURL } + /** * @desc Collection of the access point information list */ @@ -191,6 +284,8 @@ module LocationAPI_TypesAndValues { * @member zoneId Identifier of zone * @member accessPoint Collection of the access point information list. * @member resourceURL Self referring URL + * @see OMA-TS-REST_NetAPI_ZonalPresence-V1_0-20160308-C Clause 5.2.2.3 Type: AccessPointList + * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.2.1 Zonal presence data types */ type record AccessPointList { ZoneId zoneId, @@ -199,7 +294,7 @@ module LocationAPI_TypesAndValues { } /** - * @desc Address of user (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI). + * @desc Address of user (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI) */ type Json.AnyURI Address type record of Address Addresses; @@ -213,7 +308,7 @@ module LocationAPI_TypesAndValues { * @desc CallBackData if passed by the application during the associated ZonalTrafficSubscription and UserTrackingSubscription operation. See [\ REST_NetAPI_Common]. */ - type Json.String CallbackData; + type Json.String CallbackData; // TODO To be removed /** * @desc Notification serialization format @@ -241,19 +336,20 @@ REST_NetAPI_Common]. type Json.String ClientCorrelator; /** - * @desc The connection type for the access point + * @desc This enumeration represents the connection type of an access point. + * @member LTE Access point provides a LTE-Femto connection + * @member Wifi Access point provides a Wifi® connection + * @member Wimax Access point provides a Wimax® connection + * @member FiveG_NR Access point provides a 5G NR connection + * @member UNKNOWN Access point connection type is unknown + * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.7.5 Enumeration: ConnectionType */ type enumerated ConnectionType { - Femto, - LTE_femto, - Smallcell, - LTE_smallcell, + LTE, Wifi, - Pico, - Micro, - Macro, Wimax, - Unknown + FiveG_NR, + UNKNOWN } /** @@ -277,19 +373,50 @@ REST_NetAPI_Common]. type Json.String InterestRealm; /** - * @desc Link to other resources - * @member rel Describes the relationship between the URI and the resource. - * @member href UTI + * @desc This type represents a type of link and may be referenced from data structures + * @member href URI referring to a resource + * @see ETSI TS 129 572 V16.7.0 (2021 08) Clause 6.7.2 Type: LinkType + */ + type record LinkType { + Json.AnyURI href + } + + /** + * @desc This type represents specified event types for UE location report + * @member ENTERING_AREA_EVENT Entering area reporting event + * @member LEAVING_AREA_EVENT Leaving area reporting event + * @see ETSI TS 129 572 V16.7.0 (2021 08) Clause 6.7.3 Enumeration: LocationEventType + */ + type enumerated LocationEventType { + ENTERING_AREA_EVENT, + LEAVING_AREA_EVENT + } + + /** + * @desc This enumeration represents the result of a localization associated with a notification + * @member SUCCESS Localization is successful + * @member ABNORMAL Localization is failed due to timeout or other unspecific errors + * @see ETSI TS 129 572 V16.7.0 (2021 08) 6.7.4 Enumeration: NotificationResult */ - type record Link { - Json.String rel, - Json.String href + type enumerated NotificationResult { + SUCCESS, + ABNORMAL } /** * @desc The URL of your own listener application. */ - type Json.String NotifyURL; + type Json.AnyURI NotifyURL; + + /** + * @desc Hyperlink related to the resource + * @member self_ Self-referring URI + */ + type record Links { + Link self_ + } with { + variant (self_) "name as 'self'"; + } /** * @desc The number of access points within the zone @@ -373,25 +500,99 @@ REST_NetAPI_Common]. */ type record of UserEventType UserEventCriteria; + /** + * @desc Definition of type CivicAddress + * @member country The two-letter ISO 3166 country code in capital ASCII letters + * @member A1 National subdivisions + * @member A2 County, parish + * @member A3 City, township + * @member A4 City division, borough, city district + * @member A5 Neighbourhood + * @member A6 Group of streets below the neighbourhood level IETF RFC 4776 [6] + * @member PRD Leading street direction IETF RFC 4776 [6] + * @member POD Trailing street suffix IETF RFC 4776 [6] + * @member STS Street suffix or type IETF RFC 4776 [6] + * @member HNO House number IETF RFC 4776 [6] + * @member HNS House number suffix IETF RFC 4776 [6] + * @member LMK Landmark or vanity address IETF RFC 4776 [6] + * @member LOC Additional location information IETF RFC 4776 [6] + * @member NAM Name (residence and office occupant) IETF RFC 4776 [6] + * @member PC Postal/zip code IETF RFC 4776 [6] + * @member BLD Building (structure) IETF RFC 5139 [7] + * @member UNIT Unit (apartment, suite) IETF RFC 5139 [7] + * @member FLR Floor IETF RFC 4776 [6] + * @member Room Place-type IETF RFC 5139 [7] + * @member PCN Postal community name IETF RFC 5139 [7] + * @member POBOX Post office box (P.O. box) IETF RFC 5139 [7] + * @member ADDCODE Additional code IETF RFC 5139 [7] + * @member SEAT Seat (desk, cubicle, workstation) IETF RFC 5139 [7] + * @member RD Primary road or street IETF RFC 5139 [7] + * @member RDSEC Road clause IETF RFC 5139 [7] + * @member RDBR Road branch IETF RFC 5139 [7] + * @member RDSUBBR Road sub-branch IETF RFC 5139 [7] + * @member PRM Road pre-modifier IETF RFC 5139 [7] + * @member POM Road post-modifier IETF RFC 5139 [7] + * @member usageRules When present, this IE shall carry the value of "usagerules" Element of the PIDL-LO XML document + * @member method When present, this IE shall contain the method token, carried by the "method" Element of the PIDLLO XML document. IETF RFC 4119 [25] providedBy string O 0..1 When present, this IE shall carry the value of "provided-by" Element of the PIDL-LO XML document + * @member providedBy When present, this IE shall carry the value of "provided-by" Element of the PIDL-LO XML document + * @see ETSI TS 129 572 V16.7.0 (2021 08) Table 6.1.6.2.14-1 + */ + type record CivicAddress { + Json.String country, + Json.String A1 optional, + Json.String A3 optional, + Json.String A4 optional, + Json.String A5 optional, + Json.String A6 optional, + Json.String PRD optional, + Json.String POD optional, + Json.String STS optional, + Json.String HNO optional, + Json.String HNS optional, + Json.String LMK optional, + Json.String LOC optional, + Json.String NAM optional, + Json.String PC optional, + Json.String BLD optional, + Json.String UNIT optional, + Json.String FLR optional, + Json.String Room optional, + Json.String PCN optional, + Json.String POBOX optional, + Json.String ADDCODE optional, + Json.String SEAT optional, + Json.String RD optional, + Json.String RDSEC optional, + Json.String RDBR optional, + Json.String RDSUBBR optional, + Json.String PRM optional, + Json.String POM optional, + Json.String usageRules optional, + Json.String method optional, + Json.String providedBy + } + /** * @desc A type containing user information. * @member address_ Address of user (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI). * @member accessPointId Identifier of access point, (reference ETSI TS 129 171). - * @member zoneId Identifier of zone - * @member timestamp + * @member zoneId The identity of the zone the user is currently within, + * @member timestamp Date and time that location was collected * @member resourceURL Self referring URL. * @member locationInfo A type containing location information with latitude, longitude and altitude, in addition the accuracy of the information are provided. + * @member civicInfo Contextual information of a user location * @member contextLocationInfo Contextual information of a user location (e.g. aisle, floor, room number, etc.). * @member ancillaryInfo Reserved for future use - * @see ETSI GS MEC 013 V2.1.1 (2019-09) Clause 6.2.2 Type: UserInfo + * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.2.2 Type: UserInfo */ type record UserInfo { Address address_, AccessPointId accessPointId, ZoneId zoneId, + ResourceURL resourceURL optional, TimeStamp timestamp_, - ResourceURL resourceURL, LocationInfo locationInfo optional, + CivicAddress civicInfo optional, ContextLocationInfo contextLocationInfo optional, AncillaryInfo ancillaryInfo optional } with { @@ -399,6 +600,48 @@ REST_NetAPI_Common]. variant (timestamp_) "name as 'timestamp'"; } // End of type UserInfo + /** + * @desc Represents the relative location in a reference system that is a Cartesian coordinate system and described by a map + * @member mapInfo Indicates a map corresponding to a location area + * @member X Indicates the value (in the unit of meters) on x-axis of the relative location in the Cartesian system + * @member Y Indicates the value (in the unit of meters) on y-axis of the relative location in the Cartesian system + * @member Z Indicates the value (in the unit of meters) on z-axis of the relative location in the Cartesian system for a 3D-Point + * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.2.3 + */ + type record RelativeLocationInfo { + MapInfo mapInfo, + Json.Number X, + Json.Number Y, + Json.Number Z optional + } + + /** + * @desc Indicates the location of the map origin in the local Cartesian coordinate system + * @member latitude Location latitude, expressed in the range -90° to +90° + * @member longitude Location longitude, expressed in the range -180° to +180° + * @member Location altitude relative to the WGS84 ellipsoid surface + * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.2.4 + */ + type record MapInfoOrigin { + Latitude latitude, + Longitude longitude, + Json.Number altitude optional + } + + /** + * @desc This type represents a map that may incorporates an origin + * @member mapId Indicates the ID of the map + * @member Indicates the location of the map origin in the local Cartesian coordinate system + * @member ancillaryMapInfo Ancillary map information may be used to convert coordinates between different coordinate systems + * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.2.4 + */ + type record MapInfo { + Json.String mapId, + MapInfoOrigin origin optional, + AncillaryMapInfo ancillaryMapInfo optional + } + type Json.String AncillaryMapInfo; + /** * @desc A type containing user tracking subscription. * @member clientCorrelator A correlator that the client can use to tag this particular resource representation during a request to create a resource on the server @@ -432,82 +675,11 @@ REST_NetAPI_Common]. variant (address_) "name as 'address'"; } - /** - * @desc A type containing zonal presence notification - * @member callbackData CallBackData if passed by the application during the associated ZonalTrafficSubscription and UserTrackingSubscription operation. See - * @member zoneId Identifier of zone - * @member address_ Address of user (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI) to monitor - * @member interestRealm Interest realm of access point (e.g. geographical area, a type of industry etc.) - * @member userEventType - * @member currentAccessPointId Identifier of access point - * @member previousAccessPointId Identifier of access point - * @member timestamp_ - * @member link Link to other resources that are in relationship with this notification. The server SHOULD include a link to the related subscription. No other links are required or suggested by this specification. - */ - type record ZonalPresenceNotification { - CallbackData callbackData optional, - ZoneId zoneId, - Address address_, - InterestRealm interestRealm optional, - UserEventType userEventType, - CurrentAccessPointId currentAccessPointId, - PreviousAccessPointId previousAccessPointId optional, - TimeStamp timestamp_, - Link link optional - } with { - variant (address_) "name as 'address'"; - variant (timestamp_) "name as 'timestamp'"; - } - - /** - * @desc A type containing zonal traffic subscription - * @member clientCorrelator A correlator that the client can use to tag this particular resource representation during a request to create a resource on the server - * @member callbackReference - * @member zoneId Identifier of zone - * @member interestRealm Interest realms of access points within a zone (e.g. geographical area, a type of industry etc.). - * @member userEventCriteria List of user event values to generate notifications for (these apply to zone identifier or all interest realms within zone identifier specified). If this element is missing, a notification is requested to be generated for any change in user event. - * @member duration Period (in seconds) of time notifications are provided for - * @member resourceURL Self referring URL - */ - type record ZonalTrafficSubscription { - ClientCorrelator clientCorrelator optional, - CallbackReference callbackReference, - ZoneId zoneId, - InterestRealm interestRealm optional, - UserEventCriteria userEventCriteria optional, - Duration duration optional, - ResourceURL resourceURL optional - } - /** * @desc Identifier of zone */ type Json.String ZoneId; - /** - * @desc A type containing zone status notification. - * @member callbackData CallBackData if passed by the application during the associated ZoneStatusSubscription operation - * @member zoneId Identifier of zone - * @member accessPointId Identifier of an access point - * @member numberOfUsersInZone This element shall be present when ZoneStatusSubscription includes numberOfUsersZoneThreshold element and the number of users in a zone exceeds the threshold defined in this subscription - * @member numberOfUsersInAP This element shall be present when ZoneStatusSubscription includes numberOfUsersAPThreshold element and the number of users in an access point exceeds the threshold defined in the subscription - * @member operationStatus - * @member timestamp_ - * @member link Link to other resources that are in relationship with this notification - */ - type record ZoneStatusNotification { - CallbackData callbackData optional, - ZoneId zoneId, - AccessPointId accessPointId optional, - NumberOfUsersInZone numberOfUsersInZone optional, - NumberOfUsersInAP numberOfUsersInAP optional, - OperationStatus operationStatus optional, - TimeStamp timestamp_, - Link link optional - } with { - variant (timestamp_) "name as 'timestamp'"; - } - /** * @desc A type containing zone status subscription. * @member clientCorrelator A correlator that the client can use to tag this particular resource representation during a request to create a resource on the server @@ -526,7 +698,7 @@ REST_NetAPI_Common]. NumberOfUsersZoneThreshold numberOfUsersZoneThreshold optional, NumberOfUsersAPThreshold numberOfUsersAPThreshold optional, OperationStatus operationStatus optional - } + } // End of type ZoneStatusSubscription /** * @desc A type containing data for notifications, when the area is defined as a circle @@ -555,16 +727,16 @@ REST_NetAPI_Common]. UInt32 duration optional, EnteringLeavingCriteria enteringLeavingCriteria, UInt32 frequency, - Json.Number latitude, + Latitude latitude, Link link optional, - Json.Number longitude, + Longitude longitude, Json.Number radius, Json.AnyURI requester optional, ResourceURL resourceURL optional, Json.Number trackingAccuracy } with { variant (address_) "name as 'address'"; - } + } // End of type CircleNotificationSubscription type enumerated EnteringLeavingCriteria { Entering, @@ -576,6 +748,7 @@ REST_NetAPI_Common]. * @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 Date and time that location from which distance is calculated was collected + * @see OMA-TS-REST_NetAPI_TerminalLocation-V1_0_1-20151029-A Clause 5.2.2.5 Type: TerminalDistance */ type record TerminalDistance { Json.Number distance, @@ -587,6 +760,11 @@ REST_NetAPI_Common]. /** * @desc Distance criterium + * @member AllWithinDistance All monitored devices are within the specified distance + * @member AnyWithinDistance Any of monitored devices gets within the specified distance + * @member AllBeyondDistance All monitored devices are beyond the specified distance + * @member AnyBeyondDistance Any of monitored devices gets beyond the specified distance + * @see OMA-TS-REST_NetAPI_TerminalLocation-V1_0_1-20151029-A Clause 5.2.3.2 Enumeration: DistanceCriteria */ type enumerated DistanceCriteria { AllWithinDistance, @@ -596,147 +774,454 @@ REST_NetAPI_Common]. } /** - * @desc A type containing data for distance subscription, with reference to other devices - * @member callbackReference - * @member checkImmediate Check location immediately after establishing notification + * @desc A type containing device address, retrieval status and location information + * @member address_ Address of the terminal to which the location information applies (e.g., 'sip' URI, 'tel' URI, 'acr' URI) + * @member locationRetrievalStatus Status of retrieval for this terminal address + * @member currentLocation Location of terminal + * @member errorInformation Used to indicate a notification termination or cancellation + * @see OMA-TS-REST_NetAPI_TerminalLocation-V1_0_1-20151029-A Clause 5.2.2.1 Type: TerminalLocation + * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.2.1A Terminal location data types + */ + type record TerminalLocation { + Address address_, + RetrievalStatus locationRetrievalStatus, + LocationInfo currentLocation optional, + ServiceError errorInformation optional + } with { + variant (address_) "name as 'address'"; + } // End of type TerminalLocation + type record of TerminalLocation TerminalLocationList + + /** + * @desc This type contains a list of subscriptions + * @member href The URI referring to the subscription + * @member subscriptionType Type of the subscription + * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.3.3 Type: NotificationSubscriptionList + */ + type record Subscription { + Json.AnyURI href optional, + Json.String subscriptionType + } + + /** + * @desc This type contains a list of subscriptions + * @member subscription Subscription element + * @member resourceURL Self-referring URL + * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.3.3 Type: NotificationSubscriptionList + */ + type record NotificationSubscriptionList { + Subscription subscription optional, + ResourceURL resourceURL + } + + /** + * @desc This type represents a subscription to the notifications from location server about events related with user location + * @member subscriptionType Shall be set to "UserLocationEventSubscription" * @member clientCorrelator A correlator that the client can use to tag this particular resource representation during a request to create a resource on the server - * @member count Maximum number of notifications per individual address. For no maximum, either do not include this element or specify a value of zero. Default value is 0 - * @member criteria - * @member distance Distance between devices that shall be monitored - * @member duration Period of time (in seconds) notifications are provided for. If set to “0” (zero), a default duration time, which is specified by the service policy, will be used. If the parameter is omitted, the notifications will continue until the maximum duration time, which is specified by the service policy, unless the notifications are stopped by deletion of subscription for notifications - * @member frequency Maximum frequency (in seconds) of notifications per subscription (can also be considered minimum time between notifications) - * @member link Link to other resources that are in relationship with the resource - * @member monitoredAddress Contains addresses of devices to monitor (e.g., 'sip' URI, 'tel' URI, 'acr' URI) - * @member referenceAddress Indicates address of each device that will be used as reference devices from which the distances towards monitored devices indicated in the Addresses will be monitored (e.g., 'sip' URI, 'tel' URI, 'acr' URI) - * @member requester Identifies the entity that is requesting the information (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI) - * @member resourceURL Self referring URL - * @member trackingAccuracy Number of meters of acceptable error in tracking distance + * @member callbackReference URI exposed by the client on which to receive notifications via HTTP + * @member requestTestNotification Set to TRUE by the service consumer to request a test notification via HTTP on the callbackReference URI, as specified in ETSI GS MEC 009 [4] + * @member websockNotifConfig Provides details to negotiate and signal the use of a Websocket connection between the location server and the service consumer for notifications + * @member _links Hyperlink related to the resource + * @member address Address of user (e.g. 'sip' URI, 'tel' URI, 'acr' URI) to monitor + * @member userEventPara Requirements for user event reporting. + * @member locationEventCriteria List of user event values to generate notifications for (these apply to address specified). + * @member expiryDeadline The expiration time of the subscription determined by the UE Location Subscribe Service + * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.3.4 Type: UserLocationEventSubscription */ - type record DistanceNotificationSubscription { - CallbackReference callbackReference, - Json.Bool checkImmediate, - ClientCorrelator clientCorrelator optional, - UInt32 count optional, - DistanceCriteria criteria, - Json.Number distance, - UInt32 duration optional, - UInt32 frequency, - Link link optional, - Addresses monitoredAddress, - Addresses referenceAddress optional, - Json.AnyURI requester optional, - ResourceURL resourceURL optional, - Json.Number trackingAccuracy - } + type record UserLocationEventSubscription { + Json.String subscriptionType, + Json.String clientCorrelator optional, + Json.AnyURI callbackReference optional, + Json.Bool requestTestNotification optional, + WebsockNotifConfig websockNotifConfig optional, + Links links_ optional, + Address address_, + UserEventPara userEventPara optional, + LocationEventCriteria locationEventCriteria optional, + TimeStamp expiryDeadline optional + } with { + variant (links_) "name as '_links'"; + variant (address_) "name as 'address'"; + } // End of type UserLocationEventSubscription /** - * @desc A type containing data for periodic subscription - * @member address_ Address of terminals to monitor (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI) - * @member callbackReference + * @desc This type represents a subscription to the notifications from location server about events triggered by timer expiration + * @member subscriptionType Shall be set to "UserLocationEventSubscription" * @member clientCorrelator A correlator that the client can use to tag this particular resource representation during a request to create a resource on the server - * @member duration Period of time (in seconds) notifications are provided for. If set to “0” (zero), a default duration time, which is specified by the service policy, will be used. If the parameter is omitted, the notifications will continue until the maximum duration time, which is specified by the service policy, unless the notifications are stopped by deletion of subscription for notifications - * @member frequency Maximum frequency (in seconds) of notifications per subscription (can also be considered minimum time between notifications) - * @member link Link to other resources that are in relationship with the resource - * @member monitoredAddress Contains addresses of devices to monitor (e.g., 'sip' URI, 'tel' URI, 'acr' URI) - * @member requestedAccuracy Accuracy of the provided distance in meters - * @member requester Identifies the entity that is requesting the information (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI) - * @member resourceURL Self referring URL + * @member callbackReference URI exposed by the client on which to receive notifications via HTTP + * @member requestTestNotification Set to TRUE by the service consumer to request a test notification via HTTP on the callbackReference URI, as specified in ETSI GS MEC 009 [4] + * @member websockNotifConfig Provides details to negotiate and signal the use of a Websocket connection between the location server and the service consumer for notifications + * @member _links Hyperlink related to the resource + * @member address_ Address of user (e.g. 'sip' URI, 'tel' URI, 'acr' URI) to monitor + * @member periodicEventInfo Information for periodic event reporting + * @member expiryDeadline The expiration time of the subscription determined by the UE Location Subscribe Service + * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.3.5 Type: UserLocationPeriodicSubscription */ - type record PeriodicNotificationSubscription { - Addresses address_, - CallbackReference callbackReference, - ClientCorrelator clientCorrelator optional, - UInt32 duration optional, - UInt32 frequency, - Link link optional, - UInt32 requestedAccuracy, - Json.AnyURI requester optional, - ResourceURL resourceURL optional + type record UserLocationPeriodicSubscription{ + Json.String subscriptionType, + Json.String clientCorrelator optional, + Json.AnyURI callbackReference optional, + Json.Bool requestTestNotification optional, + WebsockNotifConfig websockNotifConfig optional, + Links links_ optional, + Address address_, + PeriodicEventInfo periodicEventInfo, + TimeStamp expiryDeadline optional } with { + variant (links_) "name as '_links'"; variant (address_) "name as 'address'"; + } // End of type UserLocationPeriodicSubscription + + /** + * @desc Information for periodic event reporting + * @member reportingAmount Number of event reports + * @member reportingInterval Interval of event reports + * @see ETSI TS 129 572 V16.7.0 Clause 6.1.6.2.24 Type: PeriodicEventInfo + */ + type record PeriodicEventInfo { + ReportingAmount reportingAmount, + ReportingInterval reportingInterval + } // End of type PeriodicEventInfo + + /** + * @desc Number of required periodic event reports. + * Minimum: 1. Maximum: 8639999. + * @see ETSI TS 129 572 V16.7.0 Clause 6.1.6.3.2 Simple data types + */ + type integer ReportingAmount; + + /** + * @desc Event reporting periodic interval in seconds. + * Minimum: 1. Maximum: 8639999. + * @remark ReportingInterval * ReportingAmount shall not exceed 8639999 + * @see ETSI TS 129 572 V16.7.0 Clause 6.1.6.3.2 Simple data types + */ + type integer ReportingInterval; + + /** + * @desc This type represents a subscription to the notifications from location server about user location events happened in the zone + * @desc This type represents a subscription to the notifications from location server about events related with user location + * @member subscriptionType Shall be set to "UserLocationEventSubscription" + * @member clientCorrelator A correlator that the client can use to tag this particular resource representation during a request to create a resource on the server + * @member callbackReference URI exposed by the client on which to receive notifications via HTTP + * @member requestTestNotification Set to TRUE by the service consumer to request a test notification via HTTP on the callbackReference URI, as specified in ETSI GS MEC 009 [4] + * @member websockNotifConfig Provides details to negotiate and signal the use of a Websocket connection between the location server and the service consumer for notifications + * @member _links Hyperlink related to the resource + * @member zoneId Identifier of zone (e.g. zone001) to monitor + * @member reportingCtrl Provides parameters that ctrl the reporting + * @member expiryDeadline The expiration time of the subscription determined by the UE Location Subscribe Service + * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.3.6 Type: ZoneLocationEventSubscription + */ + type record ZoneLocationEventSubscription { + Json.String subscriptionType, + Json.String clientCorrelator optional, + Json.AnyURI callbackReference optional, + Json.Bool requestTestNotification optional, + WebsockNotifConfig websockNotifConfig optional, + Links links_ optional, + ZoneId zoneId, + LocationEventCriteria locationEventCriteria optional, + ReportingCtrl reportingCtrl optional, + TimeStamp expiryDeadline optional + } with { + variant (links_) "name as '_links'"; + } // End of type ZoneLocationEventSubscription + + /** + * @desc This type represents a subscription to the notifications from location server about the number of users reaching the threshold or the status of access points changing + * @member subscriptionType Shall be set to "UserLocationEventSubscription" + * @member clientCorrelator A correlator that the client can use to tag this particular resource representation during a request to create a resource on the server + * @member callbackReference URI exposed by the client on which to receive notifications via HTTP + * @member requestTestNotification Set to TRUE by the service consumer to request a test notification via HTTP on the callbackReference URI, as specified in ETSI GS MEC 009 [4] + * @member websockNotifConfig Provides details to negotiate and signal the use of a Websocket connection between the location server and the service consumer for notifications + * @member _links Hyperlink related to the resource + * @member zoneId Identifier of zone (e.g. zone001) to monitor + * @member upperNumberOfUsersZoneThreshold Threshold number of users in a zone which if crossed upward shall cause a notification + * @member lowerNumberOfUsersZoneThreshold Threshold number of users in a zone which if crossed downward shall cause a notification + * @member upperNumberOfUsersAPThreshold Threshold number of users in an access point which if crossed upward shall cause a notification + * @member lowerNumberOfUsersAPThresholdThreshold number of users in an access point which ifcrossed downward shall cause a notification + * @member operationStatus List of operation status values to generate notifications for (these apply to all access points within a zone) + * @member reportingCtrl Provides parameters that ctrl the reporting + * @member expiryDeadline The expiration time of the subscription determined by the UE Location Subscribe Service + * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.3.7 Type: ZoneStatusSubscription + */ + type record ZoneStatusSubscription { + Json.String subscriptionType, + Json.String clientCorrelator optional, + Json.AnyURI callbackReference optional, + Json.Bool requestTestNotification optional, + WebsockNotifConfig websockNotifConfig optional, + Links links_ optional, + ZoneId zoneId, + Json.UInteger upperNumberOfUsersZoneThreshold optional, + Json.UInteger lowerNumberOfUsersZoneThreshold optional, + Json.UInteger upperNumberOfUsersAPThreshold optional, + Json.UInteger lowerNumberOfUsersAPThreshold optional, + OperationStatus operationStatus optional, + ReportingCtrl reportingCtrl optional, + TimeStamp expiryDeadline optional + } with { + variant (links_) "name as '_links'"; + } // End of type ZoneStatusSubscription + + /** + * @desc This type represents a subscription to the notifications from location server about user location events happened in the area. + * @member subscriptionType Shall be set to "UserLocationEventSubscription" + * @member clientCorrelator A correlator that the client can use to tag this particular resource representation during a request to create a resource on the server + * @member callbackReference URI exposed by the client on which to receive notifications via HTTP + * @member requestTestNotification Set to TRUE by the service consumer to request a test notification via HTTP on the callbackReference URI, as specified in ETSI GS MEC 009 [4] + * @member websockNotifConfig Provides details to negotiate and signal the use of a Websocket connection between the location server and the service consumer for notifications + * @member _links Hyperlink related to the resource + * @member areaDefine The parameters describing the area to subscribe + * @member trackingAccuracy Number of meters of acceptable error + * @member reportingCtrl Provides parameters that ctrl the reporting + * @member locationEventCriteria List of user event values to generate notifications for (these apply to address specified) + * @member reportingLocationReq This IE shall be set to true if a location estimate is required for each event report + * @member expiryDeadline The expiration time of the subscription determined by the UE Location Subscribe Service + * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.3.8 Type: UserAreaSubscription + */ + type record UserAreaSubscription { + Json.String subscriptionType, + Json.String clientCorrelator optional, + Json.AnyURI callbackReference optional, + Json.Bool requestTestNotification optional, + WebsockNotifConfig websockNotifConfig optional, + Links links_ optional, + AreaDefine areaDefine, + Json.Number trackingAccuracy, + LocationEventCriteria locationEventCriteria optional, + ReportingCtrl reportingCtrl optional, + Json.Bool reportingLocationReq optional, + TimeStamp expiryDeadline optional + } with { + variant (links_) "name as '_links'"; + } // End of type UserAreaSubscription + + /** + * @desc This type represents a subscription to the notifications from location server about changes in the geographical relationships between monitored users or between monitored users and reference users + * @member subscriptionType Shall be set to "UserLocationEventSubscription" + * @member clientCorrelator A correlator that the client can use to tag this particular resource representation during a request to create a resource on the server + * @member callbackReference URI exposed by the client on which to receive notifications via HTTP + * @member requestTestNotification Set to TRUE by the service consumer to request a test notification via HTTP on the callbackReference URI, as specified in ETSI GS MEC 009 [4] + * @member websockNotifConfig Provides details to negotiate and signal the use of a Websocket connection between the location server and the service consumer for notifications + * @member _links Hyperlink related to the resource + * @member referenceAddress If specified, indicates address of each user that will be used as reference users from which the distances towards monitored users indicated in the Addresses will be monitored + * @member monitoredAddress Contains addresses of users to monitor (e.g. 'sip' URI, 'tel' URI, 'acr' URI). Reference to a group could be provided here if supported by implementation + * @member distance Distance between users that shall be monitored. The unit is meter + * @member trackingAccuracy Number of meters of acceptable error in tracking distance + * @member criteria Indicates whether the notification should occur when the geographical relationship between monitored and referenced users' changes + * @member checkImmediate Check location immediately after establishing notification + * @member reportingCtrl Provides parameters that ctrl the reporting + * @member locationEventCriteria List of user event values to generate notifications for (these apply to address specified) + * @member expiryDeadline The expiration time of the subscription determined by the UE Location Subscribe Service + * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.3.9 Type: UserDistanceSubscription + */ + type record UserDistanceSubscription { + Json.String subscriptionType, + Json.String clientCorrelator optional, + Json.AnyURI callbackReference optional, + Json.Bool requestTestNotification optional, + WebsockNotifConfig websockNotifConfig optional, + Links links_ optional, + Json.AnyURI referenceAddress optional, + Json.AnyURIArray monitoredAddress, + Json.Number distance, + Json.Number trackingAccuracy, + DistanceCriteria criteria, + Json.Bool checkImmediate, + Json.Number trackingAccuracy, + LocationEventCriteria locationEventCriteria optional, + ReportingCtrl reportingCtrl optional, + TimeStamp expiryDeadline optional + } with { + variant (links_) "name as '_links'"; + } // End of type UserDistanceSubscription + + /** + * @desc This type represents a test notification from a location server to determine if the Websocket method is to be utilized for the location server to issue notifications for a subscription, as defined in clause 6.12a of ETSI GS MEC 009 [4] + * @member notificationType Shall be set to "TestNotification" + * @member _links Hyperlink related to the resource + * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.4.3 Type: TestNotification + */ + type record TestNotification { + Json.String notificationType, + LinksSubscription links_ + } with { + variant (links_) "name as '_links'"; } - type record of Json.String Variables; /** - * @desc Used to indicate a notification termination or cancellation - * @member messageId Message identifier, either with prefix SVC or with prefix POL - * @member text Message text, with replacement variables marked with %n, where n is an index into the list of elements, starting at 1 - * @member variables Variables to substitute into text string + * @desc Hyperlink related to the resource + * @member Identifying the subscription for the test notification + * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.4.3 Type: TestNotification + * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.4.4 Type: UserLoctiationEventNotification */ - type record ServiceError { - Json.String messageId, - Json.String text, - Variables variables optional + type record LinksSubscription { + Link subscription } /** - * @desc A type containing device address, retrieval status and location information - * @member address_ Address of the terminal to which the location information applies (e.g., 'sip' URI, 'tel' URI, 'acr' URI) - * @member currentLocation - * @member errorInformation Used to indicate a notification termination or cancellation - * @member locationRetrievalStatus + * @desc This type represents a notification from location server with regards to UE location event. + * @member notificationType Shall be set to "UserLocationEventNotification" + * @member timeStamp TimeStamp + * @member address_ Address of user (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI) + * @member userLocationEvent The specific event triggering this notification + * @member locationInfo The geographical coordinates where the user is + * @member civicInfo Contextual information of a user location + * @member relativeLocationInfo The relative location in a reference system + * @member zoneId The identity of the zone + * @member accessPointId The identity of the access point + * @member _links Object containing hyperlinks related to the resource + * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.4.4 Type: UserLoctiationEventNotification */ - type record TerminalLocation { + type record UserLoctiationEventNotification { + Json.String notificationType, + TimeStamp timeStamp optional, Address address_, - LocationInfo currentLocation optional, - ServiceError errorInformation optional, - RetrievalStatus locationRetrievalStatus + LocationEventType userLocationEvent, + LocationInfo locationInfo optional, + CivicAddress civicInfo optional, + RelativeLocationInfo relativeLocationInfo optional, + ZoneId zoneId optional, + AccessPointId accessPointId optional, + Links links_ } with { + variant (links_) "name as '_links'"; variant (address_) "name as 'address'"; - } - type record of TerminalLocation TerminalLocationList + } // End of type UserLoctiationEventNotification /** - * @desc A type containing the notification subscription - * @member callbackData CallbackData if passed by the application in the receiptRequest element during the associated subscription operation - * @member link Link to other resources that are in relationship with the resource - * @member isFinalNotification Set to true if it is a final notification about location change - * @member terminalLocation Collection of the terminal locations + * @desc This type represents a notification from location server with regards to UE location periodic reporting. + * @member notificationType Shall be set to "UserLocationPeriodicNotification" + * @member timeStamp TimeStamp + * @member address_ Address of user (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI) + * @member userLocationEvent The specific event triggering this notification + * @member locationInfo The geographical coordinates where the user is + * @member civicInfo Contextual information of a user location + * @member relativeLocationInfo The relative location in a reference system + * @member zoneId The identity of the zone + * @member accessPointId The identity of the access point + * @member isFinalNotification Shall be set to true if it is a final notification + * @member _links Object containing hyperlinks related to the resource + * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.4.5 Type: UserLocationPeriodicNotification */ - type record SubscriptionNotification { - CallbackData callbackData optional, - DistanceCriteria distanceCriteria optional, + type record UserLocationPeriodicNotification { + Json.String notificationType, + TimeStamp timeStamp optional, + Address address_, + LocationEventType userLocationEvent, + LocationInfo locationInfo optional, + CivicAddress civicInfo optional, + RelativeLocationInfo relativeLocationInfo optional, + ZoneId zoneId optional, + AccessPointId accessPointId optional, Json.Bool isFinalNotification optional, - Link link optional, - TerminalLocationList terminalLocation - } + Links links_ + } with { + variant (links_) "name as '_links'"; + variant (address_) "name as 'address'"; + } // End of type UserLocationPeriodicNotification /** - * @desc A type containing the subscription cancellation notification - * @member address_ Address of terminal if the error applies to an individual terminal - * @member callbackData CallbackData if passed by the application in the receiptRequest element during the associated subscription operation - * @member link Link to other resources that are in relationship with the resource - * @member reason Used to indicate a notification termination or cancellation + * @desc This type represents a notification from location server with regards to UE location periodic reporting. + * @member notificationType Shall be set to "ZoneLocationEventNotification" + * @member timeStamp TimeStamp + * @member address_ Address of user (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI) + * @member userLocationEvent The specific event triggering this notification + * @member zoneId The identity of the zone + * @member _links Object containing hyperlinks related to the resource + * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.4.6 Type: ZoneLocationEventNotification */ - type record SubscriptionCancellationNotification { + type record ZoneLocationEventNotification { + Json.String notificationType, + TimeStamp timeStamp optional, Address address_, - CallbackData callbackData optional, - Link link optional, - ServiceError reason + LocationEventType userLocationEvent, + ZoneId zoneId optional, + Links links_ } with { + variant (links_) "name as '_links'"; variant (address_) "name as 'address'"; + } // End of type ZoneLocationEventNotification + + /** + * @desc This type represents a notification from location server with regards to status changing event or user number threshold event happened in a zone + * @member notificationType Shall be set to "ZoneStatusNotification" + * @member timeStamp TimeStamp + * @member userNumEvent + * @member operationStatus The specific event triggering this notification + * @member zoneId The identity of the zone + * @member accessPointId The identity of the access point + * @member _links Object containing hyperlinks related to the resource + * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.4.7 Type: ZoneStatusNotification + */ + type record ZoneStatusNotification { + Json.String notificationType, + TimeStamp timeStamp optional, + UserNumEvent userNumEvent optional, + OperationStatus operationStatus optional, + ZoneId zoneId optional, + AccessPointId accessPointId optional, + Links links_ + } with { + variant (links_) "name as '_links'"; + variant (address_) "name as 'address'"; + } // End of type ZoneStatusNotification + + type enumerated UserNumEvent { + OVER_ZONE_UPPER_THD, + UNDER_ZONE_LOWER_THD, + OVER_AP_UPPER_THD, + UNDER_AP_LOWER_THD + } with { + variant "JSON: as number" } /** - * @desc This type contains a list of subscriptions - * @member zonalTrafficSubscription Collection of ZonalTrafficSubscription elements - * @member userTrackingSubscription Collection of UserTrackingSubscription elements - * @member periodicTrackingSubscription Collection of PeriodicNotificationSubscription elements - * @member zoneStatusSubscription Collection of ZoneStatusSubscription elements - * @member circleNotificationSubscription Collection of CircleNotificationSubscription elements - * @member distanceNotificationSubscription Collection of DistanceNotificationSubscription elements - * @member resourceURL Self-referring URL - * @ see ETSI GS MEC 013 V2.1.1 (2019-09) Clause 6.3.3 Type: NotificationSubscriptionList + * @desc This type represents a notification from location server with regards to UE location events happened in an area. + * @member notificationType Shall be set to "UserAreaNotification" + * @member timeStamp TimeStamp + * @member address_ Address of user (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI) + * @member locationInfo The geographical coordinates where the user is + * @member civicInfo Contextual information of a user location + * @member relativeLocationInfo The relative location in a reference system + * @member userLocationEvent The specific event triggering this notification + * @member _links Object containing hyperlinks related to the resource + * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.4.8 Type: UserAreaNotification */ - type record NotificationSubscriptionList { - ZonalTrafficSubscription zonalTrafficSubscription optional, - UserTrackingSubscription userTrackingSubscription optional, - PeriodicTrackingSubscription periodicTrackingSubscription optional, - ZoneStatusSubscription zoneStatusSubscription optional, - CircleNotificationSubscription circleNotificationSubscription optional, - DistanceNotificationSubscription distanceNotificationSubscription optional, - ResourceURL resourceURL - } + type record UserAreaNotification { + Json.String notificationType, + TimeStamp timeStamp optional, + Address address_, + LocationInfo locationInfo optional, + CivicAddress civicInfo optional, + RelativeLocationInfo relativeLocationInfo optional, + LocationEventType userLocationEvent, + Links links_ + } with { + variant (links_) "name as '_links'"; + variant (address_) "name as 'address'"; + } // End of type UserAreaNotification + + /** + * @desc This type represents a notification from location server with regards to UE location events happened in an area. + * @member notificationType Shall be set to "UserDistanceNotification" + * @member timeStamp TimeStamp + * @member monitoredUsers Indicates the location information related to monitored users + * @member distanceEvent Indicates the distance event triggering the notification + * @member _links Object containing hyperlinks related to the resource + * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.4.9 Type: UserDistanceNotification + */ + type record UserAreaNotification { + Json.String notificationType, + TimeStamp timeStamp optional, + UserList monitoredUsers, + DistanceCriteria distanceEvent, + Links links_ + } with { + variant (links_) "name as '_links'"; + } // End of type UserDistanceNotification + } with { encode "JSON" } // End of module LocationAPI_TypesAndValues diff --git a/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Functions.ttcn b/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Functions.ttcn index c9a0eb4..36ab7e9 100644 --- a/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Functions.ttcn +++ b/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Functions.ttcn @@ -130,7 +130,7 @@ module TrafficManagementAPI_Functions { { m_session_filter( "10.10.10.10", - {"1010"} + 1010 ) } // FlowFilter )))))); diff --git a/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Templates.ttcn b/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Templates.ttcn index d4dbaf5..1010b10 100644 --- a/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Templates.ttcn +++ b/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Templates.ttcn @@ -76,7 +76,7 @@ module TrafficManagementAPI_Templates { allocationDirection := p_allocationDirection } // End of template mw_bw_info_deltas - template (omit) SessionFilterItems m_session_filter( + template (omit) SessionFilterItem m_session_filter( in template (value) SourceIp p_sourceIp, in template (value) SourcePort p_sourcePort, in template (omit) DstAddress p_dstAddress := omit, @@ -90,7 +90,7 @@ module TrafficManagementAPI_Templates { protocol := p_protocol } // End of template m_session_filter - template SessionFilterItems mw_session_filter( + template SessionFilterItem mw_session_filter( template (present) SourceIp p_sourceIp := ?, template (present) SourcePort p_sourcePort := ?, template DstAddress p_dstAddress := *, @@ -160,6 +160,34 @@ module TrafficManagementAPI_Templates { trafficDirection := p_trafficDirection } // End of template mw_mts_session_info + template (omit) FlowFilterItem m_flow_filter( + in template (value) SourceIp p_sourceIp, + in template (value) SourcePort p_sourcePort, + in template (omit) DstAddress p_dstAddress := omit, + in template (omit) DstPort p_dstPort := omit, + in template (omit) Protocol p_protocol := omit + ) := { + sourceIp := p_sourceIp, + sourcePort := p_sourcePort, + dstAddress := p_dstAddress, + dstPort := p_dstPort, + protocol := p_protocol + } // End of template m_flow_filter + + template FlowFilterItem mw_flow_filter( + template (present) SourceIp p_sourceIp := ?, + template (present) SourcePort p_sourcePort := ?, + template DstAddress p_dstAddress := *, + template DstPort p_dstPort := *, + template Protocol p_protocol := * + ) := { + sourceIp := p_sourceIp, + sourcePort := p_sourcePort, + dstAddress := p_dstAddress, + dstPort := p_dstPort, + protocol := p_protocol + } // End of template mw_flow_filter + template (value) QosD m_qosd( in UInt32 p_minTpt := 128, in UInt32 p_maxLatency := 128, diff --git a/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_TypesAndValues.ttcn b/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_TypesAndValues.ttcn index ad32259..1e83b9d 100644 --- a/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_TypesAndValues.ttcn @@ -8,6 +8,7 @@ module TrafficManagementAPI_TypesAndValues { /** * @desc Information of bandwidth resource + * @member allocationId Bandwidth allocation instance identifier * @member timeStamp Time stamp to indicate when the corresponding information elements are sent * @member appInsId Application instance identifier * @member sessionFilter Session filtering criteria, applicable when requestType is set as SESSION_SPECIFIC_BW_ALLOCATION. Any filtering criteria shall define a single session only @@ -15,8 +16,10 @@ module TrafficManagementAPI_TypesAndValues { * @member fixedBWPriority Indicates the allocation priority when dealing with several applications or sessions in parallel. Values are not defined in the present document * @member fixedAllocation Size of requested fixed BW allocation in [bps] * @member allocationDirection The direction of the requested BW allocation + * @see ETSI GS MEC 015 V2.2.1 (2022-12) Clause 7.2.2 Type: BwInfo */ type record BwInfo { + AllocationId allocationId optional, TimeStamp timeStamp optional, AppInsId appInsId, BwRequestType requestType, @@ -29,14 +32,17 @@ module TrafficManagementAPI_TypesAndValues { /** * @desc Conform to JSON merge patch format and processing rules specified IETF RFC 7396 [8], this type represents the attributes whose value are allowed to be updated with HTTP PATCH method in content format JSON + * @member allocationId Bandwidth allocation instance identifier * @member appInsId Application instance identifier * @member requestType Numeric value (0 - 255) corresponding to specific type of consumer * @member sessionFilter Session filtering criteria, applicable when requestType is set as SESSION_SPECIFIC_BW_ALLOCATION * @member fixedBWPriority Indicates the allocation priority when dealing with several applications or sessions in parallel * @member fixedAllocation Size of requested fixed BW allocation in [bps] * @member allocationDirection The direction of the requested BW allocation + * @see ETSI GS MEC 015 V2.2.1 (2022-12) Clause 7.2.3 Type: BwInfoDeltas */ type record BwInfoDeltas { + Json.String allocationId, AppInsId appInsId, BwRequestType requestType, SessionFilter sessionFilter optional, @@ -49,19 +55,28 @@ module TrafficManagementAPI_TypesAndValues { * @desc Time stamp description * @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 015 V2.2.1 (2022-12) Clause 7.2.2 Type: BwInfo */ type record TimeStamp { Seconds seconds, NanoSeconds nanoSeconds } + /** + * @desc Bandwidth allocation instance identifier + * @see ETSI GS MEC 015 V2.2.1 (2022-12) Clause 7.2.2 Type: BwInfo + */ + type Json.String AllocationId; + /** * @desc Application instance identifier + * @see ETSI GS MEC 015 V2.2.1 (2022-12) Clause 7.2.2 Type: BwInfo */ type Json.String AppInsId; /** * @desc Numeric value (0 - 255) corresponding to specific type of consumer + * @see ETSI GS MEC 015 V2.2.1 (2022-12) Clause 7.2.2 Type: BwInfo */ type enumerated BwRequestType { APPLICATION_SPECIFIC_BW_ALLOCATION (0), @@ -70,6 +85,10 @@ module TrafficManagementAPI_TypesAndValues { variant "JSON: as number" } + /** + * @desc Numeric value (0 - 255) corresponding to specific type of consumer + * @see ETSI GS MEC 015 V2.2.1 (2022-12) 7.2.5 Type: MtsSessionInfo + */ type enumerated MtsRequestType { APPLICATION_SPECIFIC_MTS_ALLOCATION (0), SESSION_SPECIFIC_MTS_ALLOCATION (1) @@ -79,8 +98,9 @@ module TrafficManagementAPI_TypesAndValues { /** * @desc Session filtering criteria, applicable when requestType is set as SESSION_SPECIFIC_BW_ALLOCATION. Any filtering criteria shall define a single session only. In case multiple sessions match sessionFilter the request shall be rejected + * @see ETSI GS MEC 015 V2.2.1 (2022-12) Clause 7.2.2 Type: BwInfo */ - type record of SessionFilterItems SessionFilter; + type record of SessionFilterItem SessionFilter; /** * @desc Session filtering criteria, applicable when requestType is set as SESSION_SPECIFIC_BW_ALLOCATION. Any filtering criteria shall define a single session only. In case multiple sessions match sessionFilter the request shall be rejected * @member sourceIp Source address identity of session (including range) @@ -88,8 +108,9 @@ module TrafficManagementAPI_TypesAndValues { * @member dstAddress Destination address identity of session (including range) * @member dstPort Destination port identity of session * @member protocol Protocol number + * @see ETSI GS MEC 015 V2.2.1 (2022-12) Clause 7.2.2 Type: BwInfo */ - type record SessionFilterItems { + type record SessionFilterItem { SourceIp sourceIp optional, SourcePort sourcePort optional, DstAddress dstAddress optional, @@ -98,7 +119,8 @@ module TrafficManagementAPI_TypesAndValues { } /** - * @desc Indicates the allocation priority when dealing with several applications or sessions in parallel. Values are not defined in the present document + * @desc Indicates the allocation priority when dealing with several applications or sessions in parallel. + * @see ETSI GS MEC 015 V2.2.1 (2022-12) Clause 7.2.2 Type: BwInfo */ type enumerated FixedBWPriority { reserved @@ -106,22 +128,26 @@ module TrafficManagementAPI_TypesAndValues { /** * @desc Size of requested fixed BW allocation in [bps] + * @see ETSI GS MEC 015 V2.2.1 (2022-12) Clause 7.2.2 Type: BwInfo */ type Json.String FixedAllocation; /** * @desc The seconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC + * @see ETSI GS MEC 015 V2.2.1 (2022-12) Clause 7.2.2 Type: BwInfo */ type UInt32 Seconds; /** * @desc The nanoseconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC + * @see ETSI GS MEC 015 V2.2.1 (2022-12) Clause 7.2.2 Type: BwInfo */ type UInt32 NanoSeconds; /** * @desc The direction of the requested BW allocation + * @see ETSI GS MEC 015 V2.2.1 (2022-12) Clause 7.2.2 Type: BwInfo */ type enumerated AllocationDirection { Downlink, @@ -131,26 +157,31 @@ module TrafficManagementAPI_TypesAndValues { /** * @desc Source address identity of session (including range) + * @see ETSI GS MEC 015 V2.2.1 (2022-12) Clause 7.2.2 Type: BwInfo */ type Json.String SourceIp; /** * @desc Source port identity of session + * @see ETSI GS MEC 015 V2.2.1 (2022-12) Clause 7.2.2 Type: BwInfo */ - type record of Json.String SourcePort; + type Json.UInteger SourcePort; /** * @desc Destination address identity of session (including range) + * @see ETSI GS MEC 015 V2.2.1 (2022-12) Clause 7.2.2 Type: BwInfo */ type Json.String DstAddress; /** * @desc Destination port identity of session + * @see ETSI GS MEC 015 V2.2.1 (2022-12) Clause 7.2.2 Type: BwInfo */ - type record of Json.String DstPort; + type Json.UInteger DstPort; /** * @desc Protocol number + * @see ETSI GS MEC 015 V2.2.1 (2022-12) Clause 7.2.2 Type: BwInfo */ type Json.String Protocol; @@ -159,6 +190,7 @@ module TrafficManagementAPI_TypesAndValues { * @member timeStamp Time stamp to indicate when the corresponding information elements are sent * @member mtsAccessInfo The information on access network connection as defined below * @member mtsMode Numeric value corresponding to a specific MTS operation supported by the TMS + * @see ETSI GS MEC 015 V2.2.1 (2022-12) Clause 7.2.4 Type: MtsCapabilityInfo */ type record MtsCapabilityInfo { TimeStamp timeStamp optional, @@ -166,6 +198,10 @@ module TrafficManagementAPI_TypesAndValues { MtsModes mtsMode } + /** + * @desc The information on access network connection as defined below + * @see ETSI GS MEC 015 V2.2.1 (2022-12) Clause 7.2.4 Type: MtsCapabilityInfo + */ type enumerated MtsMode { LowCost (0), LowLatency (1), @@ -182,6 +218,7 @@ module TrafficManagementAPI_TypesAndValues { * @member accessId Unique identifier for the access network connection * @member accessType Numeric value (0-255) corresponding to specific type of access network * @member metered Numeric value (0-255) + * @see ETSI GS MEC 015 V2.2.1 (2022-12) Clause 7.2.4 Type: MtsCapabilityInfo */ type record MtsAccessInfo { AccessId accessId, @@ -190,7 +227,16 @@ module TrafficManagementAPI_TypesAndValues { } type record of MtsAccessInfo MtsAccessInfos; + /** + * @desc Unique identifier for the access network connection + * @see ETSI GS MEC 015 V2.2.1 (2022-12) Clause 7.2.4 Type: MtsCapabilityInfo + */ type UInt32 AccessId; + + /** + * @desc Numeric value (0-255) corresponding to specific type of access network + * @see ETSI GS MEC 015 V2.2.1 (2022-12) Clause 7.2.4 Type: MtsCapabilityInfo + */ type enumerated AccessType { Unknown (0), IEEE802_11_Based (1), @@ -207,6 +253,11 @@ module TrafficManagementAPI_TypesAndValues { } with { variant "JSON: as number" } + + /** + * @desc Numeric value (0-255) + * @see ETSI GS MEC 015 V2.2.1 (2022-12) Clause 7.2.4 Type: MtsCapabilityInfo + */ type enumerated Metered { CxNotMetered (0), CxMetered (1), @@ -217,36 +268,84 @@ module TrafficManagementAPI_TypesAndValues { /** * @desc The information on access network connection as defined below + * @member sessionId MTS session instance identifier * @member timeStamp Time stamp to indicate when the corresponding information elements are sent * @member appInsId Application instance identifier + * @member appName Name of the application * @member requestType Numeric value (0 - 255) corresponding to specific type of consumer * @member flowFilter Traffic flow filtering criteria, applicable only * @member qosD QoS requirement description of the MTS session * @member mtsMode Numeric value corresponding to a specific MTS operation * @member trafficDirection The direction of the requested MTS session supported by the TMS + * @see ETSI GS MEC 015 V2.2.1 (2022-12) 7.2.5 Type: MtsSessionInfo */ type record MtsSessionInfo { + SessionId sessionId optional, TimeStamp timeStamp optional, AppInsId appInsId, + AppName appName optional, MtsRequestType requestType, - FlowFilter flowFilter optional, + FlowFilter flowFilter, QosD qosD, MtsMode mtsMode, TrafficDirection trafficDirection } type record of MtsSessionInfo MtsSessionInfos - type SessionFilter FlowFilter; + /** + * @desc MTS session instance identifier + * @see ETSI GS MEC 015 V2.2.1 (2022-12) 7.2.5 Type: MtsSessionInfo + */ + type Json.String SessionId; + /** + * @desc Traffic flow filtering criteria, applicable only if when requestType is set as FLOW_SPECIFIC_MTS_SESSION + * @member sourceIp Source address identity of session (including range) + * @member sourcePort Source port identity of session + * @member dstAddress Destination address identity of session (including range) + * @member dstPort Destination port identity of session + * @member protocol Protocol number + * @member dscp DSCP in the IPv4 header or Traffic Class in the IPv6 header + * @member flowlabel Flow Label in the IPv6 header, applicable only if the flow is IPv6 + * @see ETSI GS MEC 015 V2.2.1 (2022-12) 7.2.5 Type: MtsSessionInfo + */ + type record FlowFilterItem { + SourceIp sourceIp optional, + SourcePort sourcePort optional, + DstAddress dstIp optional, + DstPort dstPort optional, + Protocol protocol optional, + Dscp dscp optional, + Flowlabel flowlabel optional + } + type record of FlowFilterItem FlowFilter; + + /** + * @desc The direction of the requested MTS session supported by the TMS + * @see ETSI GS MEC 015 V2.2.1 (2022-12) 7.2.5 Type: MtsSessionInfo + */ type AllocationDirection TrafficDirection; /** - * @desc + * @desc DSCP in the IPv4 header or Traffic Class in the IPv6 header + * @see ETSI GS MEC 015 V2.2.1 (2022-12) Clause 7.2.5 Type: MtsSessionInfo + */ + type Json.UInteger Dscp; + + /** + * @desc Flow Label in the IPv6 header, applicable only if the flow is IPv6 + * @see ETSI GS MEC 015 V2.2.1 (2022-12) Clause 7.2.5 Type: MtsSessionInfo + */ + type Json.UInteger Flowlabel; + + /** + * @desc QoS requirement description of the MTS session, applicable only if mtsMode = 4 (QoS) * @member minTpt Minimal throughput in [kbps] * @member maxLatency Tolerable (one-way) delay in [10 nanoseconds] * @member maxLoss Tolerable packet loss rate in [1/10^x] * @member maxJitter Tolerable jitter in [10 nanoseconds] * @member priority numeric value (0 - 255) corresponding to the traffic priority + * @see ETSI GS MEC 015 V2.2.1 (2022-12) Clause 7.2.5 Type: MtsSessionInfo */ type record QosD { UInt32 minTpt optional, diff --git a/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn b/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn index 0ebeb92..f4b79b4 100644 --- a/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn +++ b/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn @@ -1,18 +1,18 @@ module LibMec_Pixits { - modulepar charstring PX_ME_APP_Q_ZONE_ID_URI := "/location/v2/queries/zones"; + modulepar charstring PX_ME_APP_Q_ZONE_ID_URI := "/location/v3/queries/zones"; - modulepar charstring PX_ME_APP_Q_USERS_LIST_URI := "/location/v2/queries/users"; + modulepar charstring PX_ME_APP_Q_USERS_LIST_URI := "/location/v3/queries/users"; - modulepar charstring PX_ME_APP_Q_DIST_URI := "/location/v2/subscriptions/distance"; + modulepar charstring PX_ME_APP_Q_DIST_URI := "/location/v3/subscriptions/distance"; - modulepar charstring PX_ME_APP_Q_USERS_LOC_SUB_URI := "/location/v2/subscriptions/userTracking"; + modulepar charstring PX_ME_APP_Q_USERS_LOC_SUB_URI := "/location/v3/subscriptions/userTracking"; - modulepar charstring PX_ME_APP_Q_USERS_TRACK_SUB_URI := "/location/v2/subscriptions/periodic"; + modulepar charstring PX_ME_APP_Q_USERS_TRACK_SUB_URI := "/location/v3/subscriptions/periodic"; - modulepar charstring PX_ME_APP_Q_USERS_INF_SUB_URI := "/location/v2/subscriptions/zonalTraffic"; + modulepar charstring PX_ME_APP_Q_USERS_INF_SUB_URI := "/location/v3/subscriptions/zonalTraffic"; - modulepar charstring PX_ME_APP_Q_AREA_SUB_URI := "/location/v2/subscriptions/area/circle"; + modulepar charstring PX_ME_APP_Q_AREA_SUB_URI := "/location/v3/subscriptions/area/circle"; modulepar charstring PX_ME_APP_Q_UE_IDENTITY_ID_URI := "/ui/v1/"; diff --git a/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn b/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn index 5f713e6..b63663e 100644 --- a/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn +++ b/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn @@ -429,18 +429,6 @@ group ams_api { periodicTrackingSubscription := p_periodic_tracking_subscription } // End of template mw_body_json_periodic_rtracking_subscription - template (value) JsonBody m_body_json_zonal_traffic_subscription( - in template (value) ZonalTrafficSubscription p_zonal_traffic_subscription - ) := { - zonalTrafficSubscription := p_zonal_traffic_subscription - } // End of template m_body_json_zonal_traffic_subscription - - template (present) JsonBody mw_body_json_zonal_traffic_subscription( - template (present) ZonalTrafficSubscription p_zonal_traffic_subscription := ? - ) := { - zonalTrafficSubscription := p_zonal_traffic_subscription - } // End of template mw_body_json_zonal_traffic_subscription - template (value) JsonBody m_body_json_circle_notification_subscription( in template (value) CircleNotificationSubscription p_circle_notification_subscription ) := { @@ -465,30 +453,6 @@ group ams_api { terminalDistance := p_terminal_distance } // End of template mw_body_json_terminal_distance - template (value) JsonBody m_body_json_distance_notification_subscription( - in template (value) DistanceNotificationSubscription p_distance_notification_subscription - ) := { - distanceNotificationSubscription := p_distance_notification_subscription - } // End of template m_body_json_distance_notification_subscription - - template (present) JsonBody mw_body_json_distance_notification_subscription( - template (present) DistanceNotificationSubscription p_distance_notification_subscription := ? - ) := { - distanceNotificationSubscription := p_distance_notification_subscription - } // End of template mw_body_json_distance_notification_subscription - - template (value) JsonBody m_body_json_periodic_notification_subscription( - in template (value) PeriodicNotificationSubscription p_periodic_notification_subscription - ) := { - periodicNotificationSubscription := p_periodic_notification_subscription - } // End of template m_body_json_periodic_notification_subscription - - template (present) JsonBody mw_body_json_periodic_notification_subscription( - template (present) PeriodicNotificationSubscription p_periodic_notification_subscription := ? - ) := { - periodicNotificationSubscription := p_periodic_notification_subscription - } // End of template mw_body_json_periodic_notification_subscription - } // End of group location_api group ue_identity_api { -- GitLab From 7d22b028c45983ec37eb44a37179f57eeb55d06d Mon Sep 17 00:00:00 2001 From: YannGarcia Date: Wed, 17 May 2023 10:19:33 +0200 Subject: [PATCH 23/99] Review typing for MEC 012 --- titan-test-system-framework | 2 +- ...ndOperationGrantingAPI_TypesAndValues.ttcn | 41 +- ...plicationEnablementAPI_TypesAndValues.ttcn | 33 +- .../ttcn/LocationAPI_Templates.ttcn | 60 - .../ttcn/LocationAPI_TypesAndValues.ttcn | 249 ++- .../RnisAPI/ttcn/RnisAPI_Templates.ttcn | 16 +- .../RnisAPI/ttcn/RnisAPI_TypesAndValues.ttcn | 1454 ++++++++++++----- .../TrafficManagementAPI_TypesAndValues.ttcn | 93 +- ...XInformationServiceAPI_TypesAndValues.ttcn | 25 +- .../WlanInformationAPI_TypesAndValues.ttcn | 215 ++- .../ttcn/LibHttp_JsonMessageBodyTypes.ttcn | 3 - 11 files changed, 1325 insertions(+), 866 deletions(-) diff --git a/titan-test-system-framework b/titan-test-system-framework index 0a28ff3..163d1cf 160000 --- a/titan-test-system-framework +++ b/titan-test-system-framework @@ -1 +1 @@ -Subproject commit 0a28ff34d9ca15d6ed481dad98485210e4d6e179 +Subproject commit 163d1cfca22b18ceb1d7e24380f46f7fbaa53a97 diff --git a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.ttcn b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.ttcn index 83abeee..ff58f9a 100644 --- a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.ttcn @@ -3,9 +3,6 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { // JSON import from Json all; - // LibCommon - import from LibCommon_BasicTypesAndValues all; - // LibMec import from LibMec_TypesAndValues all; @@ -58,7 +55,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { */ type record SecurityInfo { OAuth2Info oAuth2Info optional, - UInt8 extentions optional + Json.UInt8 extentions optional } /** @@ -384,7 +381,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @see ETSI GS MEC 010-2 Clause 6.2.1.14 Type: LatencyDescriptor */ type record LatencyDescriptor { - UInt32 maxLatency + Json.UInteger maxLatency } /** @@ -415,11 +412,11 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @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, + Json.String serName, + CategoryRef serCategory optional, + Json.String version, TransportDependency serTransportDependencies optional, - Json.String requestedPermissions optional + Json.String requestedPermissions optional } /** @@ -431,8 +428,8 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { */ type record TransportDependency { TransportDescriptor transport, - SerializerType serializers, - Labels labels + SerializerType serializers, + Labels labels } type record length(1..infinity) of Json.String Labels; @@ -449,13 +446,13 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @see ETSI GS MEC 010-2 Clause 6.2.1.19 Type: TransportDescriptor */ type record TransportDescriptor { - Json.String name, - Json.String description optional, + Json.String name, + Json.String description optional, TransportType type_, - Json.String protocol, - Json.String version, - SecurityInfo security, - Json.String implSpecificInfo optional + Json.String protocol, + Json.String version, + SecurityInfo security, + Json.String implSpecificInfo optional } with { variant (type_) "name as 'type'"; } @@ -739,8 +736,8 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { */ type record OperateAppRequest { OperationalState changeStateTo, - StopType stopType optional, - UInt32 gracefulStopTimeout optional + StopType stopType optional, + Json.UInteger gracefulStopTimeout optional } type enumerated StopType { @@ -756,7 +753,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { */ type record TerminateAppRequest { TerminationType terminationType, - UInt32 gracefulTerminationTimeout optional + Json.UInteger gracefulTerminationTimeout optional } type StopType TerminationType; @@ -1784,12 +1781,12 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { /** * @desc The seconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC */ - type UInt32 Seconds; + type Json.UInteger 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; + type Json.UInteger NanoSeconds; /** * @desc This type represents the checksum of an application package diff --git a/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_TypesAndValues.ttcn b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_TypesAndValues.ttcn index f34deb8..f237430 100644 --- a/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_TypesAndValues.ttcn @@ -6,9 +6,6 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { // JSON import from Json all; - - // LibCommon - import from LibCommon_BasicTypesAndValues all; // MEC-10-2 import from ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues all; @@ -16,7 +13,7 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { /** * @desc Maximum timeout value in seconds for graceful termination or graceful stop of an application instance. */ - type UInt32 MaxGracefulTimeout; + type Json.UInteger MaxGracefulTimeout; /** * @desc Shall be set to AppTerminationNotification. @@ -159,12 +156,12 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { /** * @desc The seconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC. */ - type UInt32 Seconds; + type Json.UInteger 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; + type Json.UInteger NanoSeconds; /** * @desc Platform Time Source status. 1 = TRACEABLE - time source is locked to the UTC time source. 2 = NONTRACEABLE - time source is not locked to the UTC time source. @@ -300,7 +297,7 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { /** * @desc Time to live value. */ - type UInt32 Ttl; + type Json.UInteger Ttl; /** * @desc This type represents the general information of a DNS rule @@ -330,7 +327,7 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { /** * @desc Port portion of the address. */ - type UInt32 Address_Port; + type Json.UInteger Address_Port; /** * @desc A IP address and port pair. @@ -485,7 +482,7 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { */ type record SecurityInfo { OAuth2Info oAuth2Info optional, - UInt8 extentions optional + Json.UInt8 extentions optional } /** @@ -641,7 +638,7 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { LocalityType scopeOfLocality optional, Json.Bool consumedLocalOnly optional, Json.Bool isLocal optional, - UInt32 livenessInterval optional, + Json.UInteger livenessInterval optional, ServiceInfo_Link links } with { variant (links) "name as '_links'"; @@ -658,7 +655,7 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { /** * @desc Authentication key number. */ - type UInt32 AuthenticationKeyNum; + type Json.UInteger AuthenticationKeyNum; /** * @desc NTP authentication option. @@ -672,12 +669,12 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { /** * @desc Acceptable maximum rate of the Delay_Req messages in packets per second. */ - type UInt32 DelayReqMaxRate; + type Json.UInteger DelayReqMaxRate; /** * @desc NTP server local priority. */ - type UInt32 LocalPriority; + type Json.UInteger LocalPriority; /** * @desc Maximum poll interval for NTP messages, in seconds as a power of two. Range 3...17. @@ -710,7 +707,7 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { /** * @desc PTP Master local priority. */ - type UInt32 NtpServers_PtpMasterLocalPriority; + type Json.UInteger NtpServers_PtpMasterLocalPriority; /** * @desc NTP server detail. @@ -776,7 +773,7 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { /** * @desc Used to match all IPv4 packets that have the same Differentiated Services Code Point (DSCP). */ - type UInt32 TrafficFilter_DSCP; + type Json.UInteger TrafficFilter_DSCP; /** * @desc Identify the traffic ip address. @@ -793,12 +790,12 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { /** * @desc Used to match all packets that have the same Quality Class Indicator (QCI). */ - type UInt32 TrafficFilter_QCI; + type Json.UInteger TrafficFilter_QCI; /** * @desc Used to match all IPv6 packets that have the same Traffic Class. */ - type UInt32 TrafficFilter_TC; + type Json.UInteger TrafficFilter_TC; /** * @desc Used for tag based traffic rule. @@ -880,7 +877,7 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { /** * @desc Priority of this traffic rule. If traffic rule conflicts, the one with higher priority take precedence. */ - type UInt32 TrafficRule_Priority; + type Json.UInteger TrafficRule_Priority; /** * @desc Contains the traffic rule state. diff --git a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Templates.ttcn b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Templates.ttcn index 71ac97c..5eb21d4 100644 --- a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Templates.ttcn +++ b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Templates.ttcn @@ -210,66 +210,6 @@ module LocationAPI_Templates { resourceURL := * } // End of template mw_periodic_tracking_subscription - template (omit) CircleNotificationSubscription m_circle_notification_subscription( - in template (omit) ClientCorrelator p_clientCorrelator := omit, - in template (value) CallbackReference p_callbackReference, - in template (value) Addresses p_address, - in template (value) Latitude p_latitude := PX_UE_COORD_LAT, - in template (value) Longitude p_longitude := PX_UE_COORD_LONG, - 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) UInt32 p_frequency := 10, - in template (omit) ResourceURL p_resourceURL := omit - ) := { - address_ := p_address, - callbackReference := p_callbackReference, - checkImmediate := p_checkImmediate, - clientCorrelator := p_clientCorrelator, - count := omit, - duration := omit, - enteringLeavingCriteria := p_enteringLeavingCriteria, - frequency := p_frequency, - latitude := p_latitude, - link := omit, - longitude := p_longitude, - radius := p_radius, - requester := omit, - resourceURL := p_resourceURL, - trackingAccuracy := p_trackingAccuracy - } // End of template m_circle_notification_subscription - - template CircleNotificationSubscription mw_circle_notification_subscription( - template ClientCorrelator p_clientCorrelator := *, - template (present) CallbackReference p_callbackReference := ?, - template (present) Addresses p_address := ?, - template (present) Latitude p_latitude := ?, - template (present) Longitude p_longitude := ?, - template (present) Json.Number p_radius := ?, - template (present) Json.Number p_trackingAccuracy := ?, - template (present) EnteringLeavingCriteria p_enteringLeavingCriteria := ?, - template (present) Json.Bool p_checkImmediate := ?, - template (present) UInt32 p_frequency := ?, - template ResourceURL p_resourceURL := * - ) := { - address_ := p_address, - callbackReference := p_callbackReference, - checkImmediate := p_checkImmediate, - clientCorrelator := p_clientCorrelator, - count := *, - duration := *, - enteringLeavingCriteria := p_enteringLeavingCriteria, - frequency := p_frequency, - latitude := p_latitude, - link := *, - longitude := p_longitude, - radius := p_radius, - requester := *, - resourceURL := p_resourceURL, - trackingAccuracy := p_trackingAccuracy - } // End of template m_wcircle_notification_subscription - template (value) TerminalDistance m_terminal_distance(in Json.Number p_distance) := { distance := p_distance, accuracy := omit, diff --git a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn index 46cf247..88a2afe 100644 --- a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn @@ -13,18 +13,15 @@ module LocationAPI_TypesAndValues { // JSON import from Json all; - // LibCommon - import from LibCommon_BasicTypesAndValues all; - /** * @desc The seconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC */ - type UInt32 Seconds; + type Json.UInteger 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; + type Json.UInteger NanoSeconds; /** * @desc @@ -74,6 +71,15 @@ module LocationAPI_TypesAndValues { OccurrenceInfo occurrenceInfo optional } // End of type UserEventPara + +/** + * @desc Indicates whether event reporting is one time + * @see ETSI TS 129 572 V16.7.0 (2021-08) Clause 6.1.6.3.16 Enumeration: OccurrenceInfo + */ + type enumerated OccurrenceInfo { + ONE_TIME_EVENT, + MULTIPLE_TIME_EVENT + } /** * @desc This type represents the parameters that control the report times and frequency @@ -96,8 +102,8 @@ module LocationAPI_TypesAndValues { * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.5.7 Type: AreaInfo */ type record AreaInfo { - Shae shape, - Points points, + Shape shape, + Points points, Json.UInteger radius optional } // End of type AreaInfo @@ -142,21 +148,21 @@ module LocationAPI_TypesAndValues { * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.5.3 Type: LocationInfo */ type record LocationInfo { - Latitude latitude, - Longitude longitude, - Json.Number altitude optional, - UInt32 accuracy optional, - UInt32 accuracySemiMinor optional, - UInt32 accuracyAltitude optional, - UInt32 orientationMajorAxis optional, - UInt32 confidence optional, - UInt32 innerRadius optional, - UInt32 uncertaintyRadius optional, - UInt32 offsetAngle optional, - UInt32 includedAngle optional, - Shape shape, - TimeStamp timestamp_ optional, - Velocity velocity optional + Latitude latitude, + Longitude longitude, + Json.Number altitude optional, + Json.UInteger accuracy optional, + Json.UInteger accuracySemiMinor optional, + Json.UInteger accuracyAltitude optional, + Json.UInteger orientationMajorAxis optional, + Json.UInteger confidence optional, + Json.UInteger innerRadius optional, + Json.UInteger uncertaintyRadius optional, + Json.UInteger offsetAngle optional, + Json.UInteger includedAngle optional, + Shape shape, + TimeStamp timestamp_ optional, + Velocity velocity optional } with { variant (timestamp_) "name as 'timestamp'"; } // End of type LocationInfo @@ -204,11 +210,11 @@ module LocationAPI_TypesAndValues { * @see ETSI GS MEC 013 V3.1.1 (2023-01) Table 6.5.3-1: Definition of type LocationInfo */ type record Velocity { - VelocityType velocityType, + VelocityType velocityType, Json.UInteger bearing, Json.UInteger horizontalSpeed, Json.UInteger uncertainty optional, - Json.Integer verticalSpeed optional, + Json.Integer verticalSpeed optional, Json.UInteger verticalUncertainty optional } // End of type Velocity @@ -229,12 +235,13 @@ module LocationAPI_TypesAndValues { * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.2.1 Zonal presence data types */ type record ZoneInfo { - ZoneId zoneId, - NumberOfAccessPoints numberOfAccessPoints, + ZoneId zoneId, + NumberOfAccessPoints numberOfAccessPoints, NumberOfUnserviceableAccessPoints numberOfUnservicableAccessPoints, - NumberOfUsers numberOfUsers, - ResourceURL resourceURL + NumberOfUsers numberOfUsers, + ResourceURL resourceURL } + type record of ZoneInfo ZoneInfos; /** * @desc Collection of the zone information list. @@ -243,13 +250,12 @@ module LocationAPI_TypesAndValues { * @see OMA-TS-REST_NetAPI_ZonalPresence-V1_0-20160308-C Clause 5.2.2.1 Type: ZoneList * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.2.1 Zonal presence data types */ - type record of ZoneInfo ZoneInfos; type record ZoneList { ZoneInfos zone optional, ResourceURL resourceURL } - type UInt32 DateTimeStamp; // FIXME To be reviewed + type Json.UInteger DateTimeStamp; // FIXME To be reviewed /** * @desc A type containing access point information. @@ -264,14 +270,14 @@ module LocationAPI_TypesAndValues { * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.2.1 Zonal presence data types */ type record AccessPointInfo { - AccessPointId accessPointId, - LocationInfo locationInfo optional, - ConnectionType connectionType, + AccessPointId accessPointId, + LocationInfo locationInfo optional, + ConnectionType connectionType, OperationStatus operationStatus, - NumberOfUsers numberOfUsers, - InterestRealm interestRealm optional, - DateTimeStamp timezone optional, - ResourceURL resourceURL + NumberOfUsers numberOfUsers, + InterestRealm interestRealm optional, + DateTimeStamp timezone optional, + ResourceURL resourceURL } /** @@ -288,9 +294,9 @@ module LocationAPI_TypesAndValues { * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.2.1 Zonal presence data types */ type record AccessPointList { - ZoneId zoneId, + ZoneId zoneId, AccessPointInfos accessPoint optional, - ResourceURL resourceURL + ResourceURL resourceURL } /** @@ -325,8 +331,8 @@ REST_NetAPI_Common]. * @member notifyURL Notify Callback URL */ type record CallbackReference { - NotifyURL notifyURL, - CallbackData callbackData optional, + NotifyURL notifyURL, + CallbackData callbackData optional, NotificationFormat notificationFormat optional } @@ -391,6 +397,7 @@ REST_NetAPI_Common]. ENTERING_AREA_EVENT, LEAVING_AREA_EVENT } + type record of LocationEventType LocationEventCriteria; /** * @desc This enumeration represents the result of a localization associated with a notification @@ -413,7 +420,7 @@ REST_NetAPI_Common]. * @member self_ Self-referring URI */ type record Links { - Link self_ + LinkType self_ } with { variant (self_) "name as 'self'"; } @@ -421,37 +428,37 @@ REST_NetAPI_Common]. /** * @desc The number of access points within the zone */ - type UInt32 NumberOfAccessPoints; + type Json.UInteger NumberOfAccessPoints; /** * @desc Number of inoperable access points within the zone. */ - type UInt32 NumberOfUnserviceableAccessPoints; + type Json.UInteger NumberOfUnserviceableAccessPoints; /** * @desc The number of users currently on the access point. */ - type UInt32 NumberOfUsers; + type Json.UInteger NumberOfUsers; /** * @desc Threshold number of users in an access point which if crossed shall cause a notification. */ - type UInt32 NumberOfUsersAPThreshold; + type Json.UInteger NumberOfUsersAPThreshold; /** * @desc This element shall be present when ZoneStatusSubscription includes numberOfUsersAPThreshold element and the number of users in an access point exceeds the threshold defined in the subscription. */ - type UInt32 NumberOfUsersInAP; + type Json.UInteger NumberOfUsersInAP; /** * @desc Threshold number of users in a zone which if crossed shall cause a notification. */ - type UInt32 NumberOfUsersInZone; + type Json.UInteger NumberOfUsersInZone; /** * @desc Threshold number of users in a zone which if crossed shall cause a notification. */ - type UInt32 NumberOfUsersZoneThreshold; + type Json.UInteger NumberOfUsersZoneThreshold; /** * @desc The operation status of the access point @@ -586,15 +593,15 @@ REST_NetAPI_Common]. * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.2.2 Type: UserInfo */ type record UserInfo { - Address address_, - AccessPointId accessPointId, - ZoneId zoneId, - ResourceURL resourceURL optional, - TimeStamp timestamp_, - LocationInfo locationInfo optional, - CivicAddress civicInfo optional, + Address address_, + AccessPointId accessPointId, + ZoneId zoneId, + ResourceURL resourceURL optional, + TimeStamp timestamp_, + LocationInfo locationInfo optional, + CivicAddress civicInfo optional, ContextLocationInfo contextLocationInfo optional, - AncillaryInfo ancillaryInfo optional + AncillaryInfo ancillaryInfo optional } with { variant (address_) "name as 'address'"; variant (timestamp_) "name as 'timestamp'"; @@ -623,8 +630,8 @@ REST_NetAPI_Common]. * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.2.4 */ type record MapInfoOrigin { - Latitude latitude, - Longitude longitude, + Latitude latitude, + Longitude longitude, Json.Number altitude optional } @@ -636,8 +643,8 @@ REST_NetAPI_Common]. * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.2.4 */ type record MapInfo { - Json.String mapId, - MapInfoOrigin origin optional, + Json.String mapId, + MapInfoOrigin origin optional, AncillaryMapInfo ancillaryMapInfo optional } type Json.String AncillaryMapInfo; @@ -651,11 +658,11 @@ REST_NetAPI_Common]. * @member resourceURL Self referring URL */ type record UserTrackingSubscription { - ClientCorrelator clientCorrelator optional, + ClientCorrelator clientCorrelator optional, CallbackReference callbackReference, - Address address_, + Address address_, UserEventCriteria userEventCriteria optional, - ResourceURL resourceURL optional + ResourceURL resourceURL optional } with { variant (address_) "name as 'address'"; } @@ -665,12 +672,12 @@ REST_NetAPI_Common]. * @member */ type record PeriodicTrackingSubscription { - ClientCorrelator clientCorrelator optional, + ClientCorrelator clientCorrelator optional, CallbackReference callbackReference, - Address address_, - Json.Number frequency, - Json.Number requestedAccuracy, - ResourceURL resourceURL optional + Address address_, + Json.Number frequency, + Json.Number requestedAccuracy, + ResourceURL resourceURL optional } with { variant (address_) "name as 'address'"; } @@ -679,65 +686,6 @@ REST_NetAPI_Common]. * @desc Identifier of zone */ type Json.String ZoneId; - - /** - * @desc A type containing zone status subscription. - * @member clientCorrelator A correlator that the client can use to tag this particular resource representation during a request to create a resource on the server - * @member resourceURL Self referring URL - * @member callbackReference - * @member zoneId Identifier of zone - * @member numberOfUsersZoneThreshold Threshold number of users in a zone which if crossed shall cause a notification - * @member numberOfUsersAPThreshold Threshold number of users in an access point which if crossed shall cause a notification - * @member operationStatus List of operation status values to generate notifications for (these apply to all access points within a zone). - */ - type record ZoneStatusSubscription { - ClientCorrelator clientCorrelator optional, - ResourceURL resourceURL optional, - CallbackReference callbackReference, - ZoneId zoneId, - NumberOfUsersZoneThreshold numberOfUsersZoneThreshold optional, - NumberOfUsersAPThreshold numberOfUsersAPThreshold optional, - OperationStatus operationStatus optional - } // End of type ZoneStatusSubscription - - /** - * @desc A type containing data for notifications, when the area is defined as a circle - * @member address Address of terminals to monitor (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI) - * @member callbackReference - * @member checkImmediate Check location immediately after establishing notification - * @member clientCorrelator A correlator that the client can use to tag this particular resource representation during a request to create a resource on the server - * @member count Maximum number of notifications per individual address. For no maximum, either do not include this element or specify a value of zero. Default value is 0 - * @member duration Period of time (in seconds) notifications are provided for. If set to “0” (zero), a default duration time, which is specified by the service policy, will be used. If the parameter is omitted, the notifications will continue until the maximum duration time, which is specified by the service policy, unless the notifications are stopped by deletion of subscription for notifications - * @member enteringLeavingCriteria - * @member frequency Maximum frequency (in seconds) of notifications per subscription (can also be considered minimum time between notifications) - * @member latitude Latitude of center point - * @member link Link to other resources that are in relationship with the resource - * @member longitude Longitude of center point - * @member radius Radius circle around center point in meters - * @member requester Identifies the entity that is requesting the information (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI) - * @member resourceURL Self referring URL - * @member trackingAccuracy Number of meters of acceptable error in tracking distance - */ - type record CircleNotificationSubscription { - Addresses address_, - CallbackReference callbackReference, - Json.Bool checkImmediate, - ClientCorrelator clientCorrelator optional, - UInt32 count optional, - UInt32 duration optional, - EnteringLeavingCriteria enteringLeavingCriteria, - UInt32 frequency, - Latitude latitude, - Link link optional, - Longitude longitude, - Json.Number radius, - Json.AnyURI requester optional, - ResourceURL resourceURL optional, - Json.Number trackingAccuracy - } with { - variant (address_) "name as 'address'"; - } // End of type CircleNotificationSubscription - type enumerated EnteringLeavingCriteria { Entering, Leaving @@ -753,7 +701,7 @@ REST_NetAPI_Common]. type record TerminalDistance { Json.Number distance, Json.Number accuracy optional, - TimeStamp timestamp_ optional + TimeStamp timestamp_ optional } with { variant (timestamp_) "name as 'timestamp'"; } @@ -783,15 +731,29 @@ REST_NetAPI_Common]. * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.2.1A Terminal location data types */ type record TerminalLocation { - Address address_, + Address address_, RetrievalStatus locationRetrievalStatus, - LocationInfo currentLocation optional, - ServiceError errorInformation optional + LocationInfo currentLocation optional, + ServiceError errorInformation optional } with { variant (address_) "name as 'address'"; } // End of type TerminalLocation type record of TerminalLocation TerminalLocationList + /** + * @desc Indicate a notification termination or cancellation + * @member messageId Message identifier, either with prefix SVC or with prefix POL + * @member text Message text, with replacement variables marked with %n, where n is an index into the list of elements, starting at 1 + * @member variables Variables to substitute into text string + * @see OMA-TS-REST_NetAPI_Common-V1_0-20180116-A Clause B.1.4 Type: ServiceError + * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.2.1A Terminal location data types + */ + type record ServiceError { + Json.String messageId, + Json.String text, + Json.String variables optional + } // End of type ServiceError + /** * @desc This type contains a list of subscriptions * @member href The URI referring to the subscription @@ -811,7 +773,7 @@ REST_NetAPI_Common]. */ type record NotificationSubscriptionList { Subscription subscription optional, - ResourceURL resourceURL + ResourceURL resourceURL } /** @@ -987,7 +949,7 @@ REST_NetAPI_Common]. Json.Bool requestTestNotification optional, WebsockNotifConfig websockNotifConfig optional, Links links_ optional, - AreaDefine areaDefine, + AreaInfo areaDefine, Json.Number trackingAccuracy, LocationEventCriteria locationEventCriteria optional, ReportingCtrl reportingCtrl optional, @@ -1029,8 +991,6 @@ REST_NetAPI_Common]. Json.Number trackingAccuracy, DistanceCriteria criteria, Json.Bool checkImmediate, - Json.Number trackingAccuracy, - LocationEventCriteria locationEventCriteria optional, ReportingCtrl reportingCtrl optional, TimeStamp expiryDeadline optional } with { @@ -1057,7 +1017,7 @@ REST_NetAPI_Common]. * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.4.4 Type: UserLoctiationEventNotification */ type record LinksSubscription { - Link subscription + LinkType subscription } /** @@ -1156,16 +1116,15 @@ REST_NetAPI_Common]. * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.4.7 Type: ZoneStatusNotification */ type record ZoneStatusNotification { - Json.String notificationType, - TimeStamp timeStamp optional, - UserNumEvent userNumEvent optional, + Json.String notificationType, + TimeStamp timeStamp optional, + UserNumEvent userNumEvent optional, OperationStatus operationStatus optional, - ZoneId zoneId optional, - AccessPointId accessPointId optional, - Links links_ + ZoneId zoneId optional, + AccessPointId accessPointId optional, + Links links_ } with { variant (links_) "name as '_links'"; - variant (address_) "name as 'address'"; } // End of type ZoneStatusNotification type enumerated UserNumEvent { @@ -1212,7 +1171,7 @@ REST_NetAPI_Common]. * @member _links Object containing hyperlinks related to the resource * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.4.9 Type: UserDistanceNotification */ - type record UserAreaNotification { + type record UserDistanceNotification { Json.String notificationType, TimeStamp timeStamp optional, UserList monitoredUsers, diff --git a/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_Templates.ttcn b/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_Templates.ttcn index d31b301..b1d0888 100644 --- a/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_Templates.ttcn +++ b/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_Templates.ttcn @@ -189,14 +189,14 @@ module RnisAPI_Templates { template (present) MeasTaSubscription mw_meas_ta_subscription( template (present) CallbackReference p_callbackReference := ?, template (present) Link p_links := ?, - template (present) FilterCriteriaAssocHo p_filterCriteriaAssocHo := ?, + template (present) FilterCriteriaAssoc p_filterCriteriaAssoc := ?, template TimeStamp p_expiryDeadline := * ) := { - subscriptionType := "MeasTaSubscription", - callbackReference := p_callbackReference, - links := p_links, - filterCriteriaAssocHo := p_filterCriteriaAssocHo, - expiryDeadline := p_expiryDeadline + subscriptionType := "MeasTaSubscription", + callbackReference := p_callbackReference, + links := p_links, + filterCriteriaAssoc := p_filterCriteriaAssoc, + expiryDeadline := p_expiryDeadline } // End of template mw_meas_ta_subscription template (present) CaReConfSubscription mw_ca_reconfig_subscription( @@ -269,7 +269,7 @@ module RnisAPI_Templates { template (omit) PlmnInfo m_plmn_info( in AppInstanceId p_appInstanceId, - in template (value) Plmns p_plmn, + in template (value) Plmn_list p_plmn, in template (omit) TimeStamp p_timeStamp := omit ) := { timeStamp := p_timeStamp, @@ -279,7 +279,7 @@ module RnisAPI_Templates { template (present) PlmnInfo mw_plmn_info( template (present) AppInstanceId p_appInstanceId := ?, - template (present) Plmns p_plmn := ?, + template (present) Plmn_list p_plmn := ?, template TimeStamp p_timeStamp := * ) := { timeStamp := p_timeStamp, diff --git a/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_TypesAndValues.ttcn b/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_TypesAndValues.ttcn index 06c1e57..492846a 100644 --- a/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_TypesAndValues.ttcn @@ -1,37 +1,29 @@ /** - * @desc The ETSI MEC ISG MEC012 Radio Network Information API described using OpenAPI - * @see http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_mec012v010101p.pdf + * @author ETSI / STF569 / TTF T027 + * @version $Url$ + * $Id$ + * @desc Types ANd Values for ETSI GS MEC 014 V2.2.1 (2022-02) + * @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 RnisAPI_TypesAndValues { // JSON import from Json all; - // 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 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 + * @see ETSI GS MEC 012 V2.2.1 (2022-02) Table 6.2.2-1: Attributes of the PlmnInfo */ type record PlmnInfo { TimeStamp timeStamp optional, AppInstanceId appInstanceId, - Plmns plmn + Plmn_list plmn } type record of PlmnInfo PlmnInfos; @@ -41,7 +33,7 @@ module RnisAPI_TypesAndValues { * @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 + * @see ETSI GS MEC 012 V2.2.1 (2022-02) Table 6.2.3-1: Attributes of the RabInfo */ type record RabInfo { TimeStamp timeStamp optional, @@ -54,7 +46,7 @@ module RnisAPI_TypesAndValues { * @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 + * @see ETSI GS MEC 012 V2.2.1 (2022-02) Table 6.2.3-1: Attributes of the RabInfo */ type record RabInfo_CellUserInfo_ { Ecgi ecgi, @@ -62,11 +54,67 @@ module RnisAPI_TypesAndValues { } type record of RabInfo_CellUserInfo_ RabInfo_CellUserInfo; + /** + * @desc Information on UEs in the specific cell + * @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.2.1 (2022-02) Table 6.2.3-1: Attributes of the RabInfo + */ + type record UeInfo_ { + AssociateId associateId optional, + ErabInfo erabInfo + } + type record of UeInfo_ UeInfo; + + /** + * @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.2.1 (2022-02) Table 6.2.3-1: Attributes of the RabInfo + */ + type record ErabInfo_ { + Json.UInteger erabId, + ErabQosParameters erabQosParameters optional + } + type record of ErabInfo_ ErabInfo; + + /** + * @desc QoS parameters for the E-RAB + * @member qci QoS Class Identifier as defined in TS 23.401 + * @member qci_information The QoS information for the E-RAB + * @see ETSI GS MEC 012 V2.2.1 (2022-02) Table 6.2.3-1: Attributes of the RabInfo + */ + type record ErabQosParameters { + Qci qci, + QosInformation qosInformation optional + } + + /** + * @desc QoS Class Identifier as defined in TS 23.401 + */ + type Json.UInteger Qci; + + /** + * @desc The QoS information for the E-RAB + * @member erabGbrDl This IE indicates the maximum downlink E-RAB Bit Rate as defined in TS 23.401 for this bearer + * @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.2.1 (2022-02) Table 6.2.3-1: Attributes of the RabInfo + */ + type record QosInformation_ { + Json.UInteger erabMbrDl, + Json.UInteger erabMbrUl, + Json.UInteger erabGbrDl, + Json.UInteger erabGbrUl + } + type record of QosInformation_ QosInformation; + /** * @desc This type represents the information on S1-U bearer. * @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 + * @see ETSI GS MEC 012 V2.2.1 (2022-02) Table 6.2.4-1 Attributes of the S1BearerInfo */ type record S1BearerInfo { TimeStamp timeStamp optional, @@ -79,37 +127,21 @@ module RnisAPI_TypesAndValues { * @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 + * @see ETSI GS MEC 012 V2.2.1 (2022-02) Table 6.2.4-1 Attributes of the S1BearerInfo */ type record S1UeInfo_ { TempUeId tempUeId optional, - AssociateId associateId, + AssociateId associateId optional, 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_ { - UInt32 erabId, - S1EnbInfo s1EnbInfo, - SGwInfo sGwInfo - } - type record of S1BearerInfoDetailed_ S1BearerInfoDetailed; - - type record of UInt32 ErabId; - /** * @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 + * @see ETSI GS MEC 012 V2.2.1 (2022-02) Table 6.2.4-1 Attributes of the S1BearerInfo */ type record TempUeId_ { Mmec mmec, @@ -122,33 +154,49 @@ module RnisAPI_TypesAndValues { type Json.String Mtmsi; /** - * @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 + * @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.2.1 (2022-02) Table 6.2.4-1 Attributes of the S1BearerInfo */ - type record S1EnbInfo { - Json.String ipAddress, - Json.String tunnelId + type record S1BearerInfoDetailed_ { + Json.UInteger erabId, + S1EnbInfo s1EnbInfo, + SGwInfo sGwInfo } + type record of S1BearerInfoDetailed_ S1BearerInfoDetailed; + + type record of Json.UInteger ErabId; /** * @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 + * @see ETSI GS MEC 012 V2.2.1 (2022-02) Table 6.2.4-1 Attributes of the S1BearerInfo */ type record SGwInfo { Json.String ipAddress, Json.String tunnelId } + /** + * @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.2.1 (2022-02) Table 6.2.4-1 Attributes of the S1BearerInfo + */ + type record S1EnbInfo { // FIXME Check if it is usefull somewhere + Json.String ipAddress, + Json.String tunnelId + } + /** * @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 + * @see ETSI GS MEC 012 V2.2.1 (2022-02) Table 6.2.4a-1: Attributes of the L2Meas */ type record L2Meas { TimeStamp timeStamp optional, @@ -156,198 +204,7 @@ module RnisAPI_TypesAndValues { L2Meas_CellUEInfo cellUEInfo optional } - /** - * @desc Unique identifier for the mobile edge application instance", - */ - type Json.String AppInstanceId; - - /** - * @desc Unique identifier allocated by the Mobile Edge application for the Information request - */ - type Json.String RequestId; - - /** - * @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 Ecgi { - Plmn plmn, - CellId cellId - } - type record of Ecgi Ecgi_list; - - /** - * @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 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 - } - - /** - * @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, - Json.String mnc - } - type record of Plmn Plmns; - - /** - * @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 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 - } - type record of UeInfo_ UeInfo; - - /** - * @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_, - Json.String value_ - } with { - variant (type_) "name as 'type'"; - variant (value_) "name as 'value'"; - } - type record of AssociateId_ AssociateId; - - /** - * @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), - UE_IPV4_ADDRESS (1), - 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_ { - UInt32 erabId, - ErabQosParameters erabQosParameters optional - } - type record of ErabInfo_ ErabInfo; - - /** - * @desc QoS parameters for the E-RAB - * @member qci QoS Class Identifier as defined in TS 23.401 - * @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 ErabQosParameters { - Qci qci, - QosInformation qosInformation optional - } - - /** - * @desc QoS Class Identifier as defined in TS 23.401 - */ - type UInt32 Qci; - - /** - * @desc The QoS information for the E-RAB - * @member erabGbrDl This IE indicates the maximum downlink E-RAB Bit Rate as defined in TS 23.401 for this bearer - * @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, - UInt32 erabMbrUl, - UInt32 erabGbrDl, - UInt32 erabGbrUl - } - type record of QosInformation_ QosInformation; - - type integer UInt100 (0 .. 100) with {variant "unsigned 100 bit"}; + type integer UInt100 (0 .. 100) with {variant "unsigned 32 bit"}; /** * @desc The per cell measurement information @@ -369,7 +226,7 @@ module RnisAPI_TypesAndValues { * @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 + * @see ETSI GS MEC 012 V2.2.1 (2022-02) Table 6.2.4a-1: Attributes of the L2Meas */ type record L2Meas_CellInfo_ { Ecgi ecgi optional, @@ -413,7 +270,7 @@ module RnisAPI_TypesAndValues { * @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 + * @see ETSI GS MEC 012 V2.2.1 (2022-02) Table 6.2.4a-1: Attributes of the L2Meas */ type record L2Meas_CellUEInfo_ { Ecgi ecgi, @@ -438,112 +295,85 @@ module RnisAPI_TypesAndValues { type record of L2Meas_CellUEInfo_ L2Meas_CellUEInfo; /** - * @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 + * @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 requestTestNotification Shall be set to TRUE by the service consumer to request a test notification via HTTP on the callbackReference URI + * @member websockNotifConfig Provides details to negotiate and signal the use of a Websocket connection between RNIS and the service consumer for notifications * @member links Hyperlink related to the resource - * @member filterCriteriaAssocTri List of filtering criteria for the subscription + * @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.11-1: Attributes of the NrMeasRepUeSubscription + * @see ETSI GS MEC 012 V2.2.1 (2022-02) Table 6.3.2-1: Attributes of the CellChangeSubscription */ - 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 { - SubscriptionLinkList_Link links + type record CellChangeSubscription { + Json.String subscriptionType, + CallbackReference callbackReference, + Json.Bool requestTestNotification optional, + WebsockNotifConfig websockNotifConfig optional, + Link links optional, + FilterCriteriaAssocHo filterCriteriaAssocHo, + TimeStamp expiryDeadline optional } with { variant (links) "name as '_links'"; } /** * @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 + * @member self_ URI referring to a resource + * @see ETSI GS MEC 012 V2.2.1 (2022-02) Table 6.3.2-1: Attributes of the CellChangeSubscription */ - type record SubscriptionLinkList_Link { - LinkType self_, - Subscription subscription optional + type record Link { + LinkType self_ } 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 + * @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 + * @member hoStatus Indicate the status of the UE handover procedure + * @see ETSI GS MEC 012 V2.2.1 (2022-02) Table 6.3.2-1: Attributes of the CellChangeSubscription */ - type record Subscription_ { - LinkType href, - Json.String subscriptionType + type record FilterCriteriaAssocHo { + AppInstanceId appInstanceId optional, + AssociateId associateId optional, + Ecgi_list ecgi optional, + HoStatus_list hoStatus optional } - 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 { - Json.String subscriptionType, - CallbackReference callbackReference, - Link links optional, - FilterCriteriaAssocTri filterCriteriaAssocTri, - TimeStamp expiryDeadline optional - } with { - variant (links) "name as '_links'"; - } - - /** - * @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 + * @desc Description of the subscribed to event + * @see ETSI GS MEC 012 V2.2.1 (2022-02) Table 6.3.2-1: Attributes of the CellChangeSubscription */ - type record S1BearerSubscription { - Json.String subscriptionType, - CallbackReference callbackReference, - Link links optional, - EventType eventType, - S1BearerSubscriptionCriteria s1BearerSubscriptionCriteria, - TimeStamp expiryDeadline optional + type enumerated HoStatus { + IN_PREPARATION (1), + IN_EXECUTION (2), + COMPLETED (3), + REJECTED (4), + CANCELLED (5) } with { - variant (links) "name as '_links'"; + variant "JSON: as number" } + type record of HoStatus HoStatus_list; /** * @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 requestTestNotification Shall be set to TRUE by the service consumer to request a test notification via HTTP on the callbackReference URI + * @member websockNotifConfig Provides details to negotiate and signal the use of a Websocket connection between RNIS and the service consumer for notifications * @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 + * @see ETSI GS MEC 012 V2.2.1 (2022-02) Table 6.3.3-1: Attributes of the RabEstSubscription */ type record RabEstSubscription { Json.String subscriptionType, CallbackReference callbackReference, + Json.Bool requestTestNotification optional, + WebsockNotifConfig websockNotifConfig optional, Link links optional, RabEstSubscription_FilterCriteriaQci filterCriteriaQci, TimeStamp expiryDeadline optional @@ -551,18 +381,35 @@ module RnisAPI_TypesAndValues { variant (links) "name as '_links'"; } + /** + * @desc List of filtering criteria for the subscription + * @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.2.1 (2022-02) Table 6.3.3-1: Attributes of the RabEstSubscription + */ + type record RabEstSubscription_FilterCriteriaQci { + AppInstanceId appInstanceId optional, + Ecgi_list ecgi optional, + Qci qci + } + /** * @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 requestTestNotification Shall be set to TRUE by the service consumer to request a test notification via HTTP on the callbackReference URI + * @member websockNotifConfig Provides details to negotiate and signal the use of a Websocket connection between RNIS and the service consumer for notifications * @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 + * @see ETSI GS MEC 012 V2.2.1 (2022-02) Table 6.3.4-1: Attributes of the RabModSubscription */ type record RabModSubscription { Json.String subscriptionType, CallbackReference callbackReference, + Json.Bool requestTestNotification optional, + WebsockNotifConfig websockNotifConfig optional, Link links optional, RabModSubscription_FilterCriteriaQci filterCriteriaQci, TimeStamp expiryDeadline optional @@ -574,14 +421,18 @@ module RnisAPI_TypesAndValues { * @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 requestTestNotification Shall be set to TRUE by the service consumer to request a test notification via HTTP on the callbackReference URI + * @member websockNotifConfig Provides details to negotiate and signal the use of a Websocket connection between RNIS and the service consumer for notifications * @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 + * @see ETSI GS MEC 012 V2.2.1 (2022-02) Table 6.3.5-1: Attributes of the RabRelSubscription */ type record RabRelSubscription { Json.String subscriptionType, CallbackReference callbackReference, + Json.Bool requestTestNotification optional, + WebsockNotifConfig websockNotifConfig optional, Link links optional, RabModSubscription_FilterCriteriaQci filterCriteriaQci, TimeStamp expiryDeadline optional @@ -589,18 +440,113 @@ module RnisAPI_TypesAndValues { variant (links) "name as '_links'"; } + /** + * @desc List of filtering criteria for the subscription + * @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.2.1 (2022-02) Table 6.3.4-1: Attributes of the RabModSubscription + */ + type record RabModSubscription_FilterCriteriaQci { + AppInstanceId appInstanceId optional, + Json.UInteger erabId, + Ecgi_list ecgi optional, + Qci qci + } + + /** + * @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 requestTestNotification Shall be set to TRUE by the service consumer to request a test notification via HTTP on the callbackReference URI + * @member websockNotifConfig Provides details to negotiate and signal the use of a Websocket connection between RNIS and the service consumer for notifications + * @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.2.1 (2022-02) Table 6.3.6-1: Attributes of the MeasRepUeSubscription + */ + type record MeasRepUeSubscription { + Json.String subscriptionType, + CallbackReference callbackReference, + Json.Bool requestTestNotification optional, + WebsockNotifConfig websockNotifConfig optional, + Link links optional, + FilterCriteriaAssocTri filterCriteriaAssocTri, + TimeStamp expiryDeadline optional + } with { + variant (links) "name as '_links'"; + } + + /** + * @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 + * @member trigger_ Corresponds to a specific E-UTRAN UE Measurement Report trigger + * @see ETSI GS MEC 012 V2.2.1 (2022-02) Table 6.3.6-1: Attributes of the MeasRepUeSubscription + */ + type record FilterCriteriaAssocTri { + AppInstanceId appInstanceId optional, + AssociateId associateId optional, + Ecgi_list ecgi optional, + Trigger trigger_ optional + } with { + variant (trigger_) "name as 'trigger'"; + } + + /** + * @desc This type represents a subscription to UE timing advance notifications from Radio Network Information Service + * @member subscriptionType Shall be set to "MeasRepUeSubscription" + * @member callbackReference URI selected by the service consumer to receive notifications on the subscribed RNIS information + * @member requestTestNotification Shall be set to TRUE by the service consumer to request a test notification via HTTP on the callbackReference URI + * @member websockNotifConfig Provides details to negotiate and signal the use of a Websocket connection between RNIS and the service consumer for notifications + * @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.2.1 (2022-02) Table 6.3.7 Type: MeasTaSubscription + */ + type record MeasTaSubscription { + Json.String subscriptionType, + CallbackReference callbackReference, + Json.Bool requestTestNotification optional, + WebsockNotifConfig websockNotifConfig optional, + Link links, + FilterCriteriaAssoc filterCriteriaAssoc, + TimeStamp expiryDeadline optional + } with { + variant (links) "name as '_links'"; + } + + /** + * @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.2.1 (2022-02) Table 6.3.7 Type: MeasTaSubscription + */ + type record FilterCriteriaAssoc { + AppInstanceId appInstanceId optional, + AssociateId associateId optional, + Ecgi_list ecgi optional + } + /** * @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 requestTestNotification Shall be set to TRUE by the service consumer to request a test notification via HTTP on the callbackReference URI + * @member websockNotifConfig Provides details to negotiate and signal the use of a Websocket connection between RNIS and the service consumer for notifications * @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 + * @see ETSI GS MEC 012 V2.2.1 (2022-02) Table 6.3.8-1: Attributes of the CaReconfSubscription */ type record CaReConfSubscription { Json.String subscriptionType, CallbackReference callbackReference, + Json.Bool requestTestNotification optional, + WebsockNotifConfig websockNotifConfig optional, Link links optional, FilterCriteriaAssoc filterCriteriaAssoc, TimeStamp expiryDeadline optional @@ -609,196 +555,828 @@ module RnisAPI_TypesAndValues { } /** - * @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 + * @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 requestTestNotification Shall be set to TRUE by the service consumer to request a test notification via HTTP on the callbackReference URI + * @member websockNotifConfig Provides details to negotiate and signal the use of a Websocket connection between RNIS and the service consumer for notifications * @member links Hyperlink related to the resource - * @member filterCriteriaAssocHo List of filtering criteria for the subscription + * @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.2-1: Attributes of the CellChangeSubscription + * @see ETSI GS MEC 012 V2.2.1 (2022-02) Table 6.3.9-1: Attributes of the S1BearerSubscription */ - type record CellChangeSubscription { - Json.String subscriptionType, - CallbackReference callbackReference, - Link links optional, - FilterCriteriaAssocHo filterCriteriaAssocHo, - TimeStamp expiryDeadline optional + type record S1BearerSubscription { + Json.String subscriptionType, + CallbackReference callbackReference, + Json.Bool requestTestNotification optional, + WebsockNotifConfig websockNotifConfig optional, + Link links optional, + EventType eventType, + S1BearerSubscriptionCriteria s1BearerSubscriptionCriteria, + TimeStamp expiryDeadline optional } with { variant (links) "name as '_links'"; } /** - * @desc - * @member callbackReference - * @member links - * @member filterCriteria - * @member expiryDeadline + * @desc Description of the subscribed event + * @see ETSI GS MEC 012 V2.2.1 (2022-02) Table 6.3.9-1: Attributes of the S1BearerSubscription */ - type record MeasTaSubscription { - Json.String subscriptionType, - CallbackReference callbackReference, - Link links, - FilterCriteriaAssocHo filterCriteriaAssocHo, - TimeStamp expiryDeadline optional + type enumerated EventType_ { + RESERVED (0), + S1_BEARER_ESTABLISH (1), + S1_BEARER_MODIFY (2), + S1_BEARER_RELEASE (3) } with { - variant (links) "name as '_links'"; + variant "JSON: as number" } - + type record of EventType_ EventType; + /** - * @desc URL selected by the Mobile Edge application to receive notifications on the subscribed RNIS information + * @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.2.1 (2022-02) Table 6.3.9-1: Attributes of the S1BearerSubscription */ - type Json.AnyURI CallbackReference; + type record S1BearerSubscriptionCriteria { + AssociateId associateId optional, + Ecgi ecgi optional, + ErabId erabId optional + } /** * @desc List of hyperlinks related to the resource - * @member self_ URI referring to a resource + * @member self_ + * @member subscription A link to a subscription + * @see ETSI GS MEC 012 V2.2.1 (2022-02) Table 6.3.10-1: Attributes of the SubscriptionLinkList */ - type record Link { - LinkType self_ + type record SubscriptionLinkList_Link { + LinkType self_, + Subscription subscription optional } with { variant (self_) "name as 'self'"; } /** - * @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 + * @desc A link to a subscription + * @member The URI referring to the subscription + * @member Type of the subscription + * @see ETSI GS MEC 012 V2.2.1 (2022-02) Table 6.3.10-1: Attributes of the SubscriptionLinkList */ - type record LinkType { - Json.AnyURI href + type record Subscription_ { + LinkType href, + Json.String subscriptionType } + type record of Subscription_ Subscription; /** - * @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 + * @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.2.1 (2022-02) Table 6.3.10-1: Attributes of the SubscriptionLinkList */ - type record FilterCriteriaAssoc { - AppInstanceId appInstanceId, - AssociateId associateId optional, - Ecgi_list ecgi optional + type record SubscriptionLinkList { + SubscriptionLinkList_Link links + } with { + variant (links) "name as '_links'"; } /** - * @desc List of filtering criteria for the subscription - * @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 + * @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 requestTestNotification Shall be set to TRUE by the service consumer to request a test notification via HTTP on the callbackReference URI + * @member websockNotifConfig Provides details to negotiate and signal the use of a Websocket connection between RNIS and the service consumer for notifications + * @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.2.1 (2022-02) Table 6.3.11-1: Attributes of the NrMeasRepUeSubscription */ - type record RabEstSubscription_FilterCriteriaQci { - AppInstanceId appInstanceId optional, - Ecgi_list ecgi optional, - Qci qci + type record NrMeasRepUeSubscription { + Json.String subscriptionType, + CallbackReference callbackReference, + Json.Bool requestTestNotification optional, + WebsockNotifConfig websockNotifConfig optional, + Link links optional, + FilterCriteriaNrMrs filterCriteriaNrMrs, + TimeStamp expiryDeadline optional + } with { + variant (links) "name as '_links'"; } /** * @desc List of filtering criteria for the subscription * @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 + * @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.2.1 (2022-02) Table 6.3.11-1: Attributes of the NrMeasRepUeSubscription */ - type record RabModSubscription_FilterCriteriaQci { + type record FilterCriteriaNrMrs { AppInstanceId appInstanceId optional, - UInt32 erabId, - Ecgi_list ecgi optional, - Qci qci + AssociateId associateId optional, + NRcgi_list nrcgi optional, + TriggerNr triggerNr optional } - + /** - * @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 - * @member hoStatus - * @see ETSI GS MEC 012 V2.1.1 (2019-12) Table 6.3.2-1: Attributes of the CellChangeSubscription + * @desc This type represents configuration for the delivery of subscription notifications over Websockets + * @member websocketUri Set by location server 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 012 V2.2.1 (2022-02) Clause 6.3.12 Type: WebsockNotifConfig */ - type record FilterCriteriaAssocHo { - AppInstanceId appInstanceId optional, - AssociateId associateId optional, - Ecgi_list ecgi optional, - HoStatus_list hoStatus optional + type record WebsockNotifConfig { + Json.AnyURI websocketUri optional, + Json.Bool requestWebsocketUri optional } /** - * @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 - * @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 + * @desc Unique identifier for the mobile edge application instance", */ - type record FilterCriteriaAssocTri { - AppInstanceId appInstanceId optional, - AssociateId associateId optional, - Ecgi_list ecgi optional, - Trigger trigger_ optional + type Json.String AppInstanceId; + + /** + * @desc Unique identifier allocated by the Mobile Edge application for the Information request + */ + type Json.String RequestId; + + /** + * @desc This type represents a subscription to 5G UE measurement report notifications from Radio Network Information Service for UEs served by NR Cells + * @member notificationType Shall be set to "CellChangeNotification" + * @member timeStamp Time stamp + * @member associateId 0 to N identifiers to associate the event for a specific UE or flow + * @member srcEcgi E-UTRAN Cell Global Identifier of the source cell + * @member trgEcgi E-UTRAN Cell Global Identifier of the target cell + * @member hoStatus Indicate the status of the UE handover procedure + * @member tempUeId The temporary identifier allocated for the specific UE + * @member links Links to resources related to this notification + * @see ETSI GS MEC 012 V2.2.1 (2022-02) Table 6.4.2-1: Attributes of the CellChangeNotification + */ + type record CellChangeNotification { + Json.String notificationType, + TimeStamp timeStamp optional, + AssociateId associateId, + Ecgi srcEcgi, + Ecgi_list trgEcgi, + HoStatus hoStatus, + TempUeId_ tempUeId, + Link links optional + } with { + variant (links) "name as '_links'"; + } + + /** + * @desc This type represents a subscription to 5G UE measurement report notifications from Radio Network Information Service for UEs served by NR Cells + * @member notificationType Shall be set to "RabEstNotification"." + * @member timeStamp Time stamp + * @member ecgi E-UTRAN Cell Global Identifier + * @member associateId 0 to N identifiers to associate the event for a specific UE or flow + * @member erabId The attribute that uniquely identifies a Radio Access bearer for specific UE + * @member erabQosParameters QoS parameters for the E-RAB + * @member tempUeId The temporary identifier allocated for the specific UE + * @member links Links to resources related to this notification + * @see ETSI GS MEC 012 V2.2.1 (2022-02) Table 6.4.3-1: Attributes of the RabEstNotification + */ + type record RabEstNotification { + Json.String notificationType, + TimeStamp timeStamp optional, + Ecgi ecgi, + AssociateId associateId, + ErabId erabId, + ErabQosParameters erabQosParameters, + TempUeId_ tempUeId, + Link links optional + } with { + variant (links) "name as '_links'"; + } + + /** + * @desc This type represents a notification from RNIS with regards to RAB modification procedure + * @member notificationType Shall be set to "RabModNotification"." + * @member timeStamp Time stamp + * @member ecgi E-UTRAN Cell Global Identifier + * @member associateId 0 to N identifiers to associate the event for a specific UE or flow + * @member erabId The attribute that uniquely identifies a Radio Access bearer for specific UE + * @member erabQosParameters QoS parameters for the E-RAB + * @member links Links to resources related to this notification + * @see ETSI GS MEC 012 V2.2.1 (2022-02) Table 6.4.4-1: Attributes of the RabModNotification + */ + type record RabModNotification { + Json.String notificationType, + TimeStamp timeStamp optional, + Ecgi ecgi, + AssociateId associateId, + ErabId erabId, + ErabQosParameters erabQosParameters, + Link links optional + } with { + variant (links) "name as '_links'"; + } + + /** + * @desc This type represents a notification from RNIS with regards to RAB release procedure + * @member notificationType Shall be set to "RabModNRabRelNotificationotification"." + * @member timeStamp Time stamp + * @member ecgi E-UTRAN Cell Global Identifier + * @member associateId 0 to N identifiers to associate the event for a specific UE or flow + * @member erabReleaseInfo The release information for the E-RAB + * @member links Links to resources related to this notification + * @see ETSI GS MEC 012 V2.2.1 (2022-02) Table 6.4.5-1: Attributes of the RabRelNotification + */ + type record RabRelNotification { + Json.String notificationType, + TimeStamp timeStamp optional, + Ecgi ecgi, + AssociateId associateId, + ErabReleaseInfo erabReleaseInfo, + Link links optional + } with { + variant (links) "name as '_links'"; + } + + /** + * @desc The release information for the E-RAB + * @member erabId The attribute that uniquely identifies a Radio Access bearer for specific UE + * @see ETSI GS MEC 012 V2.2.1 (2022-02) Table 6.4.5-1: Attributes of the RabRelNotification + */ + type record ErabReleaseInfo { + ErabId erabId + } + + /** + * @desc Subscription to UE measurement report notifications from Radio Network Information Service for UEs served by E-UTRA Cells + * @member notificationType Shall be set to "MeasRepUeNotification" + * @member timeStamp Time stamp + * @member ecgi E-UTRAN Cell Global Identifier + * @member associateId 0 to N identifiers to associate the event for a specific UE or flow + * @member rsrp Reference Signal Received Power + * @member rsrpEx Extended Reference Signal Received Power + * @member rsrq Reference Signal Received Quality + * @member rsrqEx Extended Reference Signal Received Quality + * @member sinr Reference Signal "Signal to Interference plus Noise Ratio" + * @member trigger Corresponds to a specific E-UTRAN UE Measurement Report trigger + * @member eutranNeighbourCell This parameter can be repeated to contain information of all the neighbouring cells + * @member carrierAggregationMeasInfo This parameter can be repeated to contain information of all the carriers assign for Carrier Aggregation + * @member heightUe Indicates height of the UE in meters relative to the sea + * @member newRadioMeasInfo 5G New Radio secondary serving cells measurement information + * @member newRadioMeasNeiInfo Measurement quantities concerning the 5G NR neighbours + * @member links Hyperlink related to the resource + * @see ETSI GS MEC 012 V2.2.1 (2022-02) Table 6.4.6-1: Attributes of the MeasRepUeNotification + */ + type record MeasRepUeNotification { + Json.String notificationType, + TimeStamp timeStamp optional, + Ecgi ecgi, + AssociateId associateId, + Json.UInt8 rsrp, + Json.UInt8 rsrpEx optional, + Json.UInt8 rsrq, + Json.UInt8 rsrqEx optional, + Json.UInt8 sinr optional, + Trigger trigger_, + EutraNeighbourCellMeasInfo eutraNeighbourCellMeasInfo optional, + CarrierAggregationMeasInfo carrierAggregationMeasInfo optional, + Json.Integer heightUe optional, + NewRadioMeasInfo newRadioMeasInfo optional, + NewRadioMeasNeiInfo newRadioMeasNeiInfo optional, + Link links optional } with { variant (trigger_) "name as 'trigger'"; + variant (links) "name as '_links'"; } /** - * @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 nrcgi NR Cell Global Identier + * @desc This parameter can be repeated to contain information of all the neighbouring cells + * @member ecgi E-UTRAN Cell Global Identifier + * @member rsrp Reference Signal Received Power + * @member rsrpEx Extended Reference Signal Received Power + * @member rsrq Reference Signal Received Quality + * @member rsrqEx Extended Reference Signal Received Quality + * @member sinr Reference Signal "Signal to Interference plus Noise Ratio" + * @see ETSI GS MEC 012 V2.2.1 (2022-02) Table 6.4.6-1: Attributes of the MeasRepUeNotification + */ + type record EutraNeighbourCellMeasInfo_ { + Ecgi ecgi, + Json.UInt8 rsrp optional, + Json.UInt8 rsrpEx optional, + Json.UInt8 rsrq optional, + Json.UInt8 rsrqEx optional, + Json.UInt8 sinr optional + } + type record of EutraNeighbourCellMeasInfo_ EutraNeighbourCellMeasInfo; + + /** + * @desc This parameter can be repeated to contain information of all the carriers assign for Carrier Aggregation + * @member cellIdSrv E-UTRAN Cell Identity of a Secondary serving Cell (SCell) + * @member rsrpSrv Reference Signal Received Power + * @member rsrpSrvEx Extended Reference Signal Received Power + * @member rsrqSrv Reference Signal Received Quality + * @member rsrqSrvEx Extended Reference Signal Received Quality + * @member sinrSrv Reference Signal "Signal to Interference plus Noise Ratio" + * @member cellIdNei E-UTRAN Cell Identity of the best neighbouring cell (NCell) associated with the SCell + * @member rsrpNei Reference Signal Received Power + * @member rsrpNeiEx Extended Reference Signal Received Power + * @member rsrqNei Reference Signal Received Quality + * @member rsrqNeiEx Extended Reference Signal Received Quality + * @member sinrNei Reference Signal "Signal to Interference plus Noise Ratio" + * @see ETSI GS MEC 012 V2.2.1 (2022-02) Table 6.4.6-1: Attributes of the MeasRepUeNotification + */ + type record CarrierAggregationMeasInfo_ { + CellId cellIdSrv, + Json.UInt8 rsrpSrv optional, + Json.UInt8 rsrpSrvEx optional, + Json.UInt8 rsrqSrv optional, + Json.UInt8 rsrqSrvEx optional, + Json.UInt8 sinrSrv optional, + CellId cellIdNei, + Json.UInt8 rsrpNei optional, + Json.UInt8 rsrpNeiEx optional, + Json.UInt8 rsrqNei optional, + Json.UInt8 rsrqNeiEx optional, + Json.UInt8 sinrNei optional + } + type record of CarrierAggregationMeasInfo_ CarrierAggregationMeasInfo; + + /** + * @desc 5G New Radio secondary serving cells measurement information + * @member nrCarrierFreq ARFCN applicable for a downlink, uplink or bi-directional (TDD) NR carrier frequency + * @member nrSCs Measurement quantities concerning the secondary serving cells + * @member nrBNCs Measurement quantities concerning the best neighbours of the secondary serving cells + * @see ETSI GS MEC 012 V2.2.1 (2022-02) Table 6.4.6-1: Attributes of the MeasRepUeNotification + */ + type record NewRadioMeasInfo_ { + Json.UInteger nrCarrierFreq, + NrSCs nrSCs, + NrBNCs nrBNCs optional + } + type record of NewRadioMeasInfo_ NewRadioMeasInfo; + + /** + * @desc Measurement quantities concerning the 5G NR neighbours + * @member nrNCellInfo 5G NR neighbour cell info + * @member nrNCellRsrp Reference Signal Received Power measurement + * @member nrNCellRsrq Reference Signal Received Quality measurement + * @member nrNCellRssi Reference signal SINR measurement + * @member rsIndexResults Beam level measurements results of a NR cell + * @see ETSI GS MEC 012 V2.2.1 (2022-02) Table 6.4.6-1: Attributes of the MeasRepUeNotification + */ + type record NewRadioMeasNeiInfo_ { + NrNCellInfo nrNCellInfo, + Json.UInt8 nrNCellRsrp optional, + Json.UInt8 nrNCellRsrq optional, + Json.UInt8 nrNCellRssi optional, + RsIndexResults rsIndexResults optional + } + type record of NewRadioMeasNeiInfo_ NewRadioMeasNeiInfo; + + /** + * @desc 5G NR neighbour cell info + * @member nrNCellPlmn Public land mobile network identities + * @member nrNCellGId Cell Global Identifier + * @see ETSI GS MEC 012 V2.2.1 (2022-02) Table 6.4.6-1: Attributes of the MeasRepUeNotification + */ + type record NrNCellInfo_ { + Plmn_list nrNCellPlmn, + NrCellId nrNCellGId + } + type record of NrNCellInfo_ NrNCellInfo; + + /** + * @desc Measurement quantities concerning the secondary serving cells + * @member nrSCellInfo Secondary serving cell(s) info + * @member nrSCellGId Cell Global Identifier + * @member nrSCellRsrp Reference Signal Received Power measurement + * @member nrSCellRsrq Reference Signal Received Quality measurement + * @member nrSCellRssi Reference signal SINR measurement + * @member + * @see ETSI GS MEC 012 V2.2.1 (2022-02) Table 6.4.6-1: Attributes of the MeasRepUeNotification + */ + type record NrSCs { + NrSCellInfo nrSCellInfo, + Json.UInt8 nrSCellRsrp optional, + Json.UInt8 nrSCellRsrq optional, + Json.UInt8 nrSCellRssi optional + } + + /** + * @desc Secondary serving cell(s) info + * @member nrSCellInfo Secondary serving cell(s) info + * @member nrSCellPlmn Public land mobile network identities + * @see ETSI GS MEC 012 V2.2.1 (2022-02) Table 6.4.6-1: Attributes of the MeasRepUeNotification + */ + type record NrSCellInfo_ { + Plmn_list nrSCellInfo, + NrCellId_list nrSCellPlmn + } + type record of NrSCellInfo_ NrSCellInfo; + + /** + * @desc Measurement quantities concerning the best neighbours of the secondary serving cells + * @member nrBNCellInfo Best neighbours of the secondary serving cell(s) info + * @member nrBNCellRsrp Reference Signal Received Power measurement + * @member nrBNCellRsrq Reference Signal Received Quality measurement + * @member nrBNCellRssi Reference signal SINR measurement + * @see ETSI GS MEC 012 V2.2.1 (2022-02) Table 6.4.6-1: Attributes of the MeasRepUeNotification + * @member + */ + type record NrBNCs { + NrBNCellInfo nrBNCellInfo, + Json.UInt8 nrBNCellRsrp optional, + Json.UInt8 nrBNCellRsrq optional, + Json.UInt8 nrBNCellRss optional + } + + /** + * @desc Best neighbours of the secondary serving cell(s) info + * @member nrBNCellPlmn Public land mobile network identities + * @member nrBNCellGId Cell Global Identifier + * @see ETSI GS MEC 012 V2.2.1 (2022-02) Table 6.4.6-1: Attributes of the MeasRepUeNotification + */ + type record NrBNCellInfo_ { + Plmn_list nrBNCellPlmn, + NrCellId nrBNCellGId + } + type record of NrBNCellInfo_ NrBNCellInfo; + + /** + * @desc This type represents a notification from RNIS with regards to UE Timing Advance measurements + * @member notificationType Shall be set to "MeasTaNotification" + * @member timeStamp Time stamp + * @member ecgi E-UTRAN Cell Global Identifier + * @member associateId 0 to N identifiers to associate the event for a specific UE or flow + * @member timingAdvance The timing advance + * @member links Hyperlink related to the resource + * @see ETSI GS MEC 012 V2.2.1 (2022-02) Table 6.4.7-1: Attributes of the MeasTaNotification + */ + type record MeasTaNotification { + Json.String notificationType, + TimeStamp timeStamp optional, + Ecgi ecgi, + AssociateId associateId, + Json.Integer timingAdvance optional, + Link links optional + } with { + variant (links) "name as '_links'"; + } + + /** + * @desc This type represents a notification from RNIS with regards to UE carrier aggregation reconfigurations + * @member notificationType Shall be set to "CaReconfNotification" + * @member timeStamp Time stamp + * @member ecgi E-UTRAN Cell Global Identifier + * @member associateId 0 to N identifiers to associate the event for a specific UE or flow + * @member secondaryCellAdd + * @member secondaryCellRemove + * @member carrierAggregationMeasInfo This parameter can be repeated to contain information of all the carriers assign for Carrier Aggregation + * @member links Hyperlink related to the resource + * @see ETSI GS MEC 012 V2.2.1 (2022-02) Table 6.4.8-1: Attributes of the CaReconfNotification + */ + type record CaReconfNotification { + Json.String notificationType, + TimeStamp timeStamp optional, + Ecgi ecgi, + AssociateId associateId, + SecondaryCellAdd secondaryCellAdd optional, + SecondaryCellRemove secondaryCellRemove optional, + CarrierAggregationMeasInfo_CaReconfNotification + carrierAggregationMeasInfo optional, + Link links optional + } with { + variant (links) "name as '_links'"; + } + + /** + * @desc + * @member ecgi E-UTRAN Cell Global Identifier + * @see ETSI GS MEC 012 V2.2.1 (2022-02) Table 6.4.8-1: Attributes of the CaReconfNotification + */ + type record SecondaryCellAdd_ { + Ecgi ecgi + } + type record of SecondaryCellAdd_ SecondaryCellAdd; + + /** + * @desc + * @member ecgi E-UTRAN Cell Global Identifier + * @see ETSI GS MEC 012 V2.2.1 (2022-02) Table 6.4.8-1: Attributes of the CaReconfNotification + */ + type record SecondaryCellRemove_ { + Ecgi ecgi + } + type record of SecondaryCellRemove_ SecondaryCellRemove; + + /** + * @desc This parameter can be repeated to contain information of all the carriers assign for Carrier Aggregation + * @member cellIdSrv E-UTRAN Cell Identity of a Secondary serving Cell (SCell) + * @member rsrpSrv Reference Signal Received Power + * @member rsrqSrv Reference Signal Received Quality + * @member cellIdNei E-UTRAN Cell Identity of the best neighbouring cell (NCell) associated with the SCell + * @member rsrpNei Reference Signal Received Power + * @member rsrqNei Reference Signal Received Quality + * @see ETSI GS MEC 012 V2.2.1 (2022-02) Table 6.4.8-1: Attributes of the CaReconfNotification + */ + type record CarrierAggregationMeasInfo_CaReconfNotification_ { + CellId cellIdSrv, + Json.UInt8 rsrpSrv optional, + Json.UInt8 rsrqSrv optional, + CellId cellIdNei, + Json.UInt8 rsrpNei optional, + Json.UInt8 rsrqNei optional + } + type record of CarrierAggregationMeasInfo_CaReconfNotification_ CarrierAggregationMeasInfo_CaReconfNotification; + + /** + * @desc This type represents a notification from RNIS with regards to expiry of the existing subscription + * @member notificationType Shall be set to "ExpiryNotification" + * @member timeStamp Time stamp + * @member links Hyperlink related to the resource + * @see ETSI GS MEC 012 V2.2.1 (2022-02) Table 6.4.9-1: Attributes of the ExpiryNotification + */ + type record ExpiryNotification { + Json.String notificationType, + TimeStamp timeStamp optional, + Link links optional + } with { + variant (links) "name as '_links'"; + } + + /** + * @desc This type represents a notification from RNIS with regards to expiry of the existing subscription + * @member notificationType Shall be set to "S1BearerNotification" + * @member timeStamp Time stamp + * @member s1Event The subscribed event that triggered this notification in S1BearerSubscription + * @member s1UeInfo Information on specific UE that matches the criteria in S1BearerSubscription + * @member links Hyperlink related to the resource + * @see ETSI GS MEC 012 V2.2.1 (2022-02) Table 6.4.10-1 Attributes of the S1BearerNotification + */ + type record S1BearerNotification { + Json.String notificationType, + TimeStamp timeStamp optional, + EventType s1Event, + S1UeInfo_ s1UeInfo, + Link links optional + } with { + variant (links) "name as '_links'"; + } + + /** + * @desc This type represents a notification from RNIS with regards to 5G UE measurement report for UEs. + * @member notificationType Shall be set to "NrMeasRepUeNotification" + * @member timeStamp Time stamp + * @member associateId 0 to N identifiers to associate the event for a specific UE or flow * @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 + * @member servCellMeasInfo This parameter can be repeated to contain information of all the serving cells + * @member nrNeighCellMeasInfo This parameter can be repeated to contain measurement information of all the neighbouring cells + * @member eutraNeighCellMeasInfo This parameter can be repeated to contain measurement information of all the neighbouring cells + * @member links Hyperlink related to the resource + * @see ETSI GS MEC 012 V2.2.1 (2022-02) Table 6.4.11-1: Attributes of the NrMeasRepUeNotification */ - type record FilterCriteriaNrMrs { - AppInstanceId appInstanceId optional, - AssociateId associateId optional, - NRcgi_list nrcgi optional, - TriggerNr triggerNr optional + type record NrMeasRepUeNotification { + Json.String notificationType, + TimeStamp timeStamp optional, + AssociateId associateId, + TriggerNr triggerNr, + ServCellMeasInfo servCellMeasInfo optional, + NrNeighCellMeasInfo nrNeighCellMeasInfo optional, + EutraNeighbourCellMeasInfo_NrMeasRepUeNotification_ + eutraNeighCellMeasInfo optional, + Link links optional + } with { + variant (links) "name as '_links'"; } /** - * @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 + * @desc This parameter can be repeated to contain information of all the serving cells + * @member nrcgi NR Cell Global Identifier + * @member sCell Measurement information relating to this serving cell + * @member nCell Measurement information relating to the best neighbour of this serving cell + * @see ETSI GS MEC 012 V2.2.1 (2022-02) Table 6.4.11-1: Attributes of the NrMeasRepUeNotification */ - type record S1BearerSubscriptionCriteria { - AssociateId associateId optional, - Ecgi ecgi optional, - ErabId erabId optional + type record ServCellMeasInfo { + Nrcgi nrcgi, + SCell sCell, + NCell nCell 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 + * @desc Measurement information relating to this serving cell + * @member measQuantityResultsSsbCellM easurement quantity results relating to the Synchronization Signal Block + * @member measQuantityResultsCsiRsCell Measurement quantity results relating to the Channel State Information Reference Signal + * @member rsIndexResults Beam level measurement information + * @see ETSI GS MEC 012 V2.2.1 (2022-02) Table 6.4.11-1: Attributes of the NrMeasRepUeNotification */ - type enumerated HoStatus { - IN_PREPARATION (1), - IN_EXECUTION (2), - COMPLETED (3), - REJECTED (4), - CANCELLED (5) + type record SCell { + MeasQuantityResultsNr measQuantityResultsSsbCell optional, + MeasQuantityResultsNr measQuantityResultsCsiRsCell optional, + RsIndexResults rsIndexResults optional + } + + /** + * @desc Measurement information relating to the best neighbour of this serving cell + * @see ETSI GS MEC 012 V2.2.1 (2022-02) Table 6.4.11-1: Attributes of the NrMeasRepUeNotification + */ + type SCell NCell; + + /** + * @desc This parameter can be repeated to contain measurement information of all the neighbouring cells + * @member nrcgi NR Cell Global Identifier + * @member measQuantityResultsSsbCellM easurement quantity results relating to the Synchronization Signal Block + * @member measQuantityResultsCsiRsCell Measurement quantity results relating to the Channel State Information Reference Signal + * @member rsIndexResults Beam level measurement information + * @see ETSI GS MEC 012 V2.2.1 (2022-02) Table 6.4.11-1: Attributes of the NrMeasRepUeNotification + */ + type record NrNeighCellMeasInfo { + Nrcgi nrcgi, + MeasQuantityResultsNr measQuantityResultsSsbCell optional, + MeasQuantityResultsNr measQuantityResultsCsiRsCell optional, + RsIndexResults rsIndexResults optional + } + + /** + * @desc This parameter can be repeated to contain information of all the neighbouring cells + * @member ecgi E-UTRAN Cell Global Identifier + * @member rsrp Reference Signal Received Power + * @member rsrq Reference Signal Received Quality + * @member sinr Reference Signal "Signal to Interference plus Noise Ratio" + * @see ETSI GS MEC 012 V2.2.1 (2022-02) Table 6.4.11-1: Attributes of the NrMeasRepUeNotification + */ + type record EutraNeighbourCellMeasInfo_NrMeasRepUeNotification_ { + Ecgi ecgi, + Json.UInt8 rsrp optional, + Json.UInt8 rsrq optional, + Json.UInt8 sinr optional + } + type record of EutraNeighbourCellMeasInfo_NrMeasRepUeNotification_ EutraNeighbourCellMeasInfo_NrMeasRepUeNotification; + + /** + * @desc This type represents a notification from RNIS with regards to expiry of the existing subscription + * @member notificationType Shall be set to "TestNotification" + * @member links Hyperlink related to the resource + * @see ETSI GS MEC 012 V2.2.1 (2022-02) Table 6.4.12-1: Attributes of the TestNotification + */ + type record TestNotification { + Json.String notificationType, + Link links optional } with { - variant "JSON: as number" + variant (links) "name as '_links'"; } - 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 + * @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.2.1 (2022-02) Table 6.6.2-1: CellId */ - type enumerated EventType { - RESERVED (0), - S1_BEARER_ESTABLISH (1), - S1_BEARER_MODIFY (2), - S1_BEARER_RELEASE (3) + type Json.String NrCellId; + type record of NrCellId NrCellId_list; + + /** + * @desc Numeric value (0-255) corresponding to specified type of identifier + * @see ETSI GS MEC 012 V2.2.1 (2022-02) Table 6.5.4-1: Attributes of the AssociateId + */ + type enumerated AssociateId_type { + RESERVED (0), + UE_IPV4_ADDRESS (1), + UE_IPV6_ADDRESS (2), + NATED_IP_ADDRESS (3), + GTP_TEID (4) } with { variant "JSON: as number" } + + /** + * @desc URL selected by the Mobile Edge application to receive notifications on the subscribed RNIS information + */ + type Json.AnyURI CallbackReference; + + /** + * @desc URI referring to a resource + * @see ETSI GS MEC 012 V2.2.1 (2022-02) Table 6.5.2-1: Attributes of the LinkType + */ + type record LinkType { + Json.AnyURI href + } + + /** + * @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.2.1 (2022-02) Table 6.5.3-1: Attributes of the TimeStamp + */ + type record TimeStamp { + Json.UInteger seconds, + Json.UInteger nanoSeconds + } + + /** + * @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.2.1 (2022-02) Table 6.5.4-1: Attributes of the AssociateId + */ + type record AssociateId_ { + AssociateId_type type_, + Json.String value_ + } with { + variant (type_) "name as 'type'"; + variant (value_) "name as 'value'"; + } + type record of AssociateId_ AssociateId; + + /** + * @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.2.1 (2022-02) Table 6.5.5-1: Attributes of the Plmn + */ + type record Plmn { + Json.String mcc, + Json.String mnc + } + type record of Plmn Plmn_list; + + /** + * @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.2.1 (2022-02) Table 6.5.5-1: Attributes of the Ecgi + */ + type record Ecgi { + Plmn plmn, + CellId cellId + } + type record of Ecgi Ecgi_list; + + /** + * @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.2.1 (2022-02) Table 6.5.6-1: Attributes of the Ecgi + */ + 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.2.1 (2022-02) 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.2.1 (2022-02) 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 + * @member resultsPerCsiRsIndex + * @see ETSI GS MEC 012 V2.2.1 (2022-02) 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 ResultsPerCsiRsIndex_ ResultsPerCsiRsIndex; + + /** + * @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.2.1 (2022-02) Table 6.5.11-1: Attributes of the MeasQuantityResultsNr + */ + type record MeasQuantityResultsNr { + UInt8 rsrp optional, + UInt8 rsrq optional, + UInt8 sinr optional + } + /** + * @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.2.1 (2022-02) Table 6.6.2-1: CellId + */ + type Json.String CellId; + /** * @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 + * @see ETSI GS MEC 012 V2.2.1 (2022-02) Table 6.6.3-1: Enumeration Trigger */ type enumerated Trigger { NOT_AVAILABLE (0), @@ -832,7 +1410,7 @@ module RnisAPI_TypesAndValues { /** * @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 + * @see ETSI GS MEC 012 V2.2.1 (2022-02) Table 6.6.4-1: Enumeration TriggerNr */ type enumerated TriggerNr { NOT_AVAILABLE (0), diff --git a/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_TypesAndValues.ttcn b/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_TypesAndValues.ttcn index 1e83b9d..4c11591 100644 --- a/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_TypesAndValues.ttcn @@ -2,9 +2,6 @@ module TrafficManagementAPI_TypesAndValues { // JSON import from Json all; - - // LibCommon - import from LibCommon_BasicTypesAndValues all; /** * @desc Information of bandwidth resource @@ -137,13 +134,13 @@ module TrafficManagementAPI_TypesAndValues { * @desc The seconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC * @see ETSI GS MEC 015 V2.2.1 (2022-12) Clause 7.2.2 Type: BwInfo */ - type UInt32 Seconds; + type Json.UInteger Seconds; /** * @desc The nanoseconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC * @see ETSI GS MEC 015 V2.2.1 (2022-12) Clause 7.2.2 Type: BwInfo */ - type UInt32 NanoSeconds; + type Json.UInteger NanoSeconds; /** * @desc The direction of the requested BW allocation @@ -193,9 +190,9 @@ module TrafficManagementAPI_TypesAndValues { * @see ETSI GS MEC 015 V2.2.1 (2022-12) Clause 7.2.4 Type: MtsCapabilityInfo */ type record MtsCapabilityInfo { - TimeStamp timeStamp optional, + TimeStamp timeStamp optional, MtsAccessInfos mtsAccessInfo, - MtsModes mtsMode + MtsModes mtsMode } /** @@ -203,11 +200,11 @@ module TrafficManagementAPI_TypesAndValues { * @see ETSI GS MEC 015 V2.2.1 (2022-12) Clause 7.2.4 Type: MtsCapabilityInfo */ type enumerated MtsMode { - LowCost (0), - LowLatency (1), + LowCost (0), + LowLatency (1), HighThroughput (2), - Redundancy (3), - QoS (4) + Redundancy (3), + QoS (4) } with { variant "JSON: as number" } @@ -221,9 +218,9 @@ module TrafficManagementAPI_TypesAndValues { * @see ETSI GS MEC 015 V2.2.1 (2022-12) Clause 7.2.4 Type: MtsCapabilityInfo */ type record MtsAccessInfo { - AccessId accessId, + AccessId accessId, AccessType accessType, - Metered metered + Metered metered } type record of MtsAccessInfo MtsAccessInfos; @@ -231,25 +228,25 @@ module TrafficManagementAPI_TypesAndValues { * @desc Unique identifier for the access network connection * @see ETSI GS MEC 015 V2.2.1 (2022-12) Clause 7.2.4 Type: MtsCapabilityInfo */ - type UInt32 AccessId; + type Json.UInteger AccessId; /** * @desc Numeric value (0-255) corresponding to specific type of access network * @see ETSI GS MEC 015 V2.2.1 (2022-12) Clause 7.2.4 Type: MtsCapabilityInfo */ type enumerated AccessType { - Unknown (0), - IEEE802_11_Based (1), - ThreeGPP_Based (2), - Fixed_Access (3), - IEEE802_11abg (11), - IEEE802_11abgn (12), - IEEE802_11abgnac (13), - IEEE802_11abgnacax (14), - IEEE802_11bgn (15), + Unknown (0), + IEEE802_11_Based (1), + ThreeGPP_Based (2), + Fixed_Access (3), + IEEE802_11abg (11), + IEEE802_11abgn (12), + IEEE802_11abgnac (13), + IEEE802_11abgnacax (14), + IEEE802_11bgn (15), ThreeGPP_GERAN_UTRA (31), - ThreeGPP_E_UTRA (32), - Three3GPP_NR (33) + ThreeGPP_E_UTRA (32), + Three3GPP_NR (33) } with { variant "JSON: as number" } @@ -260,8 +257,8 @@ module TrafficManagementAPI_TypesAndValues { */ type enumerated Metered { CxNotMetered (0), - CxMetered (1), - Unknown (2) + CxMetered (1), + Unknown (2) } with { variant "JSON: as number" } @@ -280,14 +277,14 @@ module TrafficManagementAPI_TypesAndValues { * @see ETSI GS MEC 015 V2.2.1 (2022-12) 7.2.5 Type: MtsSessionInfo */ type record MtsSessionInfo { - SessionId sessionId optional, - TimeStamp timeStamp optional, - AppInsId appInsId, - AppName appName optional, - MtsRequestType requestType, - FlowFilter flowFilter, - QosD qosD, - MtsMode mtsMode, + SessionId sessionId optional, + TimeStamp timeStamp optional, + AppInsId appInsId, + Json.String appName optional, + MtsRequestType requestType, + FlowFilter flowFilter, + QosD qosD, + MtsMode mtsMode, TrafficDirection trafficDirection } type record of MtsSessionInfo MtsSessionInfos @@ -310,13 +307,13 @@ module TrafficManagementAPI_TypesAndValues { * @see ETSI GS MEC 015 V2.2.1 (2022-12) 7.2.5 Type: MtsSessionInfo */ type record FlowFilterItem { - SourceIp sourceIp optional, + SourceIp sourceIp optional, SourcePort sourcePort optional, DstAddress dstIp optional, - DstPort dstPort optional, - Protocol protocol optional, - Dscp dscp optional, - Flowlabel flowlabel optional + DstPort dstPort optional, + Protocol protocol optional, + Dscp dscp optional, + Flowlabel flowlabel optional } type record of FlowFilterItem FlowFilter; @@ -348,17 +345,17 @@ module TrafficManagementAPI_TypesAndValues { * @see ETSI GS MEC 015 V2.2.1 (2022-12) Clause 7.2.5 Type: MtsSessionInfo */ type record QosD { - UInt32 minTpt optional, - UInt32 maxLatency optional, - UInt32 maxLoss optional, - UInt32 maxJitter optional, - Priority priority optional + Json.UInteger minTpt optional, + Json.UInteger maxLatency optional, + Json.UInteger maxLoss optional, + Json.UInteger maxJitter optional, + Priority priority optional } type enumerated Priority { - Low (0), - Medium (1), - High (2), + Low (0), + Medium (1), + High (2), Critical (3) } with { variant "JSON: as number" diff --git a/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_TypesAndValues.ttcn b/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_TypesAndValues.ttcn index 076dd00..ffb8c99 100644 --- a/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_TypesAndValues.ttcn @@ -13,9 +13,6 @@ module V2XInformationServiceAPI_TypesAndValues { // JSON import from Json all; - // LibCommon - import from LibCommon_BasicTypesAndValues all; - /** * @desc E-UTRAN Cell Identity as a bit string (size (28)) * @see ETSI TS 136 413 @@ -74,12 +71,12 @@ module V2XInformationServiceAPI_TypesAndValues { /** * @desc The seconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC */ - type UInt32 Seconds; + type Json.UInteger 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; + type Json.UInteger NanoSeconds; /** * @desc Time stamp description @@ -176,8 +173,8 @@ module V2XInformationServiceAPI_TypesAndValues { type record RouteInfo { LocationInfo location, TimeStamp time optional, - UInt8 rsrp optional, - UInt8 rsrq optional + Json.UInt8 rsrp optional, + Json.UInt8 rsrq optional } type record of RouteInfo RouteInfoList; @@ -273,11 +270,11 @@ module V2XInformationServiceAPI_TypesAndValues { * @see MEC030 Clause 6.4.3 Type: ProvChgUuMbmsNotification */ type record ProvChgUuMbmsNotification { - LocationInfo locationInfo, + LocationInfo locationInfo, UuMbmsNeighbourCellInfoList neighbourCellInfo optional, - Json.String notificationType, - TimeStamp timeStamp optional, - V2xServerUsd v2xServerUsd optional + Json.String notificationType, + TimeStamp timeStamp optional, + V2xServerUsd v2xServerUsd optional } /** @@ -428,7 +425,7 @@ module V2XInformationServiceAPI_TypesAndValues { type record ProInfoUuMbms { LocationInfo locationInfo, UuMbmsNeighbourCellInfoList neighbourCellInfo optional, - V2xServerUsd v2xServerUsd + V2xServerUsd v2xServerUsd } type record of ProInfoUuMbms ProInfoUuMbmsList; @@ -483,7 +480,7 @@ module V2XInformationServiceAPI_TypesAndValues { */ type record UuUnicastProvisioningInfo { ProInfoUuUnicastList proInfoUuUnicast, - TimeStamp timeStamp optional + TimeStamp timeStamp optional } /** @@ -542,7 +539,7 @@ module V2XInformationServiceAPI_TypesAndValues { * @see MEC030 Clause 6.3.5 Type: V2xMsgSubscription */ type record V2xMsgSubscriptionFilterCriteria { - MsgTypeList msgType optional, + MsgTypeList msgType optional, StdOrganization stdOrganization } diff --git a/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_TypesAndValues.ttcn b/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_TypesAndValues.ttcn index 35effc6..6bb930d 100644 --- a/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_TypesAndValues.ttcn @@ -13,18 +13,15 @@ module WlanInformationAPI_TypesAndValues { // JSON import from Json all; - // LibCommon - import from LibCommon_BasicTypesAndValues all; - /** * @desc The seconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC */ - type UInt32 Seconds; + type Json.UInteger 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; + type Json.UInteger NanoSeconds; /** * @desc Time stamp description @@ -62,14 +59,14 @@ module WlanInformationAPI_TypesAndValues { * @member aselCap ASEL capabilities * @see ETSI GS MEC 028 Clause 6.5.14 Type: HtCapabilities */ - type integer UInt128 with {variant "unsigned 128 bit"}; + type integer UInt128 with {variant "unsigned 32 bit"}; type record HtCapabilities { - UInt16 htCapabilityInfo, - UInt8 ampduParameters, + Json.UInt16 htCapabilityInfo, + Json.UInt8 ampduParameters, UInt128 supportedMcsSet, - UInt16 htExtendedCap, - UInt32 txBeamFormCap, - UInt8 aselCap + Json.UInt16 htExtendedCap, + Json.UInteger txBeamFormCap, + Json.UInt8 aselCap } /** @@ -79,8 +76,8 @@ module WlanInformationAPI_TypesAndValues { * @see ETSI GS MEC 028 Clause 6.5.15 Type: VhtCapabilities */ type record VhtCapabilities { - UInt32 vhtCapInfo, - UInt64 vhtMcsNss + Json.UInteger vhtCapInfo, + Json.UInteger vhtMcsNss } /** @@ -91,9 +88,9 @@ module WlanInformationAPI_TypesAndValues { * @see ETSI GS MEC 028 Clause 6.5.16 Type: HeCapabilities */ type record HeCapabilities { - UInt8 heMacCapInfo, - UInt8 hePhyCapinfo, - UInt8 supportedHeMcsNssSet + Json.UInt8 heMacCapInfo, + Json.UInt8 hePhyCapinfo, + Json.UInt8 supportedHeMcsNssSet } /** @@ -107,12 +104,12 @@ module WlanInformationAPI_TypesAndValues { * @see ETSI GS MEC 028 Clause 6.5.17 Type: DmgCapabilities */ type record DmgCapabilities { - UInt64 dmgStaCapInfo, - UInt16 dmgApOrPcpCapInfo, - UInt16 dmgStaBeamTrackTimeLimit, - UInt8 extScMcsCap, - UInt8 maxNrBasicAmsduSubframes, - UInt8 maxNrShortAmsduSubframes + Json.UInteger dmgStaCapInfo, + Json.UInt16 dmgApOrPcpCapInfo, + Json.UInt16 dmgStaBeamTrackTimeLimit, + Json.UInt8 extScMcsCap, + Json.UInt8 maxNrBasicAmsduSubframes, + Json.UInt8 maxNrShortAmsduSubframes } /** @@ -124,9 +121,9 @@ module WlanInformationAPI_TypesAndValues { * @see ETSI GS MEC 028 Clause 6.5.18 Type: EdmgCapabilities */ type record EdmgCapabilities { - UInt8 ampduParameters, - UInt16 trnParameters, - UInt32 supportedMcs + Json.UInt8 ampduParameters, + Json.UInt16 trnParameters, + Json.UInteger supportedMcs } /** @@ -157,12 +154,12 @@ module WlanInformationAPI_TypesAndValues { * @see ETSI GS MEC 028 Clause 6.5.6 Type: WanMetrics */ type record WanMetrics { - UInt8 wanInfo, - UInt32 downlinkSpeed, - UInt32 uplinkSpeed, - UInt8 downlinkLoad, - UInt8 uplinkLoad, - UInt16 lmd + Json.UInt8 wanInfo, + Json.UInteger downlinkSpeed, + Json.UInteger uplinkSpeed, + Json.UInt8 downlinkLoad, + Json.UInt8 uplinkLoad, + Json.UInt16 lmd } /** @@ -173,9 +170,9 @@ module WlanInformationAPI_TypesAndValues { * @see ETSI GS MEC 028 Clause 6.5.7 Type: BssLoad */ type record BssLoad { - UInt16 staCount, - UInt8 channelUtilization, - UInt16 availAdmCap + Json.UInt16 staCount, + Json.UInt8 channelUtilization, + Json.UInt16 availAdmCap } /** @@ -188,11 +185,11 @@ module WlanInformationAPI_TypesAndValues { * @see ETSI GS MEC 028 Clause 6.5.8 Type: ExtBssLoad */ type record ExtBssLoad { - UInt16 muMimoStaCount, - UInt8 spatStreamUnderUtil, - UInt8 obsSec20MhzUtil, - UInt8 obsSec40MhzUtil, - UInt8 obsSec80MhzUtil + Json.UInt16 muMimoStaCount, + Json.UInt8 spatStreamUnderUtil, + Json.UInt8 obsSec20MhzUtil, + Json.UInt8 obsSec40MhzUtil, + Json.UInt8 obsSec80MhzUtil } /** @@ -208,14 +205,14 @@ module WlanInformationAPI_TypesAndValues { * @see ETSI GS MEC 028 Clause 6.5.19 Type: GeoLocation */ type record GeoLocation { - UInt8 latUncertainty, - UInt64 lat, - UInt8 longUncertainty, - UInt64 long, - UInt8 altitudeType optional, - UInt8 altitudeUncertainty optional, - UInt32 altitude optional, - UInt8 datum + Json.UInt8 latUncertainty, + Json.UInteger lat, + Json.UInt8 longUncertainty, + Json.UInteger long, + Json.UInt8 altitudeType optional, + Json.UInt8 altitudeUncertainty optional, + Json.UInteger altitude optional, + Json.UInt8 datum } /** @@ -335,11 +332,11 @@ module WlanInformationAPI_TypesAndValues { StaIdentity staId, Json.String measurementId, Json.String bssid, - UInt32 bssidInfo, - UInt8 operatingClass, - UInt8 channel, - UInt8 phyType, - UInt8 bssTransitionCandidatePreference optional + Json.UInteger bssidInfo, + Json.UInt8 operatingClass, + Json.UInt8 channel, + Json.UInt8 phyType, + Json.UInt8 bssTransitionCandidatePreference optional } type record of NeighborReportItem NeighborReport; @@ -413,10 +410,10 @@ module WlanInformationAPI_TypesAndValues { type record ChannelLoadItem { StaIdentity staId optional, Json.String measurementId, - UInt8 operatingClass, - UInt8 channel, - UInt8 measurementDuration, - UInt8 channelLoad + Json.UInt8 operatingClass, + Json.UInt8 channel, + Json.UInt8 measurementDuration, + Json.UInt8 channelLoad } type record of ChannelLoadItem ChannelLoad; @@ -430,11 +427,11 @@ module WlanInformationAPI_TypesAndValues { * @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 + Json.UInt16 allocatedTrafficSelfMean, + Json.UInt16 allocatedTrafficSelfStdDev optional, + Json.UInt16 allocatedTrafficShareMean, + Json.UInt16 allocatedTrafficShareStdDev optional, + Json.UInt8 overlap optional } /** @@ -459,8 +456,8 @@ module WlanInformationAPI_TypesAndValues { * @see ETSI GS MEC 028 Clause 6.5.41 Type: MeasurementInfo */ type record MeasurementInfo { - UInt16 measurementDuration optional, - UInt16 randomInterval optional, + Json.UInt16 measurementDuration optional, + Json.UInt16 randomInterval optional, ChannelLoadConfig channelLoadConf optional, BeaconRequestConfig beaconRequestConf optional, StaStatisticsConfig staStatisticsConf optional, @@ -480,13 +477,13 @@ module WlanInformationAPI_TypesAndValues { * @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, + Json.UInteger transmittedFragmentCount, + Json.UInteger groupTransmittedFrameCount, + Json.UInteger failedCount, + Json.UInteger receivedFragmentCount, + Json.UInteger groupReceivedFrameCount, + Json.UInteger fcsErrorCount, + Json.UInteger transmittedFrameCount, ReportingReasonStaCounters reportingReasonStaCounters optional } @@ -502,12 +499,12 @@ module WlanInformationAPI_TypesAndValues { * @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, + Json.UInteger retryCount, + Json.UInteger multipleRetryCount, + Json.UInteger frameDuplicateCount, + Json.UInteger rtsSuccessCount, + Json.UInteger rtsFailureCount, + Json.UInteger ackFailureCount, ReportingReasonStaCounters reportingReasonStaCounters optional } @@ -531,19 +528,19 @@ module WlanInformationAPI_TypesAndValues { * @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, + Json.UInteger qosTransmittedFragmentCount, + Json.UInteger qosFailedCount, + Json.UInteger qosRetryCount, + Json.UInteger qosMultipleRetryCount, + Json.UInteger qosFrameDuplicateCount, + Json.UInteger qosRTSSuccessCount, + Json.UInteger qosRTSFailureCount, + Json.UInteger qosAckFailureCount, + Json.UInteger qosReceivedFragmentCount, + Json.UInteger qosTransmittedFrameCount, + Json.UInteger qosDiscardedFrameCount, + Json.UInteger qosMPDUsReceivedCount, + Json.UInteger qosRetriesReceivedCount, ReportingReasonQoSCounters reportingReasonQoSCounters optional } @@ -562,12 +559,12 @@ module WlanInformationAPI_TypesAndValues { StaIdentity staId optional, Json.String measurementId, Json.String measurementDuration, - UInt8 groupIdentity, + Json.UInt8 groupIdentity, 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 + type Json.UInt8 StatisticsGroupData; // Note defined, see ETSI GS MEC 028 Clause 6.5.13 Type: StaStatistics /** * @desc Information on the Received Signal Strength Indicator (RSSI) of a client station @@ -575,7 +572,7 @@ module WlanInformationAPI_TypesAndValues { * @see ETSI GS MEC 028 Clause 6.5.21 Type: Rssi */ type record Rssi { - UInt8 rssi + Json.UInt8 rssi } /** @@ -587,8 +584,8 @@ module WlanInformationAPI_TypesAndValues { */ type record StaDataRate { StaIdentity staId optional, - UInt32 staLastDataDownlinkRate optional, - UInt32 staLastDataUplinkRate optional + Json.UInteger staLastDataDownlinkRate optional, + Json.UInteger staLastDataUplinkRate optional } type record of StaDataRate StaDataRates; @@ -616,8 +613,8 @@ module WlanInformationAPI_TypesAndValues { */ type record ChannelLoadConfig { ApIdentity apId, - UInt32 cChannelId, - UInt32 channelLoad + Json.UInteger cChannelId, + Json.UInteger channelLoad } /** @@ -632,11 +629,11 @@ module WlanInformationAPI_TypesAndValues { */ type record BeaconRequestConfig { StaIdentity staId, - UInt32 channelId, - UInt32 measurementMode, + Json.UInteger channelId, + Json.UInteger measurementMode, BssIds bssId, SsIds ssId optional, - UInt32 reportingCondition + Json.UInteger reportingCondition } type record of Json.String BssIds; type record of Json.String SsIds; @@ -652,10 +649,10 @@ module WlanInformationAPI_TypesAndValues { */ type record StaStatisticsConfig { StaIdentity staId, - UInt32 groupIdentity, + Json.UInteger groupIdentity, boolean triggeredReport, - UInt32 triggerTimeout, - UInt16 triggerCondition + Json.UInteger triggerTimeout, + Json.UInt16 triggerCondition } /** @@ -669,7 +666,7 @@ module WlanInformationAPI_TypesAndValues { type record BeaconReportItem { StaIdentity staId, Json.String measurementId, - UInt32 channelId, + Json.UInteger channelId, BssIds bssId, SsIds ssId optional } @@ -690,7 +687,7 @@ module WlanInformationAPI_TypesAndValues { type record ApInfo { TimeStamp timeStamp optional, ApIdentity apId, - UInt32 channel optional, + Json.UInteger channel optional, WlanCapabilities wlanCap optional, WanMetrics wanMetrics optional, BssLoad bssLoad optional, @@ -717,7 +714,7 @@ module WlanInformationAPI_TypesAndValues { type record StaInfo { TimeStamp timeStamp optional, StaIdentity staId, - UInt32 channel optional, + Json.UInteger channel optional, ApAssociated apAssociated optional, Rssi rssi optional, StaDataRate staDataRate optional, @@ -771,8 +768,8 @@ module WlanInformationAPI_TypesAndValues { * @see ETSI GS MEC 028 Clause 6.3.3 Type: StaDataRateSubscription */ type record NotificationEvent { - UInt8 trigger_, - UInt8 threshold + Json.UInt8 trigger_, + Json.UInt8 threshold } with { variant (trigger_) "name as 'trigger'"; } @@ -797,7 +794,7 @@ module WlanInformationAPI_TypesAndValues { WebsockNotifConfig websockNotifConfig optional, LinkTypes links optional, ApIdentity apId, - UInt8 notificationPeriod optional, + Json.UInt8 notificationPeriod optional, NotificationEvent notificationEvent optional, TimeStamp expiryDeadline optional } with { @@ -825,7 +822,7 @@ module WlanInformationAPI_TypesAndValues { WebsockNotifConfig websockNotifConfig optional, LinkTypes links optional, StaIdentities staId, - UInt8 notificationPeriod optional, + Json.UInt8 notificationPeriod optional, NotificationEvent notificationEvent optional, TimeStamp expiryDeadline optional } with { diff --git a/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn b/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn index 75ff0a7..1e1312f 100644 --- a/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn +++ b/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn @@ -38,11 +38,8 @@ module LibHttp_JsonMessageBodyTypes { AccessPointList accessPointList, UserTrackingSubscription userTrackingSubscription, PeriodicTrackingSubscription periodicTrackingSubscription, - ZonalTrafficSubscription zonalTrafficSubscription, CircleNotificationSubscription circleNotificationSubscription, TerminalDistance terminalDistance, - DistanceNotificationSubscription distanceNotificationSubscription, - PeriodicNotificationSubscription periodicNotificationSubscription, LibMec_TypesAndValues.ProblemDetails problemDetails, UeIdentityTagInfo ueIdentityTagInfo, RnisAPI_TypesAndValues.SubscriptionLinkList subscriptionLinkList, -- GitLab From 673418dca9b800e8d5f686cd5a0d87d118c2c2a4 Mon Sep 17 00:00:00 2001 From: YannGarcia Date: Wed, 17 May 2023 10:49:50 +0200 Subject: [PATCH 24/99] Review typing for MEC 014 --- titan-test-system-framework | 2 +- .../ttcn/UEidentityAPI_TypesAndValues.ttcn | 15 ++++++--------- .../ttcn/LibHttp_JsonMessageBodyTypes.ttcn | 1 - .../ttcn/LibHttp_JsonTemplates.ttcn | 12 ------------ 4 files changed, 7 insertions(+), 23 deletions(-) diff --git a/titan-test-system-framework b/titan-test-system-framework index 163d1cf..554d6b6 160000 --- a/titan-test-system-framework +++ b/titan-test-system-framework @@ -1 +1 @@ -Subproject commit 163d1cfca22b18ceb1d7e24380f46f7fbaa53a97 +Subproject commit 554d6b6b3ce1e51d88267a3c946cd30caac97a55 diff --git a/ttcn/LibMec/UEidentityAPI/ttcn/UEidentityAPI_TypesAndValues.ttcn b/ttcn/LibMec/UEidentityAPI/ttcn/UEidentityAPI_TypesAndValues.ttcn index 14e9cb1..0bc3c96 100644 --- a/ttcn/LibMec/UEidentityAPI/ttcn/UEidentityAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/UEidentityAPI/ttcn/UEidentityAPI_TypesAndValues.ttcn @@ -1,5 +1,5 @@ /** - * @author ETSI / STF569 + * @author ETSI / STF569 / TTF T027 * @version $URL$ * $Id$ * @desc Module containing types and values for UeIdentiyAPI protocol @@ -13,13 +13,10 @@ module UEidentityAPI_TypesAndValues { // JSON import from Json all; - // LibCommon - import from LibCommon_BasicTypesAndValues all; - /** * @desc Information of UE identity tag used in UE Identity feature * @member ueIdentityTags 1 to N tags presented by a ME Application instance to a ME Platform - * @see ETSI GS MEC 014 Clause 7.2 Global definitions and resource structure + * @see ETSI GS MEC 014 V3.1.1 (2023-06) Table 6.2.2-1: Definition of type UeIdentityTagInfo */ type record UeIdentityTagInfo { UeIdentityTags ueIdentityTags @@ -27,13 +24,13 @@ module UEidentityAPI_TypesAndValues { /** * @desc Specific tag presented by a ME Application instance to a ME Platform - * @see ETSI GS MEC 014 Clause 6.2.2 Type: UeIdentityTagInfo + * @see ETSI GS MEC 014 V3.1.1 (2023-06) Table 6.2.2-1: Definition of type UeIdentityTagInfo */ type Json.String UeIdentityTag; /** * @desc Status of the resource ueIdentityTagInfo - * @see ETSI GS MEC 014 Clause 6.2.2 Type: UeIdentityTagInfo + * @see ETSI GS MEC 014 V3.1.1 (2023-06) Table 6.2.2-1: Definition of type UeIdentityTagInfo */ type enumerated State { UNREGISTERED, @@ -45,7 +42,7 @@ module UEidentityAPI_TypesAndValues { * @desc ME Application instance to a ME Platform * @member ueIdentityTag Specific tag presented by a ME Application instance to a ME Platform * @member state Status of the resource ueIdentityTagInfo - * @see ETSI GS MEC 014 Clause 6.2.2 Type: UeIdentityTagInfo + * @see ETSI GS MEC 014 V3.1.1 (2023-06) Table 6.2.2-1: Definition of type UeIdentityTagInfo */ type record UeIdentityTagItem { Json.String ueIdentityTag, @@ -54,7 +51,7 @@ module UEidentityAPI_TypesAndValues { /** * @desc 1 to N tags presented by a ME Application instance to a ME Platform - * @see ETSI GS MEC 014 Clause 6.2.2 Type: UeIdentityTagInfo + * @see ETSI GS MEC 014 V3.1.1 (2023-06) Table 6.2.2-1: Definition of type UeIdentityTagInfo */ type record of UeIdentityTagItem UeIdentityTags; diff --git a/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn b/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn index 1e1312f..7d0d715 100644 --- a/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn +++ b/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn @@ -38,7 +38,6 @@ module LibHttp_JsonMessageBodyTypes { AccessPointList accessPointList, UserTrackingSubscription userTrackingSubscription, PeriodicTrackingSubscription periodicTrackingSubscription, - CircleNotificationSubscription circleNotificationSubscription, TerminalDistance terminalDistance, LibMec_TypesAndValues.ProblemDetails problemDetails, UeIdentityTagInfo ueIdentityTagInfo, diff --git a/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn b/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn index b63663e..660b1a0 100644 --- a/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn +++ b/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn @@ -429,18 +429,6 @@ group ams_api { periodicTrackingSubscription := p_periodic_tracking_subscription } // End of template mw_body_json_periodic_rtracking_subscription - template (value) JsonBody m_body_json_circle_notification_subscription( - in template (value) CircleNotificationSubscription p_circle_notification_subscription - ) := { - circleNotificationSubscription := p_circle_notification_subscription - } // End of template m_body_json_circle_notification_subscription - - template (present) JsonBody mw_body_json_circle_notification_subscription( - template (present) CircleNotificationSubscription p_circle_notification_subscription := ? - ) := { - circleNotificationSubscription := p_circle_notification_subscription - } // End of template mw_body_json_circle_notification_subscription - template (value) JsonBody m_body_json_terminal_distance( in template (value) TerminalDistance p_terminal_distance ) := { -- GitLab From 401ba139cb07542c8914d4836d68a56e08632c54 Mon Sep 17 00:00:00 2001 From: YannGarcia Date: Wed, 17 May 2023 11:20:31 +0200 Subject: [PATCH 25/99] Review typing for MEC 016 --- ...pplicationInterfaceAPI_TypesAndValues.ttcn | 328 +++++++++--------- .../ttcn/UEidentityAPI_TypesAndValues.ttcn | 2 +- 2 files changed, 172 insertions(+), 158 deletions(-) diff --git a/ttcn/LibMec/DeviceApplicationInterfaceAPI/ttcn/DeviceApplicationInterfaceAPI_TypesAndValues.ttcn b/ttcn/LibMec/DeviceApplicationInterfaceAPI/ttcn/DeviceApplicationInterfaceAPI_TypesAndValues.ttcn index 07bb4c7..fd3a04d 100644 --- a/ttcn/LibMec/DeviceApplicationInterfaceAPI/ttcn/DeviceApplicationInterfaceAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/DeviceApplicationInterfaceAPI/ttcn/DeviceApplicationInterfaceAPI_TypesAndValues.ttcn @@ -1,5 +1,5 @@ /** - * @author ETSI / TTF T012 + * @author ETSI / TTF T012 / TTF T027 * @version $Url$ * $Id$ * @desc Types ANd Values for ETSI GS MEC 016 V2.2.1 (2020-04) @@ -14,84 +14,26 @@ module DeviceApplicationInterfaceAPI_TypesAndValues { // JSON import from Json all; - // LibCommon - import from LibCommon_BasicTypesAndValues all; - - /** - * @desc Required service continuity mode for this application. - */ - type enumerated ServiceCount { - SERVICE_CONTINUITY_NOT_REQUIRED (0), - SERVICE_CONTINUITY_REQUIRED (1) - } with { - variant "JSON: as number" - } - /** - * @desc Characteristics of the application - * @member memory The maximum size in Mbytes of the memory resource expected to be used by the MEC application instance in the MEC system - * @member storageThe maximum size in Mbytes of the storage resource expected to be used by the MEC application instance in the MEC system - * @member latency The target round trip time in milliseconds supported by the MEC system for the MEC application instance - * @member bandwidth The required connection bandwidth in kbit/s for the use of the MEC application instance - * @member serviceCont Required service continuity mode for this application - * @see ETSI GS MEC 016 Clause 6.2.2 Type: ApplicationList - */ - type record AppCharcs { - UInt32 memory optional, - UInt32 storage optional, - UInt32 latency optional, - UInt32 bandwidth optional, - ServiceCount serviceCont optional - } - - /** - * @desc elements comprising the civic address - * @member caType Describe the content type of caValue. The value of caType shall comply with section 3.4 of IETF RFC 4776 - * @member caValue Content of civic address element corresponding to the caType. The format caValue shall comply with section 3.4 of IETF RFC 4776 + * @desc Information on available applications + * @member appList List of user applications available to the device application + * @see ETSI GS MEC 016 V2.2.1 (2020-04) Clause 6.2.2 Type: ApplicationList */ - type record CivicAddressElement { - Json.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'"; + type record ApplicationList { + AppList appList optional } /** - * @desc Identifies the locations of the MEC application - * @member countryCode The two-letter ISO 3166 [7] country code in capital letters. Shall be present in case the "area" attribute is absent - * @member civicAddressElement Zero or more elements comprising the civic address - * @member area Geographic area. Shall be absent if the "civicAddressElement" attribute is present - * @see ETSI GS MEC 016 Clause 6.5.2 Type: LocationConstraints + * @desc Information on available applications + * @member appInfo List of user applications available to the device application + * @member vendorSpecificExt Extension for vendor specific information + * @see ETSI GS MEC 016 V2.2.1 (2020-04) Clause 6.2.2 Type: ApplicationList */ - type record LocationConstraints { - Json.String countryCode optional, - CivicAddressElement civicAddressElement optional, - Polygon area optional + type record AppListItem { + ApplicationList_AppInfo appInfo, + VendorSpecificExt vendorSpecificExt optional } - type record of LocationConstraints LocationConstraintsList; + type record of AppListItem AppList; /** * @desc Information on available applications @@ -103,61 +45,74 @@ module DeviceApplicationInterfaceAPI_TypesAndValues { * @member appDescription Human readable description of the MEC application * @member appLocation Identifies the locations of the MEC application * @member appCharcs Characteristics of the application - * @see ETSI GS MEC 016 Clause 6.2.2 Type: ApplicationList + * @see ETSI GS MEC 016 V2.2.1 (2020-04) Clause 6.2.2 Type: ApplicationList */ type record ApplicationList_AppInfo { - Json.String appDId, - Json.String appName, - Json.String appProvider, - Json.String appSoftVersion optional, - Json.String appDVersion, - Json.String appDescription optional, + Json.String appDId, + Json.String appName, + Json.String appProvider, + Json.String appSoftVersion optional, + Json.String appDVersion, + Json.String appDescription optional, LocationConstraintsList appLocation optional, - AppCharcs appCharcs optional + AppCharcs appCharcs optional } /** * @desc Extension for vendor specific information * @member vendorId Vendor identifier + * @see ETSI GS MEC 016 V2.2.1 (2020-04) Clause 6.2.2 Type: ApplicationList */ type record VendorSpecificExt { Json.String vendorId } /** - * @desc Information on available applications - * @member appInfo List of user applications available to the device application - * @member vendorSpecificExt Extension for vendor specific information - * @see ETSI GS MEC 016 Clause 6.2.2 Type: ApplicationList + * @desc Characteristics of the application + * @member memory The maximum size in Mbytes of the memory resource expected to be used by the MEC application instance in the MEC system + * @member storageThe maximum size in Mbytes of the storage resource expected to be used by the MEC application instance in the MEC system + * @member latency The target round trip time in milliseconds supported by the MEC system for the MEC application instance + * @member bandwidth The required connection bandwidth in kbit/s for the use of the MEC application instance + * @member serviceCont Required service continuity mode for this application + * @see ETSI GS MEC 016 V2.2.1 (2020-04) Clause 6.2.2 Type: ApplicationList */ - type record AppListItem { - ApplicationList_AppInfo appInfo, - VendorSpecificExt vendorSpecificExt optional + type record AppCharcs { + Json.UInteger memory optional, + Json.UInteger storage optional, + Json.UInteger latency optional, + Json.UInteger bandwidth optional, + ServiceCount serviceCont optional } - type record of AppListItem AppList; /** - * @desc Information on available applications - * @member appList List of user applications available to the device application - * @see ETSI GS MEC 016 Clause 6.2.2 Type: ApplicationList + * @desc Required service continuity mode for this application + * @see ETSI GS MEC 016 V2.2.1 (2020-04) Clause 6.2.2 Type: ApplicationList */ - type record ApplicationList { - AppList appList optional + type enumerated ServiceCount { + SERVICE_CONTINUITY_NOT_REQUIRED (0), + SERVICE_CONTINUITY_REQUIRED (1) + } with { + variant "JSON: as number" } /** - * @desc user application instance information - * @member appInstanceId Identifier of the user application instance - * @member referenceURI Address of the user application instance - * @member appLocation Location of the user application instance - * @see ETSI GS MEC 016 Clause 6.2.3 Type: AppContext + * @desc Information on application context created by the MEC system + * @member contextId Uniquely identifies the application context in the MEC system + * @member associateDevAppId Uniquely identifies the device application + * @member callbackReference Assigned by the device application to receive application lifecycle related notifications + * @member appLocationUpdates Used by the device application to request to receive notifications at the callbackReference URI relating to location availability for user application instantiation + * @member appAutoInstantiation Provides indication to the MEC system that instantiation of the requested application is desired should a requested appLocation become available that was not at the time of the request + * @member appInfo + * @see ETSI GS MEC 016 V2.2.1 (2020-04) Clause 6.2.3 Type: AppContext */ - type record UserAppInstanceInfo { - Json.String appInstanceId optional, - Json.AnyURI referenceURI optional, - LocationConstraints appLocation optional + type record AppContext { + Json.String contextId optional, + Json.String associateDevAppId, + Json.AnyURI callbackReference optional, + boolean appLocationUpdates optional, + boolean appAutoInstantiation optional, + ApplicationContext_AppInfo appInfo } - type record of UserAppInstanceInfo UserAppInstanceInfoList; /** * @desc Information on available applications @@ -169,48 +124,44 @@ module DeviceApplicationInterfaceAPI_TypesAndValues { * @member appDescription Human readable description of the MEC application * @member userAppInstanceInfo List of user application instance information * @member appPackageSource URI of the application package - * @see ETSI GS MEC 016 Clause 6.2.3 Type: AppContext + * @see ETSI GS MEC 016 V2.2.1 (2020-04) Clause 6.2.3 Type: AppContext */ type record ApplicationContext_AppInfo { - Json.String appDId, - Json.String appName, - Json.String appProvider, - Json.String appSoftVersion optional, - Json.String appDVersion, - Json.String appDescription optional, + Json.String appDId, + Json.String appName, + Json.String appProvider, + Json.String appSoftVersion optional, + Json.String appDVersion, + Json.String appDescription optional, UserAppInstanceInfoList userAppInstanceInfo optional, - Json.AnyURI appPackageSource optional + Json.AnyURI appPackageSource optional } /** - * @desc Information on application context created by the MEC system - * @member contextId Uniquely identifies the application context in the MEC system - * @member associateDevAppId Uniquely identifies the device application - * @member callbackReference Assigned by the device application to receive application lifecycle related notifications - * @member appLocationUpdates Used by the device application to request to receive notifications at the callbackReference URI relating to location availability for user application instantiation - * @member appAutoInstantiation Provides indication to the MEC system that instantiation of the requested application is desired should a requested appLocation become available that was not at the time of the request - * @member appInfo - * @see ETSI GS MEC 016 Clause 6.2.3 Type: AppContext + * @desc user application instance information + * @member appInstanceId Identifier of the user application instance + * @member referenceURI Address of the user application instance + * @member appLocation Location of the user application instance + * @see ETSI GS MEC 016 V2.2.1 (2020-04) Clause 6.2.3 Type: AppContext */ - type record AppContext { - Json.String contextId optional, - Json.String associateDevAppId, - Json.AnyURI callbackReference optional, - boolean appLocationUpdates optional, - boolean appAutoInstantiation optional, - ApplicationContext_AppInfo appInfo + type record UserAppInstanceInfo { + Json.String appInstanceId optional, + Json.AnyURI referenceURI optional, + LocationConstraints appLocation optional } + type record of UserAppInstanceInfo UserAppInstanceInfoList; /** - * @desc - * @member appLocation Shall only be included in the response, where it indicates a location constraint available in the MEC system - - * @see ETSI GS MEC 016 Clause 6.2.4 Type: ApplicationLocationAvailability + * @desc Information on locations available instantiation of new user application instances + * @member associateDevAppId Uniquely identifies the device application + * @member appInfo + * @see ETSI GS MEC 016 V2.2.1 (2020-04) Clause 6.2.4 Type: ApplicationLocationAvailability */ - type record AvailableLocations { - LocationConstraints appLocation optional + type record ApplicationLocationAvailability { + Json.String associateDevAppId, + ApplicationLocationAvailability_AppInfo appInfo } - type record of AvailableLocations AvailableLocationsList; + /** * @desc * @member appDId Identifier of this MEC application descriptor @@ -221,29 +172,28 @@ module DeviceApplicationInterfaceAPI_TypesAndValues { * @member appDescription Human readable description of the MEC application * @member availableLocations MEC application location constraints * @member appPackageSource URI of the application package. Shall be included in the request - * @see ETSI GS MEC 016 Clause 6.2.4 Type: ApplicationLocationAvailability + * @seeETSI GS MEC 016 V2.2.1 (2020-04) Clause 6.2.4 Type: ApplicationLocationAvailability */ type record ApplicationLocationAvailability_AppInfo { - Json.String appDId, - Json.String appName, - Json.String appProvider, - Json.String appSoftVersion optional, - Json.String appDVersion, - Json.String appDescription optional, + Json.String appDId, + Json.String appName, + Json.String appProvider, + Json.String appSoftVersion optional, + Json.String appDVersion, + Json.String appDescription optional, AvailableLocationsList availableLocations optional, - Json.AnyURI appPackageSource optional + Json.AnyURI appPackageSource optional } /** - * @desc Information on locations available instantiation of new user application instances - * @member associateDevAppId Uniquely identifies the device application - * @member appInfo - * @see ETSI GS MEC 016 Clause 6.2.4 Type: ApplicationLocationAvailability + * @desc + * @member appLocation Shall only be included in the response, where it indicates a location constraint available in the MEC system + * @see ETSI GS MEC 016 V2.2.1 (2020-04) Clause 6.2.4 Type: ApplicationLocationAvailability */ - type record ApplicationLocationAvailability { - Json.String associateDevAppId, - ApplicationLocationAvailability_AppInfo appInfo + type record AvailableLocations { + LocationConstraints appLocation optional } + type record of AvailableLocations AvailableLocationsList; /** * @desc Notification from the UALCMP regarding a change in address of a user application instance @@ -251,7 +201,7 @@ module DeviceApplicationInterfaceAPI_TypesAndValues { * @member contextId Uniquely identifies the application context in the MEC system * @member appInstanceId Identifier of the user application instance * @member referenceURI Address of the user application. Used as the reference URI for the application - * @see ETSI GS MEC 016 Clause 6.4.2 Type: AddressChangeNotification + * @see ETSI GS MEC 016 V2.2.1 (2020-04) Clause 6.4.2 Type: AddressChangeNotification */ type record AddressChangeNotification { Json.String notificationType, @@ -262,9 +212,9 @@ module DeviceApplicationInterfaceAPI_TypesAndValues { /** * @desc Notification from the UALCMP regarding the deletion of an application context by the MEC system - * @member notificationType Shall be set to "AddressChangeNotification" + * @member notificationType Shall be set to "ApplicationContextDeleteNotification" * @member contextId Uniquely identifies the application context in the MEC system - * @see ETSI GS MEC 016 Clause 6.4.3 Type: ApplicationContextDeleteNotification + * @see ETSI GS MEC 016 V2.2.1 (2020-04) Clause 6.4.3 Type: ApplicationContextDeleteNotification */ type record ApplicationContextDeleteNotification { Json.String notificationType, @@ -273,10 +223,10 @@ module DeviceApplicationInterfaceAPI_TypesAndValues { /** * @desc Notification from the UALCMP regarding an update to an application change by the MEC system - * @member notificationType Shall be set to "AddressChangeNotification" + * @member notificationType Shall be set to "ApplicationContextUpdateNotification" * @member contextId Uniquely identifies the application context in the MEC system * @member userAppInstanceInfo List of user application instance information - * @see ETSI GS MEC 016 Clause 6.4.4 Type: ApplicationContextDeleteNotification + * @see ETSI GS MEC 016 V2.2.1 (2020-04) Clause 6.4.4 Type: ApplicationContextUpdateNotification */ type record ApplicationContextUpdateNotification { Json.String notificationType, @@ -286,17 +236,81 @@ module DeviceApplicationInterfaceAPI_TypesAndValues { /** * @desc Notification from the UALCMP regarding the availability of a location that was requested in the Application context create that could not be fulfilled at the time of the request - * @member notificationType Shall be set to "AddressChangeNotification" + * @member notificationType Shall be set to "ApplicationLocationAvailabilityNotification" * @member contextId Uniquely identifies the application context in the MEC system * @member availableLocations Locations available to the MEC application - * @see ETSI GS MEC 016 Clause 6.4.5 Type: ApplicationLocationAvailabilityNotification + * @see ETSI GS MEC 016 V2.2.1 (2020-04) Clause 6.4.5 Type: ApplicationLocationAvailabilityNotification */ type record ApplicationLocationAvailabilityNotification { - Json.String notificationType, - Json.String contextId, + Json.String notificationType, + Json.String contextId, AvailableLocationsList availableLocations } + /** + * @desc Identifies the locations of the MEC application + * @member countryCode The two-letter ISO 3166 [7] country code in capital letters. Shall be present in case the "area" attribute is absent + * @member civicAddressElement Zero or more elements comprising the civic address + * @member area Geographic area. Shall be absent if the "civicAddressElement" attribute is present + * @see ETSI GS MEC 016 V2.2.1 (2020-04) Clause 6.5.2 Type: LocationConstraints + */ + type record LocationConstraints { + Json.String countryCode optional, + CivicAddressElement civicAddressElement optional, + Polygon area optional + } + type record of LocationConstraints LocationConstraintsList; + + /** + * @desc Elements comprising the civic address + * @member caType Describe the content type of caValue. The value of caType shall comply with section 3.4 of IETF RFC 4776 + * @member caValue Content of civic address element corresponding to the caType. The format caValue shall comply with section 3.4 of IETF RFC 4776 + * @see ETSI GS MEC 016 V2.2.1 (2020-04) Clause 6.5.2 Type: LocationConstraints + */ + type record CivicAddressElement { + Json.Integer caType, + Json.String caValue + } + + /** + * @desc + * @see ETSI GS MEC 016 V2.2.1 (2020-04) Clause 6.5.2 Type: LocationConstraints + */ + 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 + * @see ETSI GS MEC 016 V2.2.1 (2020-04) Clause 6.5.2 Type: LocationConstraints + */ + 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; + + /** + * @desc + * @see ETSI GS MEC 016 V2.2.1 (2020-04) Clause 6.5.2 Type: LocationConstraints + */ + type record Property { + Json.String key, + Json.String value_ + } with { + variant (value_) "name as 'value'"; + } + type record of Property Properties; + } with { encode "JSON" } // End of module DeviceApplicationInterfaceAPI_TypesAndValues diff --git a/ttcn/LibMec/UEidentityAPI/ttcn/UEidentityAPI_TypesAndValues.ttcn b/ttcn/LibMec/UEidentityAPI/ttcn/UEidentityAPI_TypesAndValues.ttcn index 0bc3c96..5b1af3a 100644 --- a/ttcn/LibMec/UEidentityAPI/ttcn/UEidentityAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/UEidentityAPI/ttcn/UEidentityAPI_TypesAndValues.ttcn @@ -2,7 +2,7 @@ * @author ETSI / STF569 / TTF T027 * @version $URL$ * $Id$ - * @desc Module containing types and values for UeIdentiyAPI protocol + * @desc Module containing types and values for ETSI GS MEC 014 V3.1.1 (2023-06) * @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. -- GitLab From 18cf1f99eb543faf21a7776664dc2f307ec05a3f Mon Sep 17 00:00:00 2001 From: YannGarcia Date: Wed, 17 May 2023 12:58:38 +0200 Subject: [PATCH 26/99] Upgrade Dockerfile.stfubuntu with Ubuntu 20.04 --- virtualization/docker-dev/Dockerfile.stfubuntu | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/virtualization/docker-dev/Dockerfile.stfubuntu b/virtualization/docker-dev/Dockerfile.stfubuntu index 337f237..57104b3 100644 --- a/virtualization/docker-dev/Dockerfile.stfubuntu +++ b/virtualization/docker-dev/Dockerfile.stfubuntu @@ -1,4 +1,4 @@ -FROM ubuntu:18.04 +FROM ubuntu:20.04 MAINTAINER ETSI STF -- GitLab From 200f4f131fa212a5ce99bb06c583dc9bf3889927 Mon Sep 17 00:00:00 2001 From: YannGarcia Date: Mon, 22 May 2023 09:08:58 +0200 Subject: [PATCH 27/99] Review typing for MEC 021 --- ttcn/LibMec/Ams/ttcn/Ams_TypesAndValues.ttcn | 28 -- .../ApplicationMobilityServiceAPI/module.mk | 1 + ...tionMobilityServiceAPI_TypesAndValues.ttcn | 378 +++++++++++++++++- .../ttcn/LocationAPI_TypesAndValues.ttcn | 14 +- .../RnisAPI/ttcn/RnisAPI_TypesAndValues.ttcn | 2 +- 5 files changed, 382 insertions(+), 41 deletions(-) diff --git a/ttcn/LibMec/Ams/ttcn/Ams_TypesAndValues.ttcn b/ttcn/LibMec/Ams/ttcn/Ams_TypesAndValues.ttcn index dc4eb50..2ac176f 100644 --- a/ttcn/LibMec/Ams/ttcn/Ams_TypesAndValues.ttcn +++ b/ttcn/LibMec/Ams/ttcn/Ams_TypesAndValues.ttcn @@ -13,13 +13,6 @@ type record AppMobilityServiceInfo { String appMobilityServiceId } -type record of RegistrationInfo RegistrationInfos; -type record RegistrationInfo { - ServiceConsumerId serviceConsumerId, - DeviceInformations deviceInformation optional, - UInt32 expiryTime optional -} - type record RegistrationRequest { ServiceConsumerId serviceConsumerId, @@ -35,12 +28,6 @@ type record RegistrationRequestWithError { } -type record of ServiceConsumerId ServiceConsumerIds; -type record ServiceConsumerId { - String appInstanceId optional, - String mepId optional -} - type record ServiceConsumerIdWithError { String appId optional, String mepId optional @@ -53,11 +40,6 @@ type record ServiceConsumer { String mepId optional } -type record of DeviceInformation DeviceInformations; -type record DeviceInformation { - String associateId -} - type Json.AnyURI links; @@ -152,16 +134,6 @@ type record AdjacentAppInfoSubscription_ { } - /** - * @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; - // // // diff --git a/ttcn/LibMec/ApplicationMobilityServiceAPI/module.mk b/ttcn/LibMec/ApplicationMobilityServiceAPI/module.mk index 46b5cab..f675678 100644 --- a/ttcn/LibMec/ApplicationMobilityServiceAPI/module.mk +++ b/ttcn/LibMec/ApplicationMobilityServiceAPI/module.mk @@ -5,3 +5,4 @@ sources := \ ttcn/ApplicationMobilityServiceAPI_Templates.ttcn \ ttcn/ApplicationMobilityServiceAPI_Functions.ttcn \ +modules := ../../RnisAPI diff --git a/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_TypesAndValues.ttcn b/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_TypesAndValues.ttcn index 4c4bf95..47770e4 100644 --- a/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_TypesAndValues.ttcn @@ -1,10 +1,313 @@ +/** + * @author ETSI / STF569 / TTF T027 + * @version $Url$ + * $Id$ + * @desc Types and Values for ETSI GS MEC 021 V3.1.1 (2023-10) + * @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 ApplicationMobilityServiceAPI_TypesAndValues { // JSON import from Json all; - // LibCommon - import from LibCommon_BasicTypesAndValues all; + // MEC 012 + import from RnisAPI_TypesAndValues all; + + /** + * @desc This data type represents the registration information used in the registration API of Application Mobility Service + * @member appMobilityServiceId The identifier of registered Application Mobility Service + * @member serviceConsumerId The identifier of service consumer requesting the Application Mobility Service + * @member deviceInformation Specifies the device served by the application instance which is registering the Application Mobility Service + * @member expiryTime Indicates the time of Application Mobility Service expiration from the time of registration accepted + * @see ETSI GS MEC 021 V3.1.1 (2023-10) Table 7.2.2-1: Attributes of RegistrationInfo + */ + type record RegistrationInfo { + Json.String appMobilityServiceId + ServiceConsumerId serviceConsumerId, + DeviceInformation deviceInformation optional, + UInt32 expiryTime optional + } + type record of RegistrationInfo RegistrationInfos; + + /** + * @desc The identifier of service consumer requesting the Application Mobility Service + * @member appInstanceId Represents the identifier of the application instance registering the Application Mobility Service + * @member mepId Represents the identifier of the MEC platform registering the Application Mobility Service + * @see ETSI GS MEC 021 V3.1.1 (2023-10) Table 7.2.2-1: Attributes of RegistrationInfo + */ + type record ServiceConsumerId { + Json.String appInstanceId optional, + Json.String mepId optional + } + type record of ServiceConsumerId ServiceConsumerIds; + + /** + * @desc Specifies the device served by the application instance which is registering the Application Mobility Service + * @member associateId Represents the identifier of the device + * @member appMobilityServiceLevel If the application is stateful, this attribute shall be included + * @member contextTransferState If present, it represents the state of transferring the user context to another application instance + * @see ETSI GS MEC 021 V3.1.1 (2023-10) Table 7.2.2-1: Attributes of RegistrationInfo + */ + type record DeviceInformation_ { + Json.String associateId, + AppMobilityServiceLevel appMobilityServiceLevel optional, + ContextTransferState contextTransferState optional + } + type record of DeviceInformation_ DeviceInformation; + + /** + * @desc Represents the state of transferring the user context to another application instance + * @see ETSI GS MEC 021 V3.1.1 (2023-10) Table 7.2.2-1: Attributes of RegistrationInfo + */ + type enumerated ContextTransferState { + NOT_TRANSFERRED, + USER_CONTEXT_TRANSFER_COMPLETED + } with { + variant "JSON: as number" + } + + /** + * @desc This data type represents the adjacent application instance information of the adjacent_app_instances resource + * @member appInstanceId Identifier of the application instance + * @member appDId Identifier of the application descriptor + * @member appInstanceCommLink It specifies the communication interface of application instance + * @member mecHostInformation The MEC host where the application instance is running on + * @member registeredInstanceId Identifier of the application instance that registers to the AMS, which is instantiated from the application descriptor identified by the attribute "appDId" + * @see ETSI GS MEC 021 V3.1.1 (2023-10) Table 7.2.3-1: Attributes of AdjacentAppInstanceInfo + */ + type record AdjacentAppInstanceInfo { + Json.String appInstanceId, + Json.String appDId, + CommunicationInterface appInstanceCommLink, + MECHostInformation mecHostInformation optional, + Json.String registeredInstanceId optional + } + + /** + * @desc This type represents a subscription to mobility procedure notifications from AMS + * @member subscriptionType Shall be set to "MobilityProcedureSubscription" + * @member callbackReference URI selected by the service consumer to receive notifications on the subscribed Application Mobility Service + * @member requestTestNotification Set to TRUE by the service consumer to request a test notification via HTTP on the callbackReference URI, as specified in ETSI GS MEC 009 [4] + * @member websockNotifConfig Provides details to negotiate and signal the use of a Websocket connection between the location server and the service consumer for notifications + * @member links Hyperlink related to the resource + * @member filterCriteria List of filtering criteria for the subscription + * @member expiryDeadline Identifies a boundary after which the subscription will expire + * @see ETSI GS MEC 021 V3.1.1 (2023-10) Table 7.3.2-1: Attributes of the MobilityProcedureSubscription + */ + type record MobilityProcedureSubscription { + SubscriptionType subscriptionType, + Json.AnyURI callbackReference optional, + Json.Bool requestTestNotification optional, + WebsockNotifConfig websockNotifConfig optional, + Links links optional, + FilterCriteria filterCriteria, + TimeStamp expiryDeadline optional + } with { + variant (links) "name as '_links'"; + } + type record of MobilityProcedureSubscription MobilityProcedureSubscriptions; + + /** + * @desc Hyperlink related to the resource + * @member self_ Self-referring URI + * @see ETSI GS MEC 021 V3.1.1 (2023-10) Table 7.3.2-1: Attributes of the MobilityProcedureSubscription + */ + type record Links { + LinkType self_ + } with { + variant (self_) "name as 'self'"; + } + /** + * @desc List of filtering criteria for the subscription + * @see ETSI GS MEC 021 V3.1.1 (2023-10) Table 7.3.2-1: Attributes of the MobilityProcedureSubscription + */ + type record FilterCriteria { + Json.String appInstanceId optional, + AssociateIdList associateId optional, + MobilityStatusType mobilityStatus + } + type record of FilterCriteria FilterCriterias; + + /** + * @desc This type represents a subscription to notification about the change on adjacent application instance information from AMS + * @member subscriptionType Shall be set to "AdjacentAppInfoSubscription" + * @member callbackReference URI selected by the service consumer to receive notifications on the subscribed Application Mobility Service + * @member requestTestNotification Set to TRUE by the service consumer to request a test notification via HTTP on the callbackReference URI, as specified in ETSI GS MEC 009 [4] + * @member websockNotifConfig Provides details to negotiate and signal the use of a Websocket connection between the location server and the service consumer for notifications + * @member links Hyperlink related to the resource + * @member filterCriteria List of filtering criteria for the subscription + * @member expiryDeadline Identifies a boundary after which the subscription will expire + * @see ETSI GS MEC 021 V3.1.1 (2023-10) Table 7.3.3-1: Attributes of the AdjacentAppInfoSubscription + */ + type record AdjacentAppInfoSubscription { + SubscriptionType subscriptionType, + Json.AnyURI callbackReference optional, + Json.Bool requestTestNotification optional, + WebsockNotifConfig websockNotifConfig optional, + Links links optional, + AdjacentFilterCriteria filterCriteria, + TimeStamp expiryDeadline optional + } with { + variant (links) "name as '_links'"; + } + type record of AdjacentAppInfoSubscription AdjacentAppInfoSubscriptions; + + /** + * @desc List of filtering criteria for the subscription + * @member appInstanceId Identifier of the application instance that registers to the Application Mobility Service + * @see ETSI GS MEC 021 V3.1.1 (2023-10) Table 7.3.3-1: Attributes of the AdjacentAppInfoSubscription + */ + type record AdjacentFilterCriteria { + Json.String appInstanceId optional + } + + /** + * @desc This type represents a list of links related to currently existing subscriptions for the service consumer + * @member links The URI referring to the subscription + * @member subscription The service consumer's subscriptions + * @see ETSI GS MEC 021 V3.1.1 (2023-10) Table 7.3.4-1: Attributes of the SubscriptionLinkList + */ + type record SubscriptionLinkList { + Links links, + Subscription subscription + } with { + variant (links) "name as '_links'"; + } + + /** + * @desc The service consumer's subscriptions + * @member href The URI referring to the subscription + * @member subscriptionType Type of the subscription + * @see ETSI GS MEC 021 V3.1.1 (2023-10) Table 7.3.4-1: Attributes of the SubscriptionLinkList + */ + type record Subscription { + Json.AnyURI href, + Json.String subscriptionType + } + + /** + * @desc This type represents a notification from AMS with regards to mobility procedure + * @member notificationType Shall be set to "MobilityProcedureNotification" + * @member timeStamp Date and time of the generation of the notification + * @member associateId 1 to N identifiers to associate the information for specific UE(s) and flow(s) + * @member mobilityStatus Indicate the status of the UE mobility + * @member targetAppInfo Identifiers to associate the information of target application instance + * @member links Object containing hyperlinks related to the resource + * @see ETSI GS MEC 021 V3.1.1 (2023-10) Table 7.4.2-1: Attributes of the MobilityProcedureNotification + */ + type record MobilityProcedureNotification { + Json.String notificationType, + TimeStamp timeStamp optional, + AssociateId associateId, + MobilityStatus mobilityStatus, + TargetAppInfo targetAppInfo optional, + Links_Notification links + } with { + variant (links) "name as '_links'"; + } + + /** + * @desc Identifiers to associate the information of target application instance + * @member appInstanceId Identifiers of the target application instance + * @member CommunicationInterface It specifies the communication interface of the application instance + * @see ETSI GS MEC 021 V3.1.1 (2023-10) Table 7.4.2-1: Attributes of the MobilityProcedureNotification + */ + type record TargetAppInfo { + Json.String appInstanceId String 1 . + CommunicationInterface commInterface optional + } + + /** + * @desc Indicate the status of the UE mobility + * @see ETSI GS MEC 021 V3.1.1 (2023-10) Table 7.4.2-1: Attributes of the MobilityProcedureNotification + */ + type enumerated MobilityStatus { + INTERHOST_MOVEOUT_TRIGGERED (1), + INTERHOST_MOVEOUT_COMPLETED (2), + INTERHOST_MOVEOUT_FAILED (3) + } with { + variant "JSON: as number" + } + + /** + * @desc Object containing hyperlinks related to the resource + * @member subscription Link to the related subscription + * @see ETSI GS MEC 021 V3.1.1 (2023-10) Table 7.4.2-1: Attributes of the MobilityProcedureNotification + */ + type record Links_Notification { + LinkType subscription + } + + /** + * @desc This type represents a notification from AMS with regards to change on adjacent application instances information + * @member notificationType Shall be set to "MobilityProcedureNotification" + * @member timeStamp Date and time of the generation of the notification + * @member adjacentAppInfo 0 to N identifiers to associate the information for adjacent application instances + * @member links Object containing hyperlinks related to the resource + * @see ETSI GS MEC 021 V3.1.1 (2023-10) Table 7.4.3-1: Attributes of the AdjacentAppInfoNotification + */ + type record AdjacentAppInfoNotification { + Json.String notificationType, + TimeStamp timeStamp optional, + AdjacentAppInfo adjacentAppInfo optional, + Links_Notification links + } with { + variant (links) "name as '_links'"; + } + + type record of TargetAppInfo AdjacentAppInfo; + + /** + * @desc This data type represents a notification from AMS with regards to expiry of the existing subscription + * @member notificationType Shall be set to "ExpiryNotification" + * @member timeStamp Date and time of the generation of the notification + * @member links Object containing hyperlinks related to the resource + * @see ETSI GS MEC 021 V3.1.1 (2023-10) Table 7.4.4-1: Attributes of the ExpiryNotification + */ + type record ExpiryNotification { + Json.String notificationType, + TimeStamp timeStamp optional, + Links_Notification links + } with { + variant (links) "name as '_links'"; + } + + /** + * @desc This data type represents the Application Mobility Service level information used in the Application Mobility Service APIs + * @member appMobilityServiceLevel Provides an option for the application instance (server) to communicate with the application client before relocating this application instance to another MEC host + * @see ETSI GS MEC 021 V3.1.1 (2023-10) Table 7.4.5-1: Attributes of AppMobilityServiceLevel + */ + type record AppMobilityServiceLevel { + AppMobilityServiceLevelEnmu appMobilityServiceLevel + } + + /** + * @desc Provides an option for the application instance (server) to communicate with the application client before relocating this application instance to another MEC host + * @see ETSI GS MEC 021 V3.1.1 (2023-10) Table 7.4.5-1: Attributes of AppMobilityServiceLevel + */ + type enumerated AppMobilityServiceLevelEnmu { + APP_MOBILITY_NOT_ALLOWED (1), + APP_MOBILITY_WITH_CONFIRMATION (2), + APP_MOBILITY_WITHOUT_CONFIRMATION (3) + } with { + variant "JSON: as number" + } + + /** + * @desc This data type represents a notification from AMS with regards to expiry of the existing subscription + * @member notificationType Shall be set to "TestNotification" + * @member links Object containing hyperlinks related to the resource + * @see ETSI GS MEC 021 V3.1.1 (2023-10) Table 7.4.6-1: Attributes of the TestNotification + */ + type record TestNotification { + Json.String notificationType, + Links_Notification links + } with { + variant (links) "name as '_links'"; + } /** * @desc This type represents the communication interface of an application instance @@ -22,12 +325,77 @@ module ApplicationMobilityServiceAPI_TypesAndValues { * @see ETSI GS MEC 021 Clause 7.5.2 Type: CommunicationInterface */ type record IpAddress { - Json.String host, - UInt32 port_ + Json.String host, + Json.UInteger port_ } with { variant (port_) "name as 'port'"; } - type record length(1..infinity) of IpAddress IpAddresses; + /** + * @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 + * @see ETSI GS MEC 021 Clause 7.5.3 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 Json.UInteger Seconds; + + /** + * @desc The nanoseconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC + */ + type Json.UInteger NanoSeconds; + + /** + * @desc This type represents a type of link + * @member href URI referring to a resource + * @see ETSI GS MEC 021 Clause 7.5.4 Type: LinkType + */ + type record LinkType { + Json.AnyURI href + } + + /** + * @desc The type represents the parameters of MEC host information + * @member hostName Human-readable name of MEC host + * @member hostId Deployment-specific information to identify a MEC host + * @see ETSI GS MEC 021 Table 7.5.5-1: Attributes of MECHostInformation + */ + type record IpAddress { + Json.String hostName optional, + KeyValuePairs hostId + } + + /** + * @desc This data type represents a list of key-value pairs + * @member key_name + * @member key_value + * @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 type represents configuration for the delivery of subscription notifications over Websockets + * @member websocketUri Set by location server 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 021 Clause 7.5.7 Type: WebsockNotifConfig + */ + type record WebsockNotifConfig { + Json.AnyURI websocketUri optional, + Json.Bool requestWebsocketUri optional + } + +} with { + extension "anytype integer, float, boolean, universal charstring"; + encode "JSON" } // End of module ApplicationMobilityServiceAPI_TypesAndValues diff --git a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn index 88a2afe..6f5c286 100644 --- a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn @@ -30,7 +30,7 @@ module LocationAPI_TypesAndValues { * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.5.2 Type: TimeStamp */ type record TimeStamp { - Seconds seconds, + Seconds seconds, NanoSeconds nanoSeconds } @@ -41,7 +41,7 @@ module LocationAPI_TypesAndValues { * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.2.5 Type: UserList */ type record UserList { - UserInfos user optional, + UserInfos user optional, ResourceURL resourceURL optional } type record of UserInfo UserInfos; @@ -54,7 +54,7 @@ module LocationAPI_TypesAndValues { */ type record WebsockNotifConfig { Json.AnyURI websocketUri optional, - Json.Bool requestWebsocketUri optional + Json.Bool requestWebsocketUri optional } /** @@ -65,10 +65,10 @@ module LocationAPI_TypesAndValues { * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.5.5 Type: UserEventPara */ type record UserEventPara { - Json.Bool reportingLocationReq optional, + Json.Bool reportingLocationReq optional, AccessPointList accessPointList optional, - ZoneId zoneId optional, - OccurrenceInfo occurrenceInfo optional + ZoneId zoneId optional, + OccurrenceInfo occurrenceInfo optional } // End of type UserEventPara @@ -179,7 +179,7 @@ module LocationAPI_TypesAndValues { ELLIPSOID_POINT_UNCERT_CIRCLE (5), ELLIPSOID_POINT_UNCERT_ELLIPSE (6), POLYGON (7) - } with { + } with { variant "JSON: as number" } diff --git a/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_TypesAndValues.ttcn b/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_TypesAndValues.ttcn index 492846a..7915800 100644 --- a/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_TypesAndValues.ttcn @@ -2,7 +2,7 @@ * @author ETSI / STF569 / TTF T027 * @version $Url$ * $Id$ - * @desc Types ANd Values for ETSI GS MEC 014 V2.2.1 (2022-02) + * @desc Types ANd Values for ETSI GS MEC 012 V2.2.1 (2022-02) * @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. -- GitLab From 667b2e1d50399c1152c558c27ae6d243b7ce980e Mon Sep 17 00:00:00 2001 From: YannGarcia Date: Mon, 22 May 2023 09:15:24 +0200 Subject: [PATCH 28/99] Review typing for MEC 021 --- ttcn/LibMec/{Ams => Ams_ToBeRemoved}/module.mk | 0 .../{Ams => Ams_ToBeRemoved}/ttcn/Ams_EncdecDeclarations.ttcn | 0 ttcn/LibMec/{Ams => Ams_ToBeRemoved}/ttcn/Ams_Pics.ttcn | 0 ttcn/LibMec/{Ams => Ams_ToBeRemoved}/ttcn/Ams_Pixits.ttcn | 0 ttcn/LibMec/{Ams => Ams_ToBeRemoved}/ttcn/Ams_Templates.ttcn | 0 ttcn/LibMec/{Ams => Ams_ToBeRemoved}/ttcn/Ams_TypesAndValues.ttcn | 0 6 files changed, 0 insertions(+), 0 deletions(-) rename ttcn/LibMec/{Ams => Ams_ToBeRemoved}/module.mk (100%) rename ttcn/LibMec/{Ams => Ams_ToBeRemoved}/ttcn/Ams_EncdecDeclarations.ttcn (100%) rename ttcn/LibMec/{Ams => Ams_ToBeRemoved}/ttcn/Ams_Pics.ttcn (100%) rename ttcn/LibMec/{Ams => Ams_ToBeRemoved}/ttcn/Ams_Pixits.ttcn (100%) rename ttcn/LibMec/{Ams => Ams_ToBeRemoved}/ttcn/Ams_Templates.ttcn (100%) rename ttcn/LibMec/{Ams => Ams_ToBeRemoved}/ttcn/Ams_TypesAndValues.ttcn (100%) diff --git a/ttcn/LibMec/Ams/module.mk b/ttcn/LibMec/Ams_ToBeRemoved/module.mk similarity index 100% rename from ttcn/LibMec/Ams/module.mk rename to ttcn/LibMec/Ams_ToBeRemoved/module.mk diff --git a/ttcn/LibMec/Ams/ttcn/Ams_EncdecDeclarations.ttcn b/ttcn/LibMec/Ams_ToBeRemoved/ttcn/Ams_EncdecDeclarations.ttcn similarity index 100% rename from ttcn/LibMec/Ams/ttcn/Ams_EncdecDeclarations.ttcn rename to ttcn/LibMec/Ams_ToBeRemoved/ttcn/Ams_EncdecDeclarations.ttcn diff --git a/ttcn/LibMec/Ams/ttcn/Ams_Pics.ttcn b/ttcn/LibMec/Ams_ToBeRemoved/ttcn/Ams_Pics.ttcn similarity index 100% rename from ttcn/LibMec/Ams/ttcn/Ams_Pics.ttcn rename to ttcn/LibMec/Ams_ToBeRemoved/ttcn/Ams_Pics.ttcn diff --git a/ttcn/LibMec/Ams/ttcn/Ams_Pixits.ttcn b/ttcn/LibMec/Ams_ToBeRemoved/ttcn/Ams_Pixits.ttcn similarity index 100% rename from ttcn/LibMec/Ams/ttcn/Ams_Pixits.ttcn rename to ttcn/LibMec/Ams_ToBeRemoved/ttcn/Ams_Pixits.ttcn diff --git a/ttcn/LibMec/Ams/ttcn/Ams_Templates.ttcn b/ttcn/LibMec/Ams_ToBeRemoved/ttcn/Ams_Templates.ttcn similarity index 100% rename from ttcn/LibMec/Ams/ttcn/Ams_Templates.ttcn rename to ttcn/LibMec/Ams_ToBeRemoved/ttcn/Ams_Templates.ttcn diff --git a/ttcn/LibMec/Ams/ttcn/Ams_TypesAndValues.ttcn b/ttcn/LibMec/Ams_ToBeRemoved/ttcn/Ams_TypesAndValues.ttcn similarity index 100% rename from ttcn/LibMec/Ams/ttcn/Ams_TypesAndValues.ttcn rename to ttcn/LibMec/Ams_ToBeRemoved/ttcn/Ams_TypesAndValues.ttcn -- GitLab From e859d41290a09fc1ffa6c5598987e145830c8c69 Mon Sep 17 00:00:00 2001 From: YannGarcia Date: Mon, 22 May 2023 14:07:53 +0200 Subject: [PATCH 29/99] Review typing for MEC 028 --- ttcn/AtsMec_Rnis/module.mk | 1 - .../ApplicationMobilityServiceAPI/module.mk | 2 +- ...tionMobilityServiceAPI_TypesAndValues.ttcn | 33 +- ...ormApplicationEnablementAPI_Templates.ttcn | 2 + .../ttcn/LocationAPI_Templates.ttcn | 2 + .../RnisAPI/ttcn/RnisAPI_Templates.ttcn | 170 +- .../RnisAPI/ttcn/RnisAPI_TypesAndValues.ttcn | 2 +- .../ttcn/TrafficManagementAPI_Templates.ttcn | 42 +- .../V2XInformationServiceAPI_Templates.ttcn | 8 +- .../ttcn/WlanInformationAPI_Functions.ttcn | 4 +- .../ttcn/WlanInformationAPI_Templates.ttcn | 68 +- .../WlanInformationAPI_TypesAndValues.ttcn | 1471 ++++++++++------- 12 files changed, 1034 insertions(+), 771 deletions(-) diff --git a/ttcn/AtsMec_Rnis/module.mk b/ttcn/AtsMec_Rnis/module.mk index 6402c87..015a416 100644 --- a/ttcn/AtsMec_Rnis/module.mk +++ b/ttcn/AtsMec_Rnis/module.mk @@ -15,7 +15,6 @@ modules := ../LibCommon \ ../LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI \ ../LibMec/TrafficManagementAPI \ ../LibMec/LocationAPI \ - ../LibMec/RnisAPI \ ../LibMec/UEAppInterfaceAPI \ ../LibMec/UEidentityAPI \ ../LibMec/V2XInformationServiceAPI \ diff --git a/ttcn/LibMec/ApplicationMobilityServiceAPI/module.mk b/ttcn/LibMec/ApplicationMobilityServiceAPI/module.mk index f675678..37bd881 100644 --- a/ttcn/LibMec/ApplicationMobilityServiceAPI/module.mk +++ b/ttcn/LibMec/ApplicationMobilityServiceAPI/module.mk @@ -5,4 +5,4 @@ sources := \ ttcn/ApplicationMobilityServiceAPI_Templates.ttcn \ ttcn/ApplicationMobilityServiceAPI_Functions.ttcn \ -modules := ../../RnisAPI +modules := ../RnisAPI diff --git a/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_TypesAndValues.ttcn b/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_TypesAndValues.ttcn index 47770e4..f2410a9 100644 --- a/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_TypesAndValues.ttcn @@ -25,10 +25,10 @@ module ApplicationMobilityServiceAPI_TypesAndValues { * @see ETSI GS MEC 021 V3.1.1 (2023-10) Table 7.2.2-1: Attributes of RegistrationInfo */ type record RegistrationInfo { - Json.String appMobilityServiceId + Json.String appMobilityServiceId, ServiceConsumerId serviceConsumerId, DeviceInformation deviceInformation optional, - UInt32 expiryTime optional + Json.UInteger expiryTime optional } type record of RegistrationInfo RegistrationInfos; @@ -98,7 +98,7 @@ module ApplicationMobilityServiceAPI_TypesAndValues { * @see ETSI GS MEC 021 V3.1.1 (2023-10) Table 7.3.2-1: Attributes of the MobilityProcedureSubscription */ type record MobilityProcedureSubscription { - SubscriptionType subscriptionType, + Json.String subscriptionType, Json.AnyURI callbackReference optional, Json.Bool requestTestNotification optional, WebsockNotifConfig websockNotifConfig optional, @@ -122,12 +122,11 @@ module ApplicationMobilityServiceAPI_TypesAndValues { } /** * @desc List of filtering criteria for the subscription + * @member appInstanceId Identifier of the application instance that registers to the Application Mobility Service * @see ETSI GS MEC 021 V3.1.1 (2023-10) Table 7.3.2-1: Attributes of the MobilityProcedureSubscription */ type record FilterCriteria { - Json.String appInstanceId optional, - AssociateIdList associateId optional, - MobilityStatusType mobilityStatus + Json.String appInstanceId optional } type record of FilterCriteria FilterCriterias; @@ -143,7 +142,7 @@ module ApplicationMobilityServiceAPI_TypesAndValues { * @see ETSI GS MEC 021 V3.1.1 (2023-10) Table 7.3.3-1: Attributes of the AdjacentAppInfoSubscription */ type record AdjacentAppInfoSubscription { - SubscriptionType subscriptionType, + Json.String subscriptionType, Json.AnyURI callbackReference optional, Json.Bool requestTestNotification optional, WebsockNotifConfig websockNotifConfig optional, @@ -201,7 +200,7 @@ module ApplicationMobilityServiceAPI_TypesAndValues { type record MobilityProcedureNotification { Json.String notificationType, TimeStamp timeStamp optional, - AssociateId associateId, + AssociateId_ associateId, MobilityStatus mobilityStatus, TargetAppInfo targetAppInfo optional, Links_Notification links @@ -216,7 +215,7 @@ module ApplicationMobilityServiceAPI_TypesAndValues { * @see ETSI GS MEC 021 V3.1.1 (2023-10) Table 7.4.2-1: Attributes of the MobilityProcedureNotification */ type record TargetAppInfo { - Json.String appInstanceId String 1 . + Json.String appInstanceId, CommunicationInterface commInterface optional } @@ -312,7 +311,7 @@ module ApplicationMobilityServiceAPI_TypesAndValues { /** * @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 + * @see ETSI GS MEC 021 V3.1.1 (2023-10) Clause 7.5.2 Type: CommunicationInterface */ type record CommunicationInterface { IpAddresses ipAddresses optional @@ -322,7 +321,7 @@ module ApplicationMobilityServiceAPI_TypesAndValues { * @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 + * @see ETSI GS MEC 021 V3.1.1 (2023-10) Clause 7.5.2 Type: CommunicationInterface */ type record IpAddress { Json.String host, @@ -336,7 +335,7 @@ module ApplicationMobilityServiceAPI_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 - * @see ETSI GS MEC 021 Clause 7.5.3 Type: TimeStamp + * @see ETSI GS MEC 021 V3.1.1 (2023-10) Clause 7.5.3 Type: TimeStamp */ type record TimeStamp { Seconds seconds, @@ -356,7 +355,7 @@ module ApplicationMobilityServiceAPI_TypesAndValues { /** * @desc This type represents a type of link * @member href URI referring to a resource - * @see ETSI GS MEC 021 Clause 7.5.4 Type: LinkType + * @see ETSI GS MEC 021 V3.1.1 (2023-10) Clause 7.5.4 Type: LinkType */ type record LinkType { Json.AnyURI href @@ -366,9 +365,9 @@ module ApplicationMobilityServiceAPI_TypesAndValues { * @desc The type represents the parameters of MEC host information * @member hostName Human-readable name of MEC host * @member hostId Deployment-specific information to identify a MEC host - * @see ETSI GS MEC 021 Table 7.5.5-1: Attributes of MECHostInformation + * @see ETSI GS MEC 021 V3.1.1 (2023-10) Table 7.5.5-1: Attributes of MECHostInformation */ - type record IpAddress { + type record MECHostInformation { Json.String hostName optional, KeyValuePairs hostId } @@ -377,7 +376,7 @@ module ApplicationMobilityServiceAPI_TypesAndValues { * @desc This data type represents a list of key-value pairs * @member key_name * @member key_value - * @see ETSI GS MEC 010-2 Clause 6.2.5.3 Type: KeyValuePairs + * @see ETSI GS MEC 021 V3.1.1 (2023-10) Clause 6.2.5.3 Type: KeyValuePairs */ type record KeyValuePairs { Json.String key_name, @@ -388,7 +387,7 @@ module ApplicationMobilityServiceAPI_TypesAndValues { * @desc This type represents configuration for the delivery of subscription notifications over Websockets * @member websocketUri Set by location server 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 021 Clause 7.5.7 Type: WebsockNotifConfig + * @see ETSI GS MEC 021 V3.1.1 (2023-10) Clause 7.5.7 Type: WebsockNotifConfig */ type record WebsockNotifConfig { Json.AnyURI websocketUri optional, diff --git a/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Templates.ttcn b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Templates.ttcn index fd90167..2c149ed 100644 --- a/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Templates.ttcn +++ b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Templates.ttcn @@ -56,6 +56,7 @@ module EdgePlatformApplicationEnablementAPI_Templates { in template (value) EndPointInfo_UriList p_uris ) := { uris := p_uris, + fqdn := omit, addresses := omit, alternative := omit } // End of template m_end_point_uris @@ -64,6 +65,7 @@ module EdgePlatformApplicationEnablementAPI_Templates { template (present) EndPointInfo_UriList p_uris := ? ) := { uris := p_uris, + fqdn := *, addresses := *, alternative := * } // End of template mw_end_point_uris diff --git a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Templates.ttcn b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Templates.ttcn index 5eb21d4..f7e52a2 100644 --- a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Templates.ttcn +++ b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Templates.ttcn @@ -23,6 +23,7 @@ module LocationAPI_Templates { resourceURL := p_resource_url, timestamp_ := p_timestamp, locationInfo := omit, + civicInfo := omit, contextLocationInfo := omit, ancillaryInfo := omit } // End of template m_user_info @@ -40,6 +41,7 @@ module LocationAPI_Templates { resourceURL := p_resource_url, timestamp_ := p_timestamp, locationInfo := *, + civicInfo := *, contextLocationInfo := *, ancillaryInfo := * } // End of template mw_user_info diff --git a/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_Templates.ttcn b/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_Templates.ttcn index b1d0888..f568100 100644 --- a/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_Templates.ttcn +++ b/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_Templates.ttcn @@ -59,19 +59,25 @@ module RnisAPI_Templates { template (omit) CellChangeSubscription m_cell_change_subscription( in template (value) CallbackReference p_callbackReference, in template (value) FilterCriteriaAssocHo p_filterCriteriaAssocHo, + in template (omit) Json.Bool p_requestTestNotification := omit, + in template (omit) WebsockNotifConfig p_websockNotifConfig := omit, in template (omit) Link p_links := omit, in template (omit) TimeStamp p_expiryDeadline := omit ) := { - subscriptionType := "CellChangeSubscription", - callbackReference := p_callbackReference, - links := p_links, - filterCriteriaAssocHo := p_filterCriteriaAssocHo, - expiryDeadline := p_expiryDeadline + subscriptionType := "CellChangeSubscription", + callbackReference := p_callbackReference, + requestTestNotification := p_requestTestNotification, + websockNotifConfig := p_websockNotifConfig, + 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) FilterCriteriaAssocHo p_filterCriteriaAssocHo, + in template (omit) Json.Bool p_requestTestNotification := omit, + in template (omit) WebsockNotifConfig p_websockNotifConfig := omit, in template (omit) Link p_links := omit, in template (omit) TimeStamp p_expiryDeadline := omit ) modifies m_cell_change_subscription := { @@ -82,13 +88,17 @@ module RnisAPI_Templates { template (present) CallbackReference p_callbackReference := ?, template (present) Link p_links := ?, template (present) FilterCriteriaAssocHo p_filterCriteriaAssocHo := ?, + template Json.Bool p_requestTestNotification := *, + template WebsockNotifConfig p_websockNotifConfig := *, template TimeStamp p_expiryDeadline := * ) := { - subscriptionType := "CellChangeSubscription", - callbackReference := p_callbackReference, - links := p_links, - filterCriteriaAssocHo := p_filterCriteriaAssocHo, - expiryDeadline := p_expiryDeadline + subscriptionType := "CellChangeSubscription", + callbackReference := p_callbackReference, + requestTestNotification := p_requestTestNotification, + websockNotifConfig := p_websockNotifConfig, + links := p_links, + filterCriteriaAssocHo := p_filterCriteriaAssocHo, + expiryDeadline := p_expiryDeadline } // End of template mw_cell_change_subscription } // End of group subscriptions @@ -98,118 +108,154 @@ module RnisAPI_Templates { template (omit) RabEstSubscription m_rab_est_subscription( in template (value) CallbackReference p_callbackReference, in template (value) RabEstSubscription_FilterCriteriaQci p_filterCriteriaQci, + in template (omit) Json.Bool p_requestTestNotification := omit, + in template (omit) WebsockNotifConfig p_websockNotifConfig := omit, in template (omit) Link p_links := omit, in template (omit) TimeStamp p_expiryDeadline := omit ) := { - subscriptionType := "RabEstSubscription", - callbackReference := p_callbackReference, - links := p_links, - filterCriteriaQci := p_filterCriteriaQci, - expiryDeadline := p_expiryDeadline + subscriptionType := "RabEstSubscription", + callbackReference := p_callbackReference, + requestTestNotification := p_requestTestNotification, + websockNotifConfig := p_websockNotifConfig, + links := p_links, + 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) RabEstSubscription_FilterCriteriaQci p_filterCriteriaQci := ?, + template Json.Bool p_requestTestNotification := *, + template WebsockNotifConfig p_websockNotifConfig := *, template TimeStamp p_expiryDeadline := * ) := { - subscriptionType := "RabEstSubscription", - callbackReference := p_callbackReference, - links := p_links, - filterCriteriaQci := p_filterCriteriaQci, - expiryDeadline := p_expiryDeadline + subscriptionType := "RabEstSubscription", + callbackReference := p_callbackReference, + requestTestNotification := p_requestTestNotification, + websockNotifConfig := p_websockNotifConfig, + links := p_links, + filterCriteriaQci := p_filterCriteriaQci, + expiryDeadline := p_expiryDeadline } // End of template mw_rab_est_subscription template (omit) RabModSubscription m_rab_mod_subscription( in template (value) CallbackReference p_callbackReference, in template (value) RabModSubscription_FilterCriteriaQci p_filterCriteriaQci, + in template (omit) Json.Bool p_requestTestNotification := omit, + in template (omit) WebsockNotifConfig p_websockNotifConfig := omit, in template (omit) Link p_links := omit, in template (omit) TimeStamp p_expiryDeadline := omit ) := { - subscriptionType := "RabModSubscription", - callbackReference := p_callbackReference, - links := p_links, - filterCriteriaQci := p_filterCriteriaQci, - expiryDeadline := p_expiryDeadline + subscriptionType := "RabModSubscription", + callbackReference := p_callbackReference, + requestTestNotification := p_requestTestNotification, + websockNotifConfig := p_websockNotifConfig, + links := p_links, + 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) RabModSubscription_FilterCriteriaQci p_filterCriteriaQci := ?, + template Json.Bool p_requestTestNotification := *, + template WebsockNotifConfig p_websockNotifConfig := *, template TimeStamp p_expiryDeadline := * ) := { - subscriptionType := "RabModSubscription", - callbackReference := p_callbackReference, - links := p_links, - filterCriteriaQci := p_filterCriteriaQci, - expiryDeadline := p_expiryDeadline + subscriptionType := "RabModSubscription", + callbackReference := p_callbackReference, + requestTestNotification := p_requestTestNotification, + websockNotifConfig := p_websockNotifConfig, + links := p_links, + filterCriteriaQci := p_filterCriteriaQci, + expiryDeadline := p_expiryDeadline } // End of template mw_rab_mod_subscription template (omit) RabRelSubscription m_rab_rel_subscription( in template (value) CallbackReference p_callbackReference, in template (value) RabModSubscription_FilterCriteriaQci p_filterCriteriaQci, + in template (omit) Json.Bool p_requestTestNotification := omit, + in template (omit) WebsockNotifConfig p_websockNotifConfig := omit, in template (omit) Link p_links := omit, in template (omit) TimeStamp p_expiryDeadline := omit ) := { - subscriptionType := "RabRelSubscription", - callbackReference := p_callbackReference, - links := p_links, - filterCriteriaQci := p_filterCriteriaQci, - expiryDeadline := p_expiryDeadline + subscriptionType := "RabRelSubscription", + callbackReference := p_callbackReference, + requestTestNotification := p_requestTestNotification, + websockNotifConfig := p_websockNotifConfig, + links := p_links, + 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) RabModSubscription_FilterCriteriaQci p_filterCriteriaQci := ?, + template Json.Bool p_requestTestNotification := *, + template WebsockNotifConfig p_websockNotifConfig := *, template TimeStamp p_expiryDeadline := * ) := { - subscriptionType := "RabRelSubscription", - callbackReference := p_callbackReference, - links := p_links, - filterCriteriaQci := p_filterCriteriaQci, - expiryDeadline := p_expiryDeadline + subscriptionType := "RabRelSubscription", + callbackReference := p_callbackReference, + requestTestNotification := p_requestTestNotification, + websockNotifConfig := p_websockNotifConfig, + links := p_links, + 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_filterCriteriaAssocTri := ?, + template Json.Bool p_requestTestNotification := *, + template WebsockNotifConfig p_websockNotifConfig := *, template TimeStamp p_expiryDeadline := * ) := { - subscriptionType := "MeasRepUeSubscription", - callbackReference := p_callbackReference, - links := p_links, - filterCriteriaAssocTri := p_filterCriteriaAssocTri, - expiryDeadline := p_expiryDeadline + subscriptionType := "MeasRepUeSubscription", + callbackReference := p_callbackReference, + requestTestNotification := p_requestTestNotification, + websockNotifConfig := p_websockNotifConfig, + 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) FilterCriteriaAssoc p_filterCriteriaAssoc := ?, + template Json.Bool p_requestTestNotification := *, + template WebsockNotifConfig p_websockNotifConfig := *, template TimeStamp p_expiryDeadline := * ) := { - subscriptionType := "MeasTaSubscription", - callbackReference := p_callbackReference, - links := p_links, - filterCriteriaAssoc := p_filterCriteriaAssoc, - expiryDeadline := p_expiryDeadline + subscriptionType := "MeasTaSubscription", + callbackReference := p_callbackReference, + requestTestNotification := p_requestTestNotification, + websockNotifConfig := p_websockNotifConfig, + links := p_links, + filterCriteriaAssoc := p_filterCriteriaAssoc, + 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_filterCriteriaAssoc := ?, + template Json.Bool p_requestTestNotification := *, + template WebsockNotifConfig p_websockNotifConfig := *, template TimeStamp p_expiryDeadline := * ) := { - subscriptionType := "CaReConfSubscription", - callbackReference := p_callbackReference, - links := p_links, - filterCriteriaAssoc := p_filterCriteriaAssoc, - expiryDeadline := p_expiryDeadline + subscriptionType := "CaReConfSubscription", + callbackReference := p_callbackReference, + requestTestNotification := p_requestTestNotification, + websockNotifConfig := p_websockNotifConfig, + links := p_links, + filterCriteriaAssoc := p_filterCriteriaAssoc, + expiryDeadline := p_expiryDeadline } // End of template mw_ca_reconfig_subscription template (present) S1BearerSubscription mw_s1_bearer_subscription( @@ -217,14 +263,18 @@ module RnisAPI_Templates { template (present) Link p_links := ?, template (present) EventType p_eventType := ?, template (present) S1BearerSubscriptionCriteria p_s1BearerSubscriptionCriteria := ?, + template Json.Bool p_requestTestNotification := *, + template WebsockNotifConfig p_websockNotifConfig := *, template TimeStamp p_expiryDeadline := * ) := { - subscriptionType := "S1BearerSubscription", - callbackReference := p_callbackReference, - links := p_links, - eventType := p_eventType, + subscriptionType := "S1BearerSubscription", + callbackReference := p_callbackReference, + requestTestNotification := p_requestTestNotification, + websockNotifConfig := p_websockNotifConfig, + 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 diff --git a/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_TypesAndValues.ttcn b/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_TypesAndValues.ttcn index 7915800..ab52234 100644 --- a/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_TypesAndValues.ttcn @@ -204,7 +204,7 @@ module RnisAPI_TypesAndValues { L2Meas_CellUEInfo cellUEInfo optional } - type integer UInt100 (0 .. 100) with {variant "unsigned 32 bit"}; + type integer UInt100 with {variant "unsigned 100 bit"}; /** * @desc The per cell measurement information diff --git a/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Templates.ttcn b/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Templates.ttcn index 1010b10..372367f 100644 --- a/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Templates.ttcn +++ b/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Templates.ttcn @@ -15,9 +15,11 @@ module TrafficManagementAPI_Templates { in BwRequestType p_requestType, in FixedAllocation p_fixedAllocation, in AllocationDirection p_allocationDirection, + in template (omit) AllocationId p_allocationId := omit, in template (omit) SessionFilter p_sessionFilter := omit, in template (omit) FixedBWPriority p_fixedBWPriority := omit ) := { + allocationId := p_allocationId, timeStamp := omit, appInsId := p_appInsId, requestType := p_requestType, @@ -32,9 +34,11 @@ module TrafficManagementAPI_Templates { template (present) BwRequestType p_requestType := ?, template (present) FixedAllocation p_fixedAllocation := ?, template (present) AllocationDirection p_allocationDirection := ?, + template AllocationId p_allocationId := *, template SessionFilter p_sessionFilter := *, template FixedBWPriority p_fixedBWPriority := * ) := { + allocationId := p_allocationId, timeStamp := *, appInsId := p_appInsId, requestType := p_requestType, @@ -47,11 +51,13 @@ module TrafficManagementAPI_Templates { template (omit) BwInfoDeltas m_bw_info_deltas( in AppInsId p_appInsId := PX_APP_INSTANCE_ID, in BwRequestType p_requestType, + in template (omit) AllocationId p_allocationId := omit, in template (omit) SessionFilter p_sessionFilter := omit, in template (omit) FixedAllocation p_fixedAllocation := omit, in template (omit) AllocationDirection p_allocationDirection := omit, in template (omit) FixedBWPriority p_fixedBWPriority := omit ) := { + allocationId := p_allocationId, appInsId := p_appInsId, requestType := p_requestType, sessionFilter := p_sessionFilter, @@ -66,8 +72,10 @@ module TrafficManagementAPI_Templates { template (present) SessionFilter p_sessionFilter := ?, template (present) FixedAllocation p_fixedAllocation := ?, template (present) AllocationDirection p_allocationDirection := ?, + template AllocationId p_allocationId := *, template FixedBWPriority p_fixedBWPriority := * ) := { + allocationId := p_allocationId, appInsId := p_appInsId, requestType := p_requestType, sessionFilter := p_sessionFilter, @@ -130,29 +138,37 @@ module TrafficManagementAPI_Templates { in template (value) QosD p_qosD, in template (value) MtsMode p_mtsMode, in template (value) TrafficDirection p_trafficDirection, + in template (omit) SessionId p_sessionId := omit, + in template (omit) Json.String p_appName := omit, in template (omit) FlowFilter p_flowFilter := omit, in template (omit) TimeStamp p_timeStamp := omit ) := { + sessionId := p_sessionId, timeStamp := p_timeStamp, appInsId := p_appInsId, + appName := p_appName, requestType := p_requestType, flowFilter := p_flowFilter, qosD := p_qosD, mtsMode := p_mtsMode, trafficDirection := p_trafficDirection } // End of template m_mts_session_info - + template MtsSessionInfo mw_mts_session_info( template (present) AppInsId p_appInsId := ?, template (present) MtsRequestType p_requestType := ?, template (present) QosD p_qosD := ?, template (present) MtsMode p_mtsMode := ?, template (present) TrafficDirection p_trafficDirection := ?, + template SessionId p_sessionId := *, + template Json.String p_appName := *, template FlowFilter p_flowFilter := *, template TimeStamp p_timeStamp := * ) := { + sessionId := p_sessionId, timeStamp := p_timeStamp, appInsId := p_appInsId, + appName := p_appName, requestType := p_requestType, flowFilter := p_flowFilter, qosD := p_qosD, @@ -163,29 +179,37 @@ module TrafficManagementAPI_Templates { template (omit) FlowFilterItem m_flow_filter( in template (value) SourceIp p_sourceIp, in template (value) SourcePort p_sourcePort, - in template (omit) DstAddress p_dstAddress := omit, + in template (omit) DstAddress p_dstIp := omit, in template (omit) DstPort p_dstPort := omit, - in template (omit) Protocol p_protocol := omit + in template (omit) Protocol p_protocol := omit, + in template (omit) Dscp p_dscp := omit, + in template (omit) Flowlabel p_flowlabel := omit ) := { sourceIp := p_sourceIp, sourcePort := p_sourcePort, - dstAddress := p_dstAddress, + dstIp := p_dstIp, dstPort := p_dstPort, - protocol := p_protocol + protocol := p_protocol, + dscp := p_dscp, + flowlabel := p_flowlabel } // End of template m_flow_filter template FlowFilterItem mw_flow_filter( template (present) SourceIp p_sourceIp := ?, template (present) SourcePort p_sourcePort := ?, - template DstAddress p_dstAddress := *, + template DstAddress p_dstIp := *, template DstPort p_dstPort := *, - template Protocol p_protocol := * + template Protocol p_protocol := *, + template Dscp p_dscp := omit, + template Flowlabel p_flowlabel := omit ) := { sourceIp := p_sourceIp, sourcePort := p_sourcePort, - dstAddress := p_dstAddress, + dstIp := p_dstIp, dstPort := p_dstPort, - protocol := p_protocol + protocol := p_protocol, + dscp := p_dscp, + flowlabel := p_flowlabel } // End of template mw_flow_filter template (value) QosD m_qosd( diff --git a/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Templates.ttcn b/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Templates.ttcn index f031f64..4459508 100644 --- a/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Templates.ttcn +++ b/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Templates.ttcn @@ -103,8 +103,8 @@ module V2XInformationServiceAPI_Templates { template (omit) RouteInfo m_route_info( in template (value) LocationInfo p_location, in template (omit) TimeStamp p_time := omit, - in template (omit) UInt8 p_rsrp := omit, - in template (omit) UInt8 p_rsrq := omit + in template (omit) Json.UInt8 p_rsrp := omit, + in template (omit) Json.UInt8 p_rsrq := omit ) := { location := p_location, time := p_time, @@ -115,8 +115,8 @@ module V2XInformationServiceAPI_Templates { template RouteInfo mw_route_info( template (present) LocationInfo p_location := ?, template TimeStamp p_time := *, - template UInt8 p_rsrp := *, - template UInt8 p_rsrq := * + template Json.UInt8 p_rsrp := *, + template Json.UInt8 p_rsrq := * ) := { location := p_location, time := p_time, diff --git a/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Functions.ttcn b/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Functions.ttcn index 0be7d86..39cee60 100644 --- a/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Functions.ttcn +++ b/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Functions.ttcn @@ -140,9 +140,9 @@ module WlanInformationAPI_Functions { { m_sta_identity( PX_MAC_ID, - PX_SSID, + { PX_SSID }, -, - PX_IP_ADDRESS + { PX_IP_ADDRESS } ) }, PX_MEASUREMENT_ID, diff --git a/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Templates.ttcn b/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Templates.ttcn index 982baed..828ad59 100644 --- a/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Templates.ttcn +++ b/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Templates.ttcn @@ -123,8 +123,8 @@ module WlanInformationAPI_Templates { 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) Links p_links := omit, + in template (omit) Json.UInt8 p_notificationPeriod := omit, in template (omit) NotificationEvent p_notificationEvent := omit, in template (omit) TimeStamp p_expiryDeadline := omit ) := { @@ -144,8 +144,8 @@ module WlanInformationAPI_Templates { 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) Links p_links := omit, + in template (omit) Json.UInt8 p_notificationPeriod := omit, in template (omit) NotificationEvent p_notificationEvent := omit, in template (omit) TimeStamp p_expiryDeadline := omit ) := { @@ -165,8 +165,8 @@ module WlanInformationAPI_Templates { template (present) ApIdentity p_apId := ?, template Json.Bool p_requestTestNotification := *, template WebsockNotifConfig p_websockNotifConfig := *, - template LinkTypes p_links := *, - template UInt8 p_notificationPeriod := *, + template Links p_links := *, + template Json.UInt8 p_notificationPeriod := *, template NotificationEvent p_notificationEvent := *, template TimeStamp p_expiryDeadline := * ) := { @@ -183,12 +183,12 @@ module WlanInformationAPI_Templates { template (omit) StaDataRateSubscription m_sta_data_rate_subscription( in template (value) Json.AnyURI p_callbackReference, - in template (value) StaIdentities p_staId, + in template (value) StaIdentityList 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) Links p_links := omit, + in template (omit) Json.UInt8 p_notificationPeriod := omit, + in template (omit) NotificationEvent_StaDataRateSubscription p_notificationEvent := omit, in template (omit) TimeStamp p_expiryDeadline := omit ) := { subscriptionType := "StaDataRateSubscription", @@ -204,12 +204,12 @@ module WlanInformationAPI_Templates { template (omit) StaDataRateSubscription m_sta_data_rate_subscription_invalid( in template (value) Json.AnyURI p_callbackReference, - in template (value) StaIdentities p_staId, + in template (value) StaIdentityList 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) Links p_links := omit, + in template (omit) Json.UInt8 p_notificationPeriod := omit, + in template (omit) NotificationEvent_StaDataRateSubscription p_notificationEvent := omit, in template (omit) TimeStamp p_expiryDeadline := omit ) := { subscriptionType := "InvalidStaDataRateSubscription", @@ -225,12 +225,12 @@ module WlanInformationAPI_Templates { template (present) StaDataRateSubscription mw_sta_data_rate_subscription( template (present) Json.AnyURI p_callbackReference := ?, - template (present) StaIdentities p_staId := ?, + template (present) StaIdentityList p_staId := ?, template Json.Bool p_requestTestNotification := *, template WebsockNotifConfig p_websockNotifConfig := *, - template LinkTypes p_links := *, - template UInt8 p_notificationPeriod := *, - template NotificationEvent p_notificationEvent := *, + template Links p_links := *, + template Json.UInt8 p_notificationPeriod := *, + template NotificationEvent_StaDataRateSubscription p_notificationEvent := *, template TimeStamp p_expiryDeadline := * ) := { subscriptionType := "StaDataRateSubscription", @@ -246,9 +246,9 @@ module WlanInformationAPI_Templates { template (omit) StaIdentity m_sta_identity( in Json.String p_macId, - in template (omit) Json.String p_ssid := omit, + in template (omit) SsidList p_ssid := omit, in template (omit) Json.String p_aid := omit, - in template (omit) Json.String p_ipAddress := omit + in template (omit) IpAddressList p_ipAddress := omit ) := { macId := p_macId, ssid := p_ssid, @@ -258,9 +258,9 @@ module WlanInformationAPI_Templates { template (present) StaIdentity mw_sta_identity( template (present) Json.String p_macId := ?, - template Json.String p_ssid := *, + template SsidList p_ssid := *, template Json.String p_aid := *, - template Json.String p_ipAddress := * + template IpAddressList p_ipAddress := * ) := { macId := p_macId, ssid := p_ssid, @@ -269,7 +269,7 @@ module WlanInformationAPI_Templates { } // End of template mw_sta_identity template (omit) SubscriptionLinkList m_subscription_link_list( - in template (value) LinkTypes p_links, + in template (value) Links p_links, in template (omit) Subscription p_subscription := omit ) := { links := p_links, @@ -277,7 +277,7 @@ module WlanInformationAPI_Templates { } // End of template m_subscription_link_list template (present) SubscriptionLinkList mw_subscription_link_list( - template (present) LinkTypes p_links := ?, + template (present) Links p_links := ?, template Subscription p_subscription := * ) := { links := p_links, @@ -305,7 +305,7 @@ module WlanInformationAPI_Templates { } // End of template mw_ap_identity template (omit) MeasurementConfigLinkList m_measurement_config_list( - in template (omit) LinkTypes p_links := omit, + in template (omit) Links p_links := omit, in template (value) MeasurementConfig_MeasurementConfigLinkList p_measurementConfig ) := { links := p_links, @@ -313,7 +313,7 @@ module WlanInformationAPI_Templates { } // End of template m_measurement_config_list template (present) MeasurementConfigLinkList mw_measurement_config_list( - template LinkTypes p_links := *, + template Links p_links := *, template (present) MeasurementConfig_MeasurementConfigLinkList p_measurementConfig := ? ) := { links := p_links, @@ -337,8 +337,8 @@ module WlanInformationAPI_Templates { } // 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 template (omit) Links p_links := omit, + in template (value) StaIdentityList p_staId, in Json.String p_measurementId, in template (value) MeasurementInfo p_measurementInfo ) := { @@ -349,8 +349,8 @@ module WlanInformationAPI_Templates { } // End of template m_measurement_config template (present) MeasurementConfig mw_measurement_config( - template LinkTypes p_links := *, - template (present) StaIdentities p_staId := ?, + template Links p_links := *, + template (present) StaIdentityList p_staId := ?, template (present) Json.String p_measurementId := ?, template (present) MeasurementInfo p_measurementInfo := ? ) := { @@ -361,8 +361,8 @@ module WlanInformationAPI_Templates { } // 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) Json.UInt16 p_measurementDuration := omit, + in template (omit) Json.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, @@ -377,8 +377,8 @@ module WlanInformationAPI_Templates { } // End of template m_measurement_info template MeasurementInfo mw_measurement_info( - template UInt16 p_measurementDuration := *, - template UInt16 p_randomInterval:= *, + template Json.UInt16 p_measurementDuration := *, + template Json.UInt16 p_randomInterval:= *, template ChannelLoadConfig p_channelLoadConf := *, template BeaconRequestConfig p_beaconRequestConf := *, template StaStatisticsConfig p_staStatisticsConf := *, diff --git a/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_TypesAndValues.ttcn b/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_TypesAndValues.ttcn index 6bb930d..212da04 100644 --- a/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_TypesAndValues.ttcn @@ -1,8 +1,8 @@ /** - * @author ETSI / TTF T012 + * @author ETSI / TTF T012 // TTF T027 * @version $Url$ * $Id$ - * @desc Types ANd Values for ETSI GS MEC 028 V2.1.1 (2020-06) + * @desc Types And Values for ETSI GS MEC 028 V2.3.1 (2022-07) * @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. @@ -14,118 +14,368 @@ module WlanInformationAPI_TypesAndValues { import from Json all; /** - * @desc The seconds 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 Access Points 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 channel Channel configured for the Access Point + * @member wlanCap WLAN capabilities of Access Point + * @member wanMetrics WAN Metrics element provides information about the WAN link connecting an IEEE 802.11 Access Node and the Internet + * @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 + * @see ETSI GS MEC 028 V2.3.1 Clause 6.2.2 Type: ApInfo */ - type Json.UInteger Seconds; + type record ApInfo { + TimeStamp timeStamp optional, + ApIdentity apId, + Json.UInteger channel optional, + WlanCapabilities wlanCap optional, + WanMetrics wanMetrics optional, + BssLoad bssLoad optional, + ExtBssLoad extBssLoad optional, + OBssLoad oBssLoad optional, + ApLocation apLocation optional + } + type record of ApInfo ApInfoList; /** - * @desc The nanoseconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC + * @desc Information on wireless stations available from the WLAN Access Information Service + * @member timeStamp TimeStamp + * @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 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 V2.3.1 Table 6.2.3-1: Attributes for StaInfo */ - type Json.UInteger NanoSeconds; + type record StaInfo { + TimeStamp timeStamp optional, + StaIdentity staId, + Json.UInteger channel optional, + ApAssociated apAssociated optional, + Rssi rssi optional, + StaDataRate staDataRate optional, + StaStatistics staStatistics optional, + BeaconReport beaconReport optional, + NeighborReport neighborReport optional, + ChannelLoad channelLoad optional + + } + type record of StaInfo StaInfoList; /** - * @desc Time stamp description - * @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 MEC030 Clause 6.5.2 Type: TimeStamp + * @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 measurementInfo Information used to configure this measurement + * @see ETSI GS MEC 028 V2.3.1 Table 6.2.4-1: Attributes for MeasurementConfig */ - type record TimeStamp { - Seconds seconds, - NanoSeconds nanoSeconds + type record MeasurementConfig { + Links links optional, + StaIdentityList staId, + Json.String measurementId, + MeasurementInfo measurementInfo + } with { + variant (links) "name as '_links'"; } - type record of Json.String SsidList; - type record of Json.String IpAddressList; /** - * @desc Identifiers determining a specific 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 + * @desc Hyperlink related to the resource + * @member self_ Self-referring URI + * @see ETSI GS MEC 028 V2.3.1 Table 6.2.4-1: Attributes for MeasurementConfig */ - type record ApIdentity { - Json.String bssid, - SsidList ssid optional, - IpAddressList ipAddress optional + type record Links { + LinkType self_ + } with { + variant (self_) "name as 'self'"; + } + /** + * @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 V2.3.1 Table 6.2.5-1: Attributes of the MeasurementConfigLinkList + */ + type record MeasurementConfigLinkList { + Links links optional, + MeasurementConfig_MeasurementConfigLinkList measurementConfig + } with { + variant (links) "name as '_links'"; } /** - * @desc information on HT capabilities of an Access Point - * @member htCapabilityInfo HT Capability Information - * @member ampduParameters A-MPDU parameters - * @member supportedMcsSet Supported MCS set - * @member htExtendedCap Extended HT Capabilities - * @member txBeamFormCap Transmit Beamforming Capabilities - * @member aselCap ASEL capabilities - * @see ETSI GS MEC 028 Clause 6.5.14 Type: HtCapabilities + * @desc + * @member href The URI referring to a measurement configuration + * @member measurementId Unique identifier allocated by the service consumer to identify measurement reports associated with this measurement configuration + * @see ETSI GS MEC 028 V2.3.1 Table 6.2.5-1: Attributes of the MeasurementConfigLinkList */ - type integer UInt128 with {variant "unsigned 32 bit"}; - type record HtCapabilities { - Json.UInt16 htCapabilityInfo, - Json.UInt8 ampduParameters, - UInt128 supportedMcsSet, - Json.UInt16 htExtendedCap, - Json.UInteger txBeamFormCap, - Json.UInt8 aselCap + type record MeasurementConfig_MeasurementConfigLinkList { + Json.AnyURI href, + Json.String measurementId } /** - * @desc Information on VHT Capabilities of an Access Point - * @member vhtCapInfo VHT capabilities Info - * @member vhtMcsNss Supported VHT-MCS and NSS Set - * @see ETSI GS MEC 028 Clause 6.5.15 Type: VhtCapabilities + * @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 V2.3.1 Table 6.3.2-1: Attributes of the AssocStaSubscription */ - type record VhtCapabilities { - Json.UInteger vhtCapInfo, - Json.UInteger vhtMcsNss + type record AssocStaSubscription { + Json.String subscriptionType, + Json.AnyURI callbackReference optional, + Json.Bool requestTestNotification optional, + WebsockNotifConfig websockNotifConfig optional, + Links links optional, + ApIdentity apId, + Json.UInt8 notificationPeriod optional, + NotificationEvent notificationEvent optional, + TimeStamp expiryDeadline optional + } with { + variant (links) "name as '_links'"; } + type record of AssocStaSubscription AssocStaSubscriptionList; /** - * @desc Information on VHT Capabilities of an Access Point - * @member heMacCapInfo MAC capabilities of an Access Point - * @member hePhyCapinfo PHY capabilities of an Access Point - * @member supportedHeMcsNssSet Supported MCS and NSS Set - * @see ETSI GS MEC 028 Clause 6.5.16 Type: HeCapabilities + * @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 V2.3.1 Table 6.3.2-1: Attributes of the AssocStaSubscription */ - type record HeCapabilities { - Json.UInt8 heMacCapInfo, - Json.UInt8 hePhyCapinfo, - Json.UInt8 supportedHeMcsNssSet + type record NotificationEvent { + Json.UInt8 trigger_, + Json.UInt8 threshold + } with { + variant (trigger_) "name as 'trigger'"; } /** - * @desc Information on DMG Capabilities of an Access Point - * @member dmgStaCapInfo DMG station capabilities information - * @member dmgApOrPcpCapInfo DMG AP or PCP capabilities information - * @member dmgStaBeamTrackTimeLimit DMG station beam tracking time limit - * @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 - * @see ETSI GS MEC 028 Clause 6.5.17 Type: DmgCapabilities + * @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 V2.3.1 Table 6.3.3-1: Attributes of the StaDataRateSubscription */ - type record DmgCapabilities { - Json.UInteger dmgStaCapInfo, - Json.UInt16 dmgApOrPcpCapInfo, - Json.UInt16 dmgStaBeamTrackTimeLimit, - Json.UInt8 extScMcsCap, - Json.UInt8 maxNrBasicAmsduSubframes, - Json.UInt8 maxNrShortAmsduSubframes + type record StaDataRateSubscription { + Json.String subscriptionType, + Json.AnyURI callbackReference, + Json.Bool requestTestNotification optional, + WebsockNotifConfig websockNotifConfig optional, + Links links optional, + StaIdentityList staId, + Json.UInt8 notificationPeriod optional, + NotificationEvent_StaDataRateSubscription notificationEvent optional, + TimeStamp expiryDeadline optional + } with { + variant (links) "name as '_links'"; + } + type record of StaDataRateSubscription StaDataRateSubscriptionList; + + /** + * @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 + * @member downlinkRateThreshold Downlink data rate threshold for StaDataRate reporting + * @member uplinkRateThreshold Uplink data rate threshold for StaDataRate reporting + * @see ETSI GS MEC 028 V2.3.1 Table 6.3.3-1: Attributes of the StaDataRateSubscription + */ + type record NotificationEvent_StaDataRateSubscription { + Json.UInt8 trigger_, + Json.UInteger downlinkRateThreshold optional, + Json.UInteger uplinkRateThreshold + } with { + variant (trigger_) "name as 'trigger'"; } /** - * @desc Information on EDMG Capabilities of an Access Point - * @member ampduParameters A-MPDU parameters - * @member trnParameters Training parameters - * @member supportedMcs Supported MCS - * @member reserved - * @see ETSI GS MEC 028 Clause 6.5.18 Type: EdmgCapabilities + * @desc List of links related to currently existing subscriptions for the service consumer + * @member links List of hyperlinks related to the resource + * @member subscription + * @see ETSI GS MEC 028 V2.3.1 Table 6.3.4-1: Attributes of the SubscriptionLinkList */ - type record EdmgCapabilities { - Json.UInt8 ampduParameters, - Json.UInt16 trnParameters, - Json.UInteger supportedMcs + type record SubscriptionLinkList { + Links links, + Subscription subscription optional + } with { + variant (links) "name as '_links'"; + } + + /** + * @desc + * @member href The URI referring to the subscription + * @member subscriptionType Type of the subscription + * @see ETSI GS MEC 028 V2.3.1 Table 6.3.4-1: Attributes of the SubscriptionLinkLis + */ + type record Subscription_ { + Json.AnyURI href, + Json.String subscriptionType + } + type record of Subscription_ Subscription; + + /** + * @desc This type represents a subscription to get measurement reports (Channel Load, Beacon Request, STA Statistics, or Neighbor Report) from targeted client station(s) + * @member subscriptionType Shall be set to "MeasurementReportSubscription" + * @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 measurementId Unique identifier allocated by the service consumer to identify measurement reports associated with this measurement subscription + * @member measurementInfo Information used to configure this measurement + * @member expiryDeadline The expiration time of the subscription determined by the WLAN Access Information Service + * @see ETSI GS MEC 028 V2.3.1 Table 6.3.5-1: Attributes of the MeasurementReportSubscription + */ + type record MeasurementReportSubscription { + Json.String subscriptionType, + Json.AnyURI callbackReference, + Json.Bool requestTestNotification optional, + WebsockNotifConfig websockNotifConfig optional, + Links links optional, + StaIdentityList staId, + Json.String measurementId, + Json.String measurementInfo, + TimeStamp expiryDeadline optional + } with { + variant (links) "name as '_links'"; + } + type record of StaDataRateSubscription StaDataRateSubscriptionList; + + /** + * @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" + * @member timeStamp Time stamp + * @member apId Identifier(s) to uniquely specify the Access Point to which the client stations are associated + * @member staId Identifier(s) to uniquely specify the client station(s) associated + * @see ETSI GS MEC 028 V2.3.1 Table 6.4.2-1: Attributes of the AssocStaNotification + */ + type record AssocStaNotification { + Json.String notificationType, + TimeStamp timeStamp optional, + ApIdentity apId, + StaIdentityList staId optional + } + + /** + * @desc Notification from WLAN Information service with regards to Data Rates of the subscribed client stations + * @member notificationType Shall be set to "StaDataRateNotification" + * @member timeStamp Time stamp + * @member staDataRate Data rates of a client station + * @see ETSI GS MEC 028 V2.3.1 Table 6.4.3-1: Attributes of the StaDataRateNotification + */ + type record StaDataRateNotification { + Json.String notificationType, + TimeStamp timeStamp optional, + StaDataRateList staDataRate optional + } + + /** + * @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 V2.3.1 Table 6.4.4-1: Attributes of the ExpiryNotification + */ + type record ExpiryNotification { + Json.String notificationType, + Links links, + TimeStamp expiryDeadline + } with { + variant (links) "name as '_links'"; + } + + /** + * @desc Hyperlink related to the resource + * @member subscription URI identifying the subscription which has expired + * @see ETSI GS MEC 028 V2.3.1 Table 6.4.4-1: Attributes of the ExpiryNotification + */ + type record Links_Notification { + LinkType subscription + } + + /** + * @desc This type represents a notification from WLAN Access Information service with regards to Measurement Reports of the subscribed client stations + * @member notificationType Shall be set to "MeasurementReportNotification" + * @member timeStamp Time stamp + * @member staStatistics STA Statistics Report as defined in IEEE 802.11-2016 [8] + * @member beaconReport Beacon Report as defined in IEEE 802.11-2016 [8] + * @member neighborReport Neighbor Report providing information about neighbor Access Points seen by the station as defined in IEEE 802.11-2016 [8] + * @member channelLoad Channel Load reports as seen by the station as defined in IEEE 802.11-2016 [8] + * @see ETSI GS MEC 028 V2.3.1 Table 6.4.5-1: Attributes of the MeasurementReportNotification + */ + type record MeasurementReportNotification { + Json.String notificationType, + TimeStamp timeStamp optional, + StaStatistics staStatistics optional, + BeaconReport beaconReport optional, + NeighborReport neighborReport optional, + ChannelLoad channelLoad optional + } + + /** + * @desc This data type represents a notification from AMS with regards to expiry of the existing subscription + * @member notificationType Shall be set to "TestNotification" + * @member links Object containing hyperlinks related to the resource + * @see ETSI GS MEC 028 V2.3.1 V3.1.1 (2023-10) Table 6.4.6-1: Attributes of the TestNotification + */ + type record TestNotification { + Json.String notificationType, + Links_Notification links + } with { + variant (links) "name as '_links'"; } + /** + * @desc Time stamp description + * @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 028 V2.3.1 Table 6.5.2-1: Attributes of the 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 Json.UInteger Seconds; + + /** + * @desc The nanoseconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC + */ + type Json.UInteger NanoSeconds; + + /** + * @desc Identifiers determining a specific 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 V2.3.1 Table 6.5.3-1: Attributes of the ApIdentity + */ + type record ApIdentity { + Json.String bssid, + SsidList ssid optional, + IpAddressList ipAddress optional + } + type record of Json.String SsidList; + type record of Json.String IpAddressList; + /** * @desc WLAN capabilities of the Access Point * @member ht Information about Access Point HT capabilities @@ -133,13 +383,13 @@ module WlanInformationAPI_TypesAndValues { * @member he Information about Access Point HE capabilities * @member dmg Information about Access Point DMG capabilities * @member edmg Information about Access Point EDMG capabilities - * @see ETSI GS MEC 028 Clause 6.5.4 Type: WlanCapabilities + * @see ETSI GS MEC 028 V2.3.1 Table 6.5.4-1: Attributes of the WlanCapabilities */ type record WlanCapabilities { - HtCapabilities ht optional, - VhtCapabilities vht optional, - HeCapabilities he optional, - DmgCapabilities dmg optional, + HtCapabilities ht optional, + VhtCapabilities vht optional, + HeCapabilities he optional, + DmgCapabilities dmg optional, EdmgCapabilities edmg optional } @@ -151,45 +401,209 @@ module WlanInformationAPI_TypesAndValues { * @member downlinkLoad 1-octet positive integer representing the current percentage loading of the downlink WAN connection * @member uplinkLoad 1-octet positive integer representing the current percentage loading of the uplink WAN connection * @member lmd The LMD (Load Measurement Duration) - * @see ETSI GS MEC 028 Clause 6.5.6 Type: WanMetrics + * @see ETSI GS MEC 028 V2.3.1 Table 6.5.6-1: Attributes of the WanMetrics + */ + type record WanMetrics { + Json.UInt8 wanInfo, + Json.UInteger downlinkSpeed, + Json.UInteger uplinkSpeed, + Json.UInt8 downlinkLoad, + Json.UInt8 uplinkLoad, + Json.UInt16 lmd + } + + /** + * @desc Load of a BSS + * @member staCount Indicates the total number of STAs currently associated with this BSS + * @member channelUtilization The percentage of time + * @member availAdmCap Available Admission Capacity that specifies the remaining amount of medium time available via explicit admission control, in units of 32 μs/s + * @see ETSI GS MEC 028 V2.3.1 Table 6.5.7-1: Attributes of the BssLoad + */ + type record BssLoad { + Json.UInt16 staCount, + Json.UInt8 channelUtilization, + Json.UInt16 availAdmCap + } + + /** + * @desc Extended BSS Load information + * @member muMimoStaCount Indicates the total number of STAs currently associated with this BSS that have a 1 in the MU Beamformee Capable field of their VHT Capabilities element + * @member spatStreamUnderUtil The percentage of time that the AP has underutilized spatial domain resources for given busy time of the medium + * @member obsSec20MhzUtil Observable loading on each of the secondary 20 MHz channel + * @member obsSec40MhzUtil Observable loading on each of the secondary 40 MHz channel + * @member obsSec80MhzUtil Observable loading on each of the secondary 80 MHz channel + * @see ETSI GS MEC 028 V2.3.1 Table 6.5.8-1: Attributes of the ExtBssLoad + */ + type record ExtBssLoad { + Json.UInt16 muMimoStaCount, + Json.UInt8 spatStreamUnderUtil, + Json.UInt8 obsSec20MhzUtil, + Json.UInt8 obsSec40MhzUtil, + Json.UInt8 obsSec80MhzUtil + } + + /** + * @desc Location information of the Access Point + * @member geolocation Geospatial Location of the AP + * @member civicLocation Civic Location of the AP + * @see ETSI GS MEC 028 V2.3.1 Table 6.5.9-1: Attributes of the ApLocation + */ + type record ApLocation { + GeoLocation geolocation optional, + CivicLocation civicLocation optional + } + + /** + * @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 V2.3.1 Table 6.5.10-1: Attributes of the NeighborReport + */ + type record NeighborReportItem { + StaIdentity staId optional, + Json.String measurementId, + Json.String bssid, + Json.UInteger bssidInfo, + Json.UInt8 operatingClass, + Json.UInt8 channel, + Json.UInt8 phyType, + Json.UInt8 bssTransitionCandidatePreference optional + } + type record of NeighborReportItem NeighborReport; + + /** + * @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 + * @member ssid Service Set Identifier to identify logical networks + * @member aid Number which identifies a particular association between a station and an Access Point + * @member ipAddress IPv4 or IPv6 address allocated for the station + * @see ETSI GS MEC 028 V2.3.1 Table 6.5.11-1: Attributes of the StaIdentity + */ + type record StaIdentity { + Json.String macId, + SsidList ssid optional, + Json.String aid optional, + IpAddressList ipAddress optional + } + type record of StaIdentity StaIdentityList; + + /** + * @desc Information for the Access Point that the client station is associated to + * @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 V2.3.1 Table 6.5.12-1: Attributes of the ApAssociated + */ + type record ApAssociated { + Json.String bssid, + SsidList ssid optional, + Json.String assocId optional, + IpAddressList ipAddress optional + } + + /** + * @desc Information statistics of the client 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 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 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 V2.3.1 Table 6.5.13-1: Attributes of the StaStatistics + */ + type record StaStatistics { + StaIdentity staId optional, + Json.String measurementId, + Json.String measurementDuration, + Json.UInt8 groupIdentity, + StaStatisticsGroupZeroData groupZeroData optional, + StaStatisticsGroupOneData groupOneData optional, + StaStatisticsGroup2to9Data group2to9Data optional + } + + /** + * @desc information on HT capabilities of an Access Point + * @member htCapabilityInfo HT Capability Information + * @member ampduParameters A-MPDU parameters + * @member supportedMcsSet Supported MCS set + * @member htExtendedCap Extended HT Capabilities + * @member txBeamFormCap Transmit Beamforming Capabilities + * @member aselCap ASEL capabilities + * @see ETSI GS MEC 028 V2.3.1 Table 6.5.14-1: Attributes of the HtCapabilities + */ + type record HtCapabilities { + Json.UInt16 htCapabilityInfo, + Json.UInt8 ampduParameters, + UInt128 supportedMcsSet, + Json.UInt16 htExtendedCap, + Json.UInteger txBeamFormCap, + Json.UInt8 aselCap + } + type integer UInt128 with {variant "unsigned 128 bit"}; + + /** + * @desc Information on VHT Capabilities of an Access Point + * @member vhtCapInfo VHT capabilities Info + * @member vhtMcsNss Supported VHT-MCS and NSS Set + * @see ETSI GS MEC 028 V2.3.1 Table 6.5.15-1: Attributes of the VhtCapabilities + */ + type record VhtCapabilities { + Json.UInteger vhtCapInfo, + Json.UInteger vhtMcsNss + } + + /** + * @desc Information on VHT Capabilities of an Access Point + * @member heMacCapInfo MAC capabilities of an Access Point + * @member hePhyCapinfo PHY capabilities of an Access Point + * @member supportedHeMcsNssSet Supported MCS and NSS Set + * @see ETSI GS MEC 028 V2.3.1 Table 6.5.16-1: Attributes of the HeCapabilities */ - type record WanMetrics { - Json.UInt8 wanInfo, - Json.UInteger downlinkSpeed, - Json.UInteger uplinkSpeed, - Json.UInt8 downlinkLoad, - Json.UInt8 uplinkLoad, - Json.UInt16 lmd + type record HeCapabilities { + Json.UInt8 heMacCapInfo, + Json.UInt8 hePhyCapinfo, + Json.UInt8 supportedHeMcsNssSet } /** - * @desc Load of a BSS - * @member staCount Indicates the total number of STAs currently associated with this BSS - * @member channelUtilization The percentage of time - * @member availAdmCap Available Admission Capacity that specifies the remaining amount of medium time available via explicit admission control, in units of 32 μs/s - * @see ETSI GS MEC 028 Clause 6.5.7 Type: BssLoad + * @desc Information on DMG Capabilities of an Access Point + * @member dmgStaCapInfo DMG station capabilities information + * @member dmgApOrPcpCapInfo DMG AP or PCP capabilities information + * @member dmgStaBeamTrackTimeLimit DMG station beam tracking time limit + * @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 + * @see ETSI GS MEC 028 V2.3.1 Table 6.5.17-1: Attributes of the DmgCapabilities */ - type record BssLoad { - Json.UInt16 staCount, - Json.UInt8 channelUtilization, - Json.UInt16 availAdmCap + type record DmgCapabilities { + Json.UInteger dmgStaCapInfo, + Json.UInt16 dmgApOrPcpCapInfo, + Json.UInt16 dmgStaBeamTrackTimeLimit, + Json.UInt8 extScMcsCap, + Json.UInt8 maxNrBasicAmsduSubframes, + Json.UInt8 maxNrShortAmsduSubframes } /** - * @desc Extended BSS Load information - * @member muMimoStaCount Indicates the total number of STAs currently associated with this BSS that have a 1 in the MU Beamformee Capable field of their VHT Capabilities element - * @member spatStreamUnderUtil The percentage of time that the AP has underutilized spatial domain resources for given busy time of the medium - * @member obsSec20MhzUtil Observable loading on each of the secondary 20 MHz channel - * @member obsSec40MhzUtil Observable loading on each of the secondary 40 MHz channel - * @member obsSec80MhzUtil Observable loading on each of the secondary 80 MHz channel - * @see ETSI GS MEC 028 Clause 6.5.8 Type: ExtBssLoad + * @desc Information on EDMG Capabilities of an Access Point + * @member ampduParameters A-MPDU parameters + * @member trnParameters Training parameters + * @member supportedMcs Supported MCS + * @member reserved + * @see ETSI GS MEC 028 V2.3.1 Table 6.5.18-1: Attributes of the EdmgCapabilities */ - type record ExtBssLoad { - Json.UInt16 muMimoStaCount, - Json.UInt8 spatStreamUnderUtil, - Json.UInt8 obsSec20MhzUtil, - Json.UInt8 obsSec40MhzUtil, - Json.UInt8 obsSec80MhzUtil + type record EdmgCapabilities { + Json.UInt8 ampduParameters, + Json.UInt16 trnParameters, + Json.UInteger supportedMcs } /** @@ -202,21 +616,21 @@ module WlanInformationAPI_TypesAndValues { * @member altitudeUncertainty The uncertainty for altitude information * @member altitude The altitude value of location * @member datum The datum value to express how coordinates are organized and related to real world - * @see ETSI GS MEC 028 Clause 6.5.19 Type: GeoLocation + * @see ETSI GS MEC 028 V2.3.1 Table 6.5.19-1: Attributes of the GeoLocation */ type record GeoLocation { - Json.UInt8 latUncertainty, + Json.UInt8 latUncertainty, Json.UInteger lat, - Json.UInt8 longUncertainty, + Json.UInt8 longUncertainty, Json.UInteger long, - Json.UInt8 altitudeType optional, - Json.UInt8 altitudeUncertainty optional, + Json.UInt8 altitudeType optional, + Json.UInt8 altitudeUncertainty optional, Json.UInteger altitude optional, - Json.UInt8 datum + Json.UInt8 datum } /** - * @desc Iinformation on Civic Location of an Access Point + * @desc Information on Civic Location of an Access Point * @member country The two-letter ISO 3166 [i.9] country code in capital ASCII letters, e.g. DE or US, as per ISO 3166 * @member ca0 Language * @member ca0 Language @@ -251,7 +665,7 @@ module WlanInformationAPI_TypesAndValues { * @member ca38 Street name pre-modifier * @member ca39 Street name post-modifier * @member ca128 Script - * @see ETSI GS MEC 028 Clause 6.5.20 Type: CivicLocation + * @see ETSI GS MEC 028 V2.3.1 Table 6.5.20-1: Attributes of the CivicLocation */ type record CivicLocation { Json.String country, @@ -285,291 +699,14 @@ module WlanInformationAPI_TypesAndValues { Json.String ca36 optional, Json.String ca37 optional, Json.String ca38 optional, - Json.String ca39 optional, - Json.String ca128 optional - } - - /** - * @desc Location information of the Access Point - * @member geolocation Geospatial Location of the AP - * @member civicLocation Civic Location of the AP - * @see ETSI GS MEC 028 Clause 6.5.9 Type: ApLocation - */ - type record ApLocation { - GeoLocation geolocation optional, - CivicLocation civicLocation optional - } - - /** - * @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 - * @member ssid Service Set Identifier to identify logical networks - * @member aid Number which identifies a particular association between a station and an Access Point - * @member ipAddress IPv4 or IPv6 address allocated for the station - * @see ETSI GS MEC 028 Clause 6.5.11 Type: StaIdentity - */ - type record StaIdentity { - Json.String macId, - Json.String ssid optional, - Json.String aid optional, - Json.String ipAddress optional - } - 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, - Json.UInteger bssidInfo, - Json.UInt8 operatingClass, - Json.UInt8 channel, - Json.UInt8 phyType, - Json.UInt8 bssTransitionCandidatePreference optional - } - type record of NeighborReportItem NeighborReport; - - /** - * @desc Information for the Access Point that the client station is associated to - * @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 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, - Json.UInt8 operatingClass, - Json.UInt8 channel, - Json.UInt8 measurementDuration, - Json.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 { - Json.UInt16 allocatedTrafficSelfMean, - Json.UInt16 allocatedTrafficSelfStdDev optional, - Json.UInt16 allocatedTrafficShareMean, - Json.UInt16 allocatedTrafficShareStdDev optional, - Json.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 { - Json.UInt16 measurementDuration optional, - Json.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 { - Json.UInteger transmittedFragmentCount, - Json.UInteger groupTransmittedFrameCount, - Json.UInteger failedCount, - Json.UInteger receivedFragmentCount, - Json.UInteger groupReceivedFrameCount, - Json.UInteger fcsErrorCount, - Json.UInteger 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 { - Json.UInteger retryCount, - Json.UInteger multipleRetryCount, - Json.UInteger frameDuplicateCount, - Json.UInteger rtsSuccessCount, - Json.UInteger rtsFailureCount, - Json.UInteger 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 { - Json.UInteger qosTransmittedFragmentCount, - Json.UInteger qosFailedCount, - Json.UInteger qosRetryCount, - Json.UInteger qosMultipleRetryCount, - Json.UInteger qosFrameDuplicateCount, - Json.UInteger qosRTSSuccessCount, - Json.UInteger qosRTSFailureCount, - Json.UInteger qosAckFailureCount, - Json.UInteger qosReceivedFragmentCount, - Json.UInteger qosTransmittedFrameCount, - Json.UInteger qosDiscardedFrameCount, - Json.UInteger qosMPDUsReceivedCount, - Json.UInteger qosRetriesReceivedCount, - ReportingReasonQoSCounters reportingReasonQoSCounters optional - } - - /** - * @desc Information statistics of the client 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 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 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 { - StaIdentity staId optional, - Json.String measurementId, - Json.String measurementDuration, - Json.UInt8 groupIdentity, - StaStatisticsGroupZeroData groupZeroData optional, - StaStatisticsGroupOneData groupOneData optional, - StaStatisticsGroup2to9Data group2to9Data optional + Json.String ca39 optional, + Json.String ca128 optional } - type Json.UInt8 StatisticsGroupData; // Note defined, see ETSI GS MEC 028 Clause 6.5.13 Type: StaStatistics - /** + /** * @desc Information on the Received Signal Strength Indicator (RSSI) of a client station * @member rssi The Received Signal Strength Indicator from a station - * @see ETSI GS MEC 028 Clause 6.5.21 Type: Rssi + * @see ETSI GS MEC 028 V2.3.1 Table 6.5.21-1: Attributes of the Rssi */ type record Rssi { Json.UInt8 rssi @@ -580,336 +717,386 @@ module WlanInformationAPI_TypesAndValues { * @member staId Identifier(s) to uniquely specify the client station(s) associated * @member staLastDataDownlinkRate The data transmit rate in kbps that was most recently used for transmission of data PPDUs from the access point to the station * @member staLastDataUplinkRate The data transmit rate in Kbps that was most recently used for transmission of data PPDUs from the associated station to the access point - * @see ETSI GS MEC 028 Clause 6.5.22 Type: StaDataRate + * @see ETSI GS MEC 028 V2.3.1 Table 6.5.22-1: Attributes of the StaDataRate */ type record StaDataRate { - StaIdentity staId optional, + StaIdentity staId optional, Json.UInteger staLastDataDownlinkRate optional, Json.UInteger staLastDataUplinkRate optional } - type record of StaDataRate StaDataRates; + type record of StaDataRate StaDataRateList; /** * @desc Type of link * @member href URI referring to a resource - * @see ETSI GS MEC 028 Clause 6.5.23 Type: LinkType + * @see ETSI GS MEC 028 V2.3.1 Table 6.5.23-1: Attributes of the LinkType */ type record LinkType { Json.AnyURI href } - type record LinkTypes { - LinkType self_ - } with { - variant (self_) "name as 'self'"; - } - /** - * @desc This configuration applies to BssLoad measurement - * @member apId Identifier(s) to uniquely specify the target Access Point - * @member cChannelId Channel number which load is reported - * @member channelLoad Channel load as per IEEE 802.11-2012 - * @see ETSI GS MEC 028 Clause 6.5.24 Type: ChannelLoadConfig + * @desc This configuration applies to Channel Load measurement + * @member operatingClass Operating Class field indicates an operating class value + * @member channel Channel for which the channel load report is requested + * @member reportingCondition Reporting condition for the Beacon Report + * @member threshold Channel Load reference value for threshold reporting + * @see ETSI GS MEC 028 V2.3.1 Table 6.5.24-1: Attributes of the ChannelLoadConfig */ type record ChannelLoadConfig { - ApIdentity apId, - Json.UInteger cChannelId, - Json.UInteger channelLoad + Json.UInt8 operatingClass, + Json.UInteger channel, + Json.UInt8 reportingCondition optional, + Json.UInt8 threshold optional } /** - * @desc - * @member staId Identifier to uniquely specify the station whose information is exposed within this data type + * @desc This configuration applies to the BeaconReport + * @member operatingClass Operating Class field indicates an operating class value * @member channelId Channel number to scan - * @member measurementMode - * @member bssId The BSSID field indicates the BSSID of the BSS(s) for which a beacon report is requested. When requesting beacon reports for all BSSs on the channel, the BSSID field contains the wildcard BSSID - * @member ssId The SSID subelement indicates the ESS(s) or IBSS(s) for which a beacon report is requested - * @member reportingCondition As in table T9-89 of IEEE 802.11-2012 - * @see ETSI GS MEC 028 Clause 6.5.25 Type: BeaconRequestConfig + * @member measurementMode + * @member bssid The BSSID field indicates the BSS for which a beacon report is requested + * @member ssid The SSID subelement indicates the ESS or IBSS for which a beacon report is requested + * @member beaconReportingConf Beacon reporting configuration data field + * @see ETSI GS MEC 028 V2.3.1 Table 6.5.25-1: Attributes of the BeaconRequestConfig */ type record BeaconRequestConfig { - StaIdentity staId, - Json.UInteger channelId, - Json.UInteger measurementMode, - BssIds bssId, - SsIds ssId optional, - Json.UInteger reportingCondition + Json.UInt8 operatingClass, + Json.UInt8 channelId, + Json.UInt8 measurementMode, + Json.String bssid optional, + Json.String ssid optional, + BeaconReportingConfig beaconReportingConf } - type record of Json.String BssIds; - type record of Json.String SsIds; /** - * @desc - * @member staId Identifier to uniquely specify the station whose information is exposed within this data type + * @desc This configuration applies to the StaStatistics report * @member groupIdentity As per table T 9-114 of IEEE 802.11-2012 * @member triggeredReport Yes, use triggered report + * @member measurementCount Specifies the number of MAC service data units or protocol data units to determine if the trigger conditions are met * @member triggerTimeout The Trigger Timeout field contains a value in units of 100 TUs during which a measuring STA does not generate further triggered STA Statistics Reports after a trigger condition has been met - * @member triggerCondition As per Figure 9-161 of IEEE 802.11. This bitmap defines what are the metrics returned by the STA Statistics Report - * @see ETSI GS MEC 028 Clause 6.5.26 Type: StaStatisticsConfig + * @member triggerCondition Defines what are the metrics returned by the STA Statistics Report + * @see ETSI GS MEC 028 V2.3.1 Table 6.5.26-1: Attributes of the StaStatisticsConfig */ type record StaStatisticsConfig { - StaIdentity staId, - Json.UInteger groupIdentity, - boolean triggeredReport, - Json.UInteger triggerTimeout, - Json.UInt16 triggerCondition + Json.UInt8 groupIdentity, + Json.Bool triggeredReport, + Json.UInteger measurementCount optional, + Json.UInt16 triggerTimeout optional, + STACounterTriggerCondition triggerCondition optional } /** - * @desc + * @desc This type represents information in a STA Beacon report * @member staId Identifier to uniquely specify the station whose information is exposed within this data type + * @member operatingClass Operating Class field indicates an operating class value * @member measurementId Measurement ID of the Measurement configuration applied to this Beacon Report - * @member bssId The BSSID field indicates the BSSID of the BSS(s) for which a beacon report has been received - * @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 + * @member channel Channel number where the beacon was received + * @member reportedFrameInfo Information about the reported beacon frame + * @member bssid Indicates the BSSID of the BSS(s) for which a beacon report has been received + * @member ssid Indicates the ESS(s) or IBSS(s) for which a beacon report is received + * @member rcpi Indicates the received channel power of the Beacon + * @member rsni Indicates the received signal-to-noise indication for the Beacon + * @member antennaId contains the identifying number for the antenna(s) used for this measurement + * @member parentTsf contains the lower 4 octets of the measuring STA's TSF timer value at the start of reception of the first octet of the timestamp field of the reported Beacon + * @see ETSI GS MEC 028 V2.3.1 Table 6.5.27-1: Attributes of the BeaconReport */ - type record BeaconReportItem { - StaIdentity staId, - Json.String measurementId, - Json.UInteger channelId, - BssIds bssId, - SsIds ssId optional + type record BeaconReport_ { + StaIdentity staId, + Json.String measurementId, + Json.UInt8 operatingClass, + Json.UInt8 channel, + ReportedBeaconFrameInfo reportedFrameInfo, + Json.String bssid, + Json.String ssid optional, + Json.UInt8 rcpi optional, + Json.UInt8 rsni optional, + Json.UInt8 antennaId optional, + Json.UInteger parentTsf optional } - type record of BeaconReportItem BeaconReport; + type record of BeaconReport_ BeaconReport; /** - * @desc Information on Access Points 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 channel Channel configured for the Access Point - * @member wlanCap WLAN capabilities of Access Point - * @member wanMetrics WAN Metrics element provides information about the WAN link connecting an IEEE 802.11 Access Node and the Internet - * @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 - * @see ETSI GS MEC 028 Clause 6.2.2 Type: ApInfo + * @desc This type represents the Beacon Reporting Condition configuration + * @member reportingCondition Reporting condition for the Beacon Report + * @member threshold Contains either the threshold value or the offset value to be used for conditional reporting + * @see ETSI GS MEC 028 V2.3.1 Table 6.5.28-1: Attributes of the BeaconReportingConfig */ - type record ApInfo { - TimeStamp timeStamp optional, - ApIdentity apId, - Json.UInteger channel optional, - WlanCapabilities wlanCap optional, - WanMetrics wanMetrics optional, - BssLoad bssLoad optional, - ExtBssLoad extBssLoad optional, - OBssLoad oBssLoad optional, - ApLocation apLocation optional + type record BeaconReportingConfig { + Json.UInt8 reportingCondition, + Json.UInt8 threshold } - type record of ApInfo ApInfoList; /** - * @desc Information on wireless stations available from the WLAN Access Information Service - * @member timeStamp TimeStamp - * @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 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 + * @desc This type represents the Beacon Reported Frame information + * @member phyType Value between 0 and 127 coded according to dot11PHYType + * @member frameType A value of 0 indicates a Beacon or Probe Response. A value of 1 indicates a Measurement Pilot frame + * @see ETSI GS MEC 028 V2.3.1 Table 6.5.29-1: Attributes of the ReportedBeaconFrameInfo */ - type record StaInfo { - TimeStamp timeStamp optional, - StaIdentity staId, - Json.UInteger channel optional, - ApAssociated apAssociated optional, - Rssi rssi optional, - StaDataRate staDataRate optional, - StaStatistics staStatistics optional, - BeaconReport beaconReport optional, - NeighborReport neighborReport optional, - ChannelLoad channelLoad optional + type record ReportedBeaconFrameInfo { + Json.UInt8 phyType, + Json.UInt8 frameType + } + /** + * @desc This type represents BSSID Information field within the Neighbor Report + * @member apReachability The apReachability field indicates whether the AP identified by this BSSID is reachable by the STA that requested the neighbor report + * @member security True indicates the AP identified by this BSSID supports the same security provisioning as used by the STA in its current association + * @member capabilities Capability information for the AP indicated by this BSSID + * @member highThroughputTrue indicates that the AP represented by this BSSID is an HT AP including the HT Capabilities element in its Beacons, and that the contents of that HT Capabilities element are identical to the HT Capabilities element advertised by the AP sending the report + * @member veryHighThroughputTrue indicates that the AP represented by this BSSID is a VHT AP and that the VHT Capabilities element + * @member ftm True indicates the AP represented by this BSSID is an AP that has set the Fine Timing Measurement Responder field of the Extended Capabilities element to 1 + * @see ETSI GS MEC 028 V2.3.1 Table 6.5.30-1: Attributes of the BssidInfo + */ + type record BssidInfo { + Json.UInt8 apReachability, + Json.Bool security, + BssCapabilities capabilities, + Json.Bool highThroughput, + Json.Bool veryHighThroughput, + Json.Bool ftm } - 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 measurementInfo Information used to configure this measurement - * @see ETSI GS MEC 028 Clause 6.2.4 Type: MeasurementConfig + * @desc This type represents BSS Capabilities subfield within the Neighbor Report + * @member spectrumManagement Spectrum Management required + * @member qos QoS Option implemented + * @member apsd APSD Option implemented + * @member radioMeasurements Radio Measurement Activated + * @member delayedBACK Delayed Block Ack Option implemented + * @member immediateBACK Immediate Block Ack Option implemented + * @see ETSI GS MEC 028 V2.3.1 Table 6.5.31-1: Attributes of the BssCapabilities */ - type record MeasurementConfig { - LinkTypes links optional, - StaIdentities staId, - Json.String measurementId, - MeasurementInfo measurementInfo - } with { - variant (links) "name as '_links'"; + type record BssCapabilities { + Json.Bool spectrumManagement, + Json.Bool qos, + Json.Bool apsd, + Json.Bool radioMeasurements, + Json.Bool delayedBACK, + Json.Bool immediateBACK } - type record MeasurementConfig_MeasurementConfigLinkList { - Json.AnyURI href, - Json.String measurementId + /** + * @desc This configuration applies to the Neighbor Report + * @member ssid Contains an SSID element + * @member bssid BSSID of the neighbor AP which information is intended to obtain + * @see ETSI GS MEC 028 V2.3.1 Table 6.5.32-1: Attributes of the NeighborReportConfig + */ + type record NeighborReportConfig { + Json.String ssid optional, + Json.String bssid optional } /** - * @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 + * @desc This type represents the STA Counter Trigger Condition configuration + * @member failedCountThreshold Configure and set threshold for dot11FailedCount trigger + * @member fcsErrorCountThreshold Configure and set threshold for dot11FCSErrorCount trigger + * @member multipleRetryCountThreshold Configure and set threshold for dot11MultipleRetryCount trigger + * @member frameDuplicateCountThreshold Configure and set threshold for dot11FrameDuplicateCount trigger + * @member rtsFailureCountThreshold Configure and set threshold for dot11RTSFailureCount trigger + * @member ackFailureCountThreshold Configure and set threshold for dot11AckFailureCount trigger + * @member retryCountThreshold Configure and set threshold for dot11RetryCount trigger + * @see ETSI GS MEC 028 V2.3.1 Table 6.5.33-1: Attributes of the STACounterTriggerCondition */ - type record MeasurementConfigLinkList { - LinkTypes links optional, - MeasurementConfig_MeasurementConfigLinkList measurementConfig - } with { - variant (links) "name as '_links'"; + type record STACounterTriggerCondition { + Json.UInteger failedCountThreshold optional, + Json.UInteger fcsErrorCountThreshold optional, + Json.UInteger multipleRetryCountThreshold optional, + Json.UInteger frameDuplicateCountThreshold optional, + Json.UInteger rtsFailureCountThreshold optional, + Json.UInteger ackFailureCountThreshold optional, + Json.UInteger retryCountThreshold optional } /** - * @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 + * @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 V2.3.1 Table 6.5.34-1: Attributes of the StaStatisticsGroupZeroData */ - type record NotificationEvent { - Json.UInt8 trigger_, - Json.UInt8 threshold - } with { - variant (trigger_) "name as 'trigger'"; + type record StaStatisticsGroupZeroData { + Json.UInteger transmittedFragmentCount, + Json.UInteger groupTransmittedFrameCount, + Json.UInteger failedCount, + Json.UInteger receivedFragmentCount, + Json.UInteger groupReceivedFrameCount, + Json.UInteger fcsErrorCount, + Json.UInteger transmittedFrameCount, + ReportingReasonStaCounters reportingReasonStaCounters optional } /** - * @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 + * @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 V2.3.1 Clause 6.5.35-1: Attributes of the StaStatisticsGroupOneData */ - type record AssocStaSubscription { - Json.String subscriptionType, - Json.AnyURI callbackReference optional, - Json.Bool requestTestNotification optional, - WebsockNotifConfig websockNotifConfig optional, - LinkTypes links optional, - ApIdentity apId, - Json.UInt8 notificationPeriod optional, - NotificationEvent notificationEvent optional, - TimeStamp expiryDeadline optional - } with { - variant (links) "name as '_links'"; + type record StaStatisticsGroupOneData { + Json.UInteger retryCount, + Json.UInteger multipleRetryCount, + Json.UInteger frameDuplicateCount, + Json.UInteger rtsSuccessCount, + Json.UInteger rtsFailureCount, + Json.UInteger ackFailureCount, + ReportingReasonStaCounters reportingReasonStaCounters optional } - type record of AssocStaSubscription AssocStaSubscriptionList; /** - * @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 + * @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 V2.3.1 Clause 6.5.36-1: Attributes of the StaStatisticsGroup2to9Data */ - type record StaDataRateSubscription { - Json.String subscriptionType, - Json.AnyURI callbackReference, - Json.Bool requestTestNotification optional, - WebsockNotifConfig websockNotifConfig optional, - LinkTypes links optional, - StaIdentities staId, - Json.UInt8 notificationPeriod optional, - NotificationEvent notificationEvent optional, - TimeStamp expiryDeadline optional - } with { - variant (links) "name as '_links'"; + type record StaStatisticsGroup2to9Data { + Json.UInteger qosTransmittedFragmentCount, + Json.UInteger qosFailedCount, + Json.UInteger qosRetryCount, + Json.UInteger qosMultipleRetryCount, + Json.UInteger qosFrameDuplicateCount, + Json.UInteger qosRTSSuccessCount, + Json.UInteger qosRTSFailureCount, + Json.UInteger qosAckFailureCount, + Json.UInteger qosReceivedFragmentCount, + Json.UInteger qosTransmittedFrameCount, + Json.UInteger qosDiscardedFrameCount, + Json.UInteger qosMPDUsReceivedCount, + Json.UInteger qosRetriesReceivedCount, + ReportingReasonQoSCounters reportingReasonQoSCounters optional } - type record of StaDataRateSubscription StaDataRateSubscriptionList; /** - * @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 + * @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 V2.3.1 Table 6.5.37-1: Attributes of the ReportingReasonStaCounters */ - type record SubscriptionItem { - Json.AnyURI href, - Json.String subscriptionType + type record ReportingReasonStaCounters { + Json.Bool failed, + Json.Bool fcsError, + Json.Bool multipleRetry, + Json.Bool frameDuplicate, + Json.Bool rtsFailure, + Json.Bool ackFailure, + Json.Bool retry } - 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 - * @see ETSI GS MEC 028 Clause 6.3.4 Type: SubscriptionLinkList + * @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 V2.3.1 Table 6.5.38-1: Attributes of the ReportingReasonQoSCounters */ - type record SubscriptionLinkList { - LinkTypes links, - Subscription subscription optional - } with { - variant (links) "name as '_links'"; + 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 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 + * @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 V2.3.1 Table 6.5.39-1: Attributes of the ChannelLoad */ - type record WebsockNotifConfig { - Json.AnyURI websocketUri optional, - Json.Bool requestWebsocketUri optional + type record ChannelLoad_ { + StaIdentity staId optional, + Json.String measurementId, + Json.UInt8 operatingClass, + Json.UInt8 channel, + Json.UInt8 measurementDuration, + Json.UInt8 channelLoad } + type record of ChannelLoad_ ChannelLoad; /** - * @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" - * @member timeStamp Time stamp - * @member apId Identifier(s) to uniquely specify the Access Point to which the client stations are associated - * @member staId Identifier(s) to uniquely specify the client station(s) associated - * @see ETSI GS MEC 028 Clause 6.4.2 Type: AssocStaNotification + * @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 V2.3.1 Table 6.5.40-1: Attributes of the OBssLoad */ - type record AssocStaNotification { - Json.String notificationType, - TimeStamp timeStamp optional, - ApIdentity apId, - StaIdentities staId optional + type record OBssLoad { + Json.UInt16 allocatedTrafficSelfMean, + Json.UInt16 allocatedTrafficSelfStdDev optional, + Json.UInt16 allocatedTrafficShareMean, + Json.UInt16 allocatedTrafficShareStdDev optional, + Json.UInt8 overlap optional } /** - * @desc Notification from WLAN Information service with regards to Data Rates of the subscribed client stations - * @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 + * @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 V2.3.1 Table 6.5.41-1: Attributes for MeasurementInfo */ - type record StaDataRateNotification { - Json.String notificationType, - TimeStamp timeStamp optional, - StaDataRates staDataRate optional + type record MeasurementInfo { + Json.UInt16 measurementDuration optional, + Json.UInt16 randomInterval optional, + ChannelLoadConfig channelLoadConf optional, + BeaconRequestConfig beaconRequestConf optional, + StaStatisticsConfig staStatisticsConf optional, + NeighborReportConfig neighborReportConf optional } /** - * @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 + * @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 V2.3.1 Table 6.5.42-1: Attributes of the WebsockNotifConfig */ - type record ExpiryNotification { - Json.String notificationType, - LinkTypes links, - TimeStamp expiryDeadline - } with { - variant (links) "name as '_links'"; + type record WebsockNotifConfig { + Json.AnyURI websocketUri optional, + Json.Bool requestWebsocketUri optional } - } - with { +} with { encode "JSON" } // End of module WlanInformationAPI_TypesAndValues -- GitLab From 525ec9b81ad6dc50191be931cb3113d37f2324ca Mon Sep 17 00:00:00 2001 From: YannGarcia Date: Tue, 23 May 2023 09:29:16 +0200 Subject: [PATCH 30/99] Review typing for MEC 029 --- ttcn/AtsMec_Location/module.mk | 1 - ...xedAccessInformationServiceAPI_Pixits.ttcn | 12 +- ...AccessInformationServiceAPI_Templates.ttcn | 181 +-- ...sInformationServiceAPI_TypesAndValues.ttcn | 1015 ++++++++++++----- 4 files changed, 820 insertions(+), 389 deletions(-) diff --git a/ttcn/AtsMec_Location/module.mk b/ttcn/AtsMec_Location/module.mk index f40c553..8232228 100644 --- a/ttcn/AtsMec_Location/module.mk +++ b/ttcn/AtsMec_Location/module.mk @@ -14,7 +14,6 @@ modules := ../LibCommon \ ../LibMec/EdgePlatformApplicationEnablementAPI \ ../LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI \ ../LibMec/TrafficManagementAPI \ - ../LibMec/RnisAPI \ ../LibMec/UEAppInterfaceAPI \ ../LibMec/UEidentityAPI \ ../LibMec/V2XInformationServiceAPI \ diff --git a/ttcn/LibMec/FixedAccessInformationServiceAPI/ttcn/FixedAccessInformationServiceAPI_Pixits.ttcn b/ttcn/LibMec/FixedAccessInformationServiceAPI/ttcn/FixedAccessInformationServiceAPI_Pixits.ttcn index 563b4f2..183a6d9 100644 --- a/ttcn/LibMec/FixedAccessInformationServiceAPI/ttcn/FixedAccessInformationServiceAPI_Pixits.ttcn +++ b/ttcn/LibMec/FixedAccessInformationServiceAPI/ttcn/FixedAccessInformationServiceAPI_Pixits.ttcn @@ -6,17 +6,17 @@ module FixedAccessInformationServiceAPI_Pixits { // LibMec_FixedAccessInformationServiceAPI import from FixedAccessInformationServiceAPI_TypesAndValues all; - modulepar GatewayId PX_FAI_GW_ID := { "" }; + modulepar GatewayIdList PX_FAI_GW_ID := { "" }; - modulepar GatewayId PX_NON_EXISTING_FAI_GW_ID := { "" }; + modulepar GatewayIdList PX_NON_EXISTING_FAI_GW_ID := { "" }; - modulepar CmdId PX_FAI_CM_ID := ""; + modulepar Json.String PX_FAI_CM_ID := ""; - modulepar CmdId PX_NON_EXISTING_FAI_CM_ID := ""; + modulepar Json.String PX_NON_EXISTING_FAI_CM_ID := ""; - modulepar OnuId PX_FAI_ONU_ID := ""; + modulepar Json.String PX_FAI_ONU_ID := ""; - modulepar OnuId PX_NON_EXISTING_FAI_ONU_ID := ""; + modulepar Json.String PX_NON_EXISTING_FAI_ONU_ID := ""; modulepar Json.String PX_FAI_SUB_ID := ""; diff --git a/ttcn/LibMec/FixedAccessInformationServiceAPI/ttcn/FixedAccessInformationServiceAPI_Templates.ttcn b/ttcn/LibMec/FixedAccessInformationServiceAPI/ttcn/FixedAccessInformationServiceAPI_Templates.ttcn index 1534408..5ac2133 100644 --- a/ttcn/LibMec/FixedAccessInformationServiceAPI/ttcn/FixedAccessInformationServiceAPI_Templates.ttcn +++ b/ttcn/LibMec/FixedAccessInformationServiceAPI/ttcn/FixedAccessInformationServiceAPI_Templates.ttcn @@ -12,26 +12,42 @@ module FixedAccessInformationServiceAPI_Templates { template (omit) FaInfo m_fa_info( in template (value) CpInfo p_customerPremisesInfo, + in template (value) LastMileTech p_lastMileTech, + in template (value) InterfaceType p_interfaceType, in template (omit) TimeStamp p_timeStamp := omit, - in template (omit) ConnectivityInfo p_connectivityInfo := omit - ) := { - timeStamp := p_timeStamp, - customerPremisesInfo := p_customerPremisesInfo, - connectivityInfo := p_connectivityInfo - } // End of template m_fa_info - + in template (omit) Json.Integer p_dsbw := omit, + in template (omit) Json.Integer p_usbw := omit, + in template (omit) Json.Integer p_latency := omit + ) := { + timeStamp := p_timeStamp, + customerPremisesInfo := p_customerPremisesInfo, + lastMileTech := p_lastMileTech, + interfaceType := p_interfaceType, + dsbw := p_dsbw, + usbw := p_usbw, + latency := p_latency + } // End of template m_fa_info + template FaInfo mw_fa_info( template (present) CpInfo p_customerPremisesInfo := ?, + template (present) LastMileTech p_lastMileTech := ?, + template (present) InterfaceType p_interfaceType := ?, template TimeStamp p_timeStamp := *, - template ConnectivityInfo p_connectivityInfo := * - ) := { - timeStamp := p_timeStamp, - customerPremisesInfo := p_customerPremisesInfo, - connectivityInfo := p_connectivityInfo - } // End of template mw_fa_info + template Json.Integer p_dsbw := *, + template Json.Integer p_usbw := *, + template Json.Integer p_latency := * + ) := { + timeStamp := p_timeStamp, + customerPremisesInfo := p_customerPremisesInfo, + lastMileTech := p_lastMileTech, + interfaceType := p_interfaceType, + dsbw := p_dsbw, + usbw := p_usbw, + latency := p_latency + } // End of template mw_fa_info template (omit) DeviceInfo m_device_info( - in template (value) GatewayId p_gwId, + in template (value) Json.String p_gwId, in template (value) DeviceStatus p_deviceStatus, in template (value) Json.Number p_upTime, in template (value) Json.Number p_iPConnectionUpTime, @@ -40,7 +56,7 @@ module FixedAccessInformationServiceAPI_Templates { in template (value) Json.Number p_totalPacketsSent, in template (value) Json.Number p_totalPacketsReceived, in template (omit) TimeStamp p_timeStamp := omit, - in template (omit) DeviceId p_deviceId := omit, + in template (omit) Json.String p_deviceId := omit, in template (omit) IPPingDiagnostics p_iPPingDiagnostics := omit, in template (omit) TraceRouteDiagnostics p_traceRouteDiagnostics := omit, in template (omit) DownloadDiagnostics p_downloadDiagnostics := omit, @@ -63,7 +79,7 @@ module FixedAccessInformationServiceAPI_Templates { } // End of template m_device_info template DeviceInfo mw_device_info( - template (present) GatewayId p_gwId := ?, + template (present) Json.String p_gwId := ?, template (present) DeviceStatus p_deviceStatus := ?, template (present) Json.Number p_upTime := ?, template (present) Json.Number p_iPConnectionUpTime := ?, @@ -72,7 +88,7 @@ module FixedAccessInformationServiceAPI_Templates { template (present) Json.Number p_totalPacketsSent := ?, template (present) Json.Number p_totalPacketsReceived := ?, template TimeStamp p_timeStamp := *, - template DeviceId p_deviceId := *, + template Json.String p_deviceId := *, template IPPingDiagnostics p_iPPingDiagnostics := *, template TraceRouteDiagnostics p_traceRouteDiagnostics := *, template DownloadDiagnostics p_downloadDiagnostics := *, @@ -96,80 +112,111 @@ module FixedAccessInformationServiceAPI_Templates { template (omit) CableLineInfo m_cable_line_info( in template (value) CpInfo p_customerPremisesInfo, - in template (value) CmdInfo p_cmdInfo, - in template (omit) TimeStamp p_timeStamp := omit + in template (value) Json.String p_cmdId, + in template (omit) TimeStamp p_timeStamp := omit, + in template (omit) CmStatus p_cmStatus := omit, + in template (omit) CmDpvStats p_cmDpvStats := omit, + in template (omit) ServiceFlowStats p_serviceFlowStats := omit ) := { timeStamp := p_timeStamp, customerPremisesInfo := p_customerPremisesInfo, - cmdInfo := p_cmdInfo + cmdId := p_cmdId, + cmStatus := p_cmStatus, + cmDpvStats := p_cmDpvStats, + serviceFlowStats := p_serviceFlowStats } // End of template m_cable_line_info template CableLineInfo mw_cable_line_info( template (present) CpInfo p_customerPremisesInfo := ?, - template (present) CmdInfo p_cmdInfo := ?, - template TimeStamp p_timeStamp := * + template (present) Json.String p_cmdId := ?, + template TimeStamp p_timeStamp := *, + template CmStatus p_cmStatus := *, + template CmDpvStats p_cmDpvStats := *, + template ServiceFlowStats p_serviceFlowStats := * + ) := { timeStamp := p_timeStamp, customerPremisesInfo := p_customerPremisesInfo, - cmdInfo := p_cmdInfo + cmdId := p_cmdId, + cmStatus := p_cmStatus, + cmDpvStats := p_cmDpvStats, + serviceFlowStats := p_serviceFlowStats } // End of template mw_cable_line_info template (omit) PonInfo m_pon_info( in template (value) CpInfo p_customerPremisesInfo, - in template (value) PonSYS_ID p_ponSYS_ID, - in template (value) OpticalNetworkInfo p_opticalNetworkInfo, + in template (value) Json.String p_ponSYS_ID, + in template (value) Json.String p_onuId, + in template (value) PonTech p_ponTech, + in template (value) OperationalState p_operationalState, + in template (value) DsRate p_dsRate, + in template (value) UsRate p_usRate, in template (omit) TimeStamp p_timeStamp := omit - ) := { + ) := { timeStamp := p_timeStamp, customerPremisesInfo := p_customerPremisesInfo, ponSYS_ID := p_ponSYS_ID, - opticalNetworkInfo := p_opticalNetworkInfo + onuId := p_onuId, + ponTech := p_ponTech, + operationalState := p_operationalState, + dsRate := p_dsRate, + usRate := p_usRate } // End of template m_pon_info template PonInfo mw_pon_info( template (present) CpInfo p_customerPremisesInfo := ?, - template (present) PonSYS_ID p_ponSYS_ID := ?, - template (present) OpticalNetworkInfo p_opticalNetworkInfo := ?, + template (present) Json.String p_ponSYS_ID := ?, + template (present) Json.String p_onuId := ?, + template (present) PonTech p_ponTech := ?, + template (present) OperationalState p_operationalState := ?, + template (present) DsRate p_dsRate := ?, + template (present) UsRate p_usRate := ?, template TimeStamp p_timeStamp := * - ) := { + ) := { timeStamp := p_timeStamp, customerPremisesInfo := p_customerPremisesInfo, ponSYS_ID := p_ponSYS_ID, - opticalNetworkInfo := p_opticalNetworkInfo + onuId := p_onuId, + ponTech := p_ponTech, + operationalState := p_operationalState, + dsRate := p_dsRate, + usRate := p_usRate } // End of template mw_pon_info template (omit) SubscriptionLinkList m_subscription_link_list( - in template (value) Links p_links, - in template (omit) Subscriptions p_subscription := omit - ) := { - links := p_links, - subscription := p_subscription + in template (value) SubscriptionLinks p_links + ) := { + links := p_links } // End of template m_subscription_link_list template SubscriptionLinkList mw_subscription_link_list( - template (present) Links p_links := ?, - template Subscriptions p_subscription := * - ) := { - links := p_links, - subscription := p_subscription + template (present) SubscriptionLinks p_links := ? + ) := { + links := p_links } // End of template m_wsubscription_link_list template (omit) OnuAlarmSubscription m_onu_alarm_subscription( in template (value) Json.AnyURI p_callbackReference, in template (value) FilterCriteriaOnuAlarm p_filterCriteriaOnuAlarm, + in template (omit) Json.Bool p_requestTestNotification := omit, + in template (omit) WebsockNotifConfig p_websockNotifConfig := omit, in template (omit) Links p_links := omit, in template (omit) TimeStamp p_expiryDeadline := omit - ) := { - subscriptionType := "OnuAlarmSubscription", - callbackReference := p_callbackReference, - links := p_links, - filterCriteriaOnuAlarm := p_filterCriteriaOnuAlarm, - expiryDeadline := p_expiryDeadline + ) := { + subscriptionType := "OnuAlarmSubscription", + callbackReference := p_callbackReference, + requestTestNotification := p_requestTestNotification, + websockNotifConfig := p_websockNotifConfig, + links := p_links, + filterCriteriaOnuAlarm := p_filterCriteriaOnuAlarm, + expiryDeadline := p_expiryDeadline } // End of template m_onu_alarm_subscription - + template (omit) OnuAlarmSubscription m_onu_alarm_subscription_bad_request( in template (value) Json.AnyURI p_callbackReference, in template (value) FilterCriteriaOnuAlarm p_filterCriteriaOnuAlarm, + in template (omit) Json.Bool p_requestTestNotification := omit, + in template (omit) WebsockNotifConfig p_websockNotifConfig := omit, in template (omit) Links p_links := omit, in template (omit) TimeStamp p_expiryDeadline := omit ) modifies m_onu_alarm_subscription := { @@ -180,47 +227,51 @@ module FixedAccessInformationServiceAPI_Templates { template (present) Json.AnyURI p_callbackReference := ?, template (present) FilterCriteriaOnuAlarm p_filterCriteriaOnuAlarm := ?, template Links p_links := *, + template Json.Bool p_requestTestNotification := *, + template WebsockNotifConfig p_websockNotifConfig := *, template TimeStamp p_expiryDeadline := * - ) := { - subscriptionType := "OnuAlarmSubscription", - callbackReference := p_callbackReference, - links := p_links, - filterCriteriaOnuAlarm := p_filterCriteriaOnuAlarm, - expiryDeadline := p_expiryDeadline + ) := { + subscriptionType := "OnuAlarmSubscription", + callbackReference := p_callbackReference, + requestTestNotification := p_requestTestNotification, + websockNotifConfig := p_websockNotifConfig, + links := p_links, + filterCriteriaOnuAlarm := p_filterCriteriaOnuAlarm, + expiryDeadline := p_expiryDeadline } // End of template mw_onu_alarm_subscription template (omit) FilterCriteriaOnuAlarm m_filter_criteria_onu_alarm( in template (value) OnuIds p_onuId := { PX_FAI_ONU_ID }, in template (omit) CpInfo p_customerPremisesIxnfo := omit, - in template (omit) Alarms p_alarms := omit - ) := { + in template (omit) AlarmList p_alarms := omit + ) := { customerPremisesInfo := p_customerPremisesIxnfo, onuId := p_onuId, alarms := p_alarms } // End of template m_filter_criteria_onu_alarm - + template FilterCriteriaOnuAlarm mw_filter_criteria_onu_alarm( template (present) OnuIds p_onuId := ?, template CpInfo p_customerPremisesIxnfo := *, - template Alarms p_alarms := * - ) := { + template AlarmList p_alarms := * + ) := { customerPremisesInfo := p_customerPremisesIxnfo, onuId := p_onuId, alarms := p_alarms } // End of template mw_filter_criteria_onu_alarm template (value) TimeStamp m_time_stamp( - in UInt32 p_seconds, - in UInt32 p_nanoSeconds := 0 - ) := { + in Json.UInteger p_seconds, + in Json.UInteger p_nanoSeconds := 0 + ) := { seconds := p_seconds, nanoSeconds := p_nanoSeconds } // End of temlate m_time_stamp template (present) TimeStamp mw_time_stamp( - template (present) UInt32 p_seconds := ?, - template (present) UInt32 p_nanoSeconds := ? - ) := { + template (present) Json.UInteger p_seconds := ?, + template (present) Json.UInteger p_nanoSeconds := ? + ) := { seconds := p_seconds, nanoSeconds := p_nanoSeconds } // End of temlate mw_time_stamp diff --git a/ttcn/LibMec/FixedAccessInformationServiceAPI/ttcn/FixedAccessInformationServiceAPI_TypesAndValues.ttcn b/ttcn/LibMec/FixedAccessInformationServiceAPI/ttcn/FixedAccessInformationServiceAPI_TypesAndValues.ttcn index d576b82..6873dc4 100644 --- a/ttcn/LibMec/FixedAccessInformationServiceAPI/ttcn/FixedAccessInformationServiceAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/FixedAccessInformationServiceAPI/ttcn/FixedAccessInformationServiceAPI_TypesAndValues.ttcn @@ -1,111 +1,75 @@ +/** + * @author ETSI / STF569 / TTF T027 + * @version $Url$ + * $Id$ + * @desc Types and Values for ETSI GS MEC 029 V2.2.1 (2022-01) + * @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 FixedAccessInformationServiceAPI_TypesAndValues { // JSON import from Json all; - // LibCommon - import from LibCommon_BasicTypesAndValues all; - - /** - * @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 - * @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 This type represents the fixed access information. - * @member timeStamp Time stamp. - * @member customerPremisesInfo The physical location of a customer site. - * @member connectivityInfo The per connectivity domain fixed access information. + * @desc This type represents the fixed access information + * @member timeStamp Time stamp + * @member customerPremisesInfo The physical location of a customer site + * @member lastMileTech An informative field identifying the last mile access technology used + * @member interfaceType The physical interface used for the end customer site + * @member dsbw The bandwidth (in Mbps) from the network towards the customer site + * @member usbw The bandwidth (in Mbps) from the customer site towards the network + * @member latency Maximum baseline latency + * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.2.2-1: Attributes of the FaInfo */ type record FaInfo { - TimeStamp timeStamp optional, - CpInfo customerPremisesInfo, - ConnectivityInfo connectivityInfo optional - } - - /** - * @desc The per connectivity domain fixed access information. - * @member LastMileTech An informative field identifying the last mile access technology used. - * @member InterfaceType The physical interface used for the end customer site – as defined in IEEE802, ITU, Broadband Forum. - * @member dsbw The bandwidth (in Mbps) from the network towards the customer site. - * @member usbw The bandwidth (in Mbps) from the customer site towards the network. - * @member latency Maximum baseline latency (in ms) between customer site and service edge node. - */ - type record ConnectivityInfo { - LastMileTech lastMileTech optional, + TimeStamp timeStamp optional, + CpInfo customerPremisesInfo, + LastMileTech lastMileTech, InterfaceType interfaceType, - Json.Number dsbw optional, - Json.Number usbw optional, - Json.Number latency optional + Json.Integer dsbw optional, + Json.Integer usbw optional, + Json.Integer latency optional } - + /** - * @desc An informative field identifying the last mile access technology used. + * @desc An informative field identifying the last mile access technology used + * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.2.2-1: Attributes of the FaInfo */ type enumerated LastMileTech { - ADSL, - VDSL, - GPON, - XGPON, - NGPON2, - XGSPON, - GFAST, - P2PEthernet + ADSL (1), + VDSL (2), + GPON (3), + XGPON (4), + NGPON2 (5), + XGSPON (6), + GFAST (7), + P2PEthernet (8) + } with { + variant "JSON: as number" } /** - * @desc The physical interface used for the end customer site – as defined in IEEE802, ITU, Broadband Forum. + * @desc The physical interface used for the end customer site + * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.2.2-1: Attributes of the FaInfo */ type enumerated InterfaceType { - e_100BASE_TX, - e_1000BASE_TX, - e_1000BASE_LX, - e_1000BASELX10, - e_1000BASEBX10, - e_1000BASE_LH, - e_1000Base_ZX, - ADSL_RJ11, - VDSL_RJ11, - GPON - } - - /** - * @desc Latitude (DATUM=WGS84) -90 to 90 in decimal degree format DDD.ddd - */ - type Json.Number Latitude; - - /** - * @desc Longitude (DATUM=WGS84) -180 to 180 in decimal degree format DDD.ddd - */ - type Json.Number Longitude; - - /** - * @desc Postal code for the location - */ - type Json.String PostalCode; - - type record CpInfo_{ - Latitude latitude optional, - Longitude longitude optional, - PostalCode postalCode optional + e_100BASE_TX (1), + e_1000BASE_TX (2), + e_1000BASE_LX (3), + e_1000BASELX10 (4), + e_1000BASEBX10 (5), + e_1000BASE_LH (6), + e_1000Base_ZX (7), + e_ADSL_RJ11 (8), + e_VDSL_RJ11 (9), + e_GPON (10) + } with { + variant "JSON: as number" } - type record of CpInfo_ CpInfo; - + /** * @desc This type represents the information of the device that is connected to a fixed access network. * @member timeStamp Time stamp. @@ -122,112 +86,86 @@ module FixedAccessInformationServiceAPI_TypesAndValues { * @member traceRouteDiagnostics The result of an IP-layer trace-route test * @member downloadDiagnostics The result of a HTTP and FTP DownloadDiagnostics Test * @member uploadDiagnostics The result of a HTTP and FTP UploadDiagnostics Test + * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.2.3-1: Attributes of the DeviceInfo */ type record DeviceInfo { - TimeStamp timeStamp optional, - GatewayId gwId, - DeviceId deviceId optional, - DeviceStatus deviceStatus, - Json.Number upTime, - Json.Number iPConnectionUpTime, - Json.Number totalBytesSent, - Json.Number totalBytesReceived, - Json.Number totalPacketsSent, - Json.Number totalPacketsReceived, - IPPingDiagnostics iPPingDiagnostics optional, + TimeStamp timeStamp optional, + Json.String gwId, + Json.String deviceId optional, + DeviceStatus deviceStatus, + Json.Number upTime, + Json.Number iPConnectionUpTime, + Json.Number totalBytesSent, + Json.Number totalBytesReceived, + Json.Number totalPacketsSent, + Json.Number totalPacketsReceived, + IPPingDiagnostics iPPingDiagnostics optional, TraceRouteDiagnostics traceRouteDiagnostics optional, - DownloadDiagnostics downloadDiagnostics optional, - UploadDiagnostics uploadDiagnostics optional + DownloadDiagnostics downloadDiagnostics optional, + UploadDiagnostics uploadDiagnostics optional } - - /** - * @desc Information (typically the serial number) to identify an Internet Gateway Device through which the customer premises device is connected. - */ - type record of Json.String GatewayId; - - /** - * @desc Typically, the serial number of the device. - */ - type record of Json.String DeviceId; - + /** * @desc Current operational status of the device. + * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.2.3-1: Attributes of the DeviceInfo */ type enumerated DeviceStatus { - Up, - Initializing, - Error, - Disabled + Up (1), + Initializing (2), + Error (3), + Disabled (4) + } with { + variant "JSON: as number" } - - type record IPPingDiagnostics {} - type record TraceRouteDiagnostics {} - type record DownloadDiagnostics{} - type record UploadDiagnostics {} - + /** * @desc This type represents the information of the cable line of a fixed access network - * @member timeStamp Time stamp. - * @member customerPremisesInfo The physical location of a customer site. - * + * @member timeStamp Time stamp + * @member customerPremisesInfo The physical location of a customer site + * @member cmdId Information (typically the serial number) to identify a Cable Modem at subscriber locations intended for use in conveying data communications on a cable data system + * @member cmStatus It provides CM connectivity status information of the CM + * @member cmDpvStats It represents the DOCSIS Path Verify Statistics collected in the cable modem device + * @member serviceFlowStats It describes statistics associated with the Service Flows in a managed device + * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.2.4-1: Attributes of the CableLineInfo */ type record CableLineInfo { - TimeStamp timeStamp optional, - CpInfo customerPremisesInfo, - CmdInfo cmdInfo - } - - /** - * @desc - * @member cmdId Information (typically the serial number) to identify a Cable Modem at subscriber locations intended for use in conveying data communications on a cable data system. - * @member cmStatus It provides CM connectivity status information of the CM. - * @member cmDpvStats It represents the DOCSIS Path Verify Statistics collected in the cable modem device. - * @member serviceFlowStats It describes statistics associated with the Service Flows in a managed device. - */ - type record CmdInfo_ { - CmdId cmdId, - CmStatus cmStatus optional, - CmDpvStats cmDpvStats optional, + TimeStamp timeStamp optional, + CpInfo customerPremisesInfo, + Json.String cmdId, + CmStatus cmStatus optional, + CmDpvStats cmDpvStats optional, ServiceFlowStats serviceFlowStats optional } - type record of CmdInfo_ CmdInfo; - - /** - * @desc Information (typically the serial number) to identify a Cable Modem at subscriber locations intended for use in conveying data communications on a cable data system. - */ - type Json.String CmdId; - + /** - * @desc It provides CM connectivity status information of the CM. - * @member ifIndex It denotes the MAC Domain interface index of the CM. - * @member It defines the CM connectivity state. - * @member resets It denotes the number of times the CM reset or initialized this interface. - * @member lostSyncs It denotes the number of times the CM lost synchronization with the downstream channel. - * @member invalidRegRsps It denotes the number of times the CM received invalid registration response messages. + * @desc It provides CM connectivity status information of the CM + * @member ifIndex It denotes the MAC Domain interface index of the CM + * @member cmRegState It defines the CM connectivity state + * @member resets It denotes the number of times the CM reset or initialized this interface + * @member lostSyncs It denotes the number of times the CM lost synchronization with the downstream channel + * @member invalidRegRsps It denotes the number of times the CM received invalid registration response messages * @member energyMgt1x1OperStatus It indicates whether the CM is currently operating in Energy Management 1x1 Mode * @member emDlsOperStatus It indicates whether the CM is currently operating in Energy Management DLS Mode + * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.2.4-1: Attributes of the CableLineInfo */ type record CmStatus_ { - IfIndex ifIndex, - CmRegState cmRegState, - Json.Number resets, - Json.Number lostSyncs, - Json.Number invalidRegRsps, - Json.Bool energyMgt1x1OperStatus, - Json.Bool emDlsOperStatus + Json.String ifIndex, + CmRegState cmRegState, + Json.Integer reset, + Json.Integer lostSyncs, + Json.Integer invalidRegRsps, + Json.Bool energyMgt1x1OperStatus, + Json.Bool emDlsOperStatus } type record of CmStatus_ CmStatus; - - /** - * @desc It denotes the MAC Domain interface index of the CM. - */ - type Json.String IfIndex; + type record of Json.String IfIndexList; /** * @desc It defines the CM connectivity state. + * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.2.4-1: Attributes of the CableLineInfo */ type enumerated CmRegState { - other, + other (1), notReady, notSynchronized, phySynchronized, @@ -250,244 +188,687 @@ module FixedAccessInformationServiceAPI_TypesAndValues { dsTopologyResolutionInProgress, rangingInProgress, rfMuteAll + } with { + variant "JSON: as number" } - + type record of CmRegState CmRegStateList; + /** - * @desc It represents the DOCSIS Path Verify Statistics collected in the cable modem device. - * @member ifIndex It denotes the MAC Domain interface index of the CM. - * @member lastMeasLatency The last latency measurement. - * @member lastMeasTime the last measurement time of the last latency measurement. - * @member minLatency the minimum latency measurement. - * @member maxLatency the maximum latency measurement. - * @member avgLatency the average latency measurement. - * @member numMeas The number of latency measurements made. - */ - type record CmDpvStats_ { - IfIndex ifIndex, - Json.Number lastMeasLatency, - TimeStamp lastMeasTime, - Json.Number minLatency, - Json.Number maxLatency, - Json.Number avgLatency, - Json.Number numMeas - } - type record of CmDpvStats_ CmDpvStats; - + * @desc It represents the DOCSIS Path Verify Statistics collected in the cable modem device + * @member ifIndex It represents the interface Index of the Downstream Interface where the measurements are taken + * @member lastMeasLatency The last latency measurement + * @member lastMeasTime The last measurement time of the last latency measurement + * @member minLatency The minimum latency measurement + * @member maxLatency The maximum latency measurement + * @member avgLatency The average latency measurement + * @member numMeas The number of latency measurements made + * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.2.4-1: Attributes of the CableLineInfo + */ + type record CmDpvStats { + Json.String ifIndex, + Json.Integer lastMeasLatency, + TimeStamp lastMeasTime, + Json.Integer minLatency, + Json.Integer maxLatency, + Json.Integer avgLatency, + Json.Integer numMeas + } + /** - * @desc It describes statistics associated with the Service Flows in a managed device. - * @member ifIndex It denotes the MAC Domain interface index of the CM. - * @member serviceFlowInfo It represents the information of a Service Flow. + * @desc It describes statistics associated with the Service Flows in a managed device + * @member ifIndex It represents the interface index of the MAC Domain of the Service Flow + * @member serviceFlowInfo It represents the information of a Service Flow + * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.2.4-1: Attributes of the CableLineInfo */ - type record ServiceFlowStats_ { - IfIndex ifIndex, - ServiceFlowInfo serviceFlowInfo + type record ServiceFlowStats { + Json.String ifIndex, + ServiceFlowInfoList serviceFlowInfo } - type record of ServiceFlowStats_ ServiceFlowStats; - + /** - * @desc It represents the information of a Service Flow. - * @member ifIndex It denotes the MAC Domain interface index of the CM. - * @member serviceFlowId It represents an identifier assigned to a Service Flow by CMTS within a MAC Domain. - * @member pkts For outgoing Service Flows, this attribute counts the number of Packet Data PDUs forwarded to this Service Flow. For incoming upstream CMTS service flows, this attribute counts the number of Packet Data PDUs actually received on the Service Flow identified by the SID for which the packet was scheduled. - * @member timeCreated It indicates the time when the service flow was created. - * @member timeActiveIt Indicates the number of seconds that the service flow has been active. - * @member policedDropPkts For upstream service flows, this attribute counts the number of Packet Data PDUs classified to this service flow dropped due to: (1) exceeding the selected Buffer Size for the service flow; or (2) UGS packets dropped due to exceeding the Unsolicited Grant Size with a Request/Transmission policy that requires such packets to be dropped. - * @member policedDelayPkts It counts only outgoing packets delayed in order to maintain the Maximum Sustained Traffic Rate. - * @member aqmDroppedPkts For upstream service flows on which AQM is enabled, this attribute counts the number of Packet Data PDUs classified to this service flow dropped due to Active Queue Management drop decisions. - */ - type record ServiceFlowInfo_ { - Json.Number serviceFlowId, - Json.Number pkts, - TimeStamp timeCreated, - Json.Number timeActive, - Json.Number policedDropPkts, - Json.Number policedDelayPkts, - Json.Number aqmDroppedPkts - } - type record of ServiceFlowInfo_ ServiceFlowInfo; - + * @desc It represents the information of a Service Flow + * @member serviceFlowId It represents an identifier assigned to a Service Flow by CMTS within a MAC Domain + * @member pkts For outgoing Service Flows, this attribute counts the number of Packet Data PDUs forwarded to this Service Flow + * For incoming upstream CMTS service flows, this attribute counts the number of Packet Data PDUs actually received on the Service Flow identified by the SID for which the packet was scheduled + * @member timeCreated It indicates the time when the service flow was created + * @member timeActive It indicates the number of seconds that the service flow has been active + * @member policedDropPkts For upstream service flows, this attribute counts the number of Packet Data PDUs classified to this service flow dropped + * @member policedDelayPkts It counts only outgoing packets delayed in order to maintain the Maximum Sustained Traffic Rate + * @member aqmDroppedPkts this attribute counts the number of Packet Data PDUs classified to this service flow dropped due to Active Queue Management drop decisions + * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.2.4-1: Attributes of the CableLineInfo + */ + type record ServiceFlowInfoList { + Json.Integer serviceFlowId, + Json.Integer pkts, + TimeStamp timeCreated, + Json.Integer timeActive, + Json.Integer policedDropPkts, + Json.Integer policedDelayPkts, + Json.Integer aqmDroppedPkts + } + /** * @desc This type represents the information of the of an optical network (e.g., G-PON, XG-PON, NG-PON2, XGS-PON). * @member timeStamp Time stamp. * @member customerPremisesInfo The physical location of a customer site. * @member ponSYS_ID The 20-bit identity of the optical system within a certain domain. - * @member opticalNetworkInfo - */ - type record PonInfo { - TimeStamp timeStamp optional, - CpInfo customerPremisesInfo, - PonSYS_ID ponSYS_ID, - OpticalNetworkInfo opticalNetworkInfo - } - - type Json.String PonSYS_ID; - - /** - * @desc This type represents the information of the of an optical network (e.g., G-PON, XG-PON, NG-PON2, XGS-PON). - * @member onuId Information to identify an Optical Network Unit. - * @member ponTech An informative field identifying the optical technology used. - * @member operationalState It reports whether the ONU is currently capable of performing its function. + * @member onuId Information to identify an Optical Network Unit + * @member ponTech An informative field identifying the optical technology used + * @member operationalState It reports whether the ONU is currently capable of performing its function * @member dsRate Downstream line rate * @member usRate Upstream line rate + * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.2.5-1: Attributes of the PonInfo */ - type record OpticalNetworkInfo_ { - OnuId onuId, - PonTech ponTech, + type record PonInfo { + TimeStamp timeStamp optional, + CpInfo customerPremisesInfo, + Json.String ponSYS_ID, + Json.String onuId, + PonTech ponTech, OperationalState operationalState, - DsRate dsRate, - UsRate usRate + DsRate dsRate, + UsRate usRate } - type record of OpticalNetworkInfo_ OpticalNetworkInfo; - - /** - * @desc Information to identify an Optical Network Unit. - */ - type Json.String OnuId; - type record of OnuId OnuIds; - + /** * @desc An informative field identifying the optical technology used. + * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.2.5-1: Attributes of the PonInfo */ type enumerated PonTech { - GPON, - XGPON, - NGPON2, - XGSPON + GPON (1), + XGPON (2), + NGPON2 (3), + XGSPON (4) + } with { + variant "JSON: as number" } /** * @desc It reports whether the ONU is currently capable of performing its function. + * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.2.5-1: Attributes of the PonInfo */ type enumerated OperationalState { - enabled, - disabled + enabled (1), + disabled (2) + } with { + variant "JSON: as number" } /** * @desc Upstream line rate + * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.2.5-1: Attributes of the PonInfo */ type enumerated DsRate { - e_ds_one, // 1 = 2.48832 Gbit/s: G-PON [i.9] or NG-PON2 option 2 [i.8] - e_ds_two // 9.95328 Gbit/s: XG-PON [i.10] or XGS-PON [i.11] or NG-PON2 option 1 [i.8] + e_ds_one (1), // 1 = 2.48832 Gbit/s: G-PON [i.9] or NG-PON2 option 2 [i.8] + e_ds_two (2) // 9.95328 Gbit/s: XG-PON [i.10] or XGS-PON [i.11] or NG-PON2 option 1 [i.8] + } with { + variant "JSON: as number" } /** * @desc Upstream line rate + * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.2.5-1: Attributes of the PonInfo */ type enumerated UsRate { - e_us_one, // 1 = 1.24416 Gbit/s: G-PON option 1 [i.9] - e_us_two, // 2 = 2.48832 Gbit/s: G-PON option 2 [i.9] or XG-PON [i.10] or NG-PON2 option 2 [i.8] - e_us_three // 9.95328 Gbit/s: XGS-PON [i.11] + e_us_one (1), // 1 = 1.24416 Gbit/s: G-PON option 1 [i.9] + e_us_two (2), // 2 = 2.48832 Gbit/s: G-PON option 2 [i.9] or XG-PON [i.10] or NG-PON2 option 2 [i.8] + e_us_three (3) // 9.95328 Gbit/s: XGS-PON [i.11] + } with { + variant "JSON: as number" } - + + /** + * @desc This type represents a subscription to ONU alarm notifications from FAIS + * @member subscriptionType Shall be set to "OnuAlarmSubscription" + * @member callbackReference URI selected by the service consumer to receive notifications on the subscribed Application Mobility Service + * @member requestTestNotification Set to TRUE by the service consumer to request a test notification via HTTP on the callbackReference URI, as specified in ETSI GS MEC 009 [4] + * @member websockNotifConfig Provides details to negotiate and signal the use of a Websocket connection between the location server and the service consumer for notifications + * @member links Hyperlink related to the resource + * @member filterCriteriaOnuAlarm List of filtering criteria for the subscription + * @member expiryDeadline Identifies a boundary after which the subscription will expire + * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.3.2-1: Attributes of the OnuAlarmSubscription + */ + type record OnuAlarmSubscription { + Json.String subscriptionType, + Json.AnyURI callbackReference optional, + Json.Bool requestTestNotification optional, + WebsockNotifConfig websockNotifConfig optional, + Links links optional, + FilterCriteriaOnuAlarm filterCriteriaOnuAlarm, + TimeStamp expiryDeadline optional + } with { + variant (links) "name as '_links'"; + } + /** * @desc Hyperlink related to the resource. This shall be only included in the HTTP responses and in HTTP PUT requests. * @member self_ Self referring URI. The URI shall be unique within the FAI API as it acts as an ID for the subscription. + * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.3.2-1: Attributes of the OnuAlarmSubscription */ type record Links { LinkType self_ } with { variant (self_) "name as 'self'"; } - + /** - * @desc This type represents a type of link and may be referenced from data structures. + * @desc List of filtering criteria for the subscription. Any filtering criteria from below, which is included in the request, shall also be included in the response + * @member customerPremisesInfo Physical locations of the customer sites + * @member onuId Unique identifiers for the optical network units. + * @member alarms In case alarms is not included in the subscription request, the default value -1 = All shall be used and included in the response. + * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.3.2-1: Attributes of the OnuAlarmSubscription */ - type record LinkType { - Href href + type record FilterCriteriaOnuAlarm { + CpInfo customerPremisesInfo optional, + OnuIds onuId, + AlarmList alarms optional } + type record of Json.String OnuIds; + + /** + * @desc In case alarms is not included in the subscription request, the default value -1 = All shall be used and included in the response + */ + type enumerated Alarm { + EquipmentAlarm (1), // (Functional failure on an internal interface) + PoweringAlarm, // (Loss of external power to battery backup unit. This alarm is typically derived through an external interface to a battery backup unit, and indicates that AC is no longer available to maintain battery charge.) + BatteryMissing, // (Battery is provisioned but missing) + BatteryFailure, // (Battery is provisioned and present but cannot recharge) + BatteryLow, // (Battery is provisioned and present but its voltage is too low) + PhysicalIntrusion, // (Applies if the ONU supports detection such as door or box open) + OnuSelfTestFailure, // (ONU has failed autonomous self-test) + DyingGasp, // ()ONU is powering off imminently due to loss of power to the ONU itself.) + TemperatureYellow, // (No service shutdown at present, but the circuit pack is operating beyond its recommended range.) + TemperatureRed, // ()Some services have been shut down to avoid equipment damage.) + VoltageYellow, // (No service shutdown at present, but the line power voltage is below its recommended minimum.) + VoltageRed, // (Some services have been shut down to avoid power collapse.) + OnuManualPowerOff, // (The ONU is shutting down because the subscriber has turned off its power switch.) + InvImage, // (Software image is invalid) + PseOverloadYellow, // (Indicates that the ONU is nearing its maximum ability to supply the known PoE demand of the attached PDs. The thresholds for declaring and clearing this alarm are vendor-specific.) + PseOverloadRed, // (Indicates that the ONU is unable to supply all of the PoE demand of the attached PDs and has removed or reduced power to at least one PD.) + All + } with { + variant "JSON: as number" + } + type record of Alarm AlarmList; + + /** + * @desc This type represents a subscription to device information notifications from FAIS + * @member subscriptionType Shall be set to "DevInfoSubscription" + * @member callbackReference URI selected by the service consumer to receive notifications on the subscribed Application Mobility Service + * @member requestTestNotification Set to TRUE by the service consumer to request a test notification via HTTP on the callbackReference URI, as specified in ETSI GS MEC 009 [4] + * @member websockNotifConfig Provides details to negotiate and signal the use of a Websocket connection between the location server and the service consumer for notifications + * @member links Hyperlink related to the resource + * @member filterCriteriaDevInfo List of filtering criteria for the subscription + * @member expiryDeadline Identifies a boundary after which the subscription will expire + * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.3.3-1: Attributes of the DevInfoSubscription + */ + type record DevInfoSubscription { + Json.String subscriptionType, + Json.AnyURI callbackReference optional, + Json.Bool requestTestNotification optional, + WebsockNotifConfig websockNotifConfig optional, + Links links optional, + FilterCriteriaDevInfo filterCriteriaDevInfo, + TimeStamp expiryDeadline optional + } with { + variant (links) "name as '_links'"; + } + + /** + * @desc List of filtering criteria for the subscription + * @member gwId The identifier of an Internet Gateway Device through which the customer premises device is connected + * @member deviceId The device identifier + * @member deviceErrStatus The abnormal operational status of the device + * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.3.3-1: Attributes of the DevInfoSubscription + */ + type record FilterCriteriaDevInfo { + GatewayIdList gwId optional, + DeviceIdList deviceId optional, + DeviceErrStatus deviceErrStatus optional + } + + /** + * @desc Information (typically the serial number) to identify an Internet Gateway Device through which the customer premises device is connected. + * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.3.3-1: Attributes of the DevInfoSubscription + */ + type record of Json.String GatewayIdList; /** - * @desc URI referring to a resource. + * @desc Typically, the serial number of the device. + * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.3.3-1: Attributes of the DevInfoSubscription */ - type Json.String Href; + type record of Json.String DeviceIdList; + + /** + * @desc Current operational status of the device. + * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.2.3-1: Attributes of the DeviceInfo + */ + type enumerated DeviceErrStatus_ { + Error (1), + Disabled (2) + } with { + variant "JSON: as number" + } + type record of DeviceErrStatus_ DeviceErrStatus; + + /** + * @desc This type represents a subscription to cable modem connectivity state notifications from FAIS + * @member subscriptionType Shall be set to "CmConnSubscription" + * @member callbackReference URI selected by the service consumer to receive notifications on the subscribed Application Mobility Service + * @member requestTestNotification Set to TRUE by the service consumer to request a test notification via HTTP on the callbackReference URI, as specified in ETSI GS MEC 009 [4] + * @member websockNotifConfig Provides details to negotiate and signal the use of a Websocket connection between the location server and the service consumer for notifications + * @member links Hyperlink related to the resource + * @member filterCriteriaCmConn List of filtering criteria for the subscription + * @member expiryDeadline Identifies a boundary after which the subscription will expire + * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.3.4-1: Attributes of the CmConnSubscription + */ + type record CmConnSubscription { + Json.String subscriptionType, + Json.AnyURI callbackReference optional, + Json.Bool requestTestNotification optional, + WebsockNotifConfig websockNotifConfig optional, + Links links optional, + FilterCriteriaCmConn filterCriteriaCmConn, + TimeStamp expiryDeadline optional + } with { + variant (links) "name as '_links'"; + } + + /** + * @desc List of filtering criteria for the subscription + * @member customerPremisesInfo The physical location of a customer site + * @member cmIf + * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.3.4-1: Attributes of the CmConnSubscription + */ + type record FilterCriteriaCmConn { + CpInfo customerPremisesInfo optional, + CmIf cmIf optional + } + + /** + * @desc + * @member customerPremisesInfo The physical location of a customer site + * @member cmId The identifier of a Cable Modem at subscriber locations intended for use in conveying data communications on a cable data system + * @member ifIndex The MAC Domain interface index of the CM + * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.3.4-1: Attributes of the CmConnSubscription + */ + type record CmIf { + Json.String cmId, + IfIndexList ifIndex, + CmRegStateList cmRegState + } /** - * @desc This type represents a list of links related to currently existing subscriptions for the service consumer. - * @member links List of hyperlinks related to the resource. - * @member subscription A link to a subscription. + * @desc This type represents a list of links related to currently existing subscriptions for the service consumer + * @member links Hyperlink related to the resource + * @member subscription The service consumer's subscriptions + * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.3.5-1: Attributes of the SubscriptionLinkList */ type record SubscriptionLinkList { - Links links, - Subscriptions subscription optional + SubscriptionLinks links } with { variant (links) "name as '_links'"; } - + + /** + * @desc Hyperlink related to the resource + * @member self_ URI of this resource. + * @member subscription The service consumer's subscriptions + * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.3.5-1: Attributes of the SubscriptionLinkList + */ + type record SubscriptionLinks { + LinkType self_, + SubscriptionList subscription optional + } with { + variant (self_) "name as 'self'"; + } + /** * @desc A link to a subscription * @member href The URI referring to the subscription. * @member subscriptionType Type of subscription + * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.3.5-1: Attributes of the SubscriptionLinkList */ type record Subscription_ { - Json.AnyURI href, + Json.AnyURI href, SubscriptionType subscriptionType } - type record of Subscription_ Subscriptions; - + type record of Subscription_ SubscriptionList; + /** * @desc Type of subscription + * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.3.5-1: Attributes of the SubscriptionLinkList */ type enumerated SubscriptionType { - RESERVED, - ONU_ALARM, - DEVICE_ABNORMAL_ALERT, - CM_CONNECTIVITY_STATE, - ANI_ALARM + OnuAlarmSubscription, + DevInfoSubscription, + CmConnSubscription, + AniAlarmSubscription } - + /** - * @desc This type represents a subscription to ONU alarm notifications from FAIS. - */ - type record OnuAlarmSubscription { - Json.String subscriptionType, - Json.AnyURI callbackReference, - Links links optional, - FilterCriteriaOnuAlarm filterCriteriaOnuAlarm, - TimeStamp expiryDeadline optional + * @desc This type represents a subscription to cable modem connectivity state notifications from FAIS + * @member subscriptionType Shall be set to "AniAlarmSubscription" + * @member callbackReference URI selected by the service consumer to receive notifications on the subscribed Application Mobility Service + * @member requestTestNotification Set to TRUE by the service consumer to request a test notification via HTTP on the callbackReference URI, as specified in ETSI GS MEC 009 [4] + * @member websockNotifConfig Provides details to negotiate and signal the use of a Websocket connection between the location server and the service consumer for notifications + * @member links Hyperlink related to the resource + * @member filterCriteriaAniAlarm List of filtering criteria for the subscription + * @member expiryDeadline Identifies a boundary after which the subscription will expire + * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.3.6-1: Attributes of the AniAlarmSubscription + */ + type record AniAlarmSubscription { + Json.String subscriptionType, + Json.AnyURI callbackReference optional, + Json.Bool requestTestNotification optional, + WebsockNotifConfig websockNotifConfig optional, + Links links optional, + FilterCriteriaAniAlarm filterCriteriaAniAlarm, + TimeStamp expiryDeadline optional } with { variant (links) "name as '_links'"; } - + /** - * @desc List of filtering criteria for the subscription. Any filtering criteria from below, which is included in the request, shall also be included in the response - * @member customerPremisesInfo Physical locations of the customer sites - * @member onuId Unique identifiers for the optical network units. - * @member In case alarms is not included in the subscription request, the default value -1 = All shall be used and included in the response. + * @desc List of filtering criteria for the subscription + * @member customerPremisesInfo 0 to N physical locations of the customer sites + * @member onuId 1 to N unique identifiers for the optical network units + * @member aniId + * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.3.6-1: Attributes of the AniAlarmSubscription */ - type record FilterCriteriaOnuAlarm { + type record FilterCriteriaAniAlarm { CpInfo customerPremisesInfo optional, OnuIds onuId, - Alarms alarms optional + AniId aniId } - + /** * @desc + * @member onuId The unique identifiers for the optical network unit + * @member aniId The index of an access network interface supported by the optical network unit + * @member alarms + * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.3.6-1: Attributes of the AniAlarmSubscription + */ + type record AniId_ { + OnuIds onuId, + Json.String aniIndex, + AlarmList alarms optional + } + type record of AniId_ AniId + + /** + * @desc This type represents a notification from FAIS with regards to ONU alarms + * @member notificationType Shall be set to "OnuAlarmNotification" + * @member timeStamp Date and time of the generation of the notification + * @member customerPremisesInfo The physical location of the related customer sites\ + * @member onuId The unique identifier for an optical network unit + * @member alarm Indicates the alarm of the ONU + * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.4.2-1: Attributes of the OnuAlarmNotification + */ + type record OnuAlarmNotification { + Json.String notificationType, + TimeStamp timeStamp optional, + CpInfo customerPremisesInfo optional, + Json.String onuId, + Alarm alarm + } + + /** + * @desc This type represents a notification from FAIS with regards to ONU alarms + * @member notificationType Shall be set to "DevInfoNotification" + * @member timeStamp Date and time of the generation of the notification + * @member deviceId The identifier for a device + * @member deviceErrStatus Indicates the abnormal operational status of the device + * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.4.3-1: Attributes of the DevInfoNotification + */ + type record DevInfoNotification { + Json.String notificationType, + TimeStamp timeStamp optional, + Json.String deviceId, + DeviceErrStatus_ deviceErrStatus + } + + /** + * @desc This type represents a notification from FAIS with regards to ONU alarms + * @member notificationType Shall be set to "CmConnNotification" + * @member timeStamp Date and time of the generation of the notification + * @member customerPremisesInfo The physical location of a customer site + * @member cmIf + * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.4.4-1: Attributes of the CmConnNotification + */ + type record CmConnNotification { + Json.String notificationType, + TimeStamp timeStamp optional, + CpInfo customerPremisesInfo optional, + CmIf cmIf + } + + /** + * @desc This type represents a notification from FAIS with regards to expiry of the existing subscription + * @member timeStamp Date and time of the generation of the notification + * @member links List of hyperlinks related to the resource + * @member expiryDeadline Time stamp + * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.4.5-1: Attributes of the ExpiryNotification */ - type enumerated Alarm { - EquipmentAlarm, // (Functional failure on an internal interface) - PoweringAlarm, // (Loss of external power to battery backup unit. This alarm is typically derived through an external interface to a battery backup unit, and indicates that AC is no longer available to maintain battery charge.) - BatteryMissing, // (Battery is provisioned but missing) - BatteryFailure, // (Battery is provisioned and present but cannot recharge) - BatteryLow, // (Battery is provisioned and present but its voltage is too low) - PhysicalIntrusion, // (Applies if the ONU supports detection such as door or box open) - OnuSelfTestFailure, // (ONU has failed autonomous self-test) - DyingGasp, // ()ONU is powering off imminently due to loss of power to the ONU itself.) - TemperatureYellow, // (No service shutdown at present, but the circuit pack is operating beyond its recommended range.) - TemperatureRed, // ()Some services have been shut down to avoid equipment damage.) - VoltageYellow, // (No service shutdown at present, but the line power voltage is below its recommended minimum.) - VoltageRed, // (Some services have been shut down to avoid power collapse.) - OnuManualPowerOff, // (The ONU is shutting down because the subscriber has turned off its power switch.) - InvImage, // (Software image is invalid) - PseOverloadYellow, // (Indicates that the ONU is nearing its maximum ability to supply the known PoE demand of the attached PDs. The thresholds for declaring and clearing this alarm are vendor-specific.) - PseOverloadRed, //(Indicates that the ONU is unable to supply all of the PoE demand of the attached PDs and has removed or reduced power to at least one PD.) - All - } with { - variant "JSON: as number" + type record ExpiryNotification { + TimeStamp timeStamp optional, + Links links, + TimeStamp expiryDeadline + } with { + variant (links) "name as '_links'"; + } + + /** + * @desc This type represents a notification from FAIS with regards to ONU alarms + * @member notificationType Shall be set to "AniAlarmNotification" + * @member timeStamp Date and time of the generation of the notification + * @member customerPremisesInfo The physical location of a customer site + * @member onuId The unique identifier for an optical network unit + * @member aniId + * @member alarm Indicates the alarm of the ANI + * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.4.6-1: Attributes of the AniAlarmNotification + */ + type record AniAlarmNotification { + Json.String notificationType, + TimeStamp timeStamp optional, + CpInfo customerPremisesInfo optional, + OnuIds onuId optional, + AniId aniId optional, + Alarm alarm + } + + /** + * @desc This type represents a test notification from a FAIS to determine if the Websocket method is to be utilized to issue notifications for a subscription + * @member notificationType Shall be set to "OnuAlarmNoTestNotificationtification" + * @member links Hyperlink related to the resource + * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.4.7-1: Attributes of the TestNotification + */ + type record TestNotification { + Json.String notificationType, + Links_TestNotification links + } with { + variant (links) "name as '_links'"; } - type record of Alarm Alarms; + /** + * @desc Hyperlink related to the resource + * @member subscription URI identifying the subscription for the test notification + * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.4.7-1: Attributes of the TestNotification + */ + type record Links_TestNotification { + LinkType subscription + } + + /** + * @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 + * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.5.2-1: Attributes of the 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 + * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.5.2-1: Attributes of the TimeStamp + */ + type Json.UInteger Seconds; + + /** + * @desc The nanoseconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC + * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.5.2-1: Attributes of the TimeStamp + */ + type Json.UInteger NanoSeconds; + + /** + * @desc This type represents a customer premises (physical location) + * @member latitude Latitude (DATUM=WGS84) + * @member longitude Longitude (DATUM=WGS84) + * @member postalCode Postal code for the location + * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.5.3-1: Attributes of the CpInfo + */ + type record CpInfo_{ + Json.Number latitude optional, + Json.Number longitude optional, + Json.String postalCode optional + } + type record of CpInfo_ CpInfo; + + /** + * @desc This type represents an IP-layer ping test + * @member diagnosticsState The state of the IP ping test + * @member host Host name or address of the host to ping + * @member numberOfRepetitions Number of repetitions of the ping test to perform before reporting the results + * @member timeout_ Timeout in milliseconds for the ping test + * @member dataBlockSize Size of the data block in bytes to be sent for each ping + * @member successCount Result parameter indicating the number of successful pings (those in which a successful response was received prior to the timeout) in the most recent ping test + * @member failureCount Result parameter indicating the number of failed pings in the most recent ping test + * @member averageResponseTime Result parameter indicating the average response time in milliseconds over all repetitions with successful responses of the most recent ping test + * @member minimumResponseTime Result parameter indicating the minimum response time in milliseconds over all repetitions with successful responses of the most recent ping test + * @member maximumResponseTime Result parameter indicating the maximum response time in milliseconds over all repetitions with successful responses of the most recent ping test + * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.5.4-1: Attributes of the IPPingDiagnostics + */ + type record IPPingDiagnostics { + DiagnosticsState diagnosticsState, + Json.String host optional, + Json.Number numberOfRepetitions optional, + Json.Number timeout_ optional, + Json.Number dataBlockSize optional, + Json.Number successCount optional, + Json.Number failureCount optional, + Json.Number averageResponseTime optional, + Json.Number minimumResponseTime optional, + Json.Number maximumResponseTime optional + } + + /** + * @desc The state of the IP ping test + * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.5.4-1: Attributes of the IPPingDiagnostics + */ + type enumerated DiagnosticsState { + None (1), + Requested (2), + Complete (3), + Error_CannotResolveHostName (4), + Error_Internal (5), + Error_Other (6) + } with { + variant "JSON: as number" + } + + /** + * @desc This type represents an IP-layer trace-route test + * @member diagnosticsState The state of the IP ping test + * @member host Host name or address of the host to find a route to + * @member timeout_ Timeout in milliseconds for the trace route test + * @member dataBlockSize Size of the data block in bytes to be sent for each trace route + * @member maxHopCount The maximum number of hop used in outgoing probe packets. The default is 30 hops + * @member responseTime Result parameter indicating the response time in milliseconds the most recent trace route test + * @member numberOfRouteHops Result parameter indicating the number of hops within the discovered route + * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.5.5-1: Attributes of the TraceRouteDiagnostics + */ + type record TraceRouteDiagnostics { + DiagnosticsState diagnosticsState, + Json.String host optional, + Json.Number timeout_ optional, + Json.Number dataBlockSize optional, + Json.Number maxHopCount optional, + Json.Number responseTime optional, + Json.Number numberOfRouteHops optional + } + + /** + * @desc This type represents a HTTP and FTP DownloadDiagnostics test + * @member diagnosticsState The state of the HTTP and FTP download test + * @member downloadURI The URI for the device to perform the download on + * @member rOMTime Request time in UTC, which shall be specified to microsecond precision + * @member bOMTime Begin of transmission time in UTC, which shall be specified to microsecond precision + * @member eOMTime End of transmission in UTC, which shall be specified to microsecond precision + * @member testBytesReceived The test traffic received in bytes during the FTP/HTTP transaction including FTP/HTTP headers,`between bOMTime and eOMTime + * @member totalBytesReceived The total number of bytes received on the Interface between bOMTime and eOMTime + * @member tCPOpenRequestTime Request time in UTC, which shall be specified to microsecond precision + * @member tCPOpenReponseTime Response time in UTC, which shall be specified to microsecond precision + * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.5.6-1: Attributes of the DownloadDiagnostics + */ + type record DownloadDiagnostics { + DiagnosticsState diagnosticsState, + Json.AnyURI downloadURI optional, + TimeStamp rOMTime optional, + TimeStamp bOMTime optional, + TimeStamp eOMTime optional, + Json.Number testBytesReceived optional, + Json.Number totalBytesReceived optional, + TimeStamp tCPOpenRequestTime optional, + TimeStamp tCPOpenReponseTime optional + } + + /** + * @desc This type represents a HTTP and FTP UploadDiagnostics test + * @member diagnosticsState The state of the HTTP and FTP download test + * @member uploadURI The URI for the device to perform the upload to + * @member testFileLength The size of the file (in bytes) to be uploaded to the server + * @member rOMTime Request time in UTC, which shall be specified to microsecond precision + * @member bOMTime Begin of transmission time in UTC, which shall be specified to microsecond precision + * @member eOMTime End of transmission in UTC, which shall be specified to microsecond precision + * @member testBytesSent The test traffic sent in bytes during the FTP/HTTP transaction including FTP/HTTP headers, between bOMTime and eOMTime + * @member tCPOpenRequestTime Request time in UTC, which shall be specified to microsecond precision + * @member tCPOpenReponseTime Response time in UTC, which shall be specified to microsecond precision + * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.5.7-1: Attributes of the UploadDiagnostics + */ + type record UploadDiagnostics { + DiagnosticsState diagnosticsState, + Json.AnyURI uploadURI optional, + Json.Number testFileLength optional, + TimeStamp rOMTime optional, + TimeStamp bOMTime optional, + TimeStamp eOMTime optional, + Json.Number testBytesSent optional, + TimeStamp tCPOpenRequestTime optional, + TimeStamp tCPOpenReponseTime optional + } + + /** + * @desc This type represents a type of link and may be referenced from data structures + * @member href URI referring to a resource + * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.5.8-1: Attributes of the LinkType + */ + type record LinkType { + Json.AnyURI href + } + + /** + * @desc This type represents configuration for the delivery of subscription notifications over Websockets + * @member websocketUri Set by location server 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 029 V2.2.1 (2022-01) Table 6.5.9-1: Attributes of the WebsockNotifConfig + */ + type record WebsockNotifConfig { + Json.AnyURI websocketUri optional, + Json.Bool requestWebsocketUri optional + } + } with { encode "JSON" } // End of module FixedAccessInformationServiceAPI_TypesAndValues -- GitLab From 60bd0216571624edbfe640b59d06f877298d60ac Mon Sep 17 00:00:00 2001 From: YannGarcia Date: Tue, 23 May 2023 16:09:43 +0200 Subject: [PATCH 31/99] Review typing for MEC 030 --- ttcn/AtsMec_V2XInformationService/module.mk | 1 - ttcn/LibMec/RnisAPI/ttcn/RnisAPI_Pixits.ttcn | 2 +- .../RnisAPI/ttcn/RnisAPI_Templates.ttcn | 26 +- .../RnisAPI/ttcn/RnisAPI_TypesAndValues.ttcn | 42 +- .../V2XInformationServiceAPI_Templates.ttcn | 342 +++--- ...XInformationServiceAPI_TypesAndValues.ttcn | 1066 ++++++++++------- 6 files changed, 873 insertions(+), 606 deletions(-) diff --git a/ttcn/AtsMec_V2XInformationService/module.mk b/ttcn/AtsMec_V2XInformationService/module.mk index a58df4a..311a0b3 100644 --- a/ttcn/AtsMec_V2XInformationService/module.mk +++ b/ttcn/AtsMec_V2XInformationService/module.mk @@ -14,7 +14,6 @@ modules := ../LibCommon \ ../LibMec/EdgePlatformApplicationEnablementAPI \ ../LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI \ ../LibMec/TrafficManagementAPI \ - ../LibMec/RnisAPI \ ../LibMec/UEAppInterfaceAPI \ ../LibMec/UEidentityAPI \ ../LibMec/V2XInformationServiceAPI \ diff --git a/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_Pixits.ttcn b/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_Pixits.ttcn index c34cee9..c5deed7 100644 --- a/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_Pixits.ttcn +++ b/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_Pixits.ttcn @@ -13,7 +13,7 @@ module RnisAPI_Pixits { modulepar Json.String PX_UNKNOWN_SUBSCRIPTION_ID := "0666"; - modulepar Link PX_LINKS_SELF := { self_ := { href := "http://example.com/exampleAPI/rni/v2/subscriptions" } }; + modulepar Links PX_LINKS_SELF := { self_ := { href := "http://example.com/exampleAPI/rni/v2/subscriptions" } }; modulepar charstring PX_CALLBACK_URI := "/"; diff --git a/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_Templates.ttcn b/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_Templates.ttcn index f568100..c4145ec 100644 --- a/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_Templates.ttcn +++ b/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_Templates.ttcn @@ -61,7 +61,7 @@ module RnisAPI_Templates { in template (value) FilterCriteriaAssocHo p_filterCriteriaAssocHo, in template (omit) Json.Bool p_requestTestNotification := omit, in template (omit) WebsockNotifConfig p_websockNotifConfig := omit, - in template (omit) Link p_links := omit, + in template (omit) Links p_links := omit, in template (omit) TimeStamp p_expiryDeadline := omit ) := { subscriptionType := "CellChangeSubscription", @@ -78,7 +78,7 @@ module RnisAPI_Templates { in template (value) FilterCriteriaAssocHo p_filterCriteriaAssocHo, in template (omit) Json.Bool p_requestTestNotification := omit, in template (omit) WebsockNotifConfig p_websockNotifConfig := omit, - in template (omit) Link p_links := omit, + in template (omit) Links p_links := omit, in template (omit) TimeStamp p_expiryDeadline := omit ) modifies m_cell_change_subscription := { subscriptionType := "CellChangeSubscription_invalid" @@ -86,7 +86,7 @@ module RnisAPI_Templates { template CellChangeSubscription mw_cell_change_subscription( template (present) CallbackReference p_callbackReference := ?, - template (present) Link p_links := ?, + template (present) Links p_links := ?, template (present) FilterCriteriaAssocHo p_filterCriteriaAssocHo := ?, template Json.Bool p_requestTestNotification := *, template WebsockNotifConfig p_websockNotifConfig := *, @@ -110,7 +110,7 @@ module RnisAPI_Templates { in template (value) RabEstSubscription_FilterCriteriaQci p_filterCriteriaQci, in template (omit) Json.Bool p_requestTestNotification := omit, in template (omit) WebsockNotifConfig p_websockNotifConfig := omit, - in template (omit) Link p_links := omit, + in template (omit) Links p_links := omit, in template (omit) TimeStamp p_expiryDeadline := omit ) := { subscriptionType := "RabEstSubscription", @@ -124,7 +124,7 @@ module RnisAPI_Templates { template (present) RabEstSubscription mw_rab_est_subscription( template (present) CallbackReference p_callbackReference := ?, - template (present) Link p_links := ?, + template (present) Links p_links := ?, template (present) RabEstSubscription_FilterCriteriaQci p_filterCriteriaQci := ?, template Json.Bool p_requestTestNotification := *, template WebsockNotifConfig p_websockNotifConfig := *, @@ -144,7 +144,7 @@ module RnisAPI_Templates { in template (value) RabModSubscription_FilterCriteriaQci p_filterCriteriaQci, in template (omit) Json.Bool p_requestTestNotification := omit, in template (omit) WebsockNotifConfig p_websockNotifConfig := omit, - in template (omit) Link p_links := omit, + in template (omit) Links p_links := omit, in template (omit) TimeStamp p_expiryDeadline := omit ) := { subscriptionType := "RabModSubscription", @@ -158,7 +158,7 @@ module RnisAPI_Templates { template (present) RabModSubscription mw_rab_mod_subscription( template (present) CallbackReference p_callbackReference := ?, - template (present) Link p_links := ?, + template (present) Links p_links := ?, template (present) RabModSubscription_FilterCriteriaQci p_filterCriteriaQci := ?, template Json.Bool p_requestTestNotification := *, template WebsockNotifConfig p_websockNotifConfig := *, @@ -178,7 +178,7 @@ module RnisAPI_Templates { in template (value) RabModSubscription_FilterCriteriaQci p_filterCriteriaQci, in template (omit) Json.Bool p_requestTestNotification := omit, in template (omit) WebsockNotifConfig p_websockNotifConfig := omit, - in template (omit) Link p_links := omit, + in template (omit) Links p_links := omit, in template (omit) TimeStamp p_expiryDeadline := omit ) := { subscriptionType := "RabRelSubscription", @@ -192,7 +192,7 @@ module RnisAPI_Templates { template (present) RabRelSubscription mw_rab_rel_subscription( template (present) CallbackReference p_callbackReference := ?, - template (present) Link p_links := ?, + template (present) Links p_links := ?, template (present) RabModSubscription_FilterCriteriaQci p_filterCriteriaQci := ?, template Json.Bool p_requestTestNotification := *, template WebsockNotifConfig p_websockNotifConfig := *, @@ -209,7 +209,7 @@ module RnisAPI_Templates { template (present) MeasRepUeSubscription mw_meas_rep_ue_subscription( template (present) CallbackReference p_callbackReference := ?, - template (present) Link p_links := ?, + template (present) Links p_links := ?, template (present) FilterCriteriaAssocTri p_filterCriteriaAssocTri := ?, template Json.Bool p_requestTestNotification := *, template WebsockNotifConfig p_websockNotifConfig := *, @@ -226,7 +226,7 @@ module RnisAPI_Templates { template (present) MeasTaSubscription mw_meas_ta_subscription( template (present) CallbackReference p_callbackReference := ?, - template (present) Link p_links := ?, + template (present) Links p_links := ?, template (present) FilterCriteriaAssoc p_filterCriteriaAssoc := ?, template Json.Bool p_requestTestNotification := *, template WebsockNotifConfig p_websockNotifConfig := *, @@ -243,7 +243,7 @@ module RnisAPI_Templates { template (present) CaReConfSubscription mw_ca_reconfig_subscription( template (present) CallbackReference p_callbackReference := ?, - template (present) Link p_links := ?, + template (present) Links p_links := ?, template (present) FilterCriteriaAssoc p_filterCriteriaAssoc := ?, template Json.Bool p_requestTestNotification := *, template WebsockNotifConfig p_websockNotifConfig := *, @@ -260,7 +260,7 @@ module RnisAPI_Templates { template (present) S1BearerSubscription mw_s1_bearer_subscription( template (present) CallbackReference p_callbackReference := ?, - template (present) Link p_links := ?, + template (present) Links p_links := ?, template (present) EventType p_eventType := ?, template (present) S1BearerSubscriptionCriteria p_s1BearerSubscriptionCriteria := ?, template Json.Bool p_requestTestNotification := *, diff --git a/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_TypesAndValues.ttcn b/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_TypesAndValues.ttcn index ab52234..f5066a6 100644 --- a/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_TypesAndValues.ttcn @@ -310,7 +310,7 @@ module RnisAPI_TypesAndValues { CallbackReference callbackReference, Json.Bool requestTestNotification optional, WebsockNotifConfig websockNotifConfig optional, - Link links optional, + Links links optional, FilterCriteriaAssocHo filterCriteriaAssocHo, TimeStamp expiryDeadline optional } with { @@ -322,7 +322,7 @@ module RnisAPI_TypesAndValues { * @member self_ URI referring to a resource * @see ETSI GS MEC 012 V2.2.1 (2022-02) Table 6.3.2-1: Attributes of the CellChangeSubscription */ - type record Link { + type record Links { LinkType self_ } with { variant (self_) "name as 'self'"; @@ -374,7 +374,7 @@ module RnisAPI_TypesAndValues { CallbackReference callbackReference, Json.Bool requestTestNotification optional, WebsockNotifConfig websockNotifConfig optional, - Link links optional, + Links links optional, RabEstSubscription_FilterCriteriaQci filterCriteriaQci, TimeStamp expiryDeadline optional } with { @@ -410,7 +410,7 @@ module RnisAPI_TypesAndValues { CallbackReference callbackReference, Json.Bool requestTestNotification optional, WebsockNotifConfig websockNotifConfig optional, - Link links optional, + Links links optional, RabModSubscription_FilterCriteriaQci filterCriteriaQci, TimeStamp expiryDeadline optional } with { @@ -433,7 +433,7 @@ module RnisAPI_TypesAndValues { CallbackReference callbackReference, Json.Bool requestTestNotification optional, WebsockNotifConfig websockNotifConfig optional, - Link links optional, + Links links optional, RabModSubscription_FilterCriteriaQci filterCriteriaQci, TimeStamp expiryDeadline optional } with { @@ -471,7 +471,7 @@ module RnisAPI_TypesAndValues { CallbackReference callbackReference, Json.Bool requestTestNotification optional, WebsockNotifConfig websockNotifConfig optional, - Link links optional, + Links links optional, FilterCriteriaAssocTri filterCriteriaAssocTri, TimeStamp expiryDeadline optional } with { @@ -511,7 +511,7 @@ module RnisAPI_TypesAndValues { CallbackReference callbackReference, Json.Bool requestTestNotification optional, WebsockNotifConfig websockNotifConfig optional, - Link links, + Links links, FilterCriteriaAssoc filterCriteriaAssoc, TimeStamp expiryDeadline optional } with { @@ -547,7 +547,7 @@ module RnisAPI_TypesAndValues { CallbackReference callbackReference, Json.Bool requestTestNotification optional, WebsockNotifConfig websockNotifConfig optional, - Link links optional, + Links links optional, FilterCriteriaAssoc filterCriteriaAssoc, TimeStamp expiryDeadline optional } with { @@ -571,7 +571,7 @@ module RnisAPI_TypesAndValues { CallbackReference callbackReference, Json.Bool requestTestNotification optional, WebsockNotifConfig websockNotifConfig optional, - Link links optional, + Links links optional, EventType eventType, S1BearerSubscriptionCriteria s1BearerSubscriptionCriteria, TimeStamp expiryDeadline optional @@ -658,7 +658,7 @@ module RnisAPI_TypesAndValues { CallbackReference callbackReference, Json.Bool requestTestNotification optional, WebsockNotifConfig websockNotifConfig optional, - Link links optional, + Links links optional, FilterCriteriaNrMrs filterCriteriaNrMrs, TimeStamp expiryDeadline optional } with { @@ -721,7 +721,7 @@ module RnisAPI_TypesAndValues { Ecgi_list trgEcgi, HoStatus hoStatus, TempUeId_ tempUeId, - Link links optional + Links links optional } with { variant (links) "name as '_links'"; } @@ -746,7 +746,7 @@ module RnisAPI_TypesAndValues { ErabId erabId, ErabQosParameters erabQosParameters, TempUeId_ tempUeId, - Link links optional + Links links optional } with { variant (links) "name as '_links'"; } @@ -769,7 +769,7 @@ module RnisAPI_TypesAndValues { AssociateId associateId, ErabId erabId, ErabQosParameters erabQosParameters, - Link links optional + Links links optional } with { variant (links) "name as '_links'"; } @@ -790,7 +790,7 @@ module RnisAPI_TypesAndValues { Ecgi ecgi, AssociateId associateId, ErabReleaseInfo erabReleaseInfo, - Link links optional + Links links optional } with { variant (links) "name as '_links'"; } @@ -840,7 +840,7 @@ module RnisAPI_TypesAndValues { Json.Integer heightUe optional, NewRadioMeasInfo newRadioMeasInfo optional, NewRadioMeasNeiInfo newRadioMeasNeiInfo optional, - Link links optional + Links links optional } with { variant (trigger_) "name as 'trigger'"; variant (links) "name as '_links'"; @@ -1015,7 +1015,7 @@ module RnisAPI_TypesAndValues { Ecgi ecgi, AssociateId associateId, Json.Integer timingAdvance optional, - Link links optional + Links links optional } with { variant (links) "name as '_links'"; } @@ -1041,7 +1041,7 @@ module RnisAPI_TypesAndValues { SecondaryCellRemove secondaryCellRemove optional, CarrierAggregationMeasInfo_CaReconfNotification carrierAggregationMeasInfo optional, - Link links optional + Links links optional } with { variant (links) "name as '_links'"; } @@ -1096,7 +1096,7 @@ module RnisAPI_TypesAndValues { type record ExpiryNotification { Json.String notificationType, TimeStamp timeStamp optional, - Link links optional + Links links optional } with { variant (links) "name as '_links'"; } @@ -1115,7 +1115,7 @@ module RnisAPI_TypesAndValues { TimeStamp timeStamp optional, EventType s1Event, S1UeInfo_ s1UeInfo, - Link links optional + Links links optional } with { variant (links) "name as '_links'"; } @@ -1141,7 +1141,7 @@ module RnisAPI_TypesAndValues { NrNeighCellMeasInfo nrNeighCellMeasInfo optional, EutraNeighbourCellMeasInfo_NrMeasRepUeNotification_ eutraNeighCellMeasInfo optional, - Link links optional + Links links optional } with { variant (links) "name as '_links'"; } @@ -1217,7 +1217,7 @@ module RnisAPI_TypesAndValues { */ type record TestNotification { Json.String notificationType, - Link links optional + Links links optional } with { variant (links) "name as '_links'"; } diff --git a/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Templates.ttcn b/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Templates.ttcn index 4459508..69f6243 100644 --- a/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Templates.ttcn +++ b/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Templates.ttcn @@ -24,104 +24,100 @@ module V2XInformationServiceAPI_Templates { in template (value) ProInfoUuUnicastList p_proInfoUuUnicast, in template (omit) TimeStamp p_timeStamp := omit ) := { - proInfoUuUnicast := p_proInfoUuUnicast, - timeStamp := p_timeStamp + timeStamp := p_timeStamp, + proInfoUuUnicast := p_proInfoUuUnicast } // End of template m_uu_unicast_provisioning_info template (present) UuUnicastProvisioningInfo mw_uu_unicast_provisioning_info( template (present) ProInfoUuUnicastList p_proInfoUuUnicast := ?, template TimeStamp p_timeStamp := * ) := { - proInfoUuUnicast := p_proInfoUuUnicast, - timeStamp := p_timeStamp + timeStamp := p_timeStamp, + proInfoUuUnicast := p_proInfoUuUnicast } // End of template mw_uu_unicast_provisioning_info template (omit) UuMbmsProvisioningInfo m_uu_mbms_provisioning_info( in template (value) ProInfoUuMbmsList p_proInfoUuMbms, in template (omit) TimeStamp p_timeStamp := omit ) := { - proInfoUuMbms := p_proInfoUuMbms, - timeStamp := p_timeStamp + timeStamp := p_timeStamp, + proInfoUuMbms := p_proInfoUuMbms } // End of template m_uu_mbms_provisioning_info template (present) UuMbmsProvisioningInfo mw_uu_mbms_provisioning_info( template (present) ProInfoUuMbmsList p_proInfoUuMbms := ?, template TimeStamp p_timeStamp := * ) := { - proInfoUuMbms := p_proInfoUuMbms, - timeStamp := p_timeStamp + timeStamp := p_timeStamp, + proInfoUuMbms := p_proInfoUuMbms } // End of template mw_uu_mbms_provisioning_info template (omit) Pc5ProvisioningInfo m_pc5_provisioning_info( in template (value) Pc5ProvisioningInfoProInfoPc5List p_proInfoPc5, in template (omit) TimeStamp p_timeStamp := omit ) := { - proInfoPc5 := p_proInfoPc5, - timeStamp := p_timeStamp + timeStamp := p_timeStamp, + proInfoPc5 := p_proInfoPc5 } // End of template m_pc5_provisioning_info template (present) Pc5ProvisioningInfo mw_pc5_provisioning_info( template (present) Pc5ProvisioningInfoProInfoPc5List p_proInfoPc5 := ?, template TimeStamp p_timeStamp := * ) := { - proInfoPc5 := p_proInfoPc5, - timeStamp := p_timeStamp + timeStamp := p_timeStamp, + proInfoPc5 := p_proInfoPc5 } // End of template mw_pc5_provisioning_info template (omit) PredictedQos m_predicted_qos( + in template (value) PredictionTarget p_predictionTarget, in template (value) Json.String p_locationGranularity, - in template (value) PredictedQosRoutesList p_routes, + in template (value) Qos p_qos, + in template (omit) TimeStamp p_noticePeriod := omit, + in template (omit) PredictionArea p_predictionArea := omit, + in template (omit) Routes p_routes := omit, in template (omit) TimeStamp p_timeGranularity := omit ) := { + predictionTarget := p_predictionTarget, timeGranularity := p_timeGranularity, locationGranularity := p_locationGranularity, - routes := p_routes + noticePeriod := p_noticePeriod, + predictionArea := p_predictionArea, + routes := p_routes, + qos := p_qos } // End of template m_predicted_qos template PredictedQos mw_predicted_qos( + template (present) PredictionTarget p_predictionTarget := ?, template (present) Json.String p_locationGranularity := ?, - template (present) PredictedQosRoutesList p_routes := ?, + template (present) Qos p_qos := ?, + template TimeStamp p_noticePeriod := *, + template PredictionArea p_predictionArea := *, + template Routes p_routes := *, template TimeStamp p_timeGranularity := * - ) := { + ) := { + predictionTarget := p_predictionTarget, timeGranularity := p_timeGranularity, locationGranularity := p_locationGranularity, - routes := p_routes + noticePeriod := p_noticePeriod, + predictionArea := p_predictionArea, + routes := p_routes, + qos := p_qos } // End of template mw_predicted_qos - template (value) PredictedQosRoutes m_predicted_qos_routes( - in template (value) RouteInfoList p_routeinfo - ) := { - routeinfo := p_routeinfo - } // End of template m_predicted_qos_routes - - template (present) PredictedQosRoutes mw_predicted_qos_routes( - template (present) RouteInfoList p_routeinfo := ? - ) := { - routeinfo := p_routeinfo - } // End of template mw_predicted_qos_routes - template (omit) RouteInfo m_route_info( in template (value) LocationInfo p_location, - in template (omit) TimeStamp p_time := omit, - in template (omit) Json.UInt8 p_rsrp := omit, - in template (omit) Json.UInt8 p_rsrq := omit + in template (omit) TimeStamp p_time := omit ) := { location := p_location, - time := p_time, - rsrp := p_rsrp, - rsrq := p_rsrq + time := p_time } // End of template m_route_info template RouteInfo mw_route_info( template (present) LocationInfo p_location := ?, - template TimeStamp p_time := *, - template Json.UInt8 p_rsrp := *, - template Json.UInt8 p_rsrq := * + template TimeStamp p_time := * ) := { location := p_location, - time := p_time, - rsrp := p_rsrp, - rsrq := p_rsrq + time := p_time } // End of template mw_route_info template (omit) LocationInfo m_location_info( @@ -160,20 +156,20 @@ module V2XInformationServiceAPI_Templates { in Json.String p_cellId, in template (value) Plmn p_plmn ) := { + plmn := p_plmn, cellId := { cellId := p_cellId - }, - plmn := p_plmn + } } // End of template m_ecgi template (present) Ecgi mw_ecgi( template (present) Json.String p_cellId := ?, template (present) Plmn p_plmn := ? ) := { + plmn := p_plmn, cellId := { cellId := p_cellId - }, - plmn := p_plmn + } } // End of template mw_ecgi template (value) Plmn m_plmn( @@ -193,66 +189,68 @@ module V2XInformationServiceAPI_Templates { } // End of template mw_plmn template (value) V2xMsgPublication m_v2x_message( - in Json.String p_msgContent := "AgIAEPQ9JwVAWXGJVq3AIK5gAgAgADDUHgAAASAWhAMQpQcz/+H/+gAQAA==", - in Json.String p_msgEncodeFormat := "base64", - in MsgType p_msgType := cam, - in StdOrganization p_stdOrganization := ETSI + in template (value) V2xMsgPropertiesValues p_msgPropertiesValues, + in Json.String p_msgRepresentationFormat := "base64", + in Json.String p_msgContent := "AgIAEPQ9JwVAWXGJVq3AIK5gAgAgADDUHgAAASAWhAMQpQcz/+H/+gAQAA==" ) := { - msgContent := p_msgContent, - msgEncodeFormat := p_msgEncodeFormat, - msgType := p_msgType, - stdOrganization := p_stdOrganization + msgPropertiesValues := p_msgPropertiesValues, + msgRepresentationFormat := p_msgRepresentationFormat, + msgContent := p_msgContent } // End of template m_v2x_message template (present) V2xMsgPublication mw_v2x_message( - template (present) Json.String p_msgContent := ?, - template (present) Json.String p_msgEncodeFormat := "base64", - template (present) MsgType p_msgType := ?, - template (present) StdOrganization p_stdOrganization := ETSI + template (present) V2xMsgPropertiesValues p_msgPropertiesValues := ?, + template (present) Json.String p_msgRepresentationFormat := ?, + template (present) Json.String p_msgContent := ? ) := { - msgContent := p_msgContent, - msgEncodeFormat := p_msgEncodeFormat, - msgType := p_msgType, - stdOrganization := p_stdOrganization + msgPropertiesValues := p_msgPropertiesValues, + msgRepresentationFormat := p_msgRepresentationFormat, + msgContent := p_msgContent } // End of template mw_v2x_message template (omit) ProvChgUuUniSubscription m_prov_chg_uu_uni_subscription( - in template (value) Json.AnyURI p_callbackReference, in template (value) ProvChgUuUniSubscriptionFilterCriteria p_filterCriteria, - in template (omit) LinkType p_links := omit, + in template (omit) Json.AnyURI p_callbackReference := omit, + in template (omit) Links p_links := omit, + in template (omit) Json.Bool p_requestTestNotification := omit, + in template (omit) WebsockNotifConfig p_websockNotifConfig := omit, in template (omit) TimeStamp p_expiryDeadline := omit ) := { - links := p_links, - callbackReference := p_callbackReference, - expiryDeadline := p_expiryDeadline, - filterCriteria := p_filterCriteria, - subscriptionType := "ProvChgUuUniSubscription" + subscriptionType := "ProvChgUuUniSubscription", + callbackReference := p_callbackReference, + requestTestNotification := p_requestTestNotification, + websockNotifConfig := p_websockNotifConfig, + links := p_links, + filterCriteria := p_filterCriteria, + expiryDeadline := p_expiryDeadline } // End of template m_prov_chg_uu_uni_subscription template (omit) ProvChgUuUniSubscription m_prov_chg_uu_uni_subscription_invalid( - in template (value) Json.AnyURI p_callbackReference, in template (value) ProvChgUuUniSubscriptionFilterCriteria p_filterCriteria, - in template (omit) LinkType p_links := omit, + in template (omit) Json.AnyURI p_callbackReference := omit, + in template (omit) Links p_links := omit, + in template (omit) Json.Bool p_requestTestNotification := omit, + in template (omit) WebsockNotifConfig p_websockNotifConfig := omit, in template (omit) TimeStamp p_expiryDeadline := omit - ) := { - links := p_links, - callbackReference := p_callbackReference, - expiryDeadline := p_expiryDeadline, - filterCriteria := p_filterCriteria, - subscriptionType := "InvalidProvChgUuUniSubscription" + ) modifies m_prov_chg_uu_uni_subscription := { + subscriptionType := "InvalidProvChgUuUniSubscription" } // End of template m_prov_chg_uu_uni_subscription template ProvChgUuUniSubscription mw_prov_chg_uu_uni_subscription( - template (present) Json.AnyURI p_callbackReference := ?, template (present) ProvChgUuUniSubscriptionFilterCriteria p_filterCriteria := ?, - template LinkType p_links := *, + template Json.AnyURI p_callbackReference := *, + template Links p_links := *, + template Json.Bool p_requestTestNotification := *, + template WebsockNotifConfig p_websockNotifConfig := *, template TimeStamp p_expiryDeadline := * ) := { - links := p_links, - callbackReference := p_callbackReference, - expiryDeadline := p_expiryDeadline, - filterCriteria := p_filterCriteria, - subscriptionType := "ProvChgUuUniSubscription" + subscriptionType := "ProvChgUuUniSubscription", + callbackReference := p_callbackReference, + requestTestNotification := p_requestTestNotification, + websockNotifConfig := p_websockNotifConfig, + links := p_links, + filterCriteria := p_filterCriteria, + expiryDeadline := p_expiryDeadline } // End of template mw_prov_chg_uu_uni_subscription template (omit) ProvChgUuUniSubscriptionFilterCriteria m_prov_chg_uu_uni_filter_criteria( @@ -261,8 +259,8 @@ module V2XInformationServiceAPI_Templates { in template (omit) UuMbmsNeighbourCellInfoList p_neighbourCellInfo := omit ) := { locationInfo := p_location_info, - neighbourCellInfo := p_neighbourCellInfo, - v2xApplicationServer := p_v2xApplicationServer + v2xApplicationServer := p_v2xApplicationServer, + neighbourCellInfo := p_neighbourCellInfo } // End of template m_prov_chg_uu_uni_filter_criteria template ProvChgUuUniSubscriptionFilterCriteria mw_prov_chg_uu_uni_filter_criteria( @@ -271,8 +269,8 @@ module V2XInformationServiceAPI_Templates { template UuMbmsNeighbourCellInfoList p_neighbourCellInfo := * ) := { locationInfo := p_location_info, - neighbourCellInfo := p_neighbourCellInfo, - v2xApplicationServer := p_v2xApplicationServer + v2xApplicationServer := p_v2xApplicationServer, + neighbourCellInfo := p_neighbourCellInfo } // End of template mw_prov_chg_uu_uni_filter_criteria template (value) V2xApplicationServer m_v2x_application_server( @@ -280,7 +278,7 @@ module V2XInformationServiceAPI_Templates { in Json.String p_udp_port ) := { ipAddress := p_ip_address, - udpPort := p_udp_port + udpPort := p_udp_port } // End of template m_v2x_application_server template (present) V2xApplicationServer mw_v2x_application_server( @@ -288,33 +286,41 @@ module V2XInformationServiceAPI_Templates { template (present) Json.String p_udp_port := ? ) := { ipAddress := p_ip_address, - udpPort := p_udp_port + udpPort := p_udp_port } // End of template mw_v2x_application_server template (omit) ProvChgUuMbmsSubscription m_prov_chg_uu_mbms_subscription( - in template (value) Json.AnyURI p_callbackReference, in template (value) ProvChgUuMbmsSubscriptionFilterCriteria p_filterCriteria, - in template (omit) LinkType p_links := omit, + in template (omit) Json.AnyURI p_callbackReference := omit, + in template (omit) Links p_links := omit, + in template (omit) Json.Bool p_requestTestNotification := omit, + in template (omit) WebsockNotifConfig p_websockNotifConfig := omit, in template (omit) TimeStamp p_expiryDeadline := omit ) := { - links := p_links, - callbackReference := p_callbackReference, - expiryDeadline := p_expiryDeadline, - filterCriteria := p_filterCriteria, - subscriptionType := "ProvChgUuMbmsSubscription" + subscriptionType := "ProvChgUuMbmsSubscription", + callbackReference := p_callbackReference, + requestTestNotification := p_requestTestNotification, + websockNotifConfig := p_websockNotifConfig, + links := p_links, + filterCriteria := p_filterCriteria, + expiryDeadline := p_expiryDeadline } // End of template m_prov_chg_uu_mbms_subscription template ProvChgUuMbmsSubscription mw_prov_chg_uu_mbms_subscription( - template (present) Json.AnyURI p_callbackReference := ?, template (present) ProvChgUuMbmsSubscriptionFilterCriteria p_filterCriteria := ?, - template LinkType p_links := *, + template Json.AnyURI p_callbackReference := *, + template Links p_links := *, + template Json.Bool p_requestTestNotification := *, + template WebsockNotifConfig p_websockNotifConfig := *, template TimeStamp p_expiryDeadline := * - ) := { - links := p_links, - callbackReference := p_callbackReference, - expiryDeadline := p_expiryDeadline, - filterCriteria := p_filterCriteria, - subscriptionType := "ProvChgUuMbmsSubscription" + ) := { + subscriptionType := "ProvChgUuMbmsSubscription", + callbackReference := p_callbackReference, + requestTestNotification := p_requestTestNotification, + websockNotifConfig := p_websockNotifConfig, + links := p_links, + filterCriteria := p_filterCriteria, + expiryDeadline := p_expiryDeadline } // End of template mw_prov_chg_uu_mbms_subscription template (omit) ProvChgUuMbmsSubscriptionFilterCriteria m_prov_chg_uu_mbms_filter_criteria( @@ -323,8 +329,8 @@ module V2XInformationServiceAPI_Templates { template (omit) UuMbmsNeighbourCellInfoList p_neighbourCellInfo := omit ) := { locationInfo := p_locationInfo, - neighbourCellInfo := p_neighbourCellInfo, - v2xServerUsd := p_v2xServerUsd + v2xServerUsd := p_v2xServerUsd, + neighbourCellInfo := p_neighbourCellInfo } // End of template m_prov_chg_uu_mbms_filter_criteria template (present) ProvChgUuMbmsSubscriptionFilterCriteria mw_prov_chg_uu_mbms_filter_criteria( @@ -333,8 +339,8 @@ module V2XInformationServiceAPI_Templates { template UuMbmsNeighbourCellInfoList p_neighbourCellInfo := * ) := { locationInfo := p_locationInfo, - neighbourCellInfo := p_neighbourCellInfo, - v2xServerUsd := p_v2xServerUsd + v2xServerUsd := p_v2xServerUsd, + neighbourCellInfo := p_neighbourCellInfo } // End of template mw_prov_chg_uu_mbms_filter_criteria template (value) V2xServerUsd m_v2x_server_usd( @@ -342,9 +348,9 @@ module V2XInformationServiceAPI_Templates { in template (value) SdpInfo p_sdpInfo, in template (value) Tmgi p_tmgi ) := { + tmgi := p_tmgi, serviceAreaIdentifier := p_serviceAreaIdentifier, - sdpInfo := p_sdpInfo, - tmgi := p_tmgi + sdpInfo := p_sdpInfo } // End of template m_v2x_server_usd template (present) V2xServerUsd mw_v2x_server_usd( @@ -352,9 +358,9 @@ module V2XInformationServiceAPI_Templates { template (present) SdpInfo p_sdpInfo := ?, template (present) Tmgi p_tmgi := ? ) := { + tmgi := p_tmgi, serviceAreaIdentifier := p_serviceAreaIdentifier, - sdpInfo := p_sdpInfo, - tmgi := p_tmgi + sdpInfo := p_sdpInfo } // End of template mw_v2x_server_usd template (value) SdpInfo m_sdp_info( @@ -394,29 +400,37 @@ module V2XInformationServiceAPI_Templates { } // End of template mw_tmgi template (omit) ProvChgPc5Subscription m_prov_chg_pc5_subscription( - in template (value) Json.AnyURI p_callbackReference, in template (value) FilterCriteria p_filterCriteria, - in template (omit) LinkType p_links := omit, + in template (omit) Json.AnyURI p_callbackReference := omit, + in template (omit) Links p_links := omit, + in template (omit) Json.Bool p_requestTestNotification := omit, + in template (omit) WebsockNotifConfig p_websockNotifConfig := omit, in template (omit) TimeStamp p_expiryDeadline := omit ) := { - links := p_links, - callbackReference := p_callbackReference, - expiryDeadline := p_expiryDeadline, - filterCriteria := p_filterCriteria, - subscriptionType := "ProvChgPc5Subscription" + subscriptionType := "ProvChgPc5Subscription", + callbackReference := p_callbackReference, + requestTestNotification := p_requestTestNotification, + websockNotifConfig := p_websockNotifConfig, + links := p_links, + filterCriteria := p_filterCriteria, + expiryDeadline := p_expiryDeadline } // End of template m_prov_chg_pc5_subscription template (present) ProvChgPc5Subscription mw_prov_chg_pc5_subscription( - template (present) Json.AnyURI p_callbackReference := ?, template (present) FilterCriteria p_filterCriteria := ?, - template LinkType p_links := *, + template Json.AnyURI p_callbackReference := *, + template Links p_links := *, + template Json.Bool p_requestTestNotification := *, + template WebsockNotifConfig p_websockNotifConfig := *, template TimeStamp p_expiryDeadline := * ) := { - links := p_links, - callbackReference := p_callbackReference, - expiryDeadline := p_expiryDeadline, - filterCriteria := p_filterCriteria, - subscriptionType := "ProvChgPc5Subscription" + subscriptionType := "ProvChgPc5Subscription", + callbackReference := p_callbackReference, + requestTestNotification := p_requestTestNotification, + websockNotifConfig := p_websockNotifConfig, + links := p_links, + filterCriteria := p_filterCriteria, + expiryDeadline := p_expiryDeadline } // End of template mw_prov_chg_pc5_subscription template (omit) FilterCriteria m_filter_criteria( @@ -424,8 +438,8 @@ module V2XInformationServiceAPI_Templates { in template (value) LocationInfo p_locationInfo, in template (omit) Pc5NeighbourCellInfoList p_neighbourCellInfo := omit ) := { - dstLayer2Id := p_dstLayer2Id, locationInfo := p_locationInfo, + dstLayer2Id := p_dstLayer2Id, neighbourCellInfo := p_neighbourCellInfo } // End of template m_filter_criteria @@ -434,51 +448,67 @@ module V2XInformationServiceAPI_Templates { template (present) LocationInfo p_locationInfo := ?, template Pc5NeighbourCellInfoList p_neighbourCellInfo := * ) := { - dstLayer2Id := p_dstLayer2Id, locationInfo := p_locationInfo, + dstLayer2Id := p_dstLayer2Id, neighbourCellInfo := p_neighbourCellInfo } // End of template mw_filter_criteria template (omit) V2xMsgSubscription m_v2x_msg_subscription( - in template (value) Json.AnyURI p_callbackReference, - in template (value) V2xMsgSubscriptionFilterCriteria p_filterCriteria, - in template (omit) LinkType p_links := omit, + in template (value) V2xMsgFilterCriteria p_filterCriteria, + in template (omit) Json.AnyURI p_callbackReference := omit, + in template (omit) Links p_links := omit, + in template (omit) Json.Bool p_requestTestNotification := omit, + in template (omit) WebsockNotifConfig p_websockNotifConfig := omit, in template (omit) TimeStamp p_expiryDeadline := omit ) := { - links := p_links, - callbackReference := p_callbackReference, - expiryDeadline := p_expiryDeadline, - filterCriteria := p_filterCriteria, - subscriptionType := "V2xMsgSubscription" + subscriptionType := "V2xMsgSubscription", + callbackReference := p_callbackReference, + requestTestNotification := p_requestTestNotification, + websockNotifConfig := p_websockNotifConfig, + links := p_links, + filterCriteria := p_filterCriteria, + expiryDeadline := p_expiryDeadline } // End of template m_v2x_msg_subscription template (present) V2xMsgSubscription mw_v2x_msg_subscription( - template (present) Json.AnyURI p_callbackReference := ?, - template (present) V2xMsgSubscriptionFilterCriteria p_filterCriteria := ?, - template LinkType p_links := *, + template (present) V2xMsgFilterCriteria p_filterCriteria := ?, + template Json.AnyURI p_callbackReference := *, + template Links p_links := *, + template Json.Bool p_requestTestNotification := *, + template WebsockNotifConfig p_websockNotifConfig := *, template TimeStamp p_expiryDeadline := * ) := { - links := p_links, - callbackReference := p_callbackReference, - expiryDeadline := p_expiryDeadline, - filterCriteria := p_filterCriteria, - subscriptionType := "V2xMsgSubscription" + subscriptionType := "V2xMsgSubscription", + callbackReference := p_callbackReference, + requestTestNotification := p_requestTestNotification, + websockNotifConfig := p_websockNotifConfig, + links := p_links, + filterCriteria := p_filterCriteria, + expiryDeadline := p_expiryDeadline } // End of template mw_v2x_msg_subscription - template (omit) V2xMsgSubscriptionFilterCriteria m_v2x_msg_subscription_filter_criteria( - in StdOrganization p_stdOrganization := ETSI, - in template (omit) MsgTypeList p_msgType := { cam, denm } - ) := { - msgType := p_msgType, - stdOrganization := p_stdOrganization + template (omit) V2xMsgFilterCriteria m_v2x_msg_subscription_filter_criteria( + in StdOrganization p_stdOrganization := ETSI, + in template (omit) MsgTypeList p_msgType := { cam, denm }, + in template (omit) MsgProtocolVersionList p_msgProtocolVersion := omit, + in template (omit) LocationInfoList p_locationInfo := omit + ) := { + stdOrganization := p_stdOrganization, + msgType := p_msgType, + msgProtocolVersion := p_msgProtocolVersion, + locationInfo := p_locationInfo } // End of template m_v2x_msg_subscription_filter_criteria - template (present) V2xMsgSubscriptionFilterCriteria mw_v2x_msg_subscription_filter_criteria( - template (present) StdOrganization p_stdOrganization := ETSI, - template MsgTypeList p_msgType := * - ) := { - msgType := p_msgType, - stdOrganization := p_stdOrganization + template (present) V2xMsgFilterCriteria mw_v2x_msg_subscription_filter_criteria( + template (present) StdOrganization p_stdOrganization := ETSI, + template MsgTypeList p_msgType := *, + template MsgProtocolVersionList p_msgProtocolVersion := *, + template LocationInfoList p_locationInfo := * + ) := { + stdOrganization := p_stdOrganization, + msgType := p_msgType, + msgProtocolVersion := p_msgProtocolVersion, + locationInfo := p_locationInfo } // End of template mw_v2x_msg_subscription_filter_criteria } // End of module V2XInformationServiceAPI_Templates diff --git a/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_TypesAndValues.ttcn b/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_TypesAndValues.ttcn index ffb8c99..cd235c9 100644 --- a/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_TypesAndValues.ttcn @@ -2,7 +2,7 @@ * @author ETSI / TTF T012 * @version $Url$ * $Id$ - * @desc Types ANd Values for ETSI GS MEC 030 V2.1.1 (2020-04) + * @desc Types And Values for ETSI GS MEC 030 V3.1.1 (2023-03) * @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. @@ -14,488 +14,766 @@ module V2XInformationServiceAPI_TypesAndValues { import from Json all; /** - * @desc E-UTRAN Cell Identity as a bit string (size (28)) - * @see ETSI TS 136 413 - */ - type record CellId { - Json.String cellId - } - - /** - * @desc E-UTRA Absolute Radio Frequency Channel Number, range (0... 65535) - * @see ETSI TS 136 413 - */ - type UInt16 Earfcn; - - /** - * @desc Transmission Bandwidth, which is used to indicate the UL or DL transmission bandwidth expressed in units of resource blocks - * @see ETSI TS 136 413 - */ - type enumerated TransmissionBandwidth { - bw6 (1), - bw15 (2), - bw25 (3), - bw50 (4), - bw75 (6), - bw100 (7) - } with { - variant "JSON: as number" - } - - /** - * @desc E-UTRAN Cell Global Identifier - * @member cellId The E-UTRAN Cell Identity - * @member plmn Public Land Mobile Network Identity - * @see ETSI TS 136 413 - */ - type record Ecgi { - CellId cellId, - Plmn plmn - } - - /** - * @desc FDD information - * @member dlEarfcn Downlink E-UTRA Absolute Radio Frequency Channel Number - * @member dlTransmissionBandwidth Downlink Transmission Bandwidth - * @member ulEarfcn Uplink E-UTRA Absolute Radio Frequency Channel Number - * @member ulTransmissionBandwidth Uplink Transmission Bandwidth - * @see ETSI TS 136 413 + * @desc Provisioning information required for V2X communication over Uu unicast + * @member timeStamp_ Time stamp + * @member proInfoUuUnicast The provisioning information per location + * @see ETSI GS MEC 030 V3.1.1 (2023-03) V3.1.1 (2023-03) Table 6.2.2-1: Attributes of the UuUnicastProvisioningInfo */ - type record FddInfo { - Earfcn dlEarfcn, - TransmissionBandwidth dlTransmissionBandwidth, - Earfcn ulEarfcn, - TransmissionBandwidth ulTransmissionBandwidth + type record UuUnicastProvisioningInfo { + TimeStamp timeStamp optional, + ProInfoUuUnicastList proInfoUuUnicast } /** - * @desc The seconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC - */ - type Json.UInteger Seconds; - - /** - * @desc The nanoseconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC - */ - type Json.UInteger NanoSeconds; - - /** - * @desc Time stamp description - * @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 MEC030 Clause 6.5.2 Type: TimeStamp + * @desc The provisioning information per location as defined below + * @member locationInfo Location information to identify a cell of a base station or a particular geographical area + * @member neighbourCellInfoThe information of the neighbour cells in a visiting PLMN that support V2X communication over Uu unicast + * @member v2xApplicationServer V2X Application Server address (consisting of IP address and UDP port) for unicast + * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.2.2-1: Attributes of the UuUnicastProvisioningInfo */ - type record TimeStamp { - Seconds seconds, - NanoSeconds nanoSeconds + type record ProInfoUuUnicast { + LocationInfo locationInfo, + V2xApplicationServer v2xApplicationServer, + UuUniNeighbourCellInfoList neighbourCellInfo optional } + type record of ProInfoUuUnicast ProInfoUuUnicastList; /** - * @desc Information of a geographical area - * @member latitude Latitude (DATUM = WGS84) -90 to 90 in decimal degree format DDD.ddd - * @member longitude Longitude (DATUM = WGS84)-180 to 180 in decimal degree format DDD.ddd - * @see MEC030 Clause 6.5.3 Type: LocationInfo + * @desc Provisioning information required for V2X communication over Uu MBMS + * @member proInfoUuMbms The provisioning information per location as defined below + * @member timeStamp_ TimeStamp + * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.2.3-1: Attributes of the UuMbmsProvisioningInfo */ - type record LocationInfoGeoArea { - Json.Number latitude, - Json.Number longitude + type record UuMbmsProvisioningInfo { + TimeStamp timeStamp optional, + ProInfoUuMbmsList proInfoUuMbms } /** - * @desc Location information - * @member ecgi E-UTRAN CelI Global Identifier of the serving cell - * @member geoArea Information of a geographical area - * @see MEC030 Clause 6.5.3 Type: LocationInfo + * @desc The provisioning information per location + * @member locationInfo Location information to identify a cell of a base station or a particular geographical area + * @member neighbourCellInfo The information of the neighbour cells in a visiting PLMN that support V2X communication over Uu MBMS + * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.2.3-1: Attributes of the UuMbmsProvisioningInfo */ - type record LocationInfo { - Ecgi ecgi, - LocationInfoGeoArea geoArea optional + type record ProInfoUuMbms { + LocationInfo locationInfo, + UuMbmsNeighbourCellInfoList neighbourCellInfo optional, + V2xServerUsd v2xServerUsd } - type record of LocationInfo LocationInfoList; + type record of ProInfoUuMbms ProInfoUuMbmsList; /** - * @desc Location information - * @member ecgi E-UTRAN CelI Global Identifier - * @member plmn Public Land Mobile Network Identity - * @member siV2xConfig V2X sidelink communication configuration, as defined in ETSI TS 136 331 - * @see MEC030 Clause 6.5.12 Type: Pc5NeighbourCellInfo + * @desc Provisioning information required for V2X communication over PC5 + * @member proInfoPc5 The provisioning information per location + * @member timeStamp Time stamp + * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.2.4-1: Attributes of the Pc5ProvisioningInfo */ - type record Pc5NeighbourCellInfo { - Ecgi ecgi, - Plmn plmn, - Json.String siV2xConfig + type record Pc5ProvisioningInfo { + TimeStamp timeStamp optional, + Pc5ProvisioningInfoProInfoPc5List proInfoPc5 } - type record of Pc5NeighbourCellInfo Pc5NeighbourCellInfoList; /** * @desc The provisioning information per location - * @member dstLayer2Id For sidelink communication, the Destination Layer-2 ID is set to the ProSe Layer-2 Group ID or Prose UE ID * @member locationInfo Location information to identify a cell of a base station or a particular geographical area + * @member dstLayer2Id For sidelink communication, the Destination Layer-2 ID is set to the ProSe Layer-2 Group ID or Prose UE ID * @member neighbourCellInfo The information of the neighbour cells in a visiting PLMN that support V2X communication over PC5 - * @see MEC030 Clause 6.2.4 Type: Pc5ProvisioningInfo + * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.2.4-1: Attributes of the Pc5ProvisioningInfo */ type record Pc5ProvisioningInfoProInfoPc5 { - Json.String dstLayer2Id, LocationInfo locationInfo, + Json.String dstLayer2Id, Pc5NeighbourCellInfoList neighbourCellInfo optional } type record of Pc5ProvisioningInfoProInfoPc5 Pc5ProvisioningInfoProInfoPc5List; /** - * @desc Provisioning information required for V2X communication over PC5 - * @member proInfoPc5 The provisioning information per location - * @member timeStamp Time stamp - * @see MEC030 Clause 6.5.12 Type: Pc5NeighbourCellInfo + * @desc This type represents the information of one or more V2X Message Distribution Servers that is exchanged between the VIS and a service consumer (e.g. a MEC application) to enable a direct interaction among the service consumer and one or multiple V2X Message Distribution Servers + * @member v2xMsgDistributionServer Describes the information of the V2X Message Distribution Servers supported by the service consumer for direct communication + * @member locationInfo Location information to identify a particular geographical area of interest to the service consumer for receiving V2X messages + * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.2.5-1: Attributes of the V2xMsgDistributionServerInfo */ type record Pc5ProvisioningInfo { - Pc5ProvisioningInfoProInfoPc5List proInfoPc5, - TimeStamp timeStamp optional + V2xMsgDistributionServer v2xMsgDistributionServer, + LocationInfo locationInfo optional } /** - * @desc PLMN Identity - * @member mcc The Mobile Country Code part of PLMN Identity - * @member mnc The Mobile Network Code part of PLMN Identity - * @see MEC030 Clause 6.5.4 Type: Plmn + * @desc Predicted QoS of a vehicular UE + * @member predictionTarget Indicates target of QoS prediction + * @member timeGranularity Granularity of visited location. Measured in meters + * @member locationGranularity Granularity of visited location. Measured in meters + * @member noticePeriod Information on when the predicted QoS is needed at the service consumer interface + * @member predictionArea Geographical area including the two ends of the user plane link between two V2X application instances + * @member routes Information relating to the potential routes of a vehicular UE + * @member qos Predicted QoS at the related time and vehicular UE location + * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.2.6-1: Attributes of the PredictedQos */ - type record Plmn { - Json.String mcc, - Json.String mnc + type record PredictedQos { + PredictionTarget predictionTarget, + TimeStamp timeGranularity optional, + Json.String locationGranularity, + TimeStamp noticePeriod optional, + PredictionArea predictionArea optional, + Routes routes optional, + Qos qos + } + + type enumerated PredictionTarget { + SINGLE_UE_PREDICTION (1), + E2E_APPLICATION_INSTANCE_PREDICTION (2) + } with { + variant "JSON: as number" } /** - * @desc Information relating to a specific route - * @member location Vehicular UE location - * @member time Estimated time at the location - * @member rsrp Reference Signal Received Quality as defined in ETSI TS 136 214 - * @member rsrq Reference Signal Received Quality as defined in ETSI TS 136 214 [i.13]. Shall only be included in the response - * @see MEC030 Clause 6.2.5 Type: PredictedQos + * @desc Geographical area including the two ends of the user plane link between two V2X application instances + * @member center Center of geographical area including the two ends of the user plane link between two V2X application instances + * @member radius Radius of geographical area including the two ends of the user plane link between two V2X application instances. Measured in meters + * @member + * @member + * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.2.6-1: Attributes of the PredictedQos */ - type record RouteInfo { - LocationInfo location, - TimeStamp time optional, - Json.UInt8 rsrp optional, - Json.UInt8 rsrq optional + type record PredictionArea { + LocationInfo center, + Json.String radius } - type record of RouteInfo RouteInfoList; /** * @desc Information relating to the potential routes of a vehicular UE * @member routeinfo Information relating to a specific route - * @see MEC030 Clause 6.2.5 Type: PredictedQos + * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.2.6-1: Attributes of the PredictedQos */ - type record PredictedQosRoutes { + type record Route { RouteInfoList routeinfo } - type record of PredictedQosRoutes PredictedQosRoutesList; + type record of Route Routes; /** - * @desc Predicted QoS of a vehicular UE - * @member timeGranularity Granularity of visited location. Measured in meters - * @member locationGranularity Granularity of visited location. Measured in meters - * @member routes Information relating to the potential routes of a vehicular UE - * @see MEC030 Clause 6.2.5 Type: PredictedQos + * @desc Information relating to a specific route + * @member location Vehicular UE location + * @member time Estimated time at the location + * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.2.6-1: Attributes of the PredictedQos */ - type record PredictedQos { - TimeStamp timeGranularity optional, - Json.String locationGranularity, - PredictedQosRoutesList routes + type record RouteInfo { + LocationInfo location, + TimeStamp time optional } + type record of RouteInfo RouteInfoList; /** - * @desc Notification from VIS with regards to the provisioning information changes for V2X communication over PC5 - * @member dstLayer2Id For sidelink communication, the Destination Layer-2 ID is set to the ProSe Layer-2 Group ID or Prose UE ID - * @member locationInfo Location information to identify a cell of a base station or a particular geographical area - * @member neighbourCellInfo The information of the neighbour cells in a visiting PLMN that support V2X communication over PC5 - * @member notificationType Shall be set to "ProvChgPc5Notification" - * @see MEC030 Clause 6.4.4 Type: ProvChgPc5Notification + * @desc Predicted QoS at the related time and vehicular UE location + * @member stream Predicted QoS at the related time and vehicular UE location for the specific data stream + * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.2.6-1: Attributes of the PredictedQos */ - type record ProvChgPc5Notification { - Json.String dstLayer2Id optional, - LocationInfo locationInfo, - Pc5NeighbourCellInfoList neighbourCellInfo optional, - Json.String notificationType, - TimeStamp timeStamp optional + type record Qos { + StreamList stream } /** - * @desc Hyperlink related to the resource. This shall be only included in the HTTP responses and in HTTP PUT requests - * @member self_ Self-referring URI. The URI shall be unique within the VIS API as it acts as an ID for the subscription - * @see MEC030 Clause 6.3.4 Type: ProvChgPc5Subscription + * @desc Predicted QoS at the related time and vehicular UE location + * @member qosKpi This structure contains the prediction for a specific QoS KPI related to a given data stream + * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.2.6-1: Attributes of the PredictedQos */ - type record LinkType { - Json.AnyURI self_ - } with { - variant (self_) "name as 'self'"; + type record Stream { + QosKpiList qosKpi } + type record of Stream StreamList; /** - * @desc List of filtering criteria for the subscription. Any filtering criteria from below, which is included in the request, shall also be included in the response - * @member dstLayer2Id For sidelink communication, the Destination Layer-2 ID is set to the ProSe Layer-2 Group ID or Prose UE ID - * @member locationInfo Location information to identify a cell of a base station or a particular geographical area - * @member neighbourCellInfo The information of the neighbour cells in a visiting PLMN that support V2X communication over PC5 - * @see MEC030 Clause 6.3.4 Type: ProvChgPc5Subscription + * @desc This structure contains the prediction for a specific QoS KPI related to a given data stream + * @member kpiName The name of the KPI (e.g. latency, UL bitrate, etc.) + * @member kpiValue Information on the predicted value for the specific QoS KPI + * @member confidence Confidence of the prediction, as returned by the relevant domain PF + * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.2.6-1: Attributes of the PredictedQos */ - type record FilterCriteria { - Json.String dstLayer2Id, - LocationInfo locationInfo, - Pc5NeighbourCellInfoList neighbourCellInfo optional + type record QosKpi { + Json.String kpiName, + Json.String kpiValue, + Json.String confidence optional } + type record of QosKpi QosKpiList; /** - * @desc Subscription to the notifications from VIS about the provisioning information changes for V2X communication over PC5 - * @member links URI selected by the service consumer to receive notifications on the subscribed VIS information. This shall be included both in the request and in response - * @member callbackReference URI selected by the service consumer to receive notifications on the subscribed VIS information. This shall be included both in the request and in response - * @member expiryDeadline Time stamp + * @desc V2X message that a service consumer publishes to VIS + * @member msgPropertiesValues List of message properties that is associated to the V2X message publication that can be used for filtering messages at the reception of the V2X message + * @member msgRepresentationFormat The representation format of the binary V2X message, for example base64 or hexadecimal representation + * @member msgType Published V2X message content. Its format is defined by the standardization organization indicated by the attribute stdOrganization of the msgPropertiesValues attribute + * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.2.7-1: Attributes of the V2xMsgPublication + */ + type record V2xMsgPublication { + V2xMsgPropertiesValues msgPropertiesValues, + Json.String msgRepresentationFormat, + Json.String msgContent + } + + /** + * @desc Subscription to the notifications from VIS about the provisioning information changes for V2X communication over Uu unicast + * @member subscriptionType Shall be set to "ProvChgUuUniSubscription" + * @member callbackReference URI selected by the service consumer to receive notifications on the subscribed RNIS information + * @member requestTestNotification Shall be set to TRUE by the service consumer to request a test notification via HTTP on the callbackReference URI + * @member websockNotifConfig Provides details to negotiate and signal the use of a Websocket connection between RNIS and the service consumer for notifications + * @member links Hyperlink related to the resource * @member filterCriteria List of filtering criteria for the subscription - * @member subscriptionType Shall be set to "ProvChgPc5Subscription" - * @see MEC030 Clause 6.3.4 Type: ProvChgPc5Subscription + * @member expiryDeadline Time stamp + * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.3.2-1: Attributes of the ProvChgUuUniSubscription */ - type record ProvChgPc5Subscription { - LinkType links optional, - Json.AnyURI callbackReference, - TimeStamp expiryDeadline optional, - FilterCriteria filterCriteria, - Json.String subscriptionType + type record ProvChgUuUniSubscription { + Json.String subscriptionType, + CallbackReference callbackReference optional, + Json.Bool requestTestNotification optional, + WebsockNotifConfig websockNotifConfig optional, + Links links optional, + ProvChgUuUniSubscriptionFilterCriteria filterCriteria, + TimeStamp expiryDeadline optional } with { variant (links) "name as '_links'"; } /** - * @desc Notification from VIS with regards to the provisioning information changes for V2X communication over Uu MBMS - * @member locationInfo Location information to identify a cell of a base station or a particular geographical area - * @member The information of the neighbour cells in a visiting PLMN that support V2X communication over Uu MBMS - * @member notificationType Shall be set to "ProvChgUuMbmsNotification" - * @member timeStamp_ Time stamp - * @member v2xServerUsd User Service Description for V2X Application Server is used to configure the UE for receiving local V2X Application Server information when it is provided over MBMS - * @see MEC030 Clause 6.4.3 Type: ProvChgUuMbmsNotification + * @desc URI exposed by the client on which to receive notifications via HTTP */ - type record ProvChgUuMbmsNotification { - LocationInfo locationInfo, - UuMbmsNeighbourCellInfoList neighbourCellInfo optional, - Json.String notificationType, - TimeStamp timeStamp optional, - V2xServerUsd v2xServerUsd optional + type Json.AnyURI CallbackReference; + + /** + * @desc List of hyperlinks related to the resource + * @member self_ URI referring to a resource + * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.3.2-1: Attributes of the ProvChgUuUniSubscription + */ + type record Links { + LinkType self_ + } with { + variant (self_) "name as 'self'"; } /** - * @desc List of filtering criteria for the subscription + * @desc List of filtering criteria for the subscription. * @member locationInfo Location information to identify a cell of a base station or a particular geographical area + * @member v2xApplicationServer V2X Application Server address (consisting of IP address and UDP port) for unicast * @member neighbourCellInfo The information of the neighbour cells in a visiting PLMN that support V2X communication over Uu MBMS - * @member v2xServerUsd User Service Description for V2X Application Server is used to configure the UE for receiving local V2X Application Server information when it is provided over MBMS - * @see MEC030 Clause 6.3.3 Type: ProvChgUuMbmsSubscription + * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.3.2-1: Attributes of the ProvChgUuUniSubscription */ - type record ProvChgUuMbmsSubscriptionFilterCriteria { + type record ProvChgUuUniSubscriptionFilterCriteria { LocationInfo locationInfo, - UuMbmsNeighbourCellInfoList neighbourCellInfo optional, - V2xServerUsd v2xServerUsd + V2xApplicationServer v2xApplicationServer, + UuMbmsNeighbourCellInfoList neighbourCellInfo optional } /** * @desc Subscription to the notifications from VIS about the provisioning information changes for V2X communication over Uu MBMS - * @member links URI selected by the service consumer to receive notifications on the subscribed VIS information. This shall be included both in the request and in response - * @member callbackReferenceURI selected by the service consumer to receive notifications on the subscribed VIS information. This shall be included both in the request and in response - * @member expiryDeadline Time stamp - * @member filterCriteria List of filtering criteria for the subscription * @member subscriptionType Shall be set to "ProvChgUuMbmsSubscription" - * @see MEC030 Clause 6.3.3 Type: ProvChgUuMbmsSubscription + * @member callbackReference URI selected by the service consumer to receive notifications on the subscribed RNIS information + * @member requestTestNotification Shall be set to TRUE by the service consumer to request a test notification via HTTP on the callbackReference URI + * @member websockNotifConfig Provides details to negotiate and signal the use of a Websocket connection between RNIS and the service consumer for notifications + * @member links Hyperlink related to the resource + * @member filterCriteria List of filtering criteria for the subscription + * @member expiryDeadline Time stamp + * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.3.3-1: Attributes of the ProvChgUuMbmsSubscription */ type record ProvChgUuMbmsSubscription { - LinkType links optional, - Json.AnyURI callbackReference, - TimeStamp expiryDeadline optional, + Json.String subscriptionType, + CallbackReference callbackReference optional, + Json.Bool requestTestNotification optional, + WebsockNotifConfig websockNotifConfig optional, + Links links optional, ProvChgUuMbmsSubscriptionFilterCriteria filterCriteria, - Json.String subscriptionType + TimeStamp expiryDeadline optional } with { variant (links) "name as '_links'"; } /** - * @desc Notification from VIS with regards to the provisioning information changes for V2X communication over Uu unicast - * @member locationInfo Location information to identify a cell of a base station or a particular geographical area - * @member neighbourCellInfo The information of the neighbour cells in a visiting PLMN that support V2X communication over Uu unicast - * @member notificationType Shall be set to "ProvChgUuUniNotification" - * @member timeStamp_ Time stamp - * @member v2xApplicationServer V2X Application Server address (consisting of IP address and UDP port) for unicast - * @see MEC030 Clause 6.4.2 Type: ProvChgUuUniNotification - */ - type record ProvChgUuUniNotification { - LocationInfo locationInfo, - UuUniNeighbourCellInfoList neighbourCellInfo optional, - Json.String notificationType, - TimeStamp timeStamp optional, - V2xApplicationServer v2xApplicationServer optional - } - - /** - * @desc List of filtering criteria for the subscription. Any filtering criteria from below, which is included in the request, shall also be included in the response + * @desc List of filtering criteria for the subscription * @member locationInfo Location information to identify a cell of a base station or a particular geographical area + * @member v2xServerUsd User Service Description for V2X Application Server is used to configure the UE for receiving local V2X Application Server information when it is provided over MBMS * @member neighbourCellInfo The information of the neighbour cells in a visiting PLMN that support V2X communication over Uu MBMS - * @member v2xApplicationServer V2X Application Server address (consisting of IP address and UDP port) for unicast - * @see MEC030 Clause 6.3.3 Type: ProvChgUuMbmsSubscription + * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.3.3-1: Attributes of the ProvChgUuMbmsSubscription */ - type record ProvChgUuUniSubscriptionFilterCriteria { + type record ProvChgUuMbmsSubscriptionFilterCriteria { LocationInfo locationInfo, - UuMbmsNeighbourCellInfoList neighbourCellInfo optional, - V2xApplicationServer v2xApplicationServer + V2xServerUsd v2xServerUsd, + UuMbmsNeighbourCellInfoList neighbourCellInfo optional } /** - * @desc Subscription to the notifications from VIS about the provisioning information changes for V2X communication over Uu unicast - * @member links URI selected by the service consumer to receive notifications on the subscribed VIS information. This shall be included both in the request and in response - * @member callbackReferenceURI selected by the service consumer to receive notifications on the subscribed VIS information. This shall be included both in the request and in response - * @member expiryDeadline Time stamp + * @desc Subscription to the notifications from VIS about the provisioning information changes for V2X communication over PC5 + * @member subscriptionType Shall be set to "ProvChgPc5Subscription" + * @member callbackReference URI selected by the service consumer to receive notifications on the subscribed RNIS information + * @member requestTestNotification Shall be set to TRUE by the service consumer to request a test notification via HTTP on the callbackReference URI + * @member websockNotifConfig Provides details to negotiate and signal the use of a Websocket connection between RNIS and the service consumer for notifications + * @member links Hyperlink related to the resource * @member filterCriteria List of filtering criteria for the subscription - * @member subscriptionType Shall be set to "ProvChgUuUniSubscription" - * @see MEC030 Clause 6.3.2 Type: ProvChgUuUniSubscription + * @member expiryDeadline Time stamp + * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.3.4-1: Attributes of the ProvChgPc5Subscription */ - type record ProvChgUuUniSubscription { - LinkType links optional, - Json.AnyURI callbackReference, - TimeStamp expiryDeadline optional, - ProvChgUuUniSubscriptionFilterCriteria filterCriteria, - Json.String subscriptionType + type record ProvChgPc5Subscription { + Json.String subscriptionType, + CallbackReference callbackReference optional, + Json.Bool requestTestNotification optional, + WebsockNotifConfig websockNotifConfig optional, + Links links optional, + FilterCriteria filterCriteria, + TimeStamp expiryDeadline optional } with { variant (links) "name as '_links'"; } /** - * @desc The service consumers subscriptions - * @member href The URI referring to the subscription - * @member subscriptionType Type of the subscription. The values are as defined in the \"subscriptionType\" attribute for each different V2X information event subscription data type - * @see MEC030 Clause 6.3.6 Type: SubscriptionLinkList + * @desc List of filtering criteria for the subscription. Any filtering criteria from below, which is included in the request, shall also be included in the response + * @member locationInfo Location information to identify a cell of a base station or a particular geographical area + * @member dstLayer2Id For sidelink communication, the Destination Layer-2 ID is set to the ProSe Layer-2 Group ID or Prose UE ID + * @member neighbourCellInfo The information of the neighbour cells in a visiting PLMN that support V2X communication over PC5 + * @see ETSI GS MEC 030 V3.1.1 (2023-03) Clause 6.3.4 Type: ProvChgPc5Subscription */ - type record SubscriptionsLink_ { - Json.AnyURI href, - Json.String subscriptionType + type record FilterCriteria { + LocationInfo locationInfo, + Json.String dstLayer2Id, + Pc5NeighbourCellInfoList neighbourCellInfo optional } - type record of SubscriptionsLink_ SubscriptionLinkList_; /** - * @desc List of hyperlinks related to the resource - * @member self_ URI of this resource - * @member subscriptions The service consumer’s subscriptions - * @see MEC030 Clause 6.3.6 Type: SubscriptionLinkList + * @desc Subscription to notification of V2X message + * @member subscriptionType Shall be set to "V2xMsgSubscription" + * @member callbackReference URI selected by the service consumer to receive notifications on the subscribed RNIS information + * @member requestTestNotification Shall be set to TRUE by the service consumer to request a test notification via HTTP on the callbackReference URI + * @member websockNotifConfig Provides details to negotiate and signal the use of a Websocket connection between RNIS and the service consumer for notifications + * @member links Hyperlink related to the resource + * @member filterCriteria List of filtering criteria for the subscription + * @member expiryDeadline Time stamp + * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.3.5-1: Attributes of the V2xMsgSubscription */ - type record SubscriptionLinkList { - LinkType self_, - SubscriptionLinkList_ subscriptions + type record V2xMsgSubscription { + Json.String subscriptionType, + CallbackReference callbackReference optional, + Json.Bool requestTestNotification optional, + WebsockNotifConfig websockNotifConfig optional, + Links links optional, + V2xMsgFilterCriteria filterCriteria, + TimeStamp expiryDeadline optional } with { - variant (self_) "name as 'self'"; + variant (links) "name as '_links'"; + } + + /** + * @desc This type represents a subscription to notification of predicted QoS information + * @member subscriptionType Shall be set to "PredQosSubscription" + * @member callbackReference URI selected by the service consumer to receive notifications on the subscribed RNIS information + * @member requestTestNotification Shall be set to TRUE by the service consumer to request a test notification via HTTP on the callbackReference URI + * @member websockNotifConfig Provides details to negotiate and signal the use of a Websocket connection between RNIS and the service consumer for notifications + * @member links Hyperlink related to the resource + * @member filterCriteria List of filtering criteria for the subscription + * @member expiryDeadline Time stamp + * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.3.6-1: Attributes of the PredQosSubscription + */ + type record PredQosSubscription { + Json.String subscriptionType, + CallbackReference callbackReference optional, + Json.Bool requestTestNotification optional, + WebsockNotifConfig websockNotifConfig optional, + Links links optional, + QosPredFilterCriteria filterCriteria, + TimeStamp expiryDeadline optional + } with { + variant (links) "name as '_links'"; + } + + /** + * @desc This type represents a list of links related to currently existing subscriptions for the service consumer + * @member links Hyperlink related to the resource + * @member subscription The service consumer's subscriptions + * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.3.7-1: Attributes of the SubscriptionLinkList + */ + type record SubscriptionLinkList { + SubscriptionLinks links + } with { + variant (links) "name as '_links'"; + } + + /** + * @desc Hyperlink related to the resource + * @member self_ URI of this resource. + * @member subscription The service consumer's subscriptions + * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.3.7-1: Attributes of the SubscriptionLinkList + */ + type record SubscriptionLinks { + LinkType self_, + SubscriptionList subscription optional + } with { + variant (self_) "name as 'self'"; + } + + /** + * @desc A link to a subscription + * @member href The URI referring to the subscription. + * @member subscriptionType Type of subscription + * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.3.7-1: Attributes of the SubscriptionLinkList + */ + type record Subscription_ { + Json.AnyURI href, + Json.String subscriptionType + } + type record of Subscription_ SubscriptionList; + + /** + * @desc Notification from VIS with regards to the provisioning information changes for V2X communication over Uu unicast + * @member notificationType Shall be set to "ProvChgUuUniNotification" + * @member timeStamp_ Time stamp + * @member locationInfo Location information to identify a cell of a base station or a particular geographical area + * @member v2xApplicationServer V2X Application Server address (consisting of IP address and UDP port) for unicast + * @member neighbourCellInfo The information of the neighbour cells in a visiting PLMN that support V2X communication over Uu unicast + * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.4.2-1: Attributes of the ProvChgUuUniNotification + */ + type record ProvChgUuUniNotification { + Json.String notificationType, + TimeStamp timeStamp optional, + LocationInfo locationInfo, + V2xApplicationServer v2xApplicationServer optional, + UuUniNeighbourCellInfoList neighbourCellInfo optional + } + + /** + * @desc Notification from VIS with regards to the provisioning information changes for V2X communication over Uu MBMS + * @member notificationType Shall be set to "ProvChgUuMbmsNotification" + * @member timeStamp_ Time stamp + * @member locationInfo Location information to identify a cell of a base station or a particular geographical area + * @member v2xServerUsd User Service Description for V2X Application Server is used to configure the UE for receiving local V2X Application Server information when it is provided over MBMS + * @member neighbourCellInfo The information of the neighbour cells in a visiting PLMN that support V2X communication over Uu MBMS + * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.4.3-1: Attributes of the ProvChgUuMbmsNotification + */ + type record ProvChgUuMbmsNotification { + Json.String notificationType, + TimeStamp timeStamp optional, + LocationInfo locationInfo, + V2xServerUsd v2xServerUsd optional, + UuMbmsNeighbourCellInfoList neighbourCellInfo optional + } + + /** + * @desc Notification from VIS with regards to the provisioning information changes for V2X communication over PC5 + * @member notificationType Shall be set to "ProvChgPc5Notification" + * @member timeStamp_ Time stamp + * @member locationInfo Location information to identify a cell of a base station or a particular geographical area + * @member dstLayer2Id For sidelink communication, the Destination Layer-2 ID is set to the ProSe Layer-2 Group ID or Prose UE ID + * @member neighbourCellInfo The information of the neighbour cells in a visiting PLMN that support V2X communication over PC5 + * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.4.4-1: Attributes of the ProvChgPc5Notification + */ + type record ProvChgPc5Notification { + Json.String notificationType, + TimeStamp timeStamp optional, + LocationInfo locationInfo, + Json.String dstLayer2Id optional, + Pc5NeighbourCellInfoList neighbourCellInfo optional + } + + /** + * @desc Notification for informing the subscribers about the V2X message + * @member notificationType Shall be set to "V2xMsgNotification" + * @member timeStamp Time stamp + * @member msgPropertiesValues List of message properties that is associated to the V2X message + * @member msgRepresentationFormat The representation format of the binary V2X message, for example base64 or hexadecimal representation + * @member msgContent Published V2X message content. The format of the string is defined by the standardization organization + * @member links Link to resources related to this notification + * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.4.5-1: Attributes of the V2xMsgNotification + */ + type record V2xMsgNotification { + Json.String notificationType, + TimeStamp timeStamp, + V2xMsgPropertiesValues msgPropertiesValues, + Json.String msgRepresentationFormat, + Json.String msgContent, + Links_Notification links + } with { + variant (links) "name as '_links'"; + } + + /** + * @desc Link to resources related to this notification + * @member subscription A link to the related subscription + * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.4.5-1: Attributes of the V2xMsgNotification + */ + type record Links_Notification { + LinkType subscription + } + + /** + * @desc This type represents a notification from RNIS with regards to expiry of the existing subscription + * @member notificationType Shall be set to "TestNotification" + * @member links Hyperlink related to the resource + * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.4.6-1: Attributes of the TestNotification + */ + type record TestNotification { + Json.String notificationType, + Links_Notification links optional + } with { + variant (links) "name as '_links'"; + } + + /** + * @desc Time stamp description + * @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 030 V3.1.1 (2023-03) Table 6.5.2-1: Attributes of the 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 + * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.5.2-1: Attributes of the TimeStamp + */ + type Json.UInteger Seconds; + + /** + * @desc The nanoseconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC + * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.5.2-1: Attributes of the TimeStamp + */ + type Json.UInteger NanoSeconds; + + /** + * @desc Location information + * @member ecgi E-UTRAN CelI Global Identifier of the serving cell + * @member geoArea Information of a geographical area + * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.5.3-1: Attributes of the LocationInfo + */ + type record LocationInfo { + Ecgi ecgi, + LocationInfoGeoArea geoArea optional + } + type record of LocationInfo LocationInfoList; + + /** + * @desc Information of a geographical area + * @member latitude Latitude (DATUM = WGS84) -90 to 90 in decimal degree format DDD.ddd + * @member longitude Longitude (DATUM = WGS84)-180 to 180 in decimal degree format DDD.ddd + * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.5.3-1: Attributes of the LocationInfo + */ + type record LocationInfoGeoArea { + Json.Number latitude, + Json.Number longitude + } + + /** + * @desc PLMN Identity + * @member mcc The Mobile Country Code part of PLMN Identity + * @member mnc The Mobile Network Code part of PLMN Identity + * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.5.4-1: Attributes of the Plmn + */ + type record Plmn { + Json.String mcc, + Json.String mnc + } + + /** + * @desc E-UTRAN Cell Global Identifier + * @member plmn Public Land Mobile Network Identity + * @member cellId The E-UTRAN Cell Identity + * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.5.5-1: Attributes of the Ecgi + */ + type record Ecgi { + Plmn plmn, + CellId cellId + } + + /** + * @desc E-UTRAN Cell Identity as a bit string (size (28)) + * @see ETSI TS 136 413 + */ + type record CellId { + Json.String cellId + } + + /** + * @desc FDD information + * @member ulEarfcn Uplink E-UTRA Absolute Radio Frequency Channel Number + * @member dlEarfcn Downlink E-UTRA Absolute Radio Frequency Channel Number + * @member ulTransmissionBandwidth Uplink Transmission Bandwidth + * @member dlTransmissionBandwidth Downlink Transmission Bandwidth + * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.5.6-1: Attributes of the FddInfo + */ + type record FddInfo { + Earfcn ulEarfcn, + Earfcn dlEarfcn, + TransmissionBandwidth ulTransmissionBandwidth, + TransmissionBandwidth dlTransmissionBandwidth + } + + /** + * @desc E-UTRA Absolute Radio Frequency Channel Number, range (0... 65535) + * @see ETSI TS 136 413 + */ + type Json.UInt16 Earfcn; + + /** + * @desc Transmission Bandwidth, which is used to indicate the UL or DL transmission bandwidth expressed in units of resource blocks + * @see ETSI TS 136 413 + */ + type enumerated TransmissionBandwidth { + bw6 (1), + bw15 (2), + bw25 (3), + bw50 (4), + bw75 (6), + bw100 (7) + } with { + variant "JSON: as number" } /** * @desc TDD information * @member earfcn E-UTRA Absolute Radio Frequency Channel Number - * @member subframeAssignment Uplink-downlink subframe configuration information * @member transmissionBandwidth Transmission Bandwidth - * @see MEC030 Clause 6.5.7 Type: TddInfo + * @member subframeAssignment Uplink-downlink subframe configuration information + * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.5.7-1: Attributes of the TddInfo */ type record TddInfo { Earfcn earfcn, - Json.String subframeAssignment, - TransmissionBandwidth transmissionBandwidth + TransmissionBandwidth transmissionBandwidth, + Json.String subframeAssignment } /** - * @desc Neighbour cell information in a visiting PLMN that supports V2X communication over Uu MBMS + * @desc V2X Application Server address (consisting of IP address and UDP port) for unicast + * @member ipAddress + * @member udpPort + * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.5.8-1: Attributes of the V2xApplicationServer + */ + type record V2xApplicationServer { + Json.String ipAddress, + Json.String udpPort + } + + /** + * @desc Neighbour cell information in a visiting PLMN that supports V2X communication over Uu unicast + * @member plmn Public Land Mobile Network Identity * @member ecgi E-UTRAN CelI Global Identifier - * @member fddInfo Information for FDD operation - * @member mbmsServiceAreaIdentity Supported MBMS Service Area Identities in the cell * @member pci Physical Cell Identifier - * @member plmn Public Land Mobile Network Identity + * @member fddInfo Information for FDD operation * @member tddInfo Information for TDD operation - * @see MEC030 Clause 6.5.11 Type: UuMbmsNeighbourCellInfo + * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.5.9-1: Attributes of the UuUniNeighbourCellInfo */ - type record UuMbmsNeighbourCellInfo { - Ecgi ecgi, - FddInfo fddInfo, - MbmsServiceAreaIdentityList mbmsServiceAreaIdentity, - integer pci, - Plmn plmn, - TddInfo tddInfo + type record UuUniNeighbourCellInfo { + Plmn plmn, + Ecgi ecgi, + Json.Integer pci, + FddInfo fddInfo, + TddInfo tddInfo } - type record of Json.String MbmsServiceAreaIdentityList; - type record of UuMbmsNeighbourCellInfo UuMbmsNeighbourCellInfoList; + type record of UuUniNeighbourCellInfo UuUniNeighbourCellInfoList; /** - * @desc The provisioning information per location - * @member locationInfo Location information to identify a cell of a base station or a particular geographical area - * @member neighbourCellInfo The information of the neighbour cells in a visiting PLMN that support V2X communication over Uu MBMS + * @desc Temporary Mobile Group Identity (TMGI), which is used within MBMS to uniquely identify Multicast and Broadcast bearer services + * @member tmgi Temporary Mobile Group Identity (TMGI), which is used within MBMS to uniquely identify Multicast and Broadcast bearer services + * @member serviceAreaIdentifier A list of service area identifier for the applicable MBMS broadcast area + * @member sdpInfo SDP with IP multicast address and port number used for V2X communication via MBMS + * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.5.10-1: Attributes of the V2xServerUsd */ - type record ProInfoUuMbms { - LocationInfo locationInfo, - UuMbmsNeighbourCellInfoList neighbourCellInfo optional, - V2xServerUsd v2xServerUsd + type record V2xServerUsd { + Tmgi tmgi, + ServiceAreaIdentifier serviceAreaIdentifier, + SdpInfo sdpInfo } - type record of ProInfoUuMbms ProInfoUuMbmsList; /** - * @desc Provisioning information required for V2X communication over Uu MBMS - * @member proInfoUuMbms The provisioning information per location as defined below - * @member timeStamp_ TimeStamp - * @see MEC030 Clause 6.2.3 Type: UuMbmsProvisioningInfo + * @desc Temporary Mobile Group Identity (TMGI), which is used within MBMS to uniquely identify Multicast and Broadcast bearer services + * @member mbmsServiceId MBMS Service ID consisting of three octets + * @member mcc The Mobile Country Code part of PLMN Identity + * @member mnc The Mobile Network Code part of PLMN Identity + * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.5.10-1: Attributes of the V2xServerUsd */ - type record UuMbmsProvisioningInfo { - ProInfoUuMbmsList proInfoUuMbms, - TimeStamp timeStamp optional + type record Tmgi { + Json.String mbmsServiceId, + Json.String mcc, + Json.String mnc } + type record of Json.String ServiceAreaIdentifier; + /** - * @desc Neighbour cell information in a visiting PLMN that supports V2X communication over Uu unicast + * @desc SDP with IP multicast address and port number used for V2X communication via MBMS + * @member ipMulticastAddress + * @member portNumber + * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.5.10-1: Attributes of the V2xServerUsd + */ + type record SdpInfo { + Json.String ipMulticastAddress, + Json.String portNumber + } + type record of SdpInfo SdpInfoList; + + /** + * @desc Neighbour cell information in a visiting PLMN that supports V2X communication over Uu MBMS + * @member plmn Public Land Mobile Network Identity * @member ecgi E-UTRAN CelI Global Identifier - * @member fddInfo Information for FDD operation * @member pci Physical Cell Identifier - * @member plmn Public Land Mobile Network Identity + * @member fddInfo Information for FDD operation * @member tddInfo Information for TDD operation - * @see MEC030 Clause 6.5.9 Type: UuUniNeighbourCellInfo + * @member mbmsServiceAreaIdentity Supported MBMS Service Area Identities in the cell + * @see ETSI GS MEC 030 V3.1.1 (2023-03) Clause 6.5.11 Type: UuMbmsNeighbourCellInfo */ - type record UuUniNeighbourCellInfo { - Ecgi ecgi, - FddInfo fddInfo, - integer pci, - Plmn plmn, - TddInfo tddInfo + type record UuMbmsNeighbourCellInfo { + Plmn plmn, + Ecgi ecgi, + Json.Integer pci, + FddInfo fddInfo, + TddInfo tddInfo, + MbmsServiceAreaIdentityList mbmsServiceAreaIdentity } - type record of UuUniNeighbourCellInfo UuUniNeighbourCellInfoList; + type record of Json.String MbmsServiceAreaIdentityList; + type record of UuMbmsNeighbourCellInfo UuMbmsNeighbourCellInfoList; /** - * @desc The provisioning information per location as defined below - * @member locationInfo Location information to identify a cell of a base station or a particular geographical area - * @member neighbourCellInfoThe information of the neighbour cells in a visiting PLMN that support V2X communication over Uu unicast - * @member v2xApplicationServer V2X Application Server address (consisting of IP address and UDP port) for unicast - * @see MEC030 Clause 6.2.2 Type: UuUnicastProvisioningInfo + * @desc Location information + * @member ecgi E-UTRAN CelI Global Identifier + * @member plmn Public Land Mobile Network Identity + * @member siV2xConfig V2X sidelink communication configuration, as defined in ETSI TS 136 331 + * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.5.12-1: Attributes of the Pc5NeighbourCellInfo */ - type record ProInfoUuUnicast { - LocationInfo locationInfo, - V2xApplicationServer v2xApplicationServer, - UuUniNeighbourCellInfoList neighbourCellInfo optional + type record Pc5NeighbourCellInfo { + Plmn plmn, + Ecgi ecgi, + SystemInformationBlockType21 siV2xConfig } - type record of ProInfoUuUnicast ProInfoUuUnicastList; + type record of Pc5NeighbourCellInfo Pc5NeighbourCellInfoList; + + type Json.String SystemInformationBlockType21; // FIXME Not defined anywhere in ETSI GS MEC 030 V3.1.1 and previous versions /** - * @desc Provisioning information required for V2X communication over Uu unicast - * @member proInfoUuUnicast The provisioning information per location - * @member timeStamp_ Time stamp - * @see MEC030 Clause 6.2.2 Type: UuUnicastProvisioningInfo + * @desc This type represents a type of link + * @member self_ URI referring to a resource + * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.5.13-1: Attributes of the LinkType */ - type record UuUnicastProvisioningInfo { - ProInfoUuUnicastList proInfoUuUnicast, - TimeStamp timeStamp optional + type record LinkType { + Json.AnyURI href } /** - * @desc V2X Application Server address (consisting of IP address and UDP port) for unicast - * @member ipAddress - * @member udpPort - * @see MEC030 Clause 6.5.8 Type: V2xApplicationServer + * @desc This type represents the properties that can be associated to a V2X message when it is published, or a notification in relation to the V2X message is issued + * @member stdOrganization Standardization organization which defines the published V2X + * @member msgType Published V2X message type. Its value is defined by the standardization organization indicated by the attribute stdOrganization + * @member msgProtocolVersion Protocol version of the V2X message (0..255) + * @member locationInfo Location information to identify a cell of a base station or a particular geographical area to which the V2X message can be associated + * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.5.14-1: Attributes of the V2xMsgPropertiesValues */ - type record V2xApplicationServer { - Json.String ipAddress, - Json.String udpPort + type record V2xMsgPropertiesValues { + StdOrganization stdOrganization, + MsgType msgType, + Json.Integer msgProtocolVersion, + LocationInfo locationInfo + } + + /** + * @desc Standardization organization which defines the published V2X message type + * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.5.14-1: Attributes of the V2xMsgPropertiesValues + */ + type enumerated StdOrganization { + ETSI } /** * @desc Published V2X message type. Its value is defined by the standardization organization + * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.5.14-1: Attributes of the V2xMsgPropertiesValues */ type enumerated MsgType { denm (1), @@ -511,127 +789,87 @@ module V2XInformationServiceAPI_TypesAndValues { type record of MsgType MsgTypeList; /** - * @desc Standardization organization which defines the published V2X message type - */ - type enumerated StdOrganization { - ETSI - } - - /** - * @desc V2X message that a service consumer publishes to VIS - * @member msgContent Published V2X message content. Its format is defined by the standardization organization indicated by the attribute stdOrganization - * @member msgEncodeFormat The encode format of the V2X message, for example base64 + * @desc This type represents the filter criteria that can be used when performing a subscription to notification of V2X messages + * @member stdOrganization Standardization organization which defines the published V2X * @member msgType Published V2X message type. Its value is defined by the standardization organization indicated by the attribute stdOrganization - * @member stdOrganization Standardization organization which defines the published V2X message type - * @see MEC030 Clause 6.2.6 Type: V2xMsgPublication + * @member msgProtocolVersion Protocol version of the V2X message (0..255) + * @member locationInfo Location information to identify a cell of a base station or a particular geographical area to which the V2X message can be associated + * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.5.15-1: Attributes of the V2xMsgFilterCriteria */ - type record V2xMsgPublication { - Json.String msgContent, - Json.String msgEncodeFormat, - MsgType msgType, - StdOrganization stdOrganization + type record V2xMsgFilterCriteria { + StdOrganization stdOrganization, + MsgTypeList msgType optional, + MsgProtocolVersionList msgProtocolVersion optional, + LocationInfoList locationInfo optional } + type record of Json.Integer MsgProtocolVersionList; /** - * @desc List of filtering criteria for the subscription. Any filtering criteria from below, which is included in the request, shall also be included in the response - * @member msgType Subscribed V2X message type. Its value is defined by the standardization organization indicated by the attribute stdOrganization - * @member stdOrganization Standardization organization which defines the published V2X message type - * @see MEC030 Clause 6.3.5 Type: V2xMsgSubscription - */ - type record V2xMsgSubscriptionFilterCriteria { - MsgTypeList msgType optional, - StdOrganization stdOrganization - } - -/** - * @desc Subscription to notification of V2X message - * @member links Hyperlink related to the resource. This shall be only included in the HTTP responses and in HTTP PUT requests - * @member callbackReference URI selected by the service consumer to receive notifications on the subscribed V2X message. This shall be included both in the request and in response - * @member expiryDeadline Time stamp - * @member filterCriteria List of filtering criteria for the subscription - * @member subscriptionType Shall be set to "V2xMsgSubscription" - * @see MEC030 Clause 6.3.5 Type: V2xMsgSubscription + * @desc This type represents the information about a V2X Message Distribution Server that can be exchanged between a service consumer (e.g. a MEC application) and the VIS + * @member infoProtocol Specifics of the application layer protocol of V2X Message Distribution Server + * @member infoConnection Connection information of the V2X Message Distribution Server the service consumer can use for direct connection + * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.5.16-1: Attributes of the V2xMsgDistributionServer */ - type record V2xMsgSubscription { - LinkType links optional, - Json.AnyURI callbackReference, - TimeStamp expiryDeadline optional, - V2xMsgSubscriptionFilterCriteria filterCriteria, - Json.String subscriptionType - } with { - variant (links) "name as '_links'"; + type record V2xMsgDistributionServer { + InfoProtocol infoProtocol, + InfoConnection infoConnection optional } /** - * @desc Link to resources related to this notification - * @member subscription Self-referring URI. The URI shall be unique within the VIS API as it acts as an ID for the subscription - * @see MEC030 Clause 6.4.5 Type: V2xMsgNotification + * @desc Specifics of the application layer protocol of V2X Message Distribution Server + * @member msgProtocol Numerical value corresponding to the application layer protocol supported by the service consumer + * @member Implementation specifics of application layer protocol, e.g. programming language + * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.5.16-1: Attributes of the V2xMsgDistributionServer */ - type record V2xMsgNotificationLinks { - LinkType subscription + type record InfoProtocol { + MsgProtocol msgProtocol, + Json.String protImplementation } /** - * @desc Notification for informing the subscribers about the V2X message - * @member notificationType Shall be set to "V2xMsgNotification" - * @member timeStamp_ Time stamp - * @member stdOrganization Standardization organization which defines the published V2X message type ETSI: European Telecommunications Standards Institute - * @member msgType Published V2X message type. Its value is defined by the standardization organization - * @member msgEncodeFormat The encode format of the V2X message, for example base64 - * @member msgContent Published V2X message content. The format of the string is defined by the standardization organization - * @member links Link to resources related to this notification - * @see MEC030 Clause 6.4.5 Type: V2xMsgNotification + * @desc Numerical value corresponding to the application layer protocol supported by the service consumer + * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.5.16-1: Attributes of the V2xMsgDistributionServer */ - type record V2xMsgNotification { - Json.String notificationType, - TimeStamp timeStamp, - StdOrganization stdOrganization, - MsgType msgType, - Json.String msgEncodeFormat, - Json.String msgContent, - V2xMsgNotificationLinks links + type enumerated MsgProtocol { + MQTT_v3_1_0 (0), + MQTT_v3_1_1 (1), + MQTT_v5 (2), + MQTT_SN (3), + AMQP_1_0 (4) } with { - variant (links) "name as '_links'"; + variant "JSON: as number" } /** - * @desc SDP with IP multicast address and port number used for V2X communication via MBMS - * @member ipMulticastAddress - * @member portNumber - * @see MEC030 Clause 6.5.10 Type: V2xServerUsd + * @desc Connection information of the V2X Message Distribution Server the service consumer can use for direct connection + * @member ipAddress IP address of the V2X Message Distribution Server + * @member port_number Port number of the V2X Message Distribution Server + * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.5.16-1: Attributes of the V2xMsgDistributionServer */ - type record SdpInfo { - Json.String ipMulticastAddress, - Json.String portNumber + type record InfoConnection { + Json.String ipAddress, + Json.UInt16 port_number } - type record of SdpInfo SdpInfoList; /** - * @desc Temporary Mobile Group Identity (TMGI), which is used within MBMS to uniquely identify Multicast and Broadcast bearer services - * @member mbmsServiceId MBMS Service ID consisting of three octets - * @member mcc The Mobile Country Code part of PLMN Identity - * @member mnc The Mobile Network Code part of PLMN Identity - * @see MEC030 Clause 6.5.10 Type: V2xServerUsd + * @desc This type represents the filter criteria that can be used when performing a subscription to notification of QoS prediction messages + * @member streamId The predicted QoS at the related time and vehicular UE location is provided for a specific data stream. In case of 3GPP network, this is mapped to a QoS flow + * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.5.17-1: Attributes of the QosPredFilterCriteria */ - type record Tmgi { - Json.String mbmsServiceId, - Json.String mcc, - Json.String mnc + type record QosPredFilterCriteria { + Json.String streamId } /** - * @desc Temporary Mobile Group Identity (TMGI), which is used within MBMS to uniquely identify Multicast and Broadcast bearer services - * @member serviceAreaIdentifier A list of service area identifier for the applicable MBMS broadcast area - * @member sdpInfo SDP with IP multicast address and port number used for V2X communication via MBMS - * @member tmgi Temporary Mobile Group Identity (TMGI), which is used within MBMS to uniquely identify Multicast and Broadcast bearer services - * @see MEC030 Clause 6.5.10 Type: V2xServerUsd + * @desc This type represents configuration for the delivery of subscription notifications over Websockets + * @member websocketUri Set by location server 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 030 V3.1.1 (2023-03) Table 6.5.18-1: Attributes of the WebsockNotifConfig */ - type record V2xServerUsd { - ServiceAreaIdentifier serviceAreaIdentifier, - SdpInfo sdpInfo, - Tmgi tmgi + type record WebsockNotifConfig { + Json.AnyURI websocketUri optional, + Json.Bool requestWebsocketUri optional } - type record of Json.String ServiceAreaIdentifier; } with { encode "JSON" -- GitLab From d5569a578ce35a7a642814189bf8b71b6358285d Mon Sep 17 00:00:00 2001 From: garciay Date: Thu, 6 Jul 2023 18:14:33 +0200 Subject: [PATCH 32/99] Add install.sh script; Change virtualization/docker-dev/Dockerfile.stfubuntu file --- install.sh | 24 + .../LibCommon_BasicTypesAndValues.ttcn | 247 --- .../LibCommon_Sync.ttcn | 1359 ----------------- ttcn/patch_lib_common_titan/module.mk | 8 +- .../ttcn/LibCommon_BasicTypesAndValues.ttcn | 64 +- .../{ => ttcn}/LibCommon_DataStrings.ttcn | 0 .../ttcn/LibCommon_Sync.ttcn | 4 +- .../docker-dev/Dockerfile.stfubuntu | 31 +- 8 files changed, 67 insertions(+), 1670 deletions(-) create mode 100755 install.sh delete mode 100644 ttcn/patch_lib_common_titan/LibCommon_BasicTypesAndValues.ttcn delete mode 100644 ttcn/patch_lib_common_titan/LibCommon_Sync.ttcn rename ttcn/patch_lib_common_titan/{ => ttcn}/LibCommon_DataStrings.ttcn (100%) diff --git a/install.sh b/install.sh new file mode 100755 index 0000000..98a0865 --- /dev/null +++ b/install.sh @@ -0,0 +1,24 @@ +#!/bin/bash + +#set -e +set -vx + +BASE_PATH=`pwd` + +git submodule update --init --recursive --remote + +if [ ! -f ./titan-test-system-framework ] +then + git clone --recurse-submodules --single-branch --branch devel https://labs.etsi.org/rep/cti-tools/titan-test-system-framework.git + cd ./titan-test-system-framework +else + cd ./titan-test-system-framework + git checkout devel +fi +cd ./ttcn/LibHttp +ln -f module_mec.mk module.mk + +cd $BASE_PATH +ln -f ./ttcn/patch_lib_common_titan/module.mk ./ttcn/LibCommon/ + +exit 0 diff --git a/ttcn/patch_lib_common_titan/LibCommon_BasicTypesAndValues.ttcn b/ttcn/patch_lib_common_titan/LibCommon_BasicTypesAndValues.ttcn deleted file mode 100644 index 9b5477d..0000000 --- a/ttcn/patch_lib_common_titan/LibCommon_BasicTypesAndValues.ttcn +++ /dev/null @@ -1,247 +0,0 @@ -/** - * @author ETSI - * @version $URL$ - * $Id$ - * @desc A collection of basic type and value definitions which may be - * useful in the implementation of any TTCN-3 test suite.

      - * @remark End users should be aware that any changes made to the in - * definitions this module may be overwritten in future releases. - * End users are encouraged to contact the distributers of this - * module regarding their modifications or additions so that future - * updates will include your changes. - * @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 LibCommon_BasicTypesAndValues { - - /** - * @remark Number in subtype name always indicates encoding length - * in _bits_ - */ - group unsignedIntegerDefintions { - - const integer c_uInt1Max := 1; - const integer c_uInt2Max := 3; - const integer c_uInt3Max := 7; - const integer c_uInt4Max := 15; - const integer c_uInt5Max := 31; - const integer c_uInt6Max := 63; - const integer c_uInt7Max := 127; - const integer c_uInt8Max := 255; - const integer c_uInt9Max := 511; - const integer c_uInt10Max := 1023; - const integer c_uInt11Max := 2047; - const integer c_uInt12Max := 4095; - const integer c_uInt13Max := 8191; - const integer c_uInt14Max := 16383; - const integer c_uInt15Max := 32767; - const integer c_uInt16Max := 65535; - const integer c_uInt17Max := 131071; - const integer c_uInt18Max := 262143; - const integer c_uInt19Max := 524287; - const integer c_uInt20Max := 1048575; - const integer c_uInt21Max := 2097151; - const integer c_uInt22Max := 4194303; - const integer c_uInt23Max := 8388607; - const integer c_uInt24Max := 16777215; - const integer c_uInt25Max := 33554431; - const integer c_uInt26Max := 67108863; - const integer c_uInt27Max := 134217727; - const integer c_uInt28Max := 268435456; - const integer c_uInt29Max := 536870911; - const integer c_uInt30Max := 1073741823; - const integer c_uInt31Max := 2147483647; - const integer c_uInt32Max := 4294967295; - const integer c_uInt36Max := 68719476735; - const integer c_uInt48Max := 281474976710655; - const integer c_uInt52Max := 4503599627370495; - const integer c_uInt64Max := 18446744073709551615; - - type integer UInt (0 .. infinity); - type integer UInt1 (0 .. c_uInt1Max) with {variant "unsigned 1 bit"}; - type integer UInt2 (0 .. c_uInt2Max) with {variant "unsigned 2 bit"}; - type integer UInt3 (0 .. c_uInt3Max) with {variant "unsigned 3 bit"}; - type integer UInt4 (0 .. c_uInt4Max) with {variant "unsigned 4 bit"}; - type integer UInt5 (0 .. c_uInt5Max) with {variant "unsigned 5 bit"}; - type integer UInt6 (0 .. c_uInt6Max) with {variant "unsigned 6 bit"}; - type integer UInt7 (0 .. c_uInt7Max) with {variant "unsigned 7 bit"}; - type integer UInt8 (0 .. c_uInt8Max) with {variant "unsigned 8 bit"}; - type integer UInt9 (0 .. c_uInt9Max) with {variant "unsigned 9 bit"}; - type integer UInt10 (0 .. c_uInt10Max) with {variant "unsigned 10 bit"}; - type integer UInt11 (0 .. c_uInt11Max) with {variant "unsigned 11 bit"}; - type integer UInt12 (0 .. c_uInt12Max) with {variant "unsigned 12 bit"}; - type integer UInt13 (0 .. c_uInt13Max) with {variant "unsigned 13 bit"}; - type integer UInt14 (0 .. c_uInt14Max) with {variant "unsigned 14 bit"}; - type integer UInt15 (0 .. c_uInt15Max) with {variant "unsigned 15 bit"}; - type integer UInt16 (0 .. c_uInt16Max) with {variant "unsigned 16 bit"}; - type integer UInt17 (0 .. c_uInt17Max) with {variant "unsigned 17 bit"}; - type integer UInt18 (0 .. c_uInt18Max) with {variant "unsigned 18 bit"}; - type integer UInt19 (0 .. c_uInt19Max) with {variant "unsigned 19 bit"}; - type integer UInt20 (0 .. c_uInt20Max) with {variant "unsigned 20 bit"}; - type integer UInt21 (0 .. c_uInt21Max) with {variant "unsigned 21 bit"}; - type integer UInt22 (0 .. c_uInt22Max) with {variant "unsigned 22 bit"}; - type integer UInt23 (0 .. c_uInt23Max) with {variant "unsigned 23 bit"}; - type integer UInt24 (0 .. c_uInt24Max) with {variant "unsigned 24 bit"}; - type integer UInt25 (0 .. c_uInt25Max) with {variant "unsigned 25 bit"}; - type integer UInt26 (0 .. c_uInt26Max) with {variant "unsigned 26 bit"}; - type integer UInt27 (0 .. c_uInt27Max) with {variant "unsigned 27 bit"}; - type integer UInt28 (0 .. c_uInt28Max) with {variant "unsigned 28 bit"}; - type integer UInt29 (0 .. c_uInt29Max) with {variant "unsigned 29 bit"}; - type integer UInt30 (0 .. c_uInt30Max) with {variant "unsigned 30 bit"}; - type integer UInt31 (0 .. c_uInt31Max) with {variant "unsigned 31 bit"}; - type integer UInt32 (0 .. c_uInt32Max) with {variant "unsigned 32 bit"}; - type integer UInt36 (0 .. c_uInt36Max) with {variant "unsigned 36 bit"}; - type integer UInt48 (0 .. c_uInt48Max) with {variant "unsigned 48 bit"}; - type integer UInt52 (0 .. c_uInt52Max) with {variant "unsigned 52 bit"}; - type integer UInt64 (0 .. c_uInt64Max) with {variant "unsigned 64 bit"}; - - } // end group unsignedIntegerDefintions - - /** - * @remark Number in subtype name always indicates encoding length - * in _bits_ - */ - group signedIntegerDefintions { - - const integer c_int1Min := -1; - const integer c_int1Max := 0; - const integer c_int2Min := -2; - const integer c_int2Max := 1; - const integer c_int3Min := -4; - const integer c_int3Max := 3; - const integer c_int4Min := -8; - const integer c_int4Max := 7; - const integer c_int5Min := -16; - const integer c_int5Max := 15; - const integer c_int6Min := -32; - const integer c_int6Max := 31; - const integer c_int7Min := -64; - const integer c_int7Max := 63; - const integer c_int8Min := -128; - const integer c_int8Max := 127; - const integer c_int9Min := -256; - const integer c_int9Max := 255; - const integer c_int10Min := -512; - const integer c_int10Max := 511; - const integer c_int11Min := -1024; - const integer c_int11Max := 1023; - const integer c_int12Min := -2048; - const integer c_int12Max := 2047; - const integer c_int13Min := -4096; - const integer c_int13Max := 4095; - const integer c_int14Min := -8192; - const integer c_int14Max := 8191; - const integer c_int15Min := -16384; - const integer c_int15Max := 16383; - const integer c_int16Min := -32768; - const integer c_int16Max := 32767; - const integer c_int17Min := -65536; - const integer c_int17Max := 65535; - const integer c_int18Min := -131072; - const integer c_int18Max := 131071; - const integer c_int19Min := -262144; - const integer c_int19Max := 262143; - const integer c_int20Min := -524288; - const integer c_int20Max := 524287; - const integer c_int21Min := -1048576; - const integer c_int21Max := 1048575; - const integer c_int22Min := -2097152; - const integer c_int22Max := 2097151; - const integer c_int23Min := -4194304; - const integer c_int23Max := 4194303; - const integer c_int24Min := -8388608; - const integer c_int24Max := 8388607; - const integer c_int25Min := -16777216; - const integer c_int25Max := 16777215; - const integer c_int26Min := -33554432; - const integer c_int26Max := 33554431; - const integer c_int27Min := -67108864; - const integer c_int27Max := 67108863; - const integer c_int28Min := -134217728; - const integer c_int28Max := 134217727; - const integer c_int29Min := -268435456; - const integer c_int29Max := 268435456; - const integer c_int30Min := -536870912; - const integer c_int30Max := 536870911; - const integer c_int31Min := -1073741824; - const integer c_int31Max := 1073741823; - const integer c_int32Min := -2147483648; - const integer c_int32Max := 2147483647; - - type integer Int; - type integer Int1 (c_int1Min .. c_int1Max) with { variant "1 bit"}; - type integer Int2 (c_int2Min .. c_int2Max) with { variant "2 bit"}; - type integer Int3 (c_int3Min .. c_int3Max) with { variant "3 bit"}; - type integer Int4 (c_int4Min .. c_int4Max) with { variant "4 bit"}; - type integer Int5 (c_int5Min .. c_int5Max) with { variant "5 bit"}; - type integer Int6 (c_int6Min .. c_int6Max) with { variant "6 bit"}; - type integer Int7 (c_int7Min .. c_int7Max) with { variant "7 bit"}; - type integer Int8 (c_int8Min .. c_int8Max) with { variant "8 bit"}; - type integer Int9 (c_int9Min .. c_int9Max) with { variant "9 bit"}; - type integer Int10 (c_int10Min .. c_int10Max) with { variant "10 bit"}; - type integer Int11 (c_int11Min .. c_int11Max) with { variant "11 bit"}; - type integer Int12 (c_int12Min .. c_int12Max) with { variant "12 bit"}; - type integer Int13 (c_int13Min .. c_int13Max) with { variant "13 bit"}; - type integer Int14 (c_int14Min .. c_int14Max) with { variant "14 bit"}; - type integer Int15 (c_int15Min .. c_int15Max) with { variant "15 bit"}; - type integer Int16 (c_int16Min .. c_int16Max) with { variant "16 bit"}; - type integer Int17 (c_int17Min .. c_int17Max) with { variant "17 bit"}; - type integer Int18 (c_int18Min .. c_int18Max) with { variant "18 bit"}; - type integer Int19 (c_int19Min .. c_int19Max) with { variant "19 bit"}; - type integer Int20 (c_int20Min .. c_int20Max) with { variant "20 bit"}; - type integer Int21 (c_int21Min .. c_int21Max) with { variant "21 bit"}; - type integer Int22 (c_int22Min .. c_int22Max) with { variant "22 bit"}; - type integer Int23 (c_int23Min .. c_int23Max) with { variant "23 bit"}; - type integer Int24 (c_int24Min .. c_int24Max) with { variant "24 bit"}; - type integer Int25 (c_int25Min .. c_int25Max) with { variant "25 bit"}; - type integer Int26 (c_int26Min .. c_int26Max) with { variant "26 bit"}; - type integer Int27 (c_int27Min .. c_int27Max) with { variant "27 bit"}; - type integer Int28 (c_int28Min .. c_int28Max) with { variant "28 bit"}; - type integer Int29 (c_int29Min .. c_int29Max) with { variant "29 bit"}; - type integer Int30 (c_int30Min .. c_int30Max) with { variant "30 bit"}; - type integer Int31 (c_int31Min .. c_int31Max) with { variant "31 bit"}; - type integer Int32 (c_int32Min .. c_int32Max) with { variant "32 bit"}; - - } // end group signedIntegerDefintions - - group zeroedIntegers { - - const UInt1 c_uInt1Zero := 0; - const UInt2 c_uInt2Zero := 0; - const UInt3 c_uInt3Zero := 0; - const UInt4 c_uInt4Zero := 0; - const UInt5 c_uInt5Zero := 0; - const UInt6 c_uInt6Zero := 0; - const UInt7 c_uInt7Zero := 0; - const UInt8 c_uInt8Zero := 0; - const UInt10 c_uInt10Zero := 0; - const UInt12 c_uInt12Zero := 0; - const UInt14 c_uInt14Zero := 0; - const UInt16 c_uInt16Zero := 0; - const UInt24 c_uInt24Zero := 0; - const UInt32 c_uInt32Zero := 0; - const UInt48 c_uInt48Zero := 0; - - }//end group zeroedInt - - /** - * @remark Number in subtype name always indicates encoding length - * in _bits_ - */ - group booleanDefintions { - - type boolean Bool1 with { variant "1 bit" }; - type boolean Bool2 with { variant "2 bit" }; - type boolean Bool3 with { variant "3 bit" }; - type boolean Bool4 with { variant "4 bit" }; - type boolean Bool5 with { variant "5 bit" }; - type boolean Bool6 with { variant "6 bit" }; - type boolean Bool7 with { variant "7 bit" }; - type boolean Bool8 with { variant "8 bit" }; - - } // end group booleanDefintions - -} // end module LibCommon_BasicTypesAndValues diff --git a/ttcn/patch_lib_common_titan/LibCommon_Sync.ttcn b/ttcn/patch_lib_common_titan/LibCommon_Sync.ttcn deleted file mode 100644 index 5b2ae66..0000000 --- a/ttcn/patch_lib_common_titan/LibCommon_Sync.ttcn +++ /dev/null @@ -1,1359 +0,0 @@ -/** - * @author ETSI - * @version $URL$ - * $Id$ - * @desc This module implements _one_ generic synchronization mechanism - * for TTCN-3 test cases with one or more test components. - * Key concept is here that one test component acts as a - * synchronization server which listens and triggers one or more - * synchronization clients. It is recomended to use the MTC always as - * the synchronization server but in theory also a PTC can act as such - * a server.

      - * This synchronization is used by calling a function on - * the server test component to wait for a desired amount of clients - * to notify the server that they have reached a specific synchronization - * point. Each client test component must call another - * function to perform this notification.

      - * In the event that a client is not able to reach a synchronization - * point the server sends out a signal to all clients to abort the - * test case. This signal is a STOP message which can be caught by - * a test component default which in turn can then run a proper - * shut down behavior based on the current state of the test - * component.

      - * Note that this synchronization mechanism can also be used - * in a special mode called "self synchronization" when a test case - * only has one test component. Here, the test component in essence - * acts as a server and client at the same time. The main benefit of - * using self synchoronization is that the same shutdown mechanisms - * can also be reused fomr the multi component test cases.

      - * This module contains a lot of TTCN-3 definitions. It has been - * structured into tree main groups to help the user to identify - * quickly relevant TTCN-3 definitions. For rookie users of this - * module basicUserRelevantDefinitions should offer all the needed - * definitions. Advanced users can consider use of definitions in - * advancedUserRelevantDefinitions. Finally, internalDefinitions - * are definitions which are required for the module to work - * properly but do not need to be used in your code. Remember that - * the main motiviation of this sychronization module is to offer - * are _simple_ user interface. Practice has shown that when writing - * actual test component behavior _only a handful_ of functions - * usually wind up being used! Also check the synchronization examples - * module for example uses of this synchronization mechanism.

      - * The invocation of the sync functions is also closely tied - * to the verdict control functions which should also be reviewed - * prior to using this module.

      - * This module has been derived from EtsiCommon_Synchronization - * which was created in ETSIs STF256/276. It has been kept - * intentionally separate to avoid conflicts with future ETSI - * test suite releases. - * @see LibCommon_Sync.basicUserRelevantDefinitions - * @see LibCommon_Sync.advancedUserRelevantDefinitions - * @remark End users should be aware that any changes made to the in - * definitions this module may be overwritten in future releases. - * End users are encouraged to contact the distributers of this - * module regarding their modifications or additions so that future - * updates will include your changes. - * @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 LibCommon_Sync { - - //Common - import from LibCommon_BasicTypesAndValues { type UInt } ; - import from LibCommon_AbstractData all; - import from LibCommon_VerdictControl all; - - group basicUserRelevantDefinitions { - - group importantSyncTypeDefinitions { - - group compTypeRelated { - - /** - * @desc This type is used to be the base of any synchronization - * behavior which is to be executed on a sync server - * component. The test component which acts as a - * sync server in a test case must NOT directly use - * this component type in its runs on clause! - * Note that server synchronization functions may be - * invoked by a test component as long as its - * component type is type compatible to this component - * type definition! - */ - type component BaseSyncComp { - port SyncPort syncPort; - timer tc_sync := PX_TSYNC_TIME_LIMIT; - } - - /** - * @desc This type is used to define any synchronization - * behavior which is to be executed on a sync server - * component. The test component which acts as a - * sync server in a test case may - but does - * not have to - directly use this component type its - * runs on clause. - * Note that server synchronization functions may be - * invoked by a test component as long as its - * component type is type compatible to this component - * type definition! - */ - type component ServerSyncComp extends BaseSyncComp { - timer tc_shutDown := PX_TSHUT_DOWN_TIME_LIMIT; - } - - /** - * @desc This type is used to define any synchronization - * behavior which is to be executed on a sync client - * component. The test component(s) which act as a - * sync client in a test case may - but do not have - * to - directly use this component type their runs - * on clause. - * Note that server synchronization functions may be - * invoked by a test component as long as its - * component type is type compatible to this component - * type definition! - */ - type component ClientSyncComp extends BaseSyncComp { - var StringStack v_stateStack:= c_initStringStack; - var TestcaseStep vc_testcaseStep := e_preamble; - } - - /** - * @desc This type is used to define any synchronization - * behavior which is relevant to non-concurrent test - * cases. - * Note that self synchronization functions may be - * invoked by a test component as long as its - * component type is type compatible to this component - * type definition! - * Note also that this type is type compatible to the - * ClientSyncComp type so that shutdown altsteps from - * concurrent test cases can also be reused in single - * component test cases! - * @see LibCommon_Sync.ClientSyncComp - */ - type component SelfSyncComp extends ClientSyncComp { - port SyncPort syncSendPort; - } - - /** - * @desc This port type must be imported into test suites - * when defining test component types which are - * type compatible to a synchronization component - * type - * @see LibCommon_Sync.SelfSyncComp - * @see LibCommon_Sync.ServerSyncComp - * @see LibCommon_Sync.ClientSyncComp - */ - type port SyncPort message { - inout SyncCmd - } with { - extension "internal" - } - - - /** - * @desc Describes in which step of execution is the testcase - */ - type enumerated TestcaseStep { - e_preamble, - e_testBody, - e_postamble - } - - } // end compTypeRelated - - group standardSyncPointNames { - const charstring c_prDone := "preambleDone"; - const charstring c_poDone := "postambleDone"; - const charstring c_tbDone := "testBodyDone"; - const charstring c_initDone := "initDone"; - } - - } // end group importantSyncTypeDefinitions - - group syncCompTestConfiguration { - - /** - * @desc Calls self connect function if invoking - * component is the MTC or otherwise connects the client - * the server. This function allows to implement preambles - * in a way that they can be used by test components - * in both non-concurrent as well as concurrent test - * cases! - * @remark This function should _not_ be called if the MTC - * acts as a client (and not a server) in a concurrent - * test case. In this case f_connect4ClientSync - * should be used instead. - * @see LibCommon_Sync.f_connect4SelfSync - * @see LibCommon_Sync.f_connect4ClientSync - */ - function f_connect4SelfOrClientSync() - runs on SelfSyncComp { - if ( self == mtc ) { - f_connect4SelfSync(); - } else { - f_connect4ClientSync(); - } - } - - /** - * @desc Calls self connect function if the invoking - * component is the MTC or otherwise disconnects the client - * from the server. This function allows to implement - * postambles in a way that they can be used in both - * non-concurrent as well as concurrent test cases. - * @remark This function should _not_ be called if the MTC - * acts as a client (and not a server) in a concurrent - * test case. In this case f_disconnect4ClientSync - * should be used instead. - * @see LibCommon_Sync.f_disconnect4SelfSync - * @see LibCommon_Sync.f_disconnect4ClientSync - */ - function f_disconnect4SelfOrClientSync() - runs on SelfSyncComp { - if ( self == mtc ) { - f_disconnect4SelfSync(); - } else { - f_disconnect4ClientSync(); - } - } - - } // end group syncCompTestConfiguration - - group syncFunctions { - - /** - * @desc Implements synchronization of 2 clients from server side - * on one or more synchronization points. - * If problem occurs, then server sends STOP to all clients. - * Waits for PX_TSYNC_TIME_LIMIT to let clients - * finish executing their behavior until this - * synchronization point. After passing all synchronization - * points successfuly the server waits for all clients - * to stop. - * See f_serverSyncClientsTimed for overwriting this - * the timing constraint! - * This function sets the server component verdict. - * @remark The use of this function requires prior connection of - * the server sync ports! - * @see LibCommon_Sync.f_connect4SelfOrClientSync - * @see LibCommon_Sync.PX_TSYNC_TIME_LIMIT - * @see LibCommon_Sync.f_serverSyncClientsTimed - * @see LibCommon_Sync.f_serverWaitForAllClientsToStop - * @param p_syncPointIds list of synchronization point name/ids - */ - function f_serverSync2ClientsAndStop( in SyncPointList p_syncPointIds ) - runs on ServerSyncComp { - f_serverSyncNClientsAndStop(2, p_syncPointIds); - } - - /** - * @desc Implements synchronization of 3 clients from server side - * on one or more synchronization points. - * If problem occurs, then server sends STOP to all clients. - * Waits for PX_TSYNC_TIME_LIMIT to let clients - * finish executing their behavior until this - * synchronization point. After passing all synchronization - * points successfuly the server waits for all clients - * to stop. - * See f_serverSyncClientsTimed for overwriting this - * the timing constraint! - * This function sets the server component verdict. - * @remark The use of this function requires prior connection of - * the server sync ports! - * @see LibCommon_Sync.f_connect4SelfOrClientSync - * @see LibCommon_Sync.PX_TSYNC_TIME_LIMIT - * @see LibCommon_Sync.f_serverSyncClientsTimed - * @see LibCommon_Sync.f_serverWaitForAllClientsToStop - * @param p_syncPointIds list of synchronization point name/ids - */ - function f_serverSync3ClientsAndStop( in SyncPointList p_syncPointIds ) - runs on ServerSyncComp { - f_serverSyncNClientsAndStop(3, p_syncPointIds); - } - - /** - * @desc Implements synchronization of 4 clients from server side - * on one or more synchronization points. - * If problem occurs, then server sends STOP to all clients. - * Waits for PX_TSYNC_TIME_LIMIT to let clients - * finish executing their behavior until this - * synchronization point. After passing all synchronization - * points successfuly the server waits for all clients - * to stop. - * See f_serverSyncClientsTimed for overwriting this - * the timing constraint! - * This function sets the server component verdict. - * @remark The use of this function requires prior connection of - * the server sync ports! - * @see LibCommon_Sync.f_connect4SelfOrClientSync - * @see LibCommon_Sync.PX_TSYNC_TIME_LIMIT - * @see LibCommon_Sync.f_serverSyncClientsTimed - * @see LibCommon_Sync.f_serverWaitForAllClientsToStop - * @param p_syncPointIds list of synchronization point name/ids - */ - function f_serverSync4ClientsAndStop( in SyncPointList p_syncPointIds ) - runs on ServerSyncComp { - f_serverSyncNClientsAndStop(4, p_syncPointIds); - } - - /** - * @desc Implements synchronization of N clients from server side - * on one or more synchronization points. - * If problem occurs, then server sends STOP to all clients. - * Waits for PX_TSYNC_TIME_LIMIT to let clients - * finish executing their behavior until this - * synchronization point. After passing all synchronization - * points successfuly the server waits for all clients - * to stop. - * See f_serverSyncClientsTimed for overwriting this - * the timing constraint! - * This function sets the server component verdict. - * @remark The use of this function requires prior connection of - * the server sync ports! - * @see LibCommon_Sync.f_connect4SelfOrClientSync - * @see LibCommon_Sync.PX_TSYNC_TIME_LIMIT - * @see LibCommon_Sync.f_serverSyncClientsTimed - * @see LibCommon_Sync.f_serverWaitForAllClientsToStop - * @param p_numClients number of synchronization clients - * @param p_syncPointIds list of synchronization point name/ids - */ - function f_serverSyncNClientsAndStop ( - in UInt p_numClients, - in SyncPointList p_syncPointIds ) - runs on ServerSyncComp { - var integer i, v_noOfSyncIds := sizeof(p_syncPointIds); - for ( i := 0; i < v_noOfSyncIds; i := i+1 ) { - f_serverSyncClientsTimed ( - p_numClients, - valueof(p_syncPointIds[i]), - PX_TSYNC_TIME_LIMIT ); - } - f_serverWaitForAllClientsToStop(); - } - - /** - * @desc Implements synchronization of 2 clients and 1 UT from server side - * on one or more synchronization points. - * If problem occurs, then server sends STOP to all clients. - * Waits for PX_TSYNC_TIME_LIMIT to let clients - * finish executing their behavior until this - * synchronization point. After passing all synchronization - * points successfuly the server waits for all clients - * to stop. - * See f_serverSyncClientsTimed for overwriting this - * the timing constraint! - * This function sets the server component verdict. - * @remark The use of this function requires prior connection of - * the server sync ports! - * @see LibCommon_Sync.f_connect4SelfOrClientSync - * @see LibCommon_Sync.PX_TSYNC_TIME_LIMIT - * @see LibCommon_Sync.f_serverSyncClientsTimed - * @see LibCommon_Sync.f_serverWaitForAllClientsToStop - * @param p_syncPointIds list of synchronization point name/ids - */ - function f_serverSync2ClientsUtAndStop( in SyncPointList p_syncPointIds ) - runs on ServerSyncComp { - var integer i, v_noOfSyncIds := sizeof(p_syncPointIds); - for ( i := 0; i < v_noOfSyncIds; i := i+1 ) { - f_serverSyncClientsTimed(3,valueof(p_syncPointIds[i]), PX_TSYNC_TIME_LIMIT); - } - f_serverWaitForAllClientsToStop(); - } - - /** - * @desc Calls either self synchronization function if - * invoking component is the MTC, otherwise - * calls client synchronization. After that it - * sets the verdict based on the specified return code. - * This function allows to implement TTCN-3 functions - * in a way that they can be used in both non-concurrent - * as well as concurrent test cases. - * @remark This function should _not_ be called if the MTC - * acts as a client (and not a server) in a concurrent - * test case. In this case f_clientSyncAndVerdict - * should be used instead. - * @param p_syncPoint Synchronization point name/id - * @param p_ret Current behavior execution status - * @see LibCommon_Sync.f_clientSyncAndVerdict - * @see LibCommon_VerdictControl.f_setVerdict - */ - function f_selfOrClientSyncAndVerdict( in charstring p_syncPoint, - in FncRetCode p_ret) - runs on SelfSyncComp { - if ( self == mtc ) { - // then assume we are running non-conurrent test case - f_selfSyncAndVerdict(p_syncPoint, p_ret); - } else { - f_clientSyncAndVerdict(p_syncPoint, p_ret); - } - } - - /** - * @desc Calls either self synchronization function if - * invoking component is the MTC, otherwise - * calls client synchronization. After that it - * sets a preamble specific verdict based on the - * specified return code. - * This function allows to implement TTCN-3 functions - * in a way that they can be used in both non-concurrent - * as well as concurrent test cases. - * @remark This function should _not_ be called if the MTC - * acts as a client (and not a server) in a concurrent - * test case. In this case f_clientSyncAndVerdictPreamble - * should be used instead. - * @param p_syncPoint Synchronization point name/id - * @param p_ret Current behavior execution status - * @see LibCommon_Sync.f_clientSyncAndVerdict - * @see LibCommon_VerdictControl.f_setVerdictPreamble - */ - function f_selfOrClientSyncAndVerdictPreamble( in charstring p_syncPoint, - in FncRetCode p_ret) - runs on SelfSyncComp { - if ( self == mtc ) { - // then assume we are running non-conurrent test case - f_selfSyncAndVerdictPreamble(p_syncPoint, p_ret); - } else { - f_clientSyncAndVerdictPreamble(p_syncPoint, p_ret); - } - } - - /** - * @desc Calls either self synchronization function if - * invoking component is the MTC, otherwise - * calls client synchronization. After that it - * sets a preamble specific verdict based on the - * specified return code. - * This function allows to implement TTCN-3 functions - * in a way that they can be used in both non-concurrent - * as well as concurrent test cases. - * @remark This function should _not_ be called if the MTC - * acts as a client (and not a server) in a concurrent - * test case. In this case f_clientSyncAndVerdictTestBody - * should be used instead. - * @param p_syncPoint Synchronization point name/id - * @param p_ret Current behavior execution status - * @see LibCommon_Sync.f_clientSyncAndVerdict - * @see LibCommon_VerdictControl.f_setVerdictPreamble - */ - function f_selfOrClientSyncAndVerdictTestBody( in charstring p_syncPoint, - in FncRetCode p_ret) - runs on SelfSyncComp { - if ( self == mtc ) { - // then assume we are running non-conurrent test case - f_selfSyncAndVerdictTestBody(p_syncPoint, p_ret); - } else { - f_clientSyncAndVerdictTestBody(p_syncPoint, p_ret); - } - } - - /** - * @desc Function kept for backward compatibility - * @see f_selfOrClientSyncAndVerdictPreamble - * - */ - function f_selfOrClientSyncAndVerdictPR( in charstring p_syncPoint, - in FncRetCode p_ret) - runs on SelfSyncComp { - f_selfOrClientSyncAndVerdictPreamble(p_syncPoint, p_ret); - } - - } // end group syncFunctions - - group syncCompStateHandling { - - /** - * - * @desc This function updates the state (stack) of a - * sync client or self sync component. This stack is - * key in the shutdown handling of test components. - * It adds the new state name to the top of the - * sync component stack of states. - * The state will only be added in case of a current - * execution status of e_success. - * @param p_newSyncCompState Name of state which was attempted to be reached. - * @param p_ret Current behavior execution status - * @remark If the state of component changes this function must be - * _at least_ called from your test suite prior to f_selfSync - * or f_clientSync which is the only definite place for the - * shutdown default invocation! - * @see LibCommon_Sync.a_dummyShutDown - * @see LibCommon_Sync.f_selfSync - * @see LibCommon_Sync.f_clientSync - */ - function f_addSyncCompState(in charstring p_newSyncCompState, - in FncRetCode p_ret) - runs on ClientSyncComp { - if ( p_ret == e_success ) { - if ( f_isItemOnStringStack(v_stateStack,p_newSyncCompState) ) { - log("**** f_addSyncCompState: WARNING: Attempt to add state which is already on sync state stack! No additition done.****"); - } else { - f_pushStringStack(v_stateStack,p_newSyncCompState); - } - } - } // end function f_addSyncCompState - - /** - * - * @desc This function returns the top state on the sync - * state stack of a sync client or self sync - * component and removes it from the stack - * This function cna be used, e.g., in a while - * statement within a postamble or shutdown - * implementation - * @param p_state State on top of the state stack. - * @return false if state stack is empty, true otherwise - * @see LibCommon_Sync.a_dummyShutDown - */ - function f_getTopSyncCompState( out charstring p_state ) - runs on ClientSyncComp - return boolean { - if ( not f_peekStringStackTop(v_stateStack,p_state) ) { - p_state := "IDLE"; - return false; - } - f_popStringStack(v_stateStack); - return true; - } // end function f_getTopSyncCompState - - /* - * @desc This function removes the last state on the state stack - * of a sync client or self sync component. - * This stack is key in the shutdown handling of test - * components. - * @see LibCommon_Sync.a_dummyShutDown - */ - function f_popSyncCompState() - runs on ClientSyncComp { - f_popStringStack(v_stateStack); - } // end function f_popSyncCompState - - /** - * - * @desc This function returns the top state on the sync state - * stack of a sync client or self sync component. It - * does not remove it from the stack - * This stack is key in the shutdown handling of test - * components. - * @param p_state State on top of the state stack. - * @return false if state stack is empty, true otherwise - * @see LibCommon_Sync.a_dummyShutDown - */ - function f_peekTopSyncCompState(out charstring p_state) - runs on ClientSyncComp - return boolean { - return f_peekStringStackTop(v_stateStack,p_state); - } // end function f_peekTopSyncCompState - - /** - * @desc This function checks if the sync state stack - * of a sync client or self sync component is empty. - * This stack is key in the shutdown handling of test - * components. - * @see LibCommon_Sync.a_dummyShutDown - */ - function f_isSyncCompStateStackEmpty() - runs on ClientSyncComp - return boolean { - return f_isStringStackEmpty(v_stateStack); - } // end function f_isSyncCompStateStackEmpty - - } // end group syncCompStateHandling - - group shutDownAltsteps { - - /** - * @desc This is an example of a shutdown altstep which can be - * used as a "template" for a interface specific shutdown - * altstep or possily as a first temporary solution in - * test case development.

      - * This altstep shall be activated as a default as the - * first statement in each test case function which drives - * an interface, i.e., in MTC behavior of single component - * and in each client behavior of multi component test - * cases.
      - * The required behavior from this altstep is to:

      - * 1) expect the STOP either via the test component - * syncPort

      - * 2) upon its arrival it should shut down the SUT - * gracefully based on the current component state

      - * The current component state should have been - * previously kept uptodate from a test suite via the - * f_addSyncCompState function. This default will then be - * (automatically) invoked either from within f_selfSync - * or f_clientSync.
      - * Note that shutdown defaults can be written as - * _interface specific_ - they do not need to be test case - * or test component specific! See another example of a - * shutdown altstep in the sync module. - * @see LibCommon_Sync.f_addSyncCompState - * @see LibCommon_Sync.f_selfSync - * @see LibCommon_Sync.f_clientSync - * @see LibCommon_SyncExamples.a_exampleShutDown - * @remark Your application specific shutdown altstep - * implementation(s) should _not_ be defined in this - * module but as part of your test suite or application specific - * modules. - */ - altstep a_dummyShutDown() - runs on SelfSyncComp { - [] syncPort.receive(m_syncServerStop){ - var charstring v_state := ""; - tc_sync.stop; - log("**** a_dummyShutDown: Test component received STOP signal from sync server - going to IDLE state ****"); - while ( f_getTopSyncCompState(v_state) ) { - if ( v_state == "x" ) { - // then do something - } else if ( v_state == "y" ) { - // then do something else - } - } // end while - f_disconnect4SelfOrClientSync(); - // unmap/disconnect more if needed - log("**** a_dummyShutDown: -> Test component stopping itself now! ****") ; - stop ; - } - } // end altstep a_dummyShutDown - - /** - * @desc Shutdown alstep in case the sync server is requesting shutdown. - * - * @remark User shall stop the component - */ - altstep a_shutdown() - runs on ClientSyncComp { - [] syncPort.receive(m_syncServerStop){ - tc_sync.stop ; - log("**** a_shutdown: Test component received STOP signal from MTC **** "); - } - } - - } // end group shutDownAltsteps - - } // end group basicUserRelevantDefinitions - - group advancedUserRelevantDefinitions { - - group serverRelated { - - /** - * @desc Implements synchronization of "n" clients from server - * side. If a problem occurs, then server sends STOP to - * all clients. Waits for PX_TSYNC_TIME_LIMIT to let - * clients finish executing their behavior until this - * synchronization point. See f_serverSyncClientsTimed for - * overwriting this later timing constraint! - * This function sets the server component verdict. - * @remark The use of this function requires prior connection of - * the server sync port! - * @see LibCommon_Sync.f_connect4SelfOrClientSync - * @see LibCommon_Sync.PX_TSYNC_TIME_LIMIT - * @see LibCommon_Sync.f_serverSyncClientsTimed - * @param p_noOfClients number of clients to be synchronized - * @param p_syncId synchronization point name/id - */ - function f_serverSyncClients( in UInt p_noOfClients, in charstring p_syncId ) - runs on ServerSyncComp { - f_serverSyncClientsTimed(p_noOfClients,p_syncId, PX_TSYNC_TIME_LIMIT); - } - - /** - * @desc Implements synchronization of "n" clients from server - * side including intermediate synchronization. - * If a problem occurs, then server sends STOP to - * all clients. Waits for PX_TSYNC_TIME_LIMIT to let - * clients finish executing their behavior until this - * synchronization point. See f_serverSyncClientsTimed for - * overwriting this later timing constraint! - * This function sets the server component verdict. - * @remark The use of this function requires prior connection of - * the server sync port! - * @see LibCommon_Sync.f_connect4SelfOrClientSync - * @see LibCommon_Sync.PX_TSYNC_TIME_LIMIT - * @see LibCommon_Sync.f_serverSyncClientsTimed - * @param p_noOfClients number of clients to be synchronized - * @param p_syncId synchronization point name/id - */ - function f_serverSyncClientsIntermediateSync( in UInt p_noOfClients, in charstring p_syncId, in UInt p_NoOfClientIntermediate, in template (present) charstring p_syncIdIntermediate ) - runs on ServerSyncComp { - f_serverSyncClientsTimedIntermediateSync(p_noOfClients,p_syncId, p_NoOfClientIntermediate, p_syncIdIntermediate, PX_TSYNC_TIME_LIMIT); - } - - /** - * @desc Handles synchronization of clients from server side. - * If problem occurs, then server sends STOP to all clients. - * This function sets the server verdict. - * @remark The use of this function requires prior connection of - * the server sync ports! - * @param p_NoOfClients number of clients to be synchronized - * @param p_syncId synchronization point name/id - * @param p_execTimeLimit time limit given to all clients to finish the execution - * of their behavior up to this synchronization point - * @see LibCommon_Sync.f_connect4SelfOrClientSync - */ - function f_serverSyncClientsTimed(in UInt p_NoOfClients, - in charstring p_syncId, - float p_execTimeLimit ) - runs on ServerSyncComp { - f_serverSyncClientsTimedIntermediateSync(p_NoOfClients, p_syncId, 0, ?, p_execTimeLimit ) - } // end function f_serverSyncClientsTimed - - /** @desc Handles synchronization of clients from server side including - * intermediate synchronization. - * If problem occurs, then server sends STOP to all clients. - * This function sets the server verdict. - * @remark The use of this function requires prior connection of - * the server sync ports! - * @param p_NoOfClients number of clients to be synchronized - * @param p_syncId synchronization point name/id - * @param p_execTimeLimit time limit given to all clients to finish the execution - * of their behavior up to this synchronization point - * @see LibCommon_Sync.f_connect4SelfOrClientSync - * @return execution status - */ - function f_serverSyncClientsTimedIntermediateSync( in UInt p_NoOfClients, - in charstring p_syncId, in UInt p_NoOfClientIntermediate, in template (present) charstring p_syncIdIntermediate, - float p_execTimeLimit ) - runs on ServerSyncComp { - - var integer v_noOfRecvdSyncMsgs := 0, v_noOfRecvdSyncMsgsIntermediate := 0; - var boolean v_stopClients := false; - var ClientSyncCompList v_clientRefs := {}, v_clientRefsIntermediate := {}; - var ClientSyncComp v_clientRef; - - if ( p_syncId == c_prDone ) { - log("**** f_serverSyncClientsTimed: Sync server now starting PREAMBLE synchronization ... ****") ; - } else if ( p_syncId == c_tbDone ) { - log("**** f_serverSyncClientsTimed: Sync server now starting TEST BODY synchronization ... ****") ; - } else if ( p_syncId == c_initDone ) { - log("**** f_serverSyncClientsTimed: Sync server now starting UPPER TESTER synchronization ... ****") ; - } else { - log("**** f_serverSyncClientsTimed: Sync server now starting handling of next synchronization point ... ****") ; - } - tc_sync.start(p_execTimeLimit) ; - alt{ - [v_noOfRecvdSyncMsgsIntermediate != p_NoOfClientIntermediate] syncPort.receive(m_syncClientReady(p_syncIdIntermediate)) -> sender v_clientRef { - if(not f_isPresentInArray(v_clientRef, v_clientRefsIntermediate)) { - v_clientRefsIntermediate[v_noOfRecvdSyncMsgsIntermediate] := v_clientRef; - v_noOfRecvdSyncMsgsIntermediate := v_noOfRecvdSyncMsgsIntermediate + 1; - if (v_noOfRecvdSyncMsgsIntermediate == p_NoOfClientIntermediate) { - f_serverSendToAllClients(v_clientRefsIntermediate, m_syncServerReady(p_syncIdIntermediate)); - } - } - repeat; - } - [] syncPort.receive(m_syncClientReady(p_syncId)) -> sender v_clientRef { - if(not f_isPresentInArray(v_clientRef, v_clientRefs)) { - v_clientRefs[v_noOfRecvdSyncMsgs] := v_clientRef; - v_noOfRecvdSyncMsgs := v_noOfRecvdSyncMsgs + 1; - } - if ( v_noOfRecvdSyncMsgs != p_NoOfClients ) { repeat; } - } - [] syncPort.receive(m_syncClientStop) -> sender v_clientRef { - log("**** f_serverSyncClientsTimed: Sync server received STOP signal from a client - server will wait for all clients to reach their next synchronization point and then stop them! ****") ; - v_stopClients := true; - if(not f_isPresentInArray(v_clientRef, v_clientRefs)) { - v_clientRefs[v_noOfRecvdSyncMsgs] := v_clientRef; - v_noOfRecvdSyncMsgs := v_noOfRecvdSyncMsgs + 1; - } - if ( v_noOfRecvdSyncMsgs != p_NoOfClients ) { repeat; } - - } - [] syncPort.receive(m_syncClientReady(?)) -> sender v_clientRef { - log("**** f_serverSyncClientsTimed: Sync server received client sync message with incorrect synchronization point id which is currently not handled - server will stop all clients! ****") ; - v_stopClients := true; - if(not f_isPresentInArray(v_clientRef, v_clientRefs)) { - v_clientRefs[v_noOfRecvdSyncMsgs] := v_clientRef; - } - } - [] syncPort.receive(SyncCmd :? ) { - log("**** f_serverSyncClientsTimed: Sync server received (invalid) sync message from other sync server - server will stop all clients! ****") ; - v_stopClients := true; } - [] any port.receive { - // leave it to be ok to receive anything else - // in case that the user has added any non-sync ports to - // his/her server component type definition! - repeat; - } - [] tc_sync.timeout{ - log("**** f_serverSyncClientsTimed: A client is not responding within specified time limit - sync server is sending stop to all clients! ****"); - v_stopClients := true; } - } //end alt - if (v_noOfRecvdSyncMsgsIntermediate != p_NoOfClientIntermediate) { - v_stopClients := true; - } - tc_sync.stop ; - if ( v_stopClients ) { - setverdict(inconc); - // then send out STOP sync msg - f_serverSendToAllClients(v_clientRefs, m_syncServerStop); - f_serverWaitForAllClientsToShutDown(); // function will never return! - } else { - setverdict(pass); - // then send out READY sync msg - f_serverSendToAllClients(v_clientRefs, m_syncServerReady(p_syncId)); - if ( p_syncId == c_prDone ) { - log("**** f_serverSyncClientsTimed: Sync server successfully passed PREAMBLE synchronization point. ****") ; - } else if ( p_syncId == c_tbDone ) { - log("**** f_serverSyncClientsTimed: Sync server successfully passed TEST BODY synchronization point. ****") ; - } else { - log("**** f_serverSyncClientsTimed: Sync server successfully passed synchronization point. ****") ; - } - } - } // end function f_serverSyncClientsTimedIntermediateSync - - /** - * @desc This function is intended only for use on the sync - * server component in concurrent TTCN-3 test cases. - * It waits for all components to finish execution within - * the PX_TSYNC_TIME_LIMIT. If a timeout occurs - * the server will stop all clients. - * This function sets the server component verdict. - */ - function f_serverWaitForAllClientsToStop() - runs on ServerSyncComp { - tc_sync.start; - alt { - [] all component.done { - tc_sync.stop; - log("**** f_serverWaitForAllClientsToStop: All sync clients have finished their execution. Sync server now terminating test case. ****") ; - } - [] tc_sync.timeout { - log("**** f_serverWaitForAllClientsToStop: Not all sync clients have finshed execution within the sync time limit. Sync server will stop test case! ****") ; - stop; - } - } // end alt - setverdict(pass); - } // end function f_serverWaitForAllClientsToStop - - } // end group serverRelated - - group clientRelated { - - /** - * @desc This function creates the connection needed to - * execute client synchronization functions - * @see LibCommon_Sync.f_clientSync - * @see LibCommon_Sync.f_clientSendStop - */ - function f_connect4ClientSync() - runs on ClientSyncComp { - connect(self:syncPort, mtc:syncPort); - }// end function f_connect4ClientSync - - /** - * @desc This function removes the connection needed - * to execute client synchronization functions - * @see LibCommon_Sync.f_clientSync - * @see LibCommon_Sync.f_clientSendStop - */ - function f_disconnect4ClientSync() - runs on ClientSyncComp { - disconnect(self:syncPort, mtc:syncPort); - }// end function f_disconnect4ClientSync - - /** - * @desc This function combines client verdict setting with its - * synchronization for use,e.g, after or within a - * test body implementation. - * Note that such premables can _not_ be reused in non- - * concurrent test cases. This can be achieved by using - * the f_selfOrClientSyncAndVerdict function instead. - * This function sets the client component verdict. - * @param p_syncId Synchronization point name/id - * @param p_ret Current behavior execution status - * @remark The use of this function requires prior connection - * of the client sync port! - * @see LibCommon_Sync.f_connect4ClientSync - * @see LibCommon_Sync.f_connect4SelfOrClientSync - * @see LibCommon_VerdictControl.f_setVerdict - * @see LibCommon_Sync.f_selfOrClientSyncAndVerdict - */ - function f_clientSyncAndVerdict(in charstring p_syncId, - in FncRetCode p_ret) - runs on ClientSyncComp { - if(vc_testcaseStep == e_preamble) { - f_clientSyncAndVerdictPreamble(p_syncId, p_ret); - } else if(vc_testcaseStep == e_testBody) { - f_clientSyncAndVerdictTestBody(p_syncId, p_ret); - } - else { - f_clientSyncAndVerdictPostamble(p_syncId, p_ret); - } - } - - /** - * @desc This function combines client verdict setting with its - * synchronization for use after or within a preamble - * implementation. - * Note that such preambles can _not_ be reused in non- - * concurrent test cases. - * This function sets the client component verdict. - * @remark The use of this function requires prior connection - * of the client sync port! - * @see LibCommon_Sync.f_connect4ClientSync - * @see LibCommon_Sync.f_connect4SelfOrClientSync - * @see LibCommon_VerdictControl.f_setVerdictPreamble - * @param p_syncId Synchronization point name/id - * @param p_ret Current behavior execution status - */ - function f_clientSyncAndVerdictPreamble(in charstring p_syncId , - FncRetCode p_ret) - runs on ClientSyncComp { - f_setVerdictPreamble(p_ret); - f_clientSync(p_syncId,p_ret); - vc_testcaseStep := e_testBody; - } - - /** - * @desc This function combines client verdict setting with its - * synchronization for use,e.g, after or within a - * test body implementation. - * Note that such premables can _not_ be reused in non- - * concurrent test cases. This can be achieved by using - * the f_selfOrClientSyncAndVerdict function instead. - * This function sets the client component verdict. - * @param p_syncId Synchronization point name/id - * @param p_ret Current behavior execution status - * @remark The use of this function requires prior connection - * of the client sync port! - * @see LibCommon_Sync.f_connect4ClientSync - * @see LibCommon_Sync.f_connect4SelfOrClientSync - * @see LibCommon_VerdictControl.f_setVerdict - * @see LibCommon_Sync.f_selfOrClientSyncAndVerdict - */ - function f_clientSyncAndVerdictTestBody(in charstring p_syncId, - in FncRetCode p_ret) - runs on ClientSyncComp { - f_setVerdict(p_ret); - f_clientSync(p_syncId,p_ret); - vc_testcaseStep := e_postamble; - } - - /** - * @desc This function combines client verdict setting with its - * synchronization for use after or within a - * postamble implementation. - * Note that such prostambles can _not_ be reused in non- - * concurrent test cases. - * This function sets the client component verdict. - * @remark The use of this function requires prior connection - * of the client sync port! - * @see LibCommon_Sync.f_connect4ClientSync - * @see LibCommon_Sync.f_connect4SelfOrClientSync - * @see LibCommon_VerdictControl.f_setVerdictPostamble - * @param p_syncId Synchronization point name/id - * @param p_ret Current behavior execution status - */ - function f_clientSyncAndVerdictPostamble(in charstring p_syncId , - in FncRetCode p_ret) - runs on ClientSyncComp { - f_setVerdictPostamble(p_ret); - f_clientSync(p_syncId,p_ret); - } - - /** - * @desc This function handles synchronization of a sync client - * with the server. In case of successful execution it sends - * a READY message to the server and waits the READY back. - * The time used for waiting is defined by PX_TSYNC_TIME_LIMIT. - * In case of a non successful execution status it - * sends a STOP message to the server. - * In both cases the receipt of a STOP message or no - * response from the server it will trigger the shutdown - * default (if activated). - * This function will set only the client verdict to INCONC - * (and stop its execution) if no STOP response is received - * from the server within the PX_TSYNC_TIME_LIMIT - * or if no shutdown default is activated. In all other - * cases the client verdict is NOT set. - * @param p_syncId Synchronization point name/id - * @param p_ret Current behavior execution status - * @remark The use of this function requires prior connection - * of the client sync port! - * @see LibCommon_Sync.f_connect4ClientSync - * @see LibCommon_Sync.f_connect4SelfOrClientSync - * @see LibCommon_Sync.PX_TSYNC_TIME_LIMIT - * @see LibCommon_Sync.a_dummyShutDown - * @see LibCommon_Sync.f_clientSendStop - * @return Updated execution status - */ - function f_clientSync( in charstring p_syncId , - in FncRetCode p_ret ) - runs on ClientSyncComp - return FncRetCode{ - - if (p_ret == e_success){ - syncPort.send(m_syncClientReady(p_syncId)); - tc_sync.start; - alt{ - [] syncPort.receive(m_syncServerReady(p_syncId)){ - tc_sync.stop ; } - [] tc_sync.timeout{ - log("**** f_clientSync: Sync client did not receive message from sync server within the specified time limit - sync client will ask sync server to stop test case! ****") ; - f_clientSendStop(); } // function will not return! - } //end alt - } //end if - else { - log("**** f_clientSync: Execution status indicates that execution of test component behavior was not successful - sync client will ask sync server to stop test case! ****") ; - f_clientSendStop(); // function will not return! - } - if ( p_syncId == c_prDone ) { - log("**** f_clientSync: Sync client successfully passed PREAMBLE synchronization point. ****") ; - } else if ( p_syncId == c_tbDone ) { - log("**** f_clientSync: Sync client successfully passed TEST BODY synchronization point. ****") ; - } else { - log("**** f_clientSync: Sync client successfully passed synchronization point. ****") ; - } - return e_success ; - - } // end function f_clientSync - - /** - * @desc This function can be used to request the shutdown a - * multi component test case _prior_ to reaching a - * synchronization point. It sends a STOP message to - * the sync server and awaits then the STOP from the server - * which will trigger the shutdown default (if activated). - * This function will set the server verdict to INCONC (and - * stop the test case) if no shutdown default is activated. - * This function will set only the client verdict to INCONC - * (and stop its execution) if no STOP response is received - * from the server within the PX_TSYNC_TIME_LIMIT - * or if no shutdown default is activated. In all other - * cases the client verdict is NOT set. - * @remark The use of this function requires prior connection - * of the client sync port! - * @see LibCommon_Sync.f_connect4ClientSync - * @see LibCommon_Sync.f_connect4SelfOrClientSync - * @see LibCommon_Sync.PX_TSYNC_TIME_LIMIT - * @see LibCommon_Sync.a_dummyShutDown - */ - function f_clientSendStop() - runs on ClientSyncComp { - log("**** f_clientSendStop: Sync client requesting from server to stop test case (including itself). ****") ; - syncPort.send(m_syncClientStop) ; - tc_sync.start; - alt{ - [] tc_sync.timeout{ - log("**** f_clientSendStop: Stopping sync client without shutdown - either no shutdown default active or no stop received from server. ****") ; - setverdict(inconc); - stop ; - } - }//end alt - tc_sync.stop; - stop; // stop here if shutdown default does not stop - } - - } // end group clientRelated - - } // end group advancedUserRelevantDefinitions - - group otherSyncModuleDefinitions { - - group syncModuleparams { - /** - * - * @desc Default time limit for a sync client to reach a - * synchronization point - */ - modulepar float PX_TSYNC_TIME_LIMIT := 120.0; - - /* - * @desc Default time limit for a sync client to finish - * its execution of the shutdown default - */ - modulepar float PX_TSHUT_DOWN_TIME_LIMIT := 120.0; - } - - group otherSyncTypes { - - type record of charstring SyncPointList; - - type record of ClientSyncComp ClientSyncCompList; - - } // end group otherSyncTypes - - group otherSelfSyncRelatedDefinitions { - - /** - * @desc This function creates the connection needed to - * execute self sync functions - * @see LibCommon_Sync.f_selfSync - * @see LibCommon_Sync.f_selfSyncStop - */ - function f_connect4SelfSync() - runs on SelfSyncComp { - connect(self:syncSendPort, self:syncPort); - }// end function f_connect4SelfSync - - /** - * @desc This function removes the connection needed - * to execute self sync functions - * @see LibCommon_Sync.f_selfSync - * @see LibCommon_Sync.f_selfSyncStop - */ - function f_disconnect4SelfSync() - runs on SelfSyncComp { - disconnect(self:syncSendPort, self:syncPort); - }// end function f_disconnect4SelfSync - - /** - * @desc This function combines MTC verdict setting with self - * synchronization for use in the preamble / test body / postamble - * @param p_syncId Synchronization point name/id - * @param p_ret Current behavior execution status - * @see LibCommon_VerdictControl.f_setVerdict - * @see LibCommon_Sync.f_selfSync - * @see LibCommon_Sync.a_dummyShutDown - */ - function f_selfSyncAndVerdict( in charstring p_syncId, - in FncRetCode p_ret ) - runs on SelfSyncComp { - if(vc_testcaseStep == e_preamble) { - f_selfSyncAndVerdictPreamble(p_syncId, p_ret); - } else if(vc_testcaseStep == e_testBody) { - f_selfSyncAndVerdictTestBody(p_syncId, p_ret); - } - else { - f_selfSyncAndVerdictPostamble(p_syncId, p_ret); - } - } - - /** - * @desc This function combines MTC verdict setting with self - * synchronization for use after the preamble. - * @param p_syncId Synchronization point name/id - * @param p_ret Current behavior execution status - * @see LibCommon_VerdictControl.f_setVerdictPreamble - * @see LibCommon_Sync.f_selfSync - */ - function f_selfSyncAndVerdictPreamble( in charstring p_syncId, - in FncRetCode p_ret ) - runs on SelfSyncComp { - f_setVerdictPreOrPostamble(p_ret); - f_selfSync(p_syncId,p_ret); - vc_testcaseStep := e_testBody; - } - - /** - * @desc This function combines MTC verdict setting with self - * synchronization for use after the test body. - * @param p_syncId Synchronization point name/id - * @param p_ret Current behavior execution status - * @see LibCommon_VerdictControl.f_setVerdict - * @see LibCommon_Sync.f_selfSync - */ - function f_selfSyncAndVerdictTestBody( in charstring p_syncId, - in FncRetCode p_ret ) - runs on SelfSyncComp { - f_setVerdict(p_ret); - f_selfSync(p_syncId,p_ret); - vc_testcaseStep := e_postamble; - } - - /** - * @desc This function combines MTC verdict setting with self - * synchronization for use after the postamble. - * @param p_syncId Synchronization point name/id - * @param p_ret Current behavior execution status - * @see LibCommon_VerdictControl.f_setVerdictPostamble - * @see LibCommon_Sync.f_selfSync - */ - function f_selfSyncAndVerdictPostamble( in charstring p_syncId , - in FncRetCode p_ret ) - runs on SelfSyncComp { - f_setVerdictPreOrPostamble(p_ret); - f_selfSync(p_syncId,p_ret); - } - - /** - * @desc This function synchronizes a MTC with itself. In case - * of a non successful execution status it sends a STOP - * message to itself and invokes that way the - * shutdown default (if activated). - * This function will set the server verdict to INCONC (and - * stop the test case) if no shutdown default is activated. - * Otherwise no verdict is set. - * @remark Sync ports should be connected prior to the invocation - * of this function! - * @param p_syncId Synchronization point name/id - * @param p_ret Current behavior execution status - * @return Updated execution status - * @see LibCommon_Sync.f_connect4SelfSync - * @see LibCommon_Sync.a_dummyShutDown - */ - function f_selfSync( in charstring p_syncId , - in FncRetCode p_ret ) - runs on SelfSyncComp - return FncRetCode{ - if (p_ret != e_success){ - f_selfSyncStop() ; // function will not return! - } - if ( p_syncId == c_prDone ) { - log("**** f_selfSync: Successfully passed PREAMBLE synchronization point. ****") ; - } else if ( p_syncId == c_tbDone ) { - log("**** f_selfSync: Successfully passed TEST BODY synchronization point. ****") ; - } else { - log("**** f_selfSync: Successfully passed synchronization point. ****") ; - } - return e_success ; - }// end function f_selfSync - - /** - * @desc This function can be used to shut down a test case _prior_ - * to reaching a synchronization point. it sends a STOP - * message to itself and invokes that way the - * shutdown default (if activated). - * This function will set the server verdict to INCONC (and - * stop the test case) if no shutdown default is activated. - * Otherwise no verdict is set. - * @remark Sync ports should be connected prior to the invocation - * of this function! - * @see LibCommon_Sync.f_connect4SelfSync - */ - function f_selfSyncStop() - runs on SelfSyncComp { - - log("**** f_selfSyncStop: MTC requests to stop test case (itself). ****") ; - syncSendPort.send(m_syncServerStop) ; // this MUST be _server_ for the default to catch! - tc_sync.start(PX_TSYNC_TIME_LIMIT); - alt{ - [] tc_sync.timeout{ - log("**** f_selfSyncStop: Stopping MTC without shutdown - either no shutdown default active or missing syncPort connection ****") ; - setverdict(inconc); - stop ; - } - }//end alt - tc_sync.stop; - stop; // if shutdown default is not activated or if it does not stop - } // end function f_selfSyncStop - - } // end group otherSelfSyncRelatedDefinitions - - /** - * - * @desc The sychronization protocol is conceptually based on - * named synchronization. Each synchronization point - * has it own specific synchronization message. This - * makes each synchronization unique, and allows, e.g., to - * ensure that a server synchronizes only clients which have - * reached the same synchronization point. - */ - group syncProtocolDefinition { - - type union SyncCmd { - ClientReady clientReady, - ServerReady serverReady, - ClientStop clientStop, - ServerStop serverStop - } - - type record ClientReady { - charstring syncPointId - } - - type record ServerReady { - charstring syncPointId - } - - type record ClientStop {} - - type record ServerStop {} - - } // end group syncProtocolDefinition - - group syncMessages { - template SyncCmd m_syncClientReady( template (present) charstring p_syncId ) := { - clientReady := { p_syncId } - } - - template SyncCmd m_syncServerReady( template (present) charstring p_syncId ) := { - serverReady := { p_syncId } - } - - template SyncCmd m_syncClientStop := { - clientStop := {} - } - - template SyncCmd m_syncServerStop := { - serverStop := {} - } - - } // end group syncMessages - - group otherSyncFunctions { - - /** - * @desc Makes server send a sync message to all known clients - * @param p_clientRefs List of client references to which the message is to be send - * @param p_syncCmd The actual synchronization message to be sent out - */ - function f_serverSendToAllClients( in ClientSyncCompList p_clientRefs, - in template (value) SyncCmd p_syncCmd) - runs on ServerSyncComp { - var integer i:=0; - for (i:=0; i< sizeof(p_clientRefs); i:=i+1 ){ - syncPort.send(p_syncCmd) to valueof(p_clientRefs[i]); - } - } // end function f_serverSendToAllClients - - /** - * @desc This function is intended only for use on server in concurrent - * TTCN-3 test cases. It waits for all components to shut down - * within the PX_TSHUT_DOWN_TIME_LIMIT. If a timeout occurs - * it aborts the test case (no matter how far clients got with their - * shutdown). - * This function sets the server verdict. - */ - function f_serverWaitForAllClientsToShutDown() - runs on ServerSyncComp { - - tc_shutDown.start(PX_TSHUT_DOWN_TIME_LIMIT); - alt { - [] syncPort.receive { - // clients may still try to send some sync message - } - [] all component.done { - tc_shutDown.stop; - log("**** f_serverWaitForAllClientsToShutDown: All components have properly shut down. Sync server will now terminate the test case. ****") ; - } - [] tc_shutDown.timeout { - log("**** f_serverWaitForAllClientsToShutDown: Not all clients have properly shutdown within the shut down time limit. Sync server will now terminate test case! ****") ; - } - } // end alt - // cover case that shut down default is NOT activated - setverdict(inconc); - //mtc.stop; - syncPort.send(m_syncServerStop) to self; // this MUST be _server_ for the default to catch! - tc_sync.start(PX_TSYNC_TIME_LIMIT); - alt{ - [] tc_sync.timeout{ - log("**** f_selfSyncStop: Stopping MTC without shutdown - either no shutdown default active or missing syncPort connection ****") ; - setverdict(inconc); - stop ; - } - }//end alt - tc_sync.stop; - stop; // if shutdown default is not activated or if it does not stop - } // end function f_serverWaitForAllClientsToShutDown - - function f_isPresentInArray(in ClientSyncComp p_clientRef, in ClientSyncCompList p_clientRefs) - return boolean { - var integer i; - for(i:=0; i < sizeof(p_clientRefs); i:=i+1) { - if(p_clientRefs[i] == p_clientRef) { - return true; - } - } - return false; - } - } // end group otherSyncFunctions - - } // end group otherSyncDefinitions - -} // end module LibCommon_Sync diff --git a/ttcn/patch_lib_common_titan/module.mk b/ttcn/patch_lib_common_titan/module.mk index 3b3b660..905b488 100644 --- a/ttcn/patch_lib_common_titan/module.mk +++ b/ttcn/patch_lib_common_titan/module.mk @@ -1,9 +1,9 @@ sources := \ ttcn/LibCommon_AbstractData.ttcn \ - ttcn/LibCommon_BasicTypesAndValues.ttcn \ - ttcn/LibCommon_DataStrings.ttcn \ - ttcn/LibCommon_Sync.ttcn \ ttcn/LibCommon_TextStrings.ttcn \ ttcn/LibCommon_Time.ttcn \ - ttcn/LibCommon_VerdictControl.ttcn + ttcn/LibCommon_VerdictControl.ttcn \ + ../patch_lib_common_titan/ttcn/LibCommon_BasicTypesAndValues.ttcn \ + ../patch_lib_common_titan/ttcn/LibCommon_DataStrings.ttcn \ + ../patch_lib_common_titan/ttcn/LibCommon_Sync.ttcn \ diff --git a/ttcn/patch_lib_common_titan/ttcn/LibCommon_BasicTypesAndValues.ttcn b/ttcn/patch_lib_common_titan/ttcn/LibCommon_BasicTypesAndValues.ttcn index 5758c7c..9b5477d 100644 --- a/ttcn/patch_lib_common_titan/ttcn/LibCommon_BasicTypesAndValues.ttcn +++ b/ttcn/patch_lib_common_titan/ttcn/LibCommon_BasicTypesAndValues.ttcn @@ -172,38 +172,38 @@ const integer c_int32Max := 2147483647; type integer Int; - type integer Int1 (c_int1Min .. c_int1Max) with { variant "1 bit, COMP(2scompl)" }; - type integer Int2 (c_int2Min .. c_int2Max) with { variant "2 bit, COMP(2scompl)" }; - type integer Int3 (c_int3Min .. c_int3Max) with { variant "3 bit, COMP(2scompl)" }; - type integer Int4 (c_int4Min .. c_int4Max) with { variant "4 bit, COMP(2scompl)" }; - type integer Int5 (c_int5Min .. c_int5Max) with { variant "5 bit, COMP(2scompl)" }; - type integer Int6 (c_int6Min .. c_int6Max) with { variant "6 bit, COMP(2scompl)" }; - type integer Int7 (c_int7Min .. c_int7Max) with { variant "7 bit, COMP(2scompl)" }; - type integer Int8 (c_int8Min .. c_int8Max) with { variant "8 bit, COMP(2scompl)" }; - type integer Int9 (c_int9Min .. c_int9Max) with { variant "9 bit, COMP(2scompl)" }; - type integer Int10 (c_int10Min .. c_int10Max) with { variant "10 bit, COMP(2scompl)" }; - type integer Int11 (c_int11Min .. c_int11Max) with { variant "11 bit, COMP(2scompl)" }; - type integer Int12 (c_int12Min .. c_int12Max) with { variant "12 bit, COMP(2scompl)" }; - type integer Int13 (c_int13Min .. c_int13Max) with { variant "13 bit, COMP(2scompl)" }; - type integer Int14 (c_int14Min .. c_int14Max) with { variant "14 bit, COMP(2scompl)" }; - type integer Int15 (c_int15Min .. c_int15Max) with { variant "15 bit, COMP(2scompl)" }; - type integer Int16 (c_int16Min .. c_int16Max) with { variant "16 bit, COMP(2scompl)" }; - type integer Int17 (c_int17Min .. c_int17Max) with { variant "17 bit, COMP(2scompl)" }; - type integer Int18 (c_int18Min .. c_int18Max) with { variant "18 bit, COMP(2scompl)" }; - type integer Int19 (c_int19Min .. c_int19Max) with { variant "19 bit, COMP(2scompl)" }; - type integer Int20 (c_int20Min .. c_int20Max) with { variant "20 bit, COMP(2scompl)" }; - type integer Int21 (c_int21Min .. c_int21Max) with { variant "21 bit, COMP(2scompl)" }; - type integer Int22 (c_int22Min .. c_int22Max) with { variant "22 bit, COMP(2scompl)" }; - type integer Int23 (c_int23Min .. c_int23Max) with { variant "23 bit, COMP(2scompl)" }; - type integer Int24 (c_int24Min .. c_int24Max) with { variant "24 bit, COMP(2scompl)" }; - type integer Int25 (c_int25Min .. c_int25Max) with { variant "25 bit, COMP(2scompl)" }; - type integer Int26 (c_int26Min .. c_int26Max) with { variant "26 bit, COMP(2scompl)" }; - type integer Int27 (c_int27Min .. c_int27Max) with { variant "27 bit, COMP(2scompl)" }; - type integer Int28 (c_int28Min .. c_int28Max) with { variant "28 bit, COMP(2scompl)" }; - type integer Int29 (c_int29Min .. c_int29Max) with { variant "29 bit, COMP(2scompl)" }; - type integer Int30 (c_int30Min .. c_int30Max) with { variant "30 bit, COMP(2scompl)" }; - type integer Int31 (c_int31Min .. c_int31Max) with { variant "31 bit, COMP(2scompl)" }; - type integer Int32 (c_int32Min .. c_int32Max) with { variant "32 bit, COMP(2scompl)" }; + type integer Int1 (c_int1Min .. c_int1Max) with { variant "1 bit"}; + type integer Int2 (c_int2Min .. c_int2Max) with { variant "2 bit"}; + type integer Int3 (c_int3Min .. c_int3Max) with { variant "3 bit"}; + type integer Int4 (c_int4Min .. c_int4Max) with { variant "4 bit"}; + type integer Int5 (c_int5Min .. c_int5Max) with { variant "5 bit"}; + type integer Int6 (c_int6Min .. c_int6Max) with { variant "6 bit"}; + type integer Int7 (c_int7Min .. c_int7Max) with { variant "7 bit"}; + type integer Int8 (c_int8Min .. c_int8Max) with { variant "8 bit"}; + type integer Int9 (c_int9Min .. c_int9Max) with { variant "9 bit"}; + type integer Int10 (c_int10Min .. c_int10Max) with { variant "10 bit"}; + type integer Int11 (c_int11Min .. c_int11Max) with { variant "11 bit"}; + type integer Int12 (c_int12Min .. c_int12Max) with { variant "12 bit"}; + type integer Int13 (c_int13Min .. c_int13Max) with { variant "13 bit"}; + type integer Int14 (c_int14Min .. c_int14Max) with { variant "14 bit"}; + type integer Int15 (c_int15Min .. c_int15Max) with { variant "15 bit"}; + type integer Int16 (c_int16Min .. c_int16Max) with { variant "16 bit"}; + type integer Int17 (c_int17Min .. c_int17Max) with { variant "17 bit"}; + type integer Int18 (c_int18Min .. c_int18Max) with { variant "18 bit"}; + type integer Int19 (c_int19Min .. c_int19Max) with { variant "19 bit"}; + type integer Int20 (c_int20Min .. c_int20Max) with { variant "20 bit"}; + type integer Int21 (c_int21Min .. c_int21Max) with { variant "21 bit"}; + type integer Int22 (c_int22Min .. c_int22Max) with { variant "22 bit"}; + type integer Int23 (c_int23Min .. c_int23Max) with { variant "23 bit"}; + type integer Int24 (c_int24Min .. c_int24Max) with { variant "24 bit"}; + type integer Int25 (c_int25Min .. c_int25Max) with { variant "25 bit"}; + type integer Int26 (c_int26Min .. c_int26Max) with { variant "26 bit"}; + type integer Int27 (c_int27Min .. c_int27Max) with { variant "27 bit"}; + type integer Int28 (c_int28Min .. c_int28Max) with { variant "28 bit"}; + type integer Int29 (c_int29Min .. c_int29Max) with { variant "29 bit"}; + type integer Int30 (c_int30Min .. c_int30Max) with { variant "30 bit"}; + type integer Int31 (c_int31Min .. c_int31Max) with { variant "31 bit"}; + type integer Int32 (c_int32Min .. c_int32Max) with { variant "32 bit"}; } // end group signedIntegerDefintions diff --git a/ttcn/patch_lib_common_titan/LibCommon_DataStrings.ttcn b/ttcn/patch_lib_common_titan/ttcn/LibCommon_DataStrings.ttcn similarity index 100% rename from ttcn/patch_lib_common_titan/LibCommon_DataStrings.ttcn rename to ttcn/patch_lib_common_titan/ttcn/LibCommon_DataStrings.ttcn diff --git a/ttcn/patch_lib_common_titan/ttcn/LibCommon_Sync.ttcn b/ttcn/patch_lib_common_titan/ttcn/LibCommon_Sync.ttcn index 7b95770..5b2ae66 100644 --- a/ttcn/patch_lib_common_titan/ttcn/LibCommon_Sync.ttcn +++ b/ttcn/patch_lib_common_titan/ttcn/LibCommon_Sync.ttcn @@ -1,7 +1,7 @@ /** * @author ETSI - * @version $URL: https://oldforge.etsi.org/svn/LibCommon/tags/v1.4.0/ttcn/LibCommon_Sync.ttcn $ - * $Id: LibCommon_Sync.ttcn 66 2017-03-06 09:59:41Z filatov $ + * @version $URL$ + * $Id$ * @desc This module implements _one_ generic synchronization mechanism * for TTCN-3 test cases with one or more test components. * Key concept is here that one test component acts as a diff --git a/virtualization/docker-dev/Dockerfile.stfubuntu b/virtualization/docker-dev/Dockerfile.stfubuntu index 57104b3..9fa6645 100644 --- a/virtualization/docker-dev/Dockerfile.stfubuntu +++ b/virtualization/docker-dev/Dockerfile.stfubuntu @@ -1,7 +1,6 @@ FROM ubuntu:20.04 -MAINTAINER ETSI STF - +LABEL ETSI CTI LABEL description="STF Docker Ubuntu image" ENV TERM=linux \ @@ -10,11 +9,8 @@ ENV TERM=linux \ RUN echo "docker-STF-dev" > /etc/hostname \ && DEBIAN_FRONTEND=noninteractive apt-get update \ && DEBIAN_FRONTEND=noninteractive apt-get dist-upgrade -y \ - && 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-java17-installer shared/accepted-oracle-license-v1-3 boolean true" | debconf-set-selections -v ) \ - && DEBIAN_FRONTEND=noninteractive apt-get --allow-unauthenticated install -y \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y \ autoconf \ bison \ build-essential \ @@ -25,10 +21,9 @@ RUN echo "docker-STF-dev" > /etc/hostname \ emacs \ expect \ flex \ - g++-8 \ - gcc-8 \ - gdb \ - git-core \ + g++-9 \ + gcc-9 \ + git \ gnutls-bin \ graphviz \ iputils-ping \ @@ -40,43 +35,27 @@ RUN echo "docker-STF-dev" > /etc/hostname \ libjsoncpp-dev \ libncurses5-dev \ libpcap-dev \ - libqt5svg5-dev \ - libreadline-dev \ libssl-dev \ libtool-bin \ libtool \ - libwireshark-dev \ libxml2-dev \ libxml2-utils \ libyaml-dev \ lsof \ - net-tools \ ntp \ - oracle-java17-installer \ - oracle-java17-set-default \ openssh-server \ pkg-config \ python3-dev \ python3-pip \ python3-setuptools \ - qt5-default \ - qtmultimedia5-dev \ - subversion \ sudo \ sshpass \ tcpdump \ texlive-font-utils \ - texlive-latex-base \ texlive-latex-extra \ - tshark \ tzdata \ valgrind \ - vim \ - vsftpd \ xutils-dev \ - tree \ - unzip \ - wget \ xsltproc \ && DEBIAN_FRONTEND=noninteractive apt-get autoremove --purge -y \ && DEBIAN_FRONTEND=noninteractive apt-get autoclean \ -- GitLab From e7746012b75bf622caf8bc6569bfa2ac7e72eb9a Mon Sep 17 00:00:00 2001 From: garciay Date: Thu, 6 Jul 2023 18:28:22 +0200 Subject: [PATCH 33/99] Bug fixed in install.sh --- Makefile | 2 +- config.mk | 3 ++- install.sh | 4 ++-- titan-test-system-framework | 2 +- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/Makefile b/Makefile index 80b364a..62e6da4 100644 --- a/Makefile +++ b/Makefile @@ -123,7 +123,7 @@ $(cc_objects) : $(outdir)/%.o : %.cc $(gen_sources): $(outdir)/.generate $(outdir)/.generate: Makefile $(tt_sources) - $(TTCN3_DIR)/bin/compiler -b -d -e -f -g -l -L -M -n -O -r -R -U none -x -X -o $(outdir) $(tt_sources) + $(TTCN3_DIR)/bin/compiler $(TTCN3_COMPILER_OPTIONS) -o $(outdir) $(tt_sources) touch $@ $(foreach S, $(ttcn_sources), $(eval $(outdir)/$(notdir $(patsubst %.ttcn, %.cc, $(S))): $(S))) diff --git a/config.mk b/config.mk index 66a7380..d5d4014 100644 --- a/config.mk +++ b/config.mk @@ -1,4 +1,5 @@ -#TTCN3_DIR := /cygdrive/c/Tools/Titan +TTCN3_COMPILER_OPTIONS := -b -d -e -f -g -l -L -M -n -O -r -R -U none -x -X +TTCN3_DIR := $(HOME)/frameworks/titan/titan.core/Install #WPCAP_DLL_PATH := /cygdrive/c/windows/system32/npcap/wpcap.dll #NPCAP_INCLUDE := /cygdrive/c/PROGRA~1/Npcap/sdk/include T3Q_PATH=./tools/t3q-v2.0.0b30 diff --git a/install.sh b/install.sh index 98a0865..c8048c9 100755 --- a/install.sh +++ b/install.sh @@ -7,9 +7,9 @@ BASE_PATH=`pwd` git submodule update --init --recursive --remote -if [ ! -f ./titan-test-system-framework ] +if [ ! -d ./titan-test-system-framework ] then - git clone --recurse-submodules --single-branch --branch devel https://labs.etsi.org/rep/cti-tools/titan-test-system-framework.git + git clone --recurse-submodules --branch devel https://labs.etsi.org/rep/cti-tools/titan-test-system-framework.git cd ./titan-test-system-framework else cd ./titan-test-system-framework diff --git a/titan-test-system-framework b/titan-test-system-framework index 554d6b6..524df4e 160000 --- a/titan-test-system-framework +++ b/titan-test-system-framework @@ -1 +1 @@ -Subproject commit 554d6b6b3ce1e51d88267a3c946cd30caac97a55 +Subproject commit 524df4ef9a2fed2c32c1d9166ebebdb51fa666ba -- GitLab From 4f034fd66264bbc65bf872afd27e1f6abde31eb4 Mon Sep 17 00:00:00 2001 From: garciay Date: Mon, 17 Jul 2023 10:15:39 +0200 Subject: [PATCH 34/99] Rebuild AtsMec with new typing --- .jenkins.sh | 14 +- ccsrc/Protocols/Json/json_codec.cc | 86 +-- .../AtsMec_Location_Mockoon.cf_ | 16 +- .../AtsMec_Location_Sandbox.cf_ | 14 +- .../AtsMec_Ams/AtsMec_Ams_TestControl.ttcn | 23 - ...ceApplicationInterfaceAPI_TestControl.ttcn | 24 +- ...leAndOperationGrantingAPI_TestControl.ttcn | 23 - .../AtsMec_LocationAPI_TestCases.ttcn | 416 +++++++-------- .../AtsMec_LocationAPI_TestControl.ttcn | 8 +- ttcn/AtsMec_Location/module.mk | 1 + .../ttcn/LocationAPI_Functions.ttcn | 353 +++++++------ .../LocationAPI/ttcn/LocationAPI_Pixits.ttcn | 18 +- .../ttcn/LocationAPI_Templates.ttcn | 496 +++++++++++++++--- .../ttcn/LocationAPI_TypesAndValues.ttcn | 77 +-- .../ttcn/TrafficManagementAPI_Functions.ttcn | 8 +- .../V2XInformationServiceAPI_Functions.ttcn | 63 +-- ...XInformationServiceAPI_TypesAndValues.ttcn | 2 +- .../WlanInformationAPI_TypesAndValues.ttcn | 1 - ttcn/LibMec/ttcn/LibMec_Pics.ttcn | 2 +- ttcn/LibMec/ttcn/LibMec_Pixits.ttcn | 12 +- .../ttcn/LibHttp_JsonMessageBodyTypes.ttcn | 19 +- .../ttcn/LibHttp_JsonTemplates.ttcn | 364 +++++++------ 22 files changed, 1180 insertions(+), 860 deletions(-) diff --git a/.jenkins.sh b/.jenkins.sh index 54e5a9f..260dfdf 100755 --- a/.jenkins.sh +++ b/.jenkins.sh @@ -10,8 +10,16 @@ cd $(dirname $0) run_dir=`pwd` # Docker version 2 -cd ./virtualization/docker +cd ./virtualization/docker-dev ./build.sh #--force-stfubuntu +ret_code=`echo $?` + +if [ $ret_code != 0 ] +then + cd $run_dir + exit -1 +fi + #./run.sh if [ "$1" == "--remove" ] @@ -19,4 +27,6 @@ then docker rmi --force mec_devel:latest fi -cd - +cd $run_dir + +exit 0 diff --git a/ccsrc/Protocols/Json/json_codec.cc b/ccsrc/Protocols/Json/json_codec.cc index 230da83..8d8bdec 100644 --- a/ccsrc/Protocols/Json/json_codec.cc +++ b/ccsrc/Protocols/Json/json_codec.cc @@ -20,26 +20,26 @@ int json_codec::encode (const LibHttp__JsonMessageBodyTypes::JsonBody& msg, OCTE const UEidentityAPI__TypesAndValues::UeIdentityTagInfo& ue_identity_tag_info = msg.ueIdentityTagInfo(); ue_identity_tag_info.encode(UEidentityAPI__TypesAndValues::UeIdentityTagInfo_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); data = OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data()); - } else if (msg.ischosen(LibHttp__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("}")); - } else if (msg.ischosen(LibHttp__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(LibHttp__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("}")); - } else if (msg.ischosen(LibHttp__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("}")); - } else if (msg.ischosen(LibHttp__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("}")); + } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_userLocationEventSubscription)) { + const LocationAPI__TypesAndValues::UserLocationEventSubscription& user_location_event_subscription = msg.userLocationEventSubscription(); + user_location_event_subscription.encode(LocationAPI__TypesAndValues::UserLocationEventSubscription_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); + data = char2oct(CHARSTRING("{\"userLocationEventSubscription\": ")) + OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data()) + char2oct(CHARSTRING("}")); + } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_userLocationPeriodicSubscription)) { + const LocationAPI__TypesAndValues::UserLocationPeriodicSubscription& user_location_periodic_subscription = msg.userLocationPeriodicSubscription(); + user_location_periodic_subscription.encode(LocationAPI__TypesAndValues::UserLocationPeriodicSubscription_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); + data = char2oct(CHARSTRING("{\"userLocationPeriodicSubscription\": ")) + OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data()) + char2oct(CHARSTRING("}")); + } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_zoneLocationEventSubscription)) { + const LocationAPI__TypesAndValues::ZoneLocationEventSubscription& zone_location_event_subscription = msg.zoneLocationEventSubscription(); + zone_location_event_subscription.encode(LocationAPI__TypesAndValues::ZoneLocationEventSubscription_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); + data = char2oct(CHARSTRING("{\"zoneLocationEventSubscription\": ")) + OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data()) + char2oct(CHARSTRING("}")); + } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_userAreaSubscription)) { + const LocationAPI__TypesAndValues::UserAreaSubscription& notif = msg.userAreaSubscription(); + notif.encode(LocationAPI__TypesAndValues::UserAreaSubscription_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); + data = char2oct(CHARSTRING("{\"userAreaSubscription\": ")) + OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data()) + char2oct(CHARSTRING("}")); + } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_userDistanceSubscription)) { + const LocationAPI__TypesAndValues::UserDistanceSubscription& notif = msg.userDistanceSubscription(); + notif.encode(LocationAPI__TypesAndValues::UserDistanceSubscription_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); + data = char2oct(CHARSTRING("{\"userDistanceSubscription\": ")) + OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data()) + char2oct(CHARSTRING("}")); } else if (msg.ischosen(LibHttp__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); @@ -146,44 +146,44 @@ int json_codec::decode (const OCTETSTRING& p_data, LibHttp__JsonMessageBodyTypes LocationAPI__TypesAndValues::AccessPointList access_point_list; access_point_list.decode(LocationAPI__TypesAndValues::AccessPointList_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.accessPointList() = access_point_list; - } else if (it->second.find("\"userTrackingSubscription\"") != std::string::npos) { + } else if (it->second.find("\"userLocationEventSubscription\"") != 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::UserTrackingSubscription user_tracking_subscription; - user_tracking_subscription.decode(LocationAPI__TypesAndValues::UserTrackingSubscription_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); - msg.userTrackingSubscription() = user_tracking_subscription; + LocationAPI__TypesAndValues::UserLocationEventSubscription user_location_event_subscription; + user_location_event_subscription.decode(LocationAPI__TypesAndValues::UserLocationEventSubscription_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); + msg.userLocationEventSubscription() = user_location_event_subscription; - } else if (it->second.find("\"periodicNotificationSubscription\"") != std::string::npos) { + } else if (it->second.find("\"userLocationPeriodicSubscription\"") != 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) { + LocationAPI__TypesAndValues::UserLocationPeriodicSubscription user_location_periodic_subscription; + user_location_periodic_subscription.decode(LocationAPI__TypesAndValues::UserLocationPeriodicSubscription_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); + msg.userLocationPeriodicSubscription() = user_location_periodic_subscription; + } else if (it->second.find("\"zoneLocationEventSubscription\"") != 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) { + LocationAPI__TypesAndValues::ZoneLocationEventSubscription zone_location_event_subscription; + zone_location_event_subscription.decode(LocationAPI__TypesAndValues::ZoneLocationEventSubscription_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); + msg.zoneLocationEventSubscription() = zone_location_event_subscription; + } else if (it->second.find("\"userLocationPeriodicSubscription\"") != 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::PeriodicTrackingSubscription periodic_tracking_subscription; - periodic_tracking_subscription.decode(LocationAPI__TypesAndValues::PeriodicTrackingSubscription_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); - msg.periodicTrackingSubscription() = periodic_tracking_subscription; + LocationAPI__TypesAndValues::UserLocationPeriodicSubscription periodic_tracking_subscription; + periodic_tracking_subscription.decode(LocationAPI__TypesAndValues::UserLocationPeriodicSubscription_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); + msg.userLocationPeriodicSubscription() = periodic_tracking_subscription; } else if (it->second.find("\"accessPointId\"") != std::string::npos) { LocationAPI__TypesAndValues::UserInfo user_info; user_info.decode(LocationAPI__TypesAndValues::UserInfo_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); @@ -201,17 +201,17 @@ int json_codec::decode (const OCTETSTRING& p_data, LibHttp__JsonMessageBodyTypes 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) { + LocationAPI__TypesAndValues::UserAreaSubscription notif; + notif.decode(LocationAPI__TypesAndValues::UserAreaSubscription_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); + msg.userAreaSubscription() = notif; + } else if (it->second.find("\"userDistanceSubscription\"") != 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; + LocationAPI__TypesAndValues::UserDistanceSubscription notif; + notif.decode(LocationAPI__TypesAndValues::UserDistanceSubscription_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); + msg.userDistanceSubscription() = notif; } 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); diff --git a/etc/AtsMec_Location/AtsMec_Location_Mockoon.cf_ b/etc/AtsMec_Location/AtsMec_Location_Mockoon.cf_ index 52e927a..292a40d 100644 --- a/etc/AtsMec_Location/AtsMec_Location_Mockoon.cf_ +++ b/etc/AtsMec_Location/AtsMec_Location_Mockoon.cf_ @@ -313,16 +313,16 @@ AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_APPSAQ_0 #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 subscription by a MEC Application to notifications user location event +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UELOCSUB_001_OK_01 +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - Neither callbackReference nor websockNotifConfig provided +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UELOCSUB_001_BR_01 # 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 subscription by a MEC Application to notifications user location periodic +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UELOCSUB_001_OK_02 # 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 @@ -335,7 +335,7 @@ AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_APPSAQ_0 #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 +# Check that the IUT responds with a list zones when queried by a MEC Application #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 @@ -348,7 +348,7 @@ AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_APPSAQ_0 # 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 +#AtsMec_LocationAPI_TestCases.TP_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 diff --git a/etc/AtsMec_Location/AtsMec_Location_Sandbox.cf_ b/etc/AtsMec_Location/AtsMec_Location_Sandbox.cf_ index b9c2f57..8de3d45 100644 --- a/etc/AtsMec_Location/AtsMec_Location_Sandbox.cf_ +++ b/etc/AtsMec_Location/AtsMec_Location_Sandbox.cf_ @@ -82,16 +82,16 @@ AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UELOCLOOK_001_OK #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 +# Check that the IUT acknowledges the subscription by a MEC Application to notifications user location event #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 responds with an error when a request with incorrect parameters is sent by a MEC Application - Neither callbackReference nor websockNotifConfig provided +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UELOCSUB_001_BR_01 # 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 subscription by a MEC Application to notifications user location periodic +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UELOCSUB_001_OK_02 # 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 @@ -104,7 +104,7 @@ AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UELOCLOOK_001_OK #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 +# Check that the IUT responds with a list zones when queried by a MEC Application #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 @@ -117,7 +117,7 @@ AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UELOCLOOK_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 +#AtsMec_LocationAPI_TestCases.TP_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 diff --git a/ttcn/AtsMec/AtsMec_Ams/AtsMec_Ams_TestControl.ttcn b/ttcn/AtsMec/AtsMec_Ams/AtsMec_Ams_TestControl.ttcn index 4c74736..9aace58 100644 --- a/ttcn/AtsMec/AtsMec_Ams/AtsMec_Ams_TestControl.ttcn +++ b/ttcn/AtsMec/AtsMec_Ams/AtsMec_Ams_TestControl.ttcn @@ -17,7 +17,6 @@ module AtsMec_TestControl { import from LibMec_Pics all; // AtsMec - import from AtsMec_LocationAPI_TestCases all; import from AtsMec_UEidentityAPI_TestCases all; // import from AtsMec_RadioNodeLocationAPI_TestCases all; import from AtsMec_RnisAPI_TestCases all; @@ -37,28 +36,6 @@ module AtsMec_TestControl { execute(TC_MEC_MEC014_SRV_UETAG_002_PF()); } if (PICS_LOCATION_API_SUPPORTED) { - execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_OK()); - execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_BR()); - execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_NF()); - - execute(TC_MEC_MEC013_SRV_UELOCSUB_001_OK()); - execute(TC_MEC_MEC013_SRV_UELOCSUB_001_BR()); - execute(TC_MEC_MEC013_SRV_UELOCSUB_002_OK()); - execute(TC_MEC_MEC013_SRV_UELOCSUB_002_NF()); - - execute(TC_MEC_MEC013_SRV_UETRACKSUB_001_OK()); - execute(TC_MEC_MEC013_SRV_UETRACKSUB_001_BR()); - execute(TC_MEC_MEC013_SRV_UETRACKSUB_002_OK()); - execute(TC_MEC_MEC013_SRV_UETRACKSUB_002_NF()); - - execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_OK()); - execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_BR()); - execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_NF()); - - execute(TC_MEC_MEC013_SRV_UEINFSUB_001_OK()); - execute(TC_MEC_MEC013_SRV_UEINFSUB_001_BR()); - execute(TC_MEC_MEC013_SRV_UEINFSUB_002_OK()); - execute(TC_MEC_MEC013_SRV_UEINFSUB_002_NF()); // execute(TC_MEC_PLAT_RLOC_001_OK()); // execute(TC_MEC_PLAT_RLOC_001_NF()); diff --git a/ttcn/AtsMec/AtsMec_DeviceApplicationInterface/AtsMec_DeviceApplicationInterfaceAPI_TestControl.ttcn b/ttcn/AtsMec/AtsMec_DeviceApplicationInterface/AtsMec_DeviceApplicationInterfaceAPI_TestControl.ttcn index 4c74736..cb02a26 100644 --- a/ttcn/AtsMec/AtsMec_DeviceApplicationInterface/AtsMec_DeviceApplicationInterfaceAPI_TestControl.ttcn +++ b/ttcn/AtsMec/AtsMec_DeviceApplicationInterface/AtsMec_DeviceApplicationInterfaceAPI_TestControl.ttcn @@ -17,7 +17,6 @@ module AtsMec_TestControl { import from LibMec_Pics all; // AtsMec - import from AtsMec_LocationAPI_TestCases all; import from AtsMec_UEidentityAPI_TestCases all; // import from AtsMec_RadioNodeLocationAPI_TestCases all; import from AtsMec_RnisAPI_TestCases all; @@ -37,28 +36,7 @@ module AtsMec_TestControl { execute(TC_MEC_MEC014_SRV_UETAG_002_PF()); } if (PICS_LOCATION_API_SUPPORTED) { - execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_OK()); - execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_BR()); - execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_NF()); - - execute(TC_MEC_MEC013_SRV_UELOCSUB_001_OK()); - execute(TC_MEC_MEC013_SRV_UELOCSUB_001_BR()); - execute(TC_MEC_MEC013_SRV_UELOCSUB_002_OK()); - execute(TC_MEC_MEC013_SRV_UELOCSUB_002_NF()); - - execute(TC_MEC_MEC013_SRV_UETRACKSUB_001_OK()); - execute(TC_MEC_MEC013_SRV_UETRACKSUB_001_BR()); - execute(TC_MEC_MEC013_SRV_UETRACKSUB_002_OK()); - execute(TC_MEC_MEC013_SRV_UETRACKSUB_002_NF()); - - execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_OK()); - execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_BR()); - execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_NF()); - - execute(TC_MEC_MEC013_SRV_UEINFSUB_001_OK()); - execute(TC_MEC_MEC013_SRV_UEINFSUB_001_BR()); - execute(TC_MEC_MEC013_SRV_UEINFSUB_002_OK()); - execute(TC_MEC_MEC013_SRV_UEINFSUB_002_NF()); + // execute(TC_MEC_PLAT_RLOC_001_OK()); // execute(TC_MEC_PLAT_RLOC_001_NF()); diff --git a/ttcn/AtsMec/AtsMec_LcRRm/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestControl.ttcn b/ttcn/AtsMec/AtsMec_LcRRm/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestControl.ttcn index 4c74736..9aace58 100644 --- a/ttcn/AtsMec/AtsMec_LcRRm/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestControl.ttcn +++ b/ttcn/AtsMec/AtsMec_LcRRm/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestControl.ttcn @@ -17,7 +17,6 @@ module AtsMec_TestControl { import from LibMec_Pics all; // AtsMec - import from AtsMec_LocationAPI_TestCases all; import from AtsMec_UEidentityAPI_TestCases all; // import from AtsMec_RadioNodeLocationAPI_TestCases all; import from AtsMec_RnisAPI_TestCases all; @@ -37,28 +36,6 @@ module AtsMec_TestControl { execute(TC_MEC_MEC014_SRV_UETAG_002_PF()); } if (PICS_LOCATION_API_SUPPORTED) { - execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_OK()); - execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_BR()); - execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_NF()); - - execute(TC_MEC_MEC013_SRV_UELOCSUB_001_OK()); - execute(TC_MEC_MEC013_SRV_UELOCSUB_001_BR()); - execute(TC_MEC_MEC013_SRV_UELOCSUB_002_OK()); - execute(TC_MEC_MEC013_SRV_UELOCSUB_002_NF()); - - execute(TC_MEC_MEC013_SRV_UETRACKSUB_001_OK()); - execute(TC_MEC_MEC013_SRV_UETRACKSUB_001_BR()); - execute(TC_MEC_MEC013_SRV_UETRACKSUB_002_OK()); - execute(TC_MEC_MEC013_SRV_UETRACKSUB_002_NF()); - - execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_OK()); - execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_BR()); - execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_NF()); - - execute(TC_MEC_MEC013_SRV_UEINFSUB_001_OK()); - execute(TC_MEC_MEC013_SRV_UEINFSUB_001_BR()); - execute(TC_MEC_MEC013_SRV_UEINFSUB_002_OK()); - execute(TC_MEC_MEC013_SRV_UEINFSUB_002_NF()); // execute(TC_MEC_PLAT_RLOC_001_OK()); // execute(TC_MEC_PLAT_RLOC_001_NF()); diff --git a/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestCases.ttcn b/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestCases.ttcn index 58ee7f9..20105f0 100644 --- a/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestCases.ttcn +++ b/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestCases.ttcn @@ -1,5 +1,5 @@ /** - * @author ETSI / STF569 + * @author ETSI / STF569 / TTF T027 * @version $URL:$ * $ID:$ * @desc This module provides the MEC test cases. @@ -37,8 +37,6 @@ module AtsMec_LocationAPI_TestCases { /** * @desc Check that the IUT responds with a list for the location of User Equipments when queried by a MEC Application - * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/SRV/UELOC/PlatUeLocationLookup.tplan2 - * @see https://forge.etsi.org/gitlab/mec/gs013-location-api/blob/master/LocationAPI.yaml#/definitions/UserInfo */ testcase TC_MEC_MEC013_SRV_UELOCLOOK_001_OK() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -61,7 +59,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_LOC_API_USERS_SUB_URI, v_headers ) ) @@ -216,10 +214,9 @@ module AtsMec_LocationAPI_TestCases { group ueLocSub { /** - * @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 - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/remove-401s/Test%20Purposes/SRV/UELOCSUB/PlatUeLocationSubscription.tplan2 + * @desc Check that the IUT acknowledges the subscription by a MEC Application to notifications user location event */ - testcase TC_MEC_MEC013_SRV_UELOCSUB_001_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UELOCSUB_001_OK_01() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -241,20 +238,15 @@ 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_LOC_API_USERS_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 - ) - ) - ) - ) - ) - ); + m_body_json_user_location_event_subscription( + m_user_location_event_subscription( + PX_CALLBACK_REF_URL, + PX_USER, + PX_CLIENT_ID + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -264,12 +256,13 @@ module AtsMec_LocationAPI_TestCases { 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 { + mw_body_json_user_location_event_subscription( + mw_user_location_event_subscription( + PX_CALLBACK_REF_URL, + PX_USER, + -, + PX_CLIENT_ID + )))))) -> value v_response { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a callbackURL ***"); @@ -282,15 +275,14 @@ module AtsMec_LocationAPI_TestCases { } // End of 'alt' statement // Postamble - f_delete_user_tracking_subscription(v_response.response.body.json_body.userTrackingSubscription); + f_delete_user_location_event_subscription(v_response.response.body.json_body.userLocationEventSubscription); f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC013_SRV_UELOCSUB_001_OK + } // End of testcase TC_MEC_MEC013_SRV_UELOCSUB_001_OK_01 /** - * @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/UELOCSUB/PlatUeLocationSubscription.tplan2 + * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - Neither callbackReference nor websockNotifConfig provided */ - testcase TC_MEC_MEC013_SRV_UELOCSUB_001_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UELOCSUB_001_BR_01() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -311,20 +303,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 & "_Invalid", + PICS_ROOT_API & PX_LOC_API_USERS_SUB_URI, 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_UNKNOWN - ) - ) - ) - ) - ) - ); + m_body_json_user_location_event_subscription( + m_user_location_event_subscription_error( + PX_USER, + PX_CLIENT_ID + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -347,7 +333,7 @@ module AtsMec_LocationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC013_SRV_UELOCSUB_001_BR + } // End of testcase TC_MEC_MEC013_SRV_UELOCSUB_001_BR_01 /** * @desc Check that the IUT acknowledges the cancellation of UE location change notifications when commanded by a MEC Application @@ -355,7 +341,7 @@ 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 UserLocationEventSubscription v_userLocationEventSubscription; var Headers v_headers; var charstring v_uri; @@ -372,10 +358,10 @@ module AtsMec_LocationAPI_TestCases { // Test adapter configuration // Preamble - f_create_user_tracking_subscription(v_user_tracking_subscription); + f_create_user_location_event_subscription(v_userLocationEventSubscription); v_uri :=regexp( - oct2char(unichar2oct(v_user_tracking_subscription.resourceURL)), - "?+" & PX_ME_APP_Q_USERS_LOC_SUB_URI & "/(?*)", + oct2char(unichar2oct(v_userLocationEventSubscription.links_.self_.href)), + "?+" & PX_LOC_API_USERS_SUB_URI & "/(?*)", 0 ); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -385,7 +371,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 & "/" & v_uri, + PICS_ROOT_API & PX_LOC_API_USERS_SUB_URI & "/" & v_uri, v_headers ) ) @@ -436,7 +422,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")), + PICS_ROOT_API & PX_LOC_API_USERS_SUB_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_ID, "UTF-8")), v_headers ) ) @@ -467,13 +453,12 @@ module AtsMec_LocationAPI_TestCases { } // End of group ueLocSub - group ueTrackSub { + group ueLocPeriodicSub { /** - * @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 - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/remove-401s/Test%20Purposes/SRV/UETRACKSUB/PlatUeTrackingSubscription.tplan2 + * @desc Check that the IUT acknowledges the subscription by a MEC Application to notifications user location periodic */ - testcase TC_MEC_MEC013_SRV_UETRACKSUB_001_OK() runs on HttpComponent system HttpTestAdapter { + testcase TP_MEC_MEC013_SRV_UELOCSUB_001_OK_02() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -495,16 +480,14 @@ 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_LOC_API_USERS_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 - )))))); + m_body_json_user_location_periodic_subscription( + m_user_location_periodic_subscription( + PX_CALLBACK_REF_URL, + PX_USER + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -514,14 +497,11 @@ module AtsMec_LocationAPI_TestCases { 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 { + mw_body_json_user_location_periodic_subscription( + mw_user_location_periodic_subscription( + PX_CALLBACK_REF_URL, + PX_USER + )))))) -> value v_response { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a callbackURL ***"); @@ -534,9 +514,9 @@ module AtsMec_LocationAPI_TestCases { } // End of 'alt' statement // Postamble - f_delete_periodic_notification_subscription(v_response.response.body.json_body.periodicNotificationSubscription); + f_delete_user_location_periodic_subscription(v_response.response.body.json_body.userLocationPeriodicSubscription); f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC013_SRV_UETRACKSUB_001_OK + } // End of testcase TP_MEC_MEC013_SRV_UELOCSUB_001_OK_02 /** * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application @@ -563,20 +543,15 @@ module AtsMec_LocationAPI_TestCases { httpPort.send( m_http_request( m_http_request_post( - PICS_ROOT_API & PX_ME_APP_Q_USERS_TRACK_SUB_URI & "_Invalid", + PICS_ROOT_API & PX_LOC_API_USERS_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 - ) - ) - ) - ) - ) - ); + m_body_json_user_location_periodic_subscription( + m_user_location_periodic_subscription( + PX_CALLBACK_REF_URL, + PX_CLIENT_ID_UNKNOWN, + PX_USER + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -608,7 +583,7 @@ module AtsMec_LocationAPI_TestCases { 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 UserLocationPeriodicSubscription v_position_notification_subscription; var charstring v_uri; // Test control @@ -624,17 +599,17 @@ module AtsMec_LocationAPI_TestCases { // Test adapter configuration // Preamble - f_create_periodic_notification_subscription(v_position_notification_subscription); + f_create_user_location_periodic_subscription(v_position_notification_subscription); v_uri := regexp( - oct2char(unichar2oct(v_position_notification_subscription.resourceURL)), - "?+" & PX_ME_APP_Q_USERS_TRACK_SUB_URI & "/(?*)", + oct2char(unichar2oct(v_position_notification_subscription.links_.self_.href)), + "?+" & PX_LOC_API_USERS_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, + PICS_ROOT_API & PX_LOC_API_USERS_SUB_URI & "/" & v_uri, v_headers ) ) @@ -688,7 +663,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_LOC_API_USERS_SUB_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_ID, "UTF-8")), v_headers ) ) @@ -717,7 +692,7 @@ module AtsMec_LocationAPI_TestCases { f_cf_01_http_down(); } // End of testcase TC_MEC_MEC013_SRV_UETRACKSUB_002_NF - } // End of group ueTrackSub + } // End of group ueLocPeriodicSub group ueInfLook { @@ -916,20 +891,15 @@ 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_LOC_API_ZONES_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 - ) - ) - ) - ) - ) - ); + m_body_json_zone_location_event_subscription( + m_zone_location_event_subscription( + PX_CALLBACK_REF_URL, + PX_CLIENT_ID, + PX_ZONE_ID + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -939,12 +909,12 @@ module AtsMec_LocationAPI_TestCases { 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 { + mw_body_json_zone_location_event_subscription( + mw_zone_location_event_subscription( + PX_CALLBACK_REF_URL, + PX_CLIENT_ID, + PX_ZONE_ID + )))))) -> value v_response { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a callbackURL ***"); @@ -957,7 +927,7 @@ module AtsMec_LocationAPI_TestCases { } // End of 'alt' statement // Postamble - f_delete_zonal_traffic_subscription(v_response.response.body.json_body.zonalTrafficSubscription); + f_delete_zone_location_event_subscription(v_response.response.body.json_body.zoneLocationEventSubscription); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC013_SRV_UEINFSUB_001_OK @@ -986,11 +956,11 @@ 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_LOC_API_ZONES_SUB_URI, v_headers, m_http_message_body_json( - m_body_json_zonal_traffic_subscription( - m_zonal_traffic_subscription( + m_body_json_zone_location_event_subscription( + m_zone_location_event_subscription( PX_CLIENT_ID, PX_CALLBACK_REF_URL, PX_ZONE_ID @@ -1030,7 +1000,7 @@ 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 ZoneLocationEventSubscription v_zone_location_event_subscription; var charstring v_uri; // Test control @@ -1046,17 +1016,17 @@ module AtsMec_LocationAPI_TestCases { // Test adapter configuration // Preamble - f_create_zonal_traffic_subscription(v_zonal_traffic_subscription); + f_create_zone_location_event_subscription(v_zone_location_event_subscription); v_uri := regexp( - oct2char(unichar2oct(v_zonal_traffic_subscription.resourceURL)), - "?+" & PX_ME_APP_Q_USERS_INF_SUB_URI & "/(?*)", + oct2char(unichar2oct(v_zone_location_event_subscription.links_.self_.href)), + "?+" & PX_LOC_API_ZONES_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, + PICS_ROOT_API & PX_LOC_API_ZONES_SUB_URI & "/" & v_uri, v_headers ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -1108,7 +1078,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_LOC_API_ZONES_SUB_URI & "/" & oct2char(unichar2oct(PX_USER_UNKNOWN, "UTF-8")), v_headers ) ) @@ -1267,9 +1237,9 @@ module AtsMec_LocationAPI_TestCases { 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 + * @desc Check that the IUT acknowledges the creation of UE area subscription request when commanded by a MEC Application */ - testcase TC_MEC_MEC013_SRV_UEAREASUB_001_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UEAREASUB_001_OK_01() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -1291,20 +1261,23 @@ module AtsMec_LocationAPI_TestCases { httpPort.send( m_http_request( m_http_request_post( - PICS_ROOT_API & PX_ME_APP_Q_AREA_SUB_URI, + PICS_ROOT_API & PX_LOC_API_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 - ) - ) - ) - ) - ) - ); + m_body_json_user_area_subscription( + m_user_area_subscription( + PX_AREA_SUB_CALLBACK_URI, // callbackReference + PX_USER, + m_area_info( + ELLIPSOID_POINT_UNCERT_CIRCLE, + { + m_point({PX_UE_COORD_LAT}, {PX_UE_COORD_LONG}) + }, + PX_RADIUS + ), + PX_TRACKIMNG_ACCURACY, + PX_CLIENT_ID //clientCorrelator + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -1314,25 +1287,23 @@ module AtsMec_LocationAPI_TestCases { 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 + mw_body_json_user_area_subscription( + mw_user_area_subscription( + PX_AREA_SUB_CALLBACK_URI, // callbackReference + -, -, + mw_area_info( + ELLIPSOID_POINT_UNCERT_CIRCLE, + { + m_point({PX_UE_COORD_LAT}, {PX_UE_COORD_LONG}) + }, + PX_RADIUS + ), + PX_TRACKIMNG_ACCURACY, + PX_CLIENT_ID //clientCorrelator + )))))) -> value v_response { tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with a circleNotificationSubscription ***"); + log("*** " & testcasename() & ": PASS: IUT successfully responds with a userAreaSubscription ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -1342,9 +1313,9 @@ module AtsMec_LocationAPI_TestCases { } // End of 'alt' statement // Postamble - f_delete_circle_notification_subscription(v_response.response.body.json_body.circleNotificationSubscription); + f_delete_user_area_subscription(v_response.response.body.json_body.userAreaSubscription); f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC013_SRV_UEAREASUB_001_OK + } // End of testcase TC_MEC_MEC013_SRV_UEAREASUB_001_OK_01 /** * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application @@ -1370,20 +1341,23 @@ module AtsMec_LocationAPI_TestCases { httpPort.send( m_http_request( m_http_request_post( - PICS_ROOT_API & PX_ME_APP_Q_AREA_SUB_URI, + PICS_ROOT_API & PX_LOC_API_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 - ) - ) - ) - ) - ) - ); + m_body_json_user_area_subscription( + m_user_area_subscription( + PX_AREA_SUB_CALLBACK_URI, // callbackReference + PX_USER, + m_area_info( + ELLIPSOID_POINT_UNCERT_CIRCLE, + { + m_point({PX_UE_COORD_LAT}, {PX_UE_COORD_LONG}) + } + // No radius + ), + PX_TRACKIMNG_ACCURACY, + PX_CLIENT_ID //clientCorrelator + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -1414,7 +1388,7 @@ module AtsMec_LocationAPI_TestCases { 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 UserAreaSubscription v_user_area_subscription; var charstring v_uri; // Test control @@ -1431,16 +1405,16 @@ module AtsMec_LocationAPI_TestCases { // Preamble f_init_default_headers_list(-, -, v_headers); - f_create_circle_notification_subscription(v_circle_notification_subscription); + f_create_user_area_subscription(v_user_area_subscription); v_uri := regexp( - oct2char(unichar2oct(v_circle_notification_subscription.resourceURL)), - "?+" & PX_ME_APP_Q_AREA_SUB_URI & "/(?*)", + oct2char(unichar2oct(v_user_area_subscription.links_.self_.href)), + "?+" & PX_LOC_API_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, + PICS_ROOT_API & PX_LOC_API_AREA_SUB_URI & "/" & v_uri, v_headers ) ) @@ -1494,7 +1468,7 @@ module AtsMec_LocationAPI_TestCases { 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")), + PICS_ROOT_API & PX_LOC_API_AREA_SUB_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_ID, "UTF-8")), v_headers ) ) @@ -1673,19 +1647,20 @@ module AtsMec_LocationAPI_TestCases { httpPort.send( m_http_request( m_http_request_post( - PICS_ROOT_API & PX_ME_APP_Q_DIST_URI, + PICS_ROOT_API & PX_LOC_API_DISTANCE_SUB_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 - )))))); + m_body_json_user_distance_subscription( + m_user_distance_subscription( + PX_UE_DIST_SUB_CALLBACK_URI, // callbackReference + PX_USER, + { PX_UE_MONITORED_IP_ADDRESS }, // monitoredAddress + PX_DISTANCE, + PX_TRACKIMNG_ACCURACY, + AllWithinDistance, + -, // checkImmediate + PX_CLIENT_ID //clientCorrelator + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -1695,31 +1670,21 @@ module AtsMec_LocationAPI_TestCases { 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 - + mw_body_json_user_distance_subscription( + mw_user_distance_subscription( + PX_UE_DIST_SUB_CALLBACK_URI, // callbackReference + -, + PX_USER, + { PX_UE_MONITORED_IP_ADDRESS }, // monitoredAddressPX_CLIENT_ID, //clientCorrelator + PX_DISTANCE, + PX_TRACKIMNG_ACCURACY, + AllWithinDistance, + -, // checkImmediate + PX_CLIENT_ID //clientCorrelator + )))))) -> value v_response { tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with a circleNotificationSubscription ***"); + log("*** " & testcasename() & ": PASS: IUT successfully responds with a userDistanceSubscription ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -1729,7 +1694,7 @@ module AtsMec_LocationAPI_TestCases { } // End of 'alt' statement // Postamble - f_delete_distance_notification_subscription(v_response.response.body.json_body.distanceNotificationSubscription); + f_delete_user_distance_subscription(v_response.response.body.json_body.userDistanceSubscription); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC013_SRV_UEDISTSUB_001_OK @@ -1757,27 +1722,20 @@ module AtsMec_LocationAPI_TestCases { httpPort.send( m_http_request( m_http_request_post( - PICS_ROOT_API & PX_ME_APP_Q_DIST_URI & "_INVALID", + PICS_ROOT_API & PX_LOC_API_DISTANCE_SUB_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 - ) - ) - ) - ) - ) - ); + m_body_json_user_distance_subscription( + m_user_distance_subscription( + PX_UE_DIST_SUB_CALLBACK_URI, // callbackReference + PX_USER, + { }, // monitoredAddress is empty + PX_DISTANCE, + PX_TRACKIMNG_ACCURACY, + AllWithinDistance, + -, // checkImmediate + PX_CLIENT_ID //clientCorrelator + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -1809,7 +1767,7 @@ module AtsMec_LocationAPI_TestCases { 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 UserDistanceSubscription v_user_distance_subscription; var charstring v_uri; // Test control @@ -1826,16 +1784,16 @@ module AtsMec_LocationAPI_TestCases { // Preamble f_init_default_headers_list(-, -, v_headers); - f_create_distance_notification_subscription(v_distance_notification_subscription); + f_create_user_distance_subscription(v_user_distance_subscription); v_uri := regexp( - oct2char(unichar2oct(v_distance_notification_subscription.resourceURL)), - "?+" & PX_ME_APP_Q_DIST_URI & "/(?*)", + oct2char(unichar2oct(v_user_distance_subscription.links_.self_.href)), + "?+" & PX_LOC_API_DISTANCE_SUB_URI & "/(?*)", 0 ); httpPort.send( m_http_request( m_http_request_delete( - PICS_ROOT_API & PX_ME_APP_Q_DIST_URI & "/" & v_uri, + PICS_ROOT_API & PX_LOC_API_DISTANCE_SUB_URI & "/" & v_uri, v_headers ) ) @@ -1889,7 +1847,7 @@ module AtsMec_LocationAPI_TestCases { 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")), + PICS_ROOT_API & PX_LOC_API_DISTANCE_SUB_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_ID, "UTF-8")), v_headers ) ) diff --git a/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestControl.ttcn b/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestControl.ttcn index aef4802..fb4852e 100644 --- a/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestControl.ttcn +++ b/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestControl.ttcn @@ -17,12 +17,12 @@ module AtsMec_LocationAPI_TestControl { execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_BR()); execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_NF()); - execute(TC_MEC_MEC013_SRV_UELOCSUB_001_OK()); - execute(TC_MEC_MEC013_SRV_UELOCSUB_001_BR()); + execute(TC_MEC_MEC013_SRV_UELOCSUB_001_OK_01()); + execute(TC_MEC_MEC013_SRV_UELOCSUB_001_BR_01()); execute(TC_MEC_MEC013_SRV_UELOCSUB_002_OK()); execute(TC_MEC_MEC013_SRV_UELOCSUB_002_NF()); - execute(TC_MEC_MEC013_SRV_UETRACKSUB_001_OK()); + execute(TP_MEC_MEC013_SRV_UELOCSUB_001_OK_02()); execute(TC_MEC_MEC013_SRV_UETRACKSUB_001_BR()); execute(TC_MEC_MEC013_SRV_UETRACKSUB_002_OK()); execute(TC_MEC_MEC013_SRV_UETRACKSUB_002_NF()); @@ -35,6 +35,8 @@ module AtsMec_LocationAPI_TestControl { execute(TC_MEC_MEC013_SRV_UEINFSUB_001_BR()); execute(TC_MEC_MEC013_SRV_UEINFSUB_002_OK()); execute(TC_MEC_MEC013_SRV_UEINFSUB_002_NF()); + + execute(TC_MEC_MEC013_SRV_UEAREASUB_001_OK_01()); } } } // End of 'control' statement diff --git a/ttcn/AtsMec_Location/module.mk b/ttcn/AtsMec_Location/module.mk index 8232228..f34f292 100644 --- a/ttcn/AtsMec_Location/module.mk +++ b/ttcn/AtsMec_Location/module.mk @@ -7,6 +7,7 @@ sources := \ modules := ../LibCommon \ ../../titan-test-system-framework/ttcn/LibHelpers \ ../../titan-test-system-framework/ttcn/LibHttp \ + ../../titan-test-system-framework/ttcn/LibXsd \ ../../titan-test-system-framework/ttcn/LibJson \ ../patch_lib_http \ ../LibMec \ diff --git a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Functions.ttcn b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Functions.ttcn index 6035b6a..e783c0b 100644 --- a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Functions.ttcn +++ b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Functions.ttcn @@ -37,9 +37,9 @@ module LocationAPI_Functions { 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 { + function f_create_user_location_event_subscription( + out UserLocationEventSubscription p_user_location_event_subscription + ) runs on HttpComponent { var Headers v_headers; var HttpMessage v_response; @@ -47,47 +47,46 @@ module LocationAPI_Functions { httpPort.send( m_http_request( m_http_request_post( - PICS_ROOT_API & PX_ME_APP_Q_USERS_LOC_SUB_URI, + PICS_ROOT_API & PX_LOC_API_USERS_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 - )))))); + m_body_json_user_location_event_subscription( + m_user_location_event_subscription( + 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 { + mw_body_json_user_location_event_subscription( + mw_user_location_event_subscription( + 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); + // FIXME Extract HTTP Location header + p_user_location_event_subscription := v_response.response.body.json_body.userLocationEventSubscription; + log("f_create_user_location_event_subscription: INFO: IUT successfully responds to the subscription: ", p_user_location_event_subscription); } [] tc_ac.timeout { - log("f_create_user_tracking_subscription: INCONC: Expected message not received"); + log("f_create_user_location_event_subscription: INCONC: Expected message not received"); } } // End of 'alt' statement - } // End of function f_create_user_tracking_subscription + } // End of function f_create_user_location_event_subscription - function f_delete_user_tracking_subscription( - in UserTrackingSubscription p_user_tracking_subscription - ) runs on HttpComponent { + function f_delete_user_location_event_subscription( + in UserLocationEventSubscription p_user_location_event_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 & "/(?*)", + oct2char(unichar2oct(p_user_location_event_subscription.links_.self_.href)), + "?+" & PX_LOC_API_USERS_SUB_URI & "/(?*)", 0 ); @@ -95,7 +94,7 @@ module LocationAPI_Functions { httpPort.send( m_http_request( m_http_request_delete( - PICS_ROOT_API & PX_ME_APP_Q_USERS_LOC_SUB_URI & "/" & v_uri, + PICS_ROOT_API & PX_LOC_API_USERS_SUB_URI & "/" & v_uri, v_headers ))); tc_ac.start; @@ -107,15 +106,15 @@ module LocationAPI_Functions { tc_ac.stop; } [] tc_ac.timeout { - log("f_delete_user_tracking_subscription: INCONC: Expected message not received"); + log("f_delete_user_location_event_subscription: INCONC: Expected message not received"); } } // End of 'alt' statement - } // End of function f_delete_user_tracking_subscription + } // End of function f_delete_user_location_event_subscription - function f_create_periodic_notification_subscription( - out PeriodicNotificationSubscription p_periodic_notification_subscription - ) runs on HttpComponent { + function f_create_user_location_periodic_subscription( + out UserLocationPeriodicSubscription p_user_location_periodic_subscription + ) runs on HttpComponent { var Headers v_headers; var HttpMessage v_response; @@ -123,50 +122,44 @@ module LocationAPI_Functions { httpPort.send( m_http_request( m_http_request_post( - PICS_ROOT_API & PX_ME_APP_Q_USERS_TRACK_SUB_URI, + PICS_ROOT_API & PX_LOC_API_USERS_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 - )))))); + m_body_json_user_location_periodic_subscription( + m_user_location_periodic_subscription( + PX_CALLBACK_REF_URL + )))))); 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 { + mw_body_json_user_location_periodic_subscription( + mw_user_location_periodic_subscription( + PX_CALLBACK_REF_URL + )))))) -> 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); + // FIXME Extract HTTP Location header + p_user_location_periodic_subscription := v_response.response.body.json_body.userLocationPeriodicSubscription; + log("f_create_user_location_periodic_subscription: INFO: IUT successfully responds to the subscription: ", p_user_location_periodic_subscription); } [] tc_ac.timeout { - log("f_create_periodic_notification_subscription: INCONC: Expected message not received"); + log("f_create_user_location_periodic_subscription: INCONC: Expected message not received"); } } // End of 'alt' statement - } // End of function f_create_periodic_notification_subscription + } // End of function f_create_user_location_periodic_subscription - function f_delete_periodic_notification_subscription( - in PeriodicNotificationSubscription p_position_notification_subscription - ) runs on HttpComponent { + function f_delete_user_location_periodic_subscription( + in UserLocationPeriodicSubscription 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 & "/(?*)", + oct2char(unichar2oct(p_position_notification_subscription.links_.self_.href)), + "?+" & PX_LOC_API_USERS_SUB_URI & "/(?*)", 0 ); @@ -174,7 +167,7 @@ module LocationAPI_Functions { httpPort.send( m_http_request( m_http_request_delete( - PICS_ROOT_API & PX_ME_APP_Q_USERS_TRACK_SUB_URI & "/" & v_uri, + PICS_ROOT_API & PX_LOC_API_USERS_SUB_URI & "/" & v_uri, v_headers ))); tc_ac.start; @@ -186,14 +179,14 @@ module LocationAPI_Functions { tc_ac.stop; } [] tc_ac.timeout { - log("f_delete_periodic_notification_subscription: INCONC: Expected message not received"); + log("f_delete_user_location_periodic_subscription: INCONC: Expected message not received"); } } // End of 'alt' statement - } // End of function f_delete_periodic_notification_subscription + } // End of function f_delete_user_location_periodic_subscription - function f_create_zonal_traffic_subscription( - out ZonalTrafficSubscription p_zonal_traffic_subscription - ) runs on HttpComponent { + function f_create_zone_location_event_subscription( + out ZoneLocationEventSubscription p_zone_location_event_subscription + ) runs on HttpComponent { var Headers v_headers; var HttpMessage v_response; @@ -201,11 +194,11 @@ module LocationAPI_Functions { httpPort.send( m_http_request( m_http_request_post( - PICS_ROOT_API & PX_ME_APP_Q_USERS_INF_SUB_URI, + PICS_ROOT_API & PX_LOC_API_ZONES_SUB_URI, v_headers, m_http_message_body_json( - m_body_json_zonal_traffic_subscription( - m_zonal_traffic_subscription( + m_body_json_zone_location_event_subscription( + m_zone_location_event_subscription( PX_CLIENT_ID, PX_CALLBACK_REF_URL, PX_ZONE_ID @@ -216,32 +209,33 @@ module LocationAPI_Functions { mw_http_response( mw_http_response_201_created( mw_http_message_body_json( - mw_body_json_zonal_traffic_subscription( - mw_zonal_traffic_subscription( + mw_body_json_zone_location_event_subscription( + mw_zone_location_event_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); + // FIXME Extract HTTP Location header + p_zone_location_event_subscription := v_response.response.body.json_body.zoneLocationEventSubscription; + log("f_create_zone_location_event_subscription: INFO: IUT successfully responds to the subscription: ", p_zone_location_event_subscription); } [] tc_ac.timeout { - log("f_create_zonal_traffic_subscription: INCONC: Expected message not received"); + log("f_create_zone_location_event_subscription: INCONC: Expected message not received"); } } // End of 'alt' statement - } // End of function f_create_zonal_traffic_subscription + } // End of function f_create_zone_location_event_subscription - function f_delete_zonal_traffic_subscription( - in ZonalTrafficSubscription p_zonal_traffic_subscription - ) runs on HttpComponent { + function f_delete_zone_location_event_subscription( + in ZoneLocationEventSubscription p_zone_location_event_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 & "/(?*)", + oct2char(unichar2oct(p_zone_location_event_subscription.links_.self_.href)), + "?+" & PX_LOC_API_ZONES_SUB_URI & "/(?*)", 0 ); @@ -249,7 +243,7 @@ module LocationAPI_Functions { httpPort.send( m_http_request( m_http_request_delete( - PICS_ROOT_API & PX_ME_APP_Q_USERS_INF_SUB_URI & "/" & v_uri, + PICS_ROOT_API & PX_LOC_API_ZONES_SUB_URI & "/" & v_uri, v_headers ))); tc_ac.start; @@ -261,14 +255,14 @@ module LocationAPI_Functions { tc_ac.stop; } [] tc_ac.timeout { - log("f_delete_zonal_traffic_subscription: INCONC: Expected message not received"); + log("f_delete_zone_location_event_subscription: INCONC: Expected message not received"); } } // End of 'alt' statement - } // End of function f_delete_zonal_traffic_subscription + } // End of function f_delete_zone_location_event_subscription - function f_create_circle_notification_subscription( - out CircleNotificationSubscription p_circle_notification_subscription - ) runs on HttpComponent { + function f_create_zone_status_subscription( + out ZoneStatusSubscription p_zone_status_subscription + ) runs on HttpComponent { var Headers v_headers; var HttpMessage v_response; @@ -276,45 +270,46 @@ module LocationAPI_Functions { httpPort.send( m_http_request( m_http_request_post( - PICS_ROOT_API & PX_ME_APP_Q_AREA_SUB_URI, + PICS_ROOT_API & PX_LOC_API_ZONES_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 - )))))); + m_body_json_zone_status_subscription( + m_zone_status_subscription( + PX_AREA_SUB_CALLBACK_URI, + PX_USER, + 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_circle_notification_subscription( - mw_circle_notification_subscription( - PX_CLIENT_ID - )))))) -> value v_response { + mw_body_json_zone_status_subscription( + mw_zone_status_subscription( + PX_AREA_SUB_CALLBACK_URI + )))))) -> 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); + // FIXME Extract HTTP Location header + p_zone_status_subscription := v_response.response.body.json_body.zoneStatusSubscription; + log("f_create_zone_status_subscription: INFO: IUT successfully responds to the subscription: ", p_zone_status_subscription); } [] tc_ac.timeout { - log("f_create_circle_notification_subscription: INCONC: Expected message not received"); + log("f_create_zone_status_subscription: INCONC: Expected message not received"); } } // End of 'alt' statement - } // End of function f_create_circle_notification_subscription + } // End of function f_create_zone_status_subscription - function f_delete_circle_notification_subscription( - in CircleNotificationSubscription p_circle_notification_subscription - ) runs on HttpComponent { + function f_delete_zone_status_subscription( + in ZoneStatusSubscription p_zone_status_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 & "/(?*)", + oct2char(unichar2oct(p_zone_status_subscription.links_.self_.href)), + "?+" & PX_LOC_API_AREA_SUB_URI & "/(?*)", 0 ); @@ -322,7 +317,7 @@ module LocationAPI_Functions { httpPort.send( m_http_request( m_http_request_delete( - PICS_ROOT_API & PX_ME_APP_Q_AREA_SUB_URI & "/" & v_uri, + PICS_ROOT_API & PX_LOC_API_ZONES_SUB_URI & "/" & v_uri, v_headers ))); tc_ac.start; @@ -334,24 +329,93 @@ module LocationAPI_Functions { tc_ac.stop; } [] tc_ac.timeout { - log("f_delete_circle_notification_subscription: INCONC: Expected message not received"); + log("f_delete_zone_status_subscription: INCONC: Expected message not received"); } } // End of 'alt' statement - } // End of function f_delete_circle_notification_subscription - - - - - - - - + } // End of function f_delete_zone_status_subscription + function f_create_user_area_subscription( + out UserAreaSubscription p_user_area_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_LOC_API_AREA_SUB_URI, + v_headers, + m_http_message_body_json( + m_body_json_user_area_subscription( + m_user_area_subscription( + PX_UE_DIST_SUB_CALLBACK_URI, // callbackReference + PX_USER, + m_area_info( + ELLIPSOID_POINT_UNCERT_CIRCLE, + { m_point({PX_UE_COORD_LAT}, {PX_UE_COORD_LONG}) }, + PX_RADIUS + ), // AreaInfo + PX_TRACKIMNG_ACCURACY // TrackingAccuracy + )))))); + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_201_created( + mw_http_message_body_json( + mw_body_json_user_area_subscription( + mw_user_area_subscription( + PX_UE_DIST_SUB_CALLBACK_URI + )))))) -> value v_response { + tc_ac.stop; + + // FIXME Extract HTTP Location header + p_user_area_subscription := v_response.response.body.json_body.userAreaSubscription; + log("f_create_user_area_subscription: INFO: IUT successfully responds to the subscription: ", p_user_area_subscription); + } + [] tc_ac.timeout { + log("f_create_user_area_subscription: INCONC: Expected message not received"); + } + } // End of 'alt' statement + + } // End of function f_create_user_area_subscription + function f_delete_user_area_subscription( + in UserAreaSubscription p_user_area_subscription + ) runs on HttpComponent { + var Headers v_headers; + var HttpMessage v_response; + var charstring v_uri := regexp( + oct2char(unichar2oct(p_user_area_subscription.links_.self_.href)), + "?+" & PX_LOC_API_AREA_SUB_URI & "/(?*)", + 0 + ); + + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & PX_LOC_API_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_user_area_subscription: INCONC: Expected message not received"); + } + } // End of 'alt' statement + } // End of function f_delete_user_area_subscription - function f_create_distance_notification_subscription( - out DistanceNotificationSubscription p_distance_notification_subscription - ) runs on HttpComponent { + function f_create_user_distance_subscription( + out UserDistanceSubscription p_user_distance_subscription + ) runs on HttpComponent { var Headers v_headers; var HttpMessage v_response; @@ -359,53 +423,48 @@ module LocationAPI_Functions { httpPort.send( m_http_request( m_http_request_post( - PICS_ROOT_API & PX_ME_APP_Q_DIST_URI, + PICS_ROOT_API & PX_LOC_API_DISTANCE_SUB_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 - )))))); + m_body_json_user_distance_subscription( + m_user_distance_subscription( + PX_UE_DIST_SUB_CALLBACK_URI, // callbackReference + PX_USER, + { PX_UE_MONITORED_IP_ADDRESS }, + PX_DISTANCE, + PX_TRACKIMNG_ACCURACY + )))))); 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 { + mw_body_json_user_distance_subscription( + mw_user_distance_subscription( + PX_UE_DIST_SUB_CALLBACK_URI + )))))) -> 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); + // FIXME Extract HTTP Location header + p_user_distance_subscription := v_response.response.body.json_body.userDistanceSubscription; + log("f_create_user_distance_subscription: INFO: IUT successfully responds to the subscription: ", p_user_distance_subscription); } [] tc_ac.timeout { - log("f_create_distance_notification_subscription: INCONC: Expected message not received"); + log("f_create_user_distance_subscription: INCONC: Expected message not received"); } } // End of 'alt' statement - } // End of function f_create_distance_notification_subscription + } // End of function f_create_user_distance_subscription - function f_delete_distance_notification_subscription( - in DistanceNotificationSubscription p_distance_notification_subscription - ) runs on HttpComponent { + function f_delete_user_distance_subscription( + in UserDistanceSubscription p_user_distance_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 & "/(?*)", + oct2char(unichar2oct(p_user_distance_subscription.links_.self_.href)), + "?+" & PX_LOC_API_DISTANCE_SUB_URI & "/(?*)", 0 ); @@ -413,7 +472,7 @@ module LocationAPI_Functions { httpPort.send( m_http_request( m_http_request_delete( - PICS_ROOT_API & PX_ME_APP_Q_DIST_URI & "/" & v_uri, + PICS_ROOT_API & PX_LOC_API_DISTANCE_SUB_URI & "/" & v_uri, v_headers ))); tc_ac.start; @@ -425,9 +484,9 @@ module LocationAPI_Functions { tc_ac.stop; } [] tc_ac.timeout { - log("f_delete_distance_notification_subscription: INCONC: Expected message not received"); + log("f_delete_user_distance_subscription: INCONC: Expected message not received"); } } // End of 'alt' statement - } // End of function f_delete_distance_notification_subscription + } // End of function f_delete_user_distance_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 1a397ef..87c88ea 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 := { notifyURL := "http://clientApp.example.com/location_notifications/123456", callbackData := omit, notificationFormat := omit }; + modulepar CallbackReference PX_CALLBACK_REF_URL := "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 CallbackReference PX_UE_PERIODIC_SUB_CALLBACK_URI := "http://clientApp.example.com/location_notifications/123456"; modulepar Address PX_IP_ADDRESS := "acr:10.0.0.3"; - modulepar CallbackReference PX_AREA_SUB_CALLBACK_URI := { notifyURL := "http://clientApp.example.com/location_notifications/123456", callbackData := omit, notificationFormat := omit }; + modulepar CallbackReference PX_AREA_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 CallbackReference PX_UE_DIST_SUB_CALLBACK_URI := "http://clientApp.example.com/location_notifications/123456"; modulepar Address PX_UE_MONITORED_IP_ADDRESS := "acr:10.0.0.1"; @@ -56,11 +56,17 @@ module LocationAPI_Pixits { modulepar Json.Number PX_UE_COORD_LAT := -80.86302; modulepar Json.Number PX_UE_COORD_LONG := 41.277306; + + modulepar Json.Number PX_DISTANCE := 1000.0; + + modulepar Json.UInteger PX_RADIUS := 500; + + modulepar Json.Number PX_TRACKIMNG_ACCURACY := 1000.0; modulepar Address PX_ACR_SOME_IP := ""; - modulepar CallbackReference PX_USERTRACK_SUB_CALLBACK_URI := { "" }; + modulepar CallbackReference PX_USERTRACK_SUB_CALLBACK_URI := ""; - modulepar CallbackReference PX_TRAFFIC_SUB_CALLBACK_URI := { "" }; + modulepar CallbackReference PX_TRAFFIC_SUB_CALLBACK_URI := ""; } // End of module LocationAPI_Pixits diff --git a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Templates.ttcn b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Templates.ttcn index f7e52a2..15b6974 100644 --- a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Templates.ttcn +++ b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Templates.ttcn @@ -1,15 +1,15 @@ module LocationAPI_Templates { - + // JSON import from Json all; - + // LibCommon import from LibCommon_BasicTypesAndValues all; - + // LibMec/LocationAPI import from LocationAPI_TypesAndValues all; import from LocationAPI_Pixits all; - + template (value) UserInfo m_user_info( in Address p_address := PX_USER, in AccessPointId p_access_point_id := PX_ACCESS_POINT_ID, @@ -27,7 +27,7 @@ module LocationAPI_Templates { contextLocationInfo := omit, ancillaryInfo := omit } // End of template m_user_info - + template (present) UserInfo mw_user_info( template (present) Address p_address := ?, template (present) AccessPointId p_access_point_id := ?, @@ -53,7 +53,7 @@ module LocationAPI_Templates { user := p_userInfo, resourceURL := p_resource_url } // End of template m_user_list - + template UserList mw_user_list( template UserInfos p_userInfo := *, template (present) ResourceURL p_resource_url := ? @@ -61,7 +61,7 @@ module LocationAPI_Templates { user := p_userInfo, resourceURL := p_resource_url } // End of template mw_user_list - + template (value) LocationInfo m_location_info( in Latitude p_latitude, in Longitude p_longitude, @@ -84,7 +84,7 @@ module LocationAPI_Templates { timestamp_ := omit, velocity := omit } // End of template m_location_info - + template (present) LocationInfo mw_location_info( template (present) Latitude p_latitude := ?, template (present) Longitude p_longitude := ?, @@ -106,7 +106,7 @@ module LocationAPI_Templates { timestamp_ := *, velocity := * } // End of template mw_location_info - + template (value) ZoneInfo m_zone_info( in ZoneId p_zone_id := PX_ZONE_ID, in NumberOfAccessPoints p_number_of_access_points := PX_NB_ACCESS_POINTS, @@ -120,7 +120,7 @@ module LocationAPI_Templates { numberOfUsers := p_number_of_users, resourceURL := p_resource_url } // End of template m_zone_info - + template (present) ZoneInfo mw_zone_info( template (present) ZoneId p_zone_id := ?, template (present) NumberOfAccessPoints p_number_of_access_points := ?, @@ -134,7 +134,7 @@ module LocationAPI_Templates { numberOfUsers := p_number_of_users, resourceURL := p_resource_url } // End of template mw_zone_info - + template (omit) AccessPointList m_access_point_list( in ZoneId p_zoneId := PX_ZONE_ID, in ResourceURL p_resourceURL, @@ -144,84 +144,430 @@ module LocationAPI_Templates { accessPoint := p_accessPoint, resourceURL := p_resourceURL } // End of template m_access_point_list - - template AccessPointList mw_access_point_list( - template (present) ZoneId p_zoneId := ?, - template (present) ResourceURL p_resourceURL := ?, - template AccessPointInfos p_accessPoint := * - ) := { + + template (present) AccessPointList mw_access_point_list( + template (present) ZoneId p_zoneId := ?, + template (present) ResourceURL p_resourceURL := ?, + template AccessPointInfos p_accessPoint := * + ) := { zoneId := p_zoneId, accessPoint := p_accessPoint, resourceURL := p_resourceURL } // End of template mw_access_point_list - - template (value) UserTrackingSubscription m_user_tracking_subscription( - in ClientCorrelator p_clientCorrelator, - in CallbackReference p_callbackReference, - in Address p_address := PX_USER, - in UserEventCriteria p_userEventCriteria := { Entering } - ) := { - clientCorrelator := p_clientCorrelator, - callbackReference := p_callbackReference, - address_ := p_address, - userEventCriteria := p_userEventCriteria, - resourceURL := omit - } // End of template m_user_tracking_subscription - - template (present) UserTrackingSubscription mw_user_tracking_subscription( - template (present) ClientCorrelator p_clientCorrelator := ?, + + template (omit) Subscription m_subscription( + in Json.String p_subscriptionType, + in template (omit) Json.AnyURI p_href := omit + ) := { + href := p_href, + subscriptionType := p_subscriptionType + } // End of template m_subscription + + template (present) Subscription mw_subscription( + template (present) Json.String p_subscriptionType := ?, + template Json.AnyURI p_href := * + ) := { + href := p_href, + subscriptionType := p_subscriptionType + } // End of template mw_subscription + + template (omit) NotificationSubscriptionList m_notification_subscription_list( + in template (value) ResourceURL p_resourceURL, + in template (omit) Subscriptions p_subscription := omit + ) := { + subscription := p_subscription, + resourceURL := p_resourceURL + } // End of template m_notification_subscription_list + + template (present) NotificationSubscriptionList mw_notification_subscription_list( + template (present) ResourceURL p_resourceURL := ?, + template Subscriptions p_subscription := * + ) := { + subscription := p_subscription, + resourceURL := p_resourceURL + } // End of template mw_notification_subscription_list + + template (omit) UserLocationEventSubscription m_user_location_event_subscription( + in CallbackReference p_callbackReference, + in Address p_address := PX_USER, + in template (omit) ClientCorrelator p_clientCorrelator := omit, + in template (omit) Json.Bool p_requestTestNotification := omit, + in template (omit) WebsockNotifConfig p_websockNotifConfig := omit, + in template (omit) UserEventPara p_userEventPara := omit, + in template (omit) LocationEventCriteria p_locationEventCriteria := omit, + in template (omit) TimeStamp p_expiryDeadline := omit + ) := { + subscriptionType := "UserLocationEventSubscription", + clientCorrelator := p_clientCorrelator, + callbackReference := p_callbackReference, + requestTestNotification := p_requestTestNotification, + websockNotifConfig := p_websockNotifConfig, + links_ := omit, + address_ := p_address, + userEventPara := p_userEventPara, + locationEventCriteria := p_locationEventCriteria, + expiryDeadline := p_expiryDeadline + } // End of template m_user_location_event_subscription + + template (omit) UserLocationEventSubscription m_user_location_event_subscription_error( + in Address p_address := PX_USER, + in template (omit) ClientCorrelator p_clientCorrelator := omit, + in template (omit) Json.Bool p_requestTestNotification := omit, + in template (omit) WebsockNotifConfig p_websockNotifConfig := omit, + in template (omit) UserEventPara p_userEventPara := omit, + in template (omit) LocationEventCriteria p_locationEventCriteria := omit, + in template (omit) TimeStamp p_expiryDeadline := omit + ) := { + subscriptionType := "UserLocationEventSubscription", + clientCorrelator := p_clientCorrelator, + callbackReference := omit, + requestTestNotification := p_requestTestNotification, + websockNotifConfig := p_websockNotifConfig, + links_ := omit, + address_ := p_address, + userEventPara := p_userEventPara, + locationEventCriteria := p_locationEventCriteria, + expiryDeadline := p_expiryDeadline + } // End of template m_user_location_event_subscription_error + + template (present) UserLocationEventSubscription mw_user_location_event_subscription( + template (present) CallbackReference p_callbackReference := ?, + template (present) Address p_address := ?, + template (present) Links p_links_ := ?, + template ClientCorrelator p_clientCorrelator := *, + template Json.Bool p_requestTestNotification := *, + template WebsockNotifConfig p_websockNotifConfig := *, + template UserEventPara p_userEventPara := *, + template LocationEventCriteria p_locationEventCriteria := *, + template TimeStamp p_expiryDeadline := * + ) := { + subscriptionType := "UserLocationEventSubscription", + clientCorrelator := p_clientCorrelator, + callbackReference := p_callbackReference, + requestTestNotification := p_requestTestNotification, + websockNotifConfig := p_websockNotifConfig, + links_ := p_links_, + address_ := p_address, + userEventPara := p_userEventPara, + locationEventCriteria := p_locationEventCriteria, + expiryDeadline := p_expiryDeadline + } // End of template mw_user_location_event_subscription + + template (omit) UserLocationPeriodicSubscription m_user_location_periodic_subscription( + in CallbackReference p_callbackReference, + in Address p_address := PX_USER, + in template (omit) ClientCorrelator p_clientCorrelator := omit, + in template (omit) Json.Bool p_requestTestNotification := omit, + in template (omit) WebsockNotifConfig p_websockNotifConfig := omit, + in template (omit) PeriodicEventInfo p_periodicEventInfo := omit, + in template (omit) TimeStamp p_expiryDeadline := omit + ) := { + subscriptionType := "UserLocationPeriodicSubscription", + clientCorrelator := p_clientCorrelator, + callbackReference := p_callbackReference, + requestTestNotification := p_requestTestNotification, + websockNotifConfig := p_websockNotifConfig, + links_ := omit, + address_ := p_address, + periodicEventInfo := p_periodicEventInfo, + expiryDeadline := p_expiryDeadline + } // End of template m_user_location_periodic_subscription + + template (present) UserLocationPeriodicSubscription mw_user_location_periodic_subscription( + template (present) CallbackReference p_callbackReference := ?, + template (present) Address p_address := ?, + template (present) Links p_links_ := ?, + template ClientCorrelator p_clientCorrelator := *, + template Json.Bool p_requestTestNotification := *, + template WebsockNotifConfig p_websockNotifConfig := *, + template PeriodicEventInfo p_periodicEventInfo := *, + template TimeStamp p_expiryDeadline := * + ) := { + subscriptionType := "UserLocationPeriodicSubscription", + clientCorrelator := p_clientCorrelator, + callbackReference := p_callbackReference, + requestTestNotification := p_requestTestNotification, + websockNotifConfig := p_websockNotifConfig, + links_ := omit, + address_ := p_address, + periodicEventInfo := p_periodicEventInfo, + expiryDeadline := p_expiryDeadline + } // End of template mw_user_location_periodic_subscription + + template (omit) ZoneLocationEventSubscription m_zone_location_event_subscription( + in CallbackReference p_callbackReference, + in Address p_address := PX_USER, + in ZoneId p_zoneId, + in template (omit) ClientCorrelator p_clientCorrelator := omit, + in template (omit) Json.Bool p_requestTestNotification := omit, + in template (omit) WebsockNotifConfig p_websockNotifConfig := omit, + in template (omit) LocationEventCriteria p_locationEventCriteria := omit, + in template (omit) ReportingCtrl p_reportingCtrl := omit, + in template (omit) TimeStamp p_expiryDeadline := omit + ) := { + subscriptionType := "ZoneLocationEventSubscription", + clientCorrelator := p_clientCorrelator, + callbackReference := p_callbackReference, + requestTestNotification := p_requestTestNotification, + websockNotifConfig := p_websockNotifConfig, + links_ := omit, + zoneId := p_zoneId, + locationEventCriteria := p_locationEventCriteria, + reportingCtrl := p_reportingCtrl, + expiryDeadline := p_expiryDeadline + } // End of template m_zone_location_event_subscription + + template (present) ZoneLocationEventSubscription mw_zone_location_event_subscription( + template (present) CallbackReference p_callbackReference := ?, + template (present) Address p_address := ?, + template (present) ZoneId p_zoneId := ?, + template (present) Links p_links_ := ?, + template ClientCorrelator p_clientCorrelator := *, + template Json.Bool p_requestTestNotification := *, + template WebsockNotifConfig p_websockNotifConfig := *, + template LocationEventCriteria p_locationEventCriteria := *, + template ReportingCtrl p_reportingCtrl := *, + template TimeStamp p_expiryDeadline := * + ) := { + subscriptionType := "ZoneLocationEventSubscription", + clientCorrelator := p_clientCorrelator, + callbackReference := p_callbackReference, + requestTestNotification := p_requestTestNotification, + websockNotifConfig := p_websockNotifConfig, + links_ := p_links_, + zoneId := p_zoneId, + locationEventCriteria := p_locationEventCriteria, + reportingCtrl := p_reportingCtrl, + expiryDeadline := p_expiryDeadline + } // End of template mw_zone_location_event_subscription + + template (omit) ZoneStatusSubscription m_zone_status_subscription( + in CallbackReference p_callbackReference, + in Address p_address := PX_USER, + in ZoneId p_zoneId, + in template (omit) ClientCorrelator p_clientCorrelator := omit, + in template (omit) Json.Bool p_requestTestNotification := omit, + in template (omit) WebsockNotifConfig p_websockNotifConfig := omit, + in template (omit) Json.UInteger p_upperNumberOfUsersZoneThreshold := omit, + in template (omit) Json.UInteger p_lowerNumberOfUsersZoneThreshold := omit, + in template (omit) Json.UInteger p_upperNumberOfUsersAPThreshold := omit, + in template (omit) Json.UInteger p_lowerNumberOfUsersAPThreshold := omit, + in template (omit) OperationStatus p_operationStatus := omit, + in template (omit) ReportingCtrl p_reportingCtrl := omit, + in template (omit) TimeStamp p_expiryDeadline := omit + ) := { + subscriptionType := "ZoneStatusSubscription", + clientCorrelator := p_clientCorrelator, + callbackReference := p_callbackReference, + requestTestNotification := p_requestTestNotification, + websockNotifConfig := p_websockNotifConfig, + links_ := omit, + zoneId := p_zoneId, + upperNumberOfUsersZoneThreshold := p_upperNumberOfUsersZoneThreshold, + lowerNumberOfUsersZoneThreshold := p_lowerNumberOfUsersZoneThreshold, + upperNumberOfUsersAPThreshold := p_upperNumberOfUsersAPThreshold, + lowerNumberOfUsersAPThreshold := p_lowerNumberOfUsersAPThreshold, + operationStatus := p_operationStatus, + reportingCtrl := p_reportingCtrl, + expiryDeadline := p_expiryDeadline + } // End of template m_zone_status_subscription + + template (present) ZoneStatusSubscription mw_zone_status_subscription( + template (present) CallbackReference p_callbackReference := ?, + template (present) Address p_address := ?, + template (present) ZoneId p_zoneId := ?, + template (present) Links p_links_ := ?, + template ClientCorrelator p_clientCorrelator := *, + template Json.Bool p_requestTestNotification := *, + template WebsockNotifConfig p_websockNotifConfig := *, + template Json.UInteger p_upperNumberOfUsersZoneThreshold := *, + template Json.UInteger p_lowerNumberOfUsersZoneThreshold := *, + template Json.UInteger p_upperNumberOfUsersAPThreshold := *, + template Json.UInteger p_lowerNumberOfUsersAPThreshold := *, + template OperationStatus p_operationStatus := *, + template ReportingCtrl p_reportingCtrl := *, + template TimeStamp p_expiryDeadline := * + ) := { + subscriptionType := "ZoneStatusSubscription", + clientCorrelator := p_clientCorrelator, + callbackReference := p_callbackReference, + requestTestNotification := p_requestTestNotification, + websockNotifConfig := p_websockNotifConfig, + links_ := p_links_, + zoneId := p_zoneId, + upperNumberOfUsersZoneThreshold := p_upperNumberOfUsersZoneThreshold, + lowerNumberOfUsersZoneThreshold := p_lowerNumberOfUsersZoneThreshold, + upperNumberOfUsersAPThreshold := p_upperNumberOfUsersAPThreshold, + lowerNumberOfUsersAPThreshold := p_lowerNumberOfUsersAPThreshold, + operationStatus := p_operationStatus, + reportingCtrl := p_reportingCtrl, + expiryDeadline := p_expiryDeadline + } // End of template mw_zone_status_subscription + + template (omit) UserAreaSubscription m_user_area_subscription( + in CallbackReference p_callbackReference, + in Address p_address := PX_USER, + in template (value) AreaInfo p_areaDefine, + in Json.Number p_trackingAccuracy, + in template (omit) ClientCorrelator p_clientCorrelator := omit, + in template (omit) Json.Bool p_requestTestNotification := omit, + in template (omit) WebsockNotifConfig p_websockNotifConfig := omit, + in template (omit) LocationEventCriteria p_locationEventCriteria := omit, + in template (omit) ReportingCtrl p_reportingCtrl := omit, + in template (omit) Json.Bool p_reportingLocationReq := omit, + in template (omit) TimeStamp p_expiryDeadline := omit + ) := { + subscriptionType := "UserAreaSubscription", + clientCorrelator := p_clientCorrelator, + callbackReference := p_callbackReference, + requestTestNotification := p_requestTestNotification, + websockNotifConfig := p_websockNotifConfig, + links_ := omit, + areaDefine := p_areaDefine, + trackingAccuracy := p_trackingAccuracy, + locationEventCriteria := p_locationEventCriteria, + reportingCtrl := p_reportingCtrl, + reportingLocationReq := p_reportingLocationReq, + expiryDeadline := p_expiryDeadline + } // End of template m_user_area_subscription + + template (present) UserAreaSubscription mw_user_area_subscription( + template (present) CallbackReference p_callbackReference := ?, + template (present) Address p_address := ?, + template (present) Links p_links_ := ?, + template (present) AreaInfo p_areaDefine := ?, + template (present) Json.Number p_trackingAccuracy := ?, + template ClientCorrelator p_clientCorrelator := *, + template Json.Bool p_requestTestNotification := *, + template WebsockNotifConfig p_websockNotifConfig := *, + template LocationEventCriteria p_locationEventCriteria := *, + template ReportingCtrl p_reportingCtrl := *, + template Json.Bool p_reportingLocationReq := *, + template TimeStamp p_expiryDeadline := * + ) := { + subscriptionType := "UserAreaSubscription", + clientCorrelator := p_clientCorrelator, + callbackReference := p_callbackReference, + requestTestNotification := p_requestTestNotification, + websockNotifConfig := p_websockNotifConfig, + links_ := omit, + areaDefine := p_areaDefine, + trackingAccuracy := p_trackingAccuracy, + locationEventCriteria := p_locationEventCriteria, + reportingCtrl := p_reportingCtrl, + reportingLocationReq := p_reportingLocationReq, + expiryDeadline := p_expiryDeadline + } // End of template mw_user_area_subscription + + template (omit) UserDistanceSubscription m_user_distance_subscription( + in CallbackReference p_callbackReference, + in Address p_address := PX_USER, + in template (value) Json.AnyURIArray p_monitoredAddress, + in Json.Number p_distance, + in Json.Number p_trackingAccuracy, + in template (value) DistanceCriteria p_criteria := AllWithinDistance, + in Json.Bool p_checkImmediate := true, + in template (omit) ClientCorrelator p_clientCorrelator := omit, + in template (omit) Json.Bool p_requestTestNotification := omit, + in template (omit) WebsockNotifConfig p_websockNotifConfig := omit, + in template (omit) Json.AnyURI p_referenceAddress := omit, + in template (omit) ReportingCtrl p_reportingCtrl := omit, + in template (omit) TimeStamp p_expiryDeadline := omit + ) := { + subscriptionType := "UserAreaSubscription", + clientCorrelator := p_clientCorrelator, + callbackReference := p_callbackReference, + requestTestNotification := p_requestTestNotification, + websockNotifConfig := p_websockNotifConfig, + links_ := omit, + referenceAddress := p_referenceAddress, + monitoredAddress := p_monitoredAddress, + distance := p_distance, + trackingAccuracy := p_trackingAccuracy, + criteria := p_criteria, + checkImmediate := p_checkImmediate, + reportingCtrl := p_reportingCtrl, + expiryDeadline := p_expiryDeadline + } // End of template m_user_distance_subscription + + template (present) UserDistanceSubscription mw_user_distance_subscription( template (present) CallbackReference p_callbackReference := ?, - template (present) Address p_address := PX_USER, - template (present) UserEventCriteria p_userEventCriteria := { Entering }, - template (present) ResourceURL p_resourceURL := ? + template (present) Links p_links_ := ?, + template (present) Address p_address := ?, + template (present) Json.AnyURIArray p_monitoredAddress := ?, + template (present) Json.Number p_distance := ?, + template (present) Json.Number p_trackingAccuracy := ?, + template (present) DistanceCriteria p_criteria := ?, + template (present) Json.Bool p_checkImmediate := ?, + template ClientCorrelator p_clientCorrelator := *, + template Json.Bool p_requestTestNotification := *, + template WebsockNotifConfig p_websockNotifConfig := *, + template Json.AnyURI p_referenceAddress := *, + template ReportingCtrl p_reportingCtrl := *, + template TimeStamp p_expiryDeadline := * ) := { - clientCorrelator := p_clientCorrelator, - callbackReference := p_callbackReference, - address_ := p_address, - userEventCriteria := p_userEventCriteria, - resourceURL := p_resourceURL - } // End of template mw_user_tracking_subscription - - template (value) PeriodicTrackingSubscription m_periodic_tracking_subscription( - in ClientCorrelator p_clientCorrelator, - in CallbackReference p_callbackReference, - in Address p_address := PX_USER, - in Json.Number p_frequency := 10.0, - in Json.Number p_requestedAccuracy := 10.0 - ) := { - clientCorrelator := p_clientCorrelator, - callbackReference := p_callbackReference, - address_ := p_address, - frequency := p_frequency, - requestedAccuracy := p_requestedAccuracy, - resourceURL := omit - } // End of template m_periodic_tracking_subscription - - template (present) PeriodicTrackingSubscription mw_periodic_tracking_subscription( - template (present) ClientCorrelator p_clientCorrelator := ?, - template (present) CallbackReference p_callbackReference := ?, - template (present) Address p_address := PX_USER, - template (present) Json.Number p_frequency := ?, - template (present) Json.Number p_requestedAccuracy := ? - ) := { - clientCorrelator := p_clientCorrelator, - callbackReference := p_callbackReference, - address_ := p_address, - frequency := p_frequency, - requestedAccuracy := p_requestedAccuracy, - resourceURL := * - } // End of template mw_periodic_tracking_subscription - + subscriptionType := "UserAreaSubscription", + clientCorrelator := p_clientCorrelator, + callbackReference := p_callbackReference, + requestTestNotification := p_requestTestNotification, + websockNotifConfig := p_websockNotifConfig, + links_ := p_links_, + referenceAddress := p_referenceAddress, + monitoredAddress := p_monitoredAddress, + distance := p_distance, + trackingAccuracy := p_trackingAccuracy, + criteria := p_criteria, + checkImmediate := p_checkImmediate, + reportingCtrl := p_reportingCtrl, + expiryDeadline := p_expiryDeadline + } // End of template mw_user_distance_subscription + + template (omit) AreaInfo m_area_info( + in template (value) Shape p_shape, + in template (value) Points p_points, + in template (omit) Json.UInteger p_radius := omit + ) := { + shape := p_shape, + points := p_points, + radius := p_radius + } // End of template m_area_info + + template (present) AreaInfo mw_area_info( + template (present) Shape p_shape := ?, + template (present) Points p_points := ?, + template Json.UInteger p_radius := * + ) := { + shape := p_shape, + points := p_points, + radius := p_radius + } // End of template mw_area_info + + template (value) Point m_point( + in Latitude p_latitude, + in Longitude p_longitude + ) := { + latitude := p_latitude, + longitude := p_longitude + } // End of template m_point + + template (present) Point mw_point( + template (present) Latitude p_latitude := ?, + template (present) Longitude p_longitude := ? + ) := { + latitude := p_latitude, + longitude := p_longitude + } // End of template mw_point + template (value) TerminalDistance m_terminal_distance(in Json.Number p_distance) := { distance := p_distance, accuracy := omit, timestamp_ := omit } // End of template m_terminal_distance - + template (present) TerminalDistance mw_terminal_distance(template (present) Json.Number p_distance := ?) := { distance := p_distance, accuracy := *, timestamp_ := * } // End of template mw_terminal_distance - + } // End of module LocationAPI_Templates diff --git a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn index 6f5c286..0693c57 100644 --- a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn @@ -310,31 +310,10 @@ module LocationAPI_TypesAndValues { */ type Json.String AncillaryInfo; - /** - * @desc CallBackData if passed by the application during the associated ZonalTrafficSubscription and UserTrackingSubscription operation. See [\ -REST_NetAPI_Common]. - */ - type Json.String CallbackData; // TODO To be removed - - /** - * @desc Notification serialization format - */ - type enumerated NotificationFormat { - JSON (1), - XML (2) - } - /** * @desc CallbackData description - * @member callbackData Data the application can register with the server when subscribing to notifications, and that are passed back unchanged in each of the related notifications. These data can be used by the application in the processing of the notification, e.g. for correlation purposes - * @member notificationFormat - * @member notifyURL Notify Callback URL - */ - type record CallbackReference { - NotifyURL notifyURL, - CallbackData callbackData optional, - NotificationFormat notificationFormat optional - } + */ + type Json.AnyURI CallbackReference; /** * @desc Uniquely identifies this create subscription request. If there is a communication failure during the request, using the same clientCorrelator when retrying the request allows the operator to avoid creating a duplicate subscription. @@ -649,39 +628,6 @@ REST_NetAPI_Common]. } type Json.String AncillaryMapInfo; - /** - * @desc A type containing user tracking subscription. - * @member clientCorrelator A correlator that the client can use to tag this particular resource representation during a request to create a resource on the server - * @member callbackReference - * @member address_ Address of user (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI) to monitor - * @member userEventCriteria List of user event values to generate notifications for (these apply to address specified). If this element is missing, a notification is requested to be generated for any change in user event - * @member resourceURL Self referring URL - */ - type record UserTrackingSubscription { - ClientCorrelator clientCorrelator optional, - CallbackReference callbackReference, - Address address_, - UserEventCriteria userEventCriteria optional, - ResourceURL resourceURL optional - } with { - variant (address_) "name as 'address'"; - } - - /** - * @desc A type containing periodic tracking subscription. - * @member - */ - type record PeriodicTrackingSubscription { - ClientCorrelator clientCorrelator optional, - CallbackReference callbackReference, - Address address_, - Json.Number frequency, - Json.Number requestedAccuracy, - ResourceURL resourceURL optional - } with { - variant (address_) "name as 'address'"; - } - /** * @desc Identifier of zone */ @@ -763,16 +709,17 @@ REST_NetAPI_Common]. type record Subscription { Json.AnyURI href optional, Json.String subscriptionType - } + } + type record of Subscription Subscriptions; /** * @desc This type contains a list of subscriptions - * @member subscription Subscription element + * @member subscription Subscription elements * @member resourceURL Self-referring URL * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.3.3 Type: NotificationSubscriptionList */ type record NotificationSubscriptionList { - Subscription subscription optional, + Subscriptions subscription optional, ResourceURL resourceURL } @@ -793,7 +740,7 @@ REST_NetAPI_Common]. type record UserLocationEventSubscription { Json.String subscriptionType, Json.String clientCorrelator optional, - Json.AnyURI callbackReference optional, + CallbackReference callbackReference optional, Json.Bool requestTestNotification optional, WebsockNotifConfig websockNotifConfig optional, Links links_ optional, @@ -822,7 +769,7 @@ REST_NetAPI_Common]. type record UserLocationPeriodicSubscription{ Json.String subscriptionType, Json.String clientCorrelator optional, - Json.AnyURI callbackReference optional, + CallbackReference callbackReference optional, Json.Bool requestTestNotification optional, WebsockNotifConfig websockNotifConfig optional, Links links_ optional, @@ -877,7 +824,7 @@ REST_NetAPI_Common]. type record ZoneLocationEventSubscription { Json.String subscriptionType, Json.String clientCorrelator optional, - Json.AnyURI callbackReference optional, + CallbackReference callbackReference optional, Json.Bool requestTestNotification optional, WebsockNotifConfig websockNotifConfig optional, Links links_ optional, @@ -910,7 +857,7 @@ REST_NetAPI_Common]. type record ZoneStatusSubscription { Json.String subscriptionType, Json.String clientCorrelator optional, - Json.AnyURI callbackReference optional, + CallbackReference callbackReference optional, Json.Bool requestTestNotification optional, WebsockNotifConfig websockNotifConfig optional, Links links_ optional, @@ -945,7 +892,7 @@ REST_NetAPI_Common]. type record UserAreaSubscription { Json.String subscriptionType, Json.String clientCorrelator optional, - Json.AnyURI callbackReference optional, + CallbackReference callbackReference optional, Json.Bool requestTestNotification optional, WebsockNotifConfig websockNotifConfig optional, Links links_ optional, @@ -981,7 +928,7 @@ REST_NetAPI_Common]. type record UserDistanceSubscription { Json.String subscriptionType, Json.String clientCorrelator optional, - Json.AnyURI callbackReference optional, + CallbackReference callbackReference optional, Json.Bool requestTestNotification optional, WebsockNotifConfig websockNotifConfig optional, Links links_ optional, diff --git a/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Functions.ttcn b/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Functions.ttcn index 36ab7e9..6e92be6 100644 --- a/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Functions.ttcn +++ b/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Functions.ttcn @@ -126,13 +126,7 @@ module TrafficManagementAPI_Functions { APPLICATION_SPECIFIC_MTS_ALLOCATION, // Request type m_qosd, // QoS LowCost, // MtsMode - Downlink, // TrafficDirection - { - m_session_filter( - "10.10.10.10", - 1010 - ) - } // FlowFilter + Downlink // TrafficDirection )))))); tc_ac.start; alt { diff --git a/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Functions.ttcn b/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Functions.ttcn index 9af2041..8953fac 100644 --- a/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Functions.ttcn +++ b/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Functions.ttcn @@ -52,7 +52,6 @@ module V2XInformationServiceAPI_Functions { m_http_message_body_json( m_body_json_prov_chg_uu_uni_subscription( m_prov_chg_uu_uni_subscription( - PX_PROV_UU_UNI_SUB_CALLBACK, m_prov_chg_uu_uni_filter_criteria( m_location_info( m_ecgi( @@ -65,7 +64,9 @@ module V2XInformationServiceAPI_Functions { m_v2x_application_server( oct2char(unichar2oct(PX_V2X_SERVER_IP_ADDRESS, "UTF-8")), oct2char(unichar2oct(PX_V2X_SERVER_UDP_PORT, "UTF-8")) - )))))))); + )), + PX_PROV_UU_UNI_SUB_CALLBACK + )))))); tc_ac.start; alt { @@ -75,8 +76,8 @@ module V2XInformationServiceAPI_Functions { mw_http_message_body_json( mw_body_json_prov_chg_uu_uni_subscription( mw_prov_chg_uu_uni_subscription( - PX_PROV_UU_UNI_SUB_CALLBACK, -, + PX_PROV_UU_UNI_SUB_CALLBACK, ? )))))) -> value v_response { tc_ac.stop; @@ -100,7 +101,7 @@ module V2XInformationServiceAPI_Functions { httpPort.send( m_http_request( m_http_request_delete( - PICS_ROOT_API & p_prov_chg_uu_uni_subscription.links.self_, + PICS_ROOT_API & p_prov_chg_uu_uni_subscription.links.self_.href, v_headers ))); @@ -134,7 +135,6 @@ module V2XInformationServiceAPI_Functions { m_http_message_body_json( m_body_json_prov_chg_uu_mbms_subscription( m_prov_chg_uu_mbms_subscription( - PX_PROV_UU_MBMS_SUB_CALLBACK, m_prov_chg_uu_mbms_filter_criteria( m_location_info( m_ecgi( @@ -144,18 +144,20 @@ module V2XInformationServiceAPI_Functions { 43.72, 10.41 )), - m_v2x_server_usd( - { PX_V2X_MBMS_SERVICE_ID }, - m_sdp_info( - PX_V2X_MC_SERVER, - PX_V2X_MC_PORT - ), - m_tmgi( - PX_V2X_SERVICE_AREA_ID, - PX_MCC, - PX_MNC + m_v2x_server_usd( + { PX_V2X_MBMS_SERVICE_ID }, + m_sdp_info( + PX_V2X_MC_SERVER, + PX_V2X_MC_PORT + ), + m_tmgi( + PX_V2X_SERVICE_AREA_ID, + PX_MCC, + PX_MNC ) - )))))))); + )), + PX_PROV_UU_MBMS_SUB_CALLBACK + )))))); tc_ac.start; alt { @@ -165,8 +167,8 @@ module V2XInformationServiceAPI_Functions { mw_http_message_body_json( mw_body_json_prov_chg_uu_mbms_subscription( mw_prov_chg_uu_mbms_subscription( - PX_PROV_UU_MBMS_SUB_CALLBACK, -, + PX_PROV_UU_MBMS_SUB_CALLBACK, ? )))))) -> value v_response { tc_ac.stop; @@ -190,7 +192,7 @@ module V2XInformationServiceAPI_Functions { httpPort.send( m_http_request( m_http_request_delete( - PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & p_prov_chg_uu_mbms_subscription.links.self_, + PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & p_prov_chg_uu_mbms_subscription.links.self_.href, v_headers ))); @@ -224,7 +226,6 @@ module V2XInformationServiceAPI_Functions { m_http_message_body_json( m_body_json_prov_chg_pc5_subscription( m_prov_chg_pc5_subscription( - PX_PROV_PC5_SUB_CALLBACK, m_filter_criteria( PX_V2X_DST_LAYER_2_ID, m_location_info( @@ -234,7 +235,9 @@ module V2XInformationServiceAPI_Functions { m_location_info_geo_area( 43.72, 10.41 - ))))))))); + ))), + PX_PROV_PC5_SUB_CALLBACK + )))))); tc_ac.start; alt { @@ -243,11 +246,11 @@ module V2XInformationServiceAPI_Functions { mw_http_response_201_created( mw_http_message_body_json( mw_body_json_prov_chg_pc5_subscription( - mw_prov_chg_pc5_subscription( - PX_PROV_PC5_SUB_CALLBACK, - -, - ? - )))))) -> value v_response { + mw_prov_chg_pc5_subscription( + -, + PX_PROV_PC5_SUB_CALLBACK, + ? + )))))) -> value v_response { tc_ac.stop; p_prov_chg_pc5_subscription := v_response.response.body.json_body.provChgPc5Subscription; @@ -269,7 +272,7 @@ module V2XInformationServiceAPI_Functions { httpPort.send( m_http_request( m_http_request_delete( - PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & p_prov_chg_pc5_subscription.links.self_, + PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & p_prov_chg_pc5_subscription.links.self_.href, v_headers ))); @@ -303,8 +306,8 @@ module V2XInformationServiceAPI_Functions { m_http_message_body_json( m_body_json_v2x_msg_subscription( m_v2x_msg_subscription( - PX_PROV_V2X_SUB_CALLBACK, - m_v2x_msg_subscription_filter_criteria + m_v2x_msg_subscription_filter_criteria, + PX_PROV_V2X_SUB_CALLBACK )))))); tc_ac.start; @@ -315,8 +318,8 @@ module V2XInformationServiceAPI_Functions { mw_http_message_body_json( mw_body_json_v2x_msg_subscription( mw_v2x_msg_subscription( - PX_PROV_V2X_SUB_CALLBACK, -, + PX_PROV_V2X_SUB_CALLBACK, ? )))))) -> value v_response { tc_ac.stop; @@ -340,7 +343,7 @@ module V2XInformationServiceAPI_Functions { httpPort.send( m_http_request( m_http_request_delete( - PICS_ROOT_API & p_v2x_msg_subscription.links.self_, + PICS_ROOT_API & p_v2x_msg_subscription.links.self_.href, v_headers ))); diff --git a/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_TypesAndValues.ttcn b/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_TypesAndValues.ttcn index cd235c9..045f4f4 100644 --- a/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_TypesAndValues.ttcn @@ -93,7 +93,7 @@ module V2XInformationServiceAPI_TypesAndValues { * @member locationInfo Location information to identify a particular geographical area of interest to the service consumer for receiving V2X messages * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.2.5-1: Attributes of the V2xMsgDistributionServerInfo */ - type record Pc5ProvisioningInfo { + type record V2xMsgDistributionServerInfo { V2xMsgDistributionServer v2xMsgDistributionServer, LocationInfo locationInfo optional } diff --git a/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_TypesAndValues.ttcn b/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_TypesAndValues.ttcn index 212da04..a87f639 100644 --- a/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_TypesAndValues.ttcn @@ -254,7 +254,6 @@ module WlanInformationAPI_TypesAndValues { } with { variant (links) "name as '_links'"; } - type record of StaDataRateSubscription StaDataRateSubscriptionList; /** * @desc Notification from WLAN Access Information Service with regards to client stations associated to the targeted Access Point diff --git a/ttcn/LibMec/ttcn/LibMec_Pics.ttcn b/ttcn/LibMec/ttcn/LibMec_Pics.ttcn index 18ace6f..3d77f14 100644 --- a/ttcn/LibMec/ttcn/LibMec_Pics.ttcn +++ b/ttcn/LibMec/ttcn/LibMec_Pics.ttcn @@ -36,7 +36,7 @@ module LibMec_Pics { modulepar boolean PICS_APP_PACKAGE_NOTIFICATIONS := true; - modulepar charstring PICS_ROOT_API := "exampleAPI"; + modulepar charstring PICS_ROOT_API := "/"; modulepar boolean PIC_APP_LCM_NOTIFICATIONS := true; diff --git a/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn b/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn index f4b79b4..1752a7d 100644 --- a/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn +++ b/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn @@ -4,15 +4,13 @@ module LibMec_Pixits { modulepar charstring PX_ME_APP_Q_USERS_LIST_URI := "/location/v3/queries/users"; - modulepar charstring PX_ME_APP_Q_DIST_URI := "/location/v3/subscriptions/distance"; - - modulepar charstring PX_ME_APP_Q_USERS_LOC_SUB_URI := "/location/v3/subscriptions/userTracking"; - - modulepar charstring PX_ME_APP_Q_USERS_TRACK_SUB_URI := "/location/v3/subscriptions/periodic"; + modulepar charstring PX_LOC_API_USERS_SUB_URI := "/location/v3/subscriptions/users"; - modulepar charstring PX_ME_APP_Q_USERS_INF_SUB_URI := "/location/v3/subscriptions/zonalTraffic"; + modulepar charstring PX_LOC_API_ZONES_SUB_URI := "/location/v3/subscriptions/zones"; - modulepar charstring PX_ME_APP_Q_AREA_SUB_URI := "/location/v3/subscriptions/area/circle"; + modulepar charstring PX_LOC_API_AREA_SUB_URI := "/location/v3/subscriptions/area"; + + modulepar charstring PX_LOC_API_DISTANCE_SUB_URI := "/location/v3/subscriptions/distance"; modulepar charstring PX_ME_APP_Q_UE_IDENTITY_ID_URI := "/ui/v1/"; diff --git a/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn b/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn index 7d0d715..7d94b67 100644 --- a/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn +++ b/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn @@ -30,14 +30,19 @@ module LibHttp_JsonMessageBodyTypes { * In accordance with your TTCN-3 module LibItsHttp_JSONTypes, you have to change the JsonBody typing. */ // TODO Add here your custom RFCs import - + type union JsonBody { - UserInfo userInfo, - UserList userList, - LocationAPI_TypesAndValues.ZoneInfo zoneInfo, - AccessPointList accessPointList, - UserTrackingSubscription userTrackingSubscription, - PeriodicTrackingSubscription periodicTrackingSubscription, + UserInfo userInfo, // ETSI GS MEC 013 V3.1.1 Clause 6.2.2 Type: UserInfo + UserList userList, // ETSI GS MEC 013 V3.1.1 Clause 6.2.5 Type: UserList + LocationAPI_TypesAndValues.ZoneInfo zoneInfo, // ETSI GS MEC 013 V3.1.1 Clause 6.2.1 Zonal presence data types + AccessPointList accessPointList, // ETSI GS MEC 013 V3.1.1 Clause 6.2.1 Zonal presence data types + NotificationSubscriptionList notificationSubscriptionList, // ETSI GS MEC 013 V3.1.1 Clause 6.3.3 Type: NotificationSubscriptionList + UserLocationEventSubscription userLocationEventSubscription, // ETSI GS MEC 013 V3.1.1 Clause 6.3.4 Type: UserLocationEventSubscription + UserLocationPeriodicSubscription userLocationPeriodicSubscription, // ETSI GS MEC 013 V3.1.1 Clause 6.3.5 Type: UserLocationPeriodicSubscription + ZoneLocationEventSubscription zoneLocationEventSubscription, // ETSI GS MEC 013 V3.1.1 Clause 6.3.6 Type: ZoneLocationEventSubscription + ZoneStatusSubscription zoneStatusSubscription, // ETSI GS MEC 013 V3.1.1 Clause 6.3.7 Type: ZoneStatusSubscription + UserAreaSubscription userAreaSubscription, // ETSI GS MEC 013 V3.1.1 Clause 6.3.8 Type: UserAreaSubscription + UserDistanceSubscription userDistanceSubscription, // ETSI GS MEC 013 V3.1.1 Clause 6.3.9 Type: UserDistanceSubscription TerminalDistance terminalDistance, LibMec_TypesAndValues.ProblemDetails problemDetails, UeIdentityTagInfo ueIdentityTagInfo, diff --git a/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn b/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn index 660b1a0..0f1b54b 100644 --- a/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn +++ b/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn @@ -2,7 +2,7 @@ module LibHttp_JsonTemplates { // LibHttp import from LibHttp_JsonMessageBodyTypes all; - + // LibMec import from LibMec_TypesAndValues all; import from LibMec_Templates all; @@ -33,7 +33,7 @@ module LibHttp_JsonTemplates { // LibMec/UEAppInterfaceAPI import from UEAppInterfaceAPI_TypesAndValues all; - + // LibMec/module FixedAccessInformationServiceAPI import from FixedAccessInformationServiceAPI_TypesAndValues all; @@ -45,7 +45,7 @@ module LibHttp_JsonTemplates { // LibMec/V2XInformationServiceAPI import from V2XInformationServiceAPI_TypesAndValues all; - + template (value) JsonBody m_json_body_raw( in template (value) charstring p_raw ) := { @@ -65,35 +65,35 @@ module LibHttp_JsonTemplates { } // 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 (present) JsonBody mw_body_json_grant_response( template (present) Grant p_grant_response := ? ) := { 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_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 := ? ) := { @@ -111,13 +111,13 @@ module LibHttp_JsonTemplates { ) := { 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 ) := { @@ -135,23 +135,23 @@ module LibHttp_JsonTemplates { ) := { appPkgSubscriptionLinkList := p_app_pkg_subscription_link_list } // End of template mw_body_json_pkgm_subscription_link_list - + 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 group mepm_lifcyclemgt { - + 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 := ? ) := { @@ -159,87 +159,87 @@ module LibHttp_JsonTemplates { } // End of template mw_body_json_config_platform_for_app_request } // End of mepm_lifcyclemgt - + group mex_lifcyclemgt { - + 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 } - - + + template (present) JsonBody m_body_json_lifecycle_management_instantiate ( in template (present) InstantiateAppRequest p_app_instance_instantiate ) := { appInstanceInstantiate := p_app_instance_instantiate } - + template (present) JsonBody m_body_json_lifecycle_management_instantiate_with_error ( in template (present) InstantiateAppRequestWithError p_app_instance_instantiate_with_error ) := { appInstanceInstantiateWithError := p_app_instance_instantiate_with_error } - - - + + + template (present) JsonBody m_body_json_lifecycle_management_terminate ( in template (present) TerminateAppRequest p_app_instance_terminate ) := { terminateType := p_app_instance_terminate } - + template (present) JsonBody m_body_json_lifecycle_management_terminate_with_error ( in template (present) TerminateAppRequestWithError p_app_instance_terminate_with_error ) := { terminateTypeWithError := p_app_instance_terminate_with_error } - - - + + + template (present) JsonBody m_body_json_lifecycle_management_operate ( in template (present) OperateAppRequest p_app_instance_operate ) := { changeStateTo := p_app_instance_operate } - + template (present) JsonBody m_body_json_lifecycle_management_operate_with_error ( in template (present) OperateAppRequestWithError p_app_instance_operate_with_error ) := { changeStateToWithError := p_app_instance_operate_with_error } - - + + template (present) JsonBody mw_body_json_lifecycle_op_occ_list ( in template (present) AppInstanceLcmOpOccList p_app_instance_op_occ_list ) := { appInstanceLcmOpOccList := p_app_instance_op_occ_list } - + template (present) JsonBody mw_body_json_lifecycle_op_occ ( in template (present) AppInstanceLcmOpOcc p_app_instance_op_occ ) := { @@ -257,8 +257,8 @@ module LibHttp_JsonTemplates { ) := { subscriptionRequestWithError := p_app_lcm_request_with_error } - - + + template (present) JsonBody mw_body_json_lcm_subscription_list( in template (present) SubscriptionInfoList p_app_lcm_subscription_list ) := { @@ -270,8 +270,8 @@ module LibHttp_JsonTemplates { ) := { subscriptionInfo := p_app_lcm_subscription } - - + + template (present) JsonBody mw_body_json_lcm_notification ( in template (present) Notification p_lcm_notification ) := { @@ -332,8 +332,8 @@ group ams_api { ) := { subscriptionLinkList_ams := p_amsSubscriptionLinkList } // End of template mw_body_json_ue_identity_problem_details - - + + template (present) JsonBody mw_body_json_mobility_procedure_notification( template (present) Ams_TypesAndValues.MobilityProcedureSubscription_ p_amsSubscriptionLinkList := ? ) := { @@ -356,91 +356,151 @@ group ams_api { } // end of group ams api group location_api { - + template (value) JsonBody m_body_json_user_info( in template (value) UserInfo p_user_info ) := { userInfo := p_user_info } // End of template m_body_json_user_info - + template (present) JsonBody mw_body_json_user_info( template (present) UserInfo p_user_info := ? ) := { userInfo := p_user_info } // End of template mw_body_json_user_info - + template (value) JsonBody m_body_json_user_list( in template (value) UserList p_user_list ) := { userList := p_user_list } // End of template m_body_json_user_list - + template (present) JsonBody mw_body_json_user_list( template (present) UserList p_user_list := ? ) := { userList := p_user_list } // End of template mw_body_json_user_list - + template (value) JsonBody m_body_json_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) LocationAPI_TypesAndValues.ZoneInfo p_zone_info := ? ) := { zoneInfo := p_zone_info } // End of template mw_body_json_zone_info - + template (value) JsonBody m_body_json_access_point_list( in template (value) AccessPointList p_access_point_list ) := { accessPointList := p_access_point_list } // End of template m_body_json_access_point_list - + template (present) JsonBody mw_body_json_access_point_list( template (present) AccessPointList p_access_point_list := ? ) := { accessPointList := p_access_point_list } // End of template mw_body_json_access_point_list - - template (value) JsonBody m_body_json_user_tracking_subscription( - in template (value) UserTrackingSubscription p_user_tracking_subscription - ) := { - userTrackingSubscription := p_user_tracking_subscription - } // End of template m_body_json_user_tracking_subscription - - template (present) JsonBody mw_body_json_user_tracking_subscription( - template (present) UserTrackingSubscription p_user_tracking_subscription := ? - ) := { - userTrackingSubscription := p_user_tracking_subscription - } // End of template mw_body_json_user_rtracking_subscription - - template (value) JsonBody m_body_json_periodic_tracking_subscription( - in template (value) PeriodicTrackingSubscription p_periodic_tracking_subscription + + template (value) JsonBody m_body_json_notification_subscription_list( + in template (value) NotificationSubscriptionList p_notification_subscription_list + ) := { + notificationSubscriptionList := p_notification_subscription_list + } // End of template m_body_json_notification_subscription_list + + template (present) JsonBody mw_body_json_notification_subscription_list( + template (present) NotificationSubscriptionList p_notification_subscription_list := ? + ) := { + notificationSubscriptionList := p_notification_subscription_list + } // End of template mw_body_json_notification_subscription_list + + template (value) JsonBody m_body_json_user_location_event_subscription( + in template (value) UserLocationEventSubscription p_user_location_event_subscription + ) := { + userLocationEventSubscription := p_user_location_event_subscription + } // End of template m_body_json_user_location_event_subscription + + template (present) JsonBody mw_body_json_user_location_event_subscription( + template (present) UserLocationEventSubscription p_user_location_event_subscription := ? + ) := { + userLocationEventSubscription := p_user_location_event_subscription + } // End of template mw_body_json_user_location_event_subscription + + template (value) JsonBody m_body_json_user_location_periodic_subscription( + in template (value) UserLocationPeriodicSubscription p_user_location_periodic_subscription + ) := { + userLocationPeriodicSubscription := p_user_location_periodic_subscription + } // End of template m_body_json_user_location_periodic_subscription + + template (present) JsonBody mw_body_json_user_location_periodic_subscription( + template (present) UserLocationPeriodicSubscription p_user_location_periodic_subscription := ? + ) := { + userLocationPeriodicSubscription := p_user_location_periodic_subscription + } // End of template mw_body_json_user_location_periodic_subscription + + template (value) JsonBody m_body_json_zone_location_event_subscription( + in template (value) ZoneLocationEventSubscription p_zone_location_event_subscription + ) := { + zoneLocationEventSubscription := p_zone_location_event_subscription + } // End of template m_body_json_zone_location_event_subscription + + template (present) JsonBody mw_body_json_zone_location_event_subscription( + template (present) ZoneLocationEventSubscription p_zone_location_event_subscription := ? + ) := { + zoneLocationEventSubscription := p_zone_location_event_subscription + } // End of template mw_body_json_zone_location_event_subscription + + template (value) JsonBody m_body_json_zone_status_subscription( + in template (value) ZoneStatusSubscription p_zone_status_subscription + ) := { + zoneStatusSubscription := p_zone_status_subscription + } // End of template m_body_json_zone_status_subscription + + template (present) JsonBody mw_body_json_zone_status_subscription( + template (present) ZoneStatusSubscription p_zone_status_subscription := ? + ) := { + zoneStatusSubscription := p_zone_status_subscription + } // End of template mw_body_json_zone_status_subscription + + template (value) JsonBody m_body_json_user_area_subscription( + in template (value) UserAreaSubscription p_user_area_subscription + ) := { + userAreaSubscription := p_user_area_subscription + } // End of template m_body_json_user_area_subscription + + template (present) JsonBody mw_body_json_user_area_subscription( + template (present) UserAreaSubscription p_user_area_subscription := ? + ) := { + userAreaSubscription := p_user_area_subscription + } // End of template mw_body_json_user_area_subscription + + template (value) JsonBody m_body_json_user_distance_subscription( + in template (value) UserDistanceSubscription p_user_distance_subscription ) := { - periodicTrackingSubscription := p_periodic_tracking_subscription - } // End of template m_body_json_periodic_tracking_subscription - - template (present) JsonBody mw_body_json_periodic_tracking_subscription( - template (present) PeriodicTrackingSubscription p_periodic_tracking_subscription := ? + userDistanceSubscription := p_user_distance_subscription + } // End of template m_body_json_user_distance_subscription + + template (present) JsonBody mw_body_json_user_distance_subscription( + template (present) UserDistanceSubscription p_user_distance_subscription := ? ) := { - periodicTrackingSubscription := p_periodic_tracking_subscription - } // End of template mw_body_json_periodic_rtracking_subscription - + userDistanceSubscription := p_user_distance_subscription + } // End of template mw_body_json_user_distance_subscription + template (value) JsonBody m_body_json_terminal_distance( in template (value) TerminalDistance p_terminal_distance ) := { terminalDistance := p_terminal_distance } // End of template m_body_json_terminal_distance - + template (present) JsonBody mw_body_json_terminal_distance( template (present) TerminalDistance p_terminal_distance := ? ) := { terminalDistance := p_terminal_distance } // End of template mw_body_json_terminal_distance - + } // End of group location_api group ue_identity_api { @@ -450,13 +510,13 @@ group ams_api { ) := { ueIdentityTagInfo := p_ueIdentityTagInfo } // End of template m_body_json_ue_identity_tag_info - + template (present) JsonBody mw_body_json_ue_identity_tag_info( template (present) UeIdentityTagInfo p_ueIdentityTagInfo := ? ) := { ueIdentityTagInfo := p_ueIdentityTagInfo } // End of template mw_body_json_ue_identity_tag_info - + } // End of group ue_identity_api group rnis_subscriptions { @@ -466,189 +526,189 @@ group ams_api { ) := { subscriptionLinkList := p_subscriptionLinkList } // End of template m_body_json_subscriptions_list - + template (present) JsonBody mw_body_json_subscriptions_list( template (present) RnisAPI_TypesAndValues.SubscriptionLinkList p_subscriptionLinkList := ? ) := { subscriptionLinkList := p_subscriptionLinkList } // End of template mw_body_json_subscriptions_list - + template (value) JsonBody m_body_json_cell_change_subscription( in template (value) CellChangeSubscription p_cellChangeSubscription ) := { cellChangeSubscription := p_cellChangeSubscription } // End of template m_body_json_cell_change_subscription - + template (present) JsonBody mw_body_json_cell_change_subscription( template (present) CellChangeSubscription p_cellChangeSubscription := ? ) := { cellChangeSubscription := p_cellChangeSubscription } // End of template mw_body_json_cell_change_subscription - + template (value) JsonBody m_body_json_rab_info( in template (value) RabInfo p_rabInfo ) := { rabInfo := p_rabInfo } // End of template m_body_json_rab_info - + template (present) JsonBody mw_body_json_rab_info( template (present) RabInfo p_rabInfo := ? ) := { rabInfo := p_rabInfo } // End of template mw_body_json_rab_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_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 ) := { s1BearerInfo := p_s1BearerInfo } // End of template m_body_json_s1_bearer_info - + template (present) JsonBody mw_body_json_s1_bearer_info( template (present) S1BearerInfo p_s1BearerInfo := ? ) := { s1BearerInfo := p_s1BearerInfo } // End of template mw_body_json_s1_bearer_info - + template (value) JsonBody m_body_json_rab_est_subscription( in template (value) RabEstSubscription p_rabEstSubscription ) := { rabEstSubscription := p_rabEstSubscription } // End of template m_body_json_rab_est_subscription - + template (present) JsonBody mw_body_json_rab_est_subscription( template (present) RabEstSubscription p_rabEstSubscription := ? ) := { rabEstSubscription := p_rabEstSubscription } // End of template mw_body_json_rab_est_subscription - + template (value) JsonBody m_body_json_rab_mod_subscription( in template (value) RabModSubscription p_rabModSubscription ) := { rabModSubscription := p_rabModSubscription } // End of template m_body_json_rab_mod_subscription - + template (present) JsonBody mw_body_json_rab_mod_subscription( template (present) RabModSubscription p_rabModSubscription := ? ) := { rabModSubscription := p_rabModSubscription } // End of template mw_body_json_rab_mod_subscription - + template (value) JsonBody m_body_json_rab_rel_subscription( in template (value) RabRelSubscription p_rabRelSubscription ) := { rabRelSubscription := p_rabRelSubscription } // End of template m_body_json_rab_rel_subscription - + template (present) JsonBody mw_body_json_rab_rel_subscription( template (present) RabRelSubscription p_rabRelSubscription := ? ) := { rabRelSubscription := p_rabRelSubscription } // End of template mw_body_json_rab_rel_subscription - + template (value) JsonBody m_body_json_meas_rep_ue_subscription( in template (value) MeasRepUeSubscription p_measRepUeSubscription ) := { measRepUeSubscription := p_measRepUeSubscription } // End of template m_body_json_meas_rep_ue_subscription - + template (present) JsonBody mw_body_json_meas_rep_ue_subscription( template (present) MeasRepUeSubscription p_measRepUeSubscription := ? ) := { measRepUeSubscription := p_measRepUeSubscription } // End of template mw_body_json_meas_rep_ue_subscription - + template (value) JsonBody m_body_json_meas_ta_subscription( in template (value) MeasTaSubscription p_measTaSubscription ) := { measTaSubscription := p_measTaSubscription } // End of template m_body_json_meas_ta_subscription - + template (present) JsonBody mw_body_json_meas_ta_subscription( template (present) MeasTaSubscription p_measTaSubscription := ? ) := { measTaSubscription := p_measTaSubscription } // End of template mw_body_json_meas_ta_subscription - + template (value) JsonBody m_body_json_ca_reconf_subscription( in template (value) CaReConfSubscription p_caReconfSubscription ) := { caReConfSubscription := p_caReconfSubscription } // End of template m_body_json_ca_reconf_subscription - + template (present) JsonBody mw_body_json_ca_reconf_subscription( template (present) CaReConfSubscription p_caReconfSubscription := ? ) := { caReConfSubscription := p_caReconfSubscription } // End of template mw_body_json_ca_reconf_subscription - + template (value) JsonBody m_body_json_s1_bearer_subscription( in template (value) S1BearerSubscription p_s1BearerSubscription ) := { s1BearerSubscription := p_s1BearerSubscription } // End of template m_body_json_s1_bearer_subscription - + template (present) JsonBody mw_body_json_s1_bearer_subscription( template (present) S1BearerSubscription p_s1BearerSubscription := ? ) := { s1BearerSubscription := p_s1BearerSubscription } // End of template mw_body_json_s1_bearer_subscription - + template (value) JsonBody m_body_json_l2_meas_subscription( 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 := ? ) := { l2Meas := p_l2Meas } // End of template mw_body_json_l2_meas_subscription - + } // End of group rnis_subscriptions - + group rnis_notifications { - + } // End of group rnis_notifications - + group traffic_management_api { - + template (value) JsonBody m_body_json_bw_info( in template (value) BwInfo p_bwInfo ) := { bwInfo := p_bwInfo } // End of template m_body_json_bw_info - + template (present) JsonBody mw_body_json_bw_info( template (present) BwInfo p_bwInfo := ? ) := { bwInfo := p_bwInfo } // End of template mw_body_json_bw_info - + template (value) JsonBody m_body_json_bw_info_deltas( in template (value) BwInfoDeltas p_bwInfoDeltas ) := { bwInfoDeltas := p_bwInfoDeltas } // End of template m_body_json_bw_info_deltas - + template (present) JsonBody mw_body_json_bw_info_deltas( template (present) BwInfoDeltas p_bwInfoDeltas := ? ) := { bwInfoDeltas := p_bwInfoDeltas } // End of template mw_body_json_bw_info_deltas - + template (present) JsonBody mw_body_json_bw_info_list( template (present) BwInfoList p_bwInfoList := ? ) := { @@ -660,35 +720,35 @@ group ams_api { ) := { mtsCapabilityInfo := p_mtsCapabilityInfo } // End of template m_body_json_mts_capability_info - + template (present) JsonBody mw_body_json_mts_capability_info( template (present) MtsCapabilityInfo p_mtsCapabilityInfo := ? ) := { mtsCapabilityInfo := p_mtsCapabilityInfo } // End of template mw_body_json_mts_capability_info - + template (value) JsonBody m_body_json_mts_session_info( in template (value) MtsSessionInfo p_mtsSessionInfo ) := { mtsSessionInfo := p_mtsSessionInfo } // End of template m_body_json_mts_session_info - + template (present) JsonBody mw_body_json_mts_session_info( template (present) MtsSessionInfo p_mtsSessionInfo := ? ) := { mtsSessionInfo := p_mtsSessionInfo } // End of template mw_body_json_mts_session_info - + template (present) JsonBody mw_body_json_mts_session_info_list( template (present) MtsSessionInfos p_mtsSessionInfos := ? ) := { mtsSessionInfos := p_mtsSessionInfos } // End of template mw_body_json_mts_session_info_list - + } // End of group traffic_management_api group app_enablement_api { - + template (value) JsonBody m_body_json_service_info_list( in template (value) ServiceInfoList p_serviceInfoList ) := { @@ -712,7 +772,7 @@ group ams_api { ) := { serviceInfo := p_serviceInfo } // End of template mw_body_json_service_info - + template (value) JsonBody m_body_json_subscription_link_list( in template (value) EdgePlatformApplicationEnablementAPI_TypesAndValues.SubscriptionLinkList p_subscription_link_list ) := { @@ -778,125 +838,125 @@ group ams_api { ) := { transportInfoList := p_transportInfoList } // End of template m_body_json_transport_info_list - + template (present) JsonBody mw_body_json_transport_info_list( template (present) TransportInfoList p_transportInfoList := ? ) := { transportInfoList := p_transportInfoList } // End of template mw_body_json_transport_info_list - + template (value) JsonBody m_body_json_dns_rule( in template (value) DnsRule p_dnsRule ) := { dnsRule := p_dnsRule } // End of template m_body_json_dns_rule - + template (present) JsonBody mw_body_json_dns_rule( template (present) DnsRule p_dnsRule := ? ) := { dnsRule := p_dnsRule } // End of template mw_body_json_dns_rule - + template (value) JsonBody m_body_json_dns_rule_list( in template (value) DnsRuleList p_dnsRuleList ) := { dnsRuleList := p_dnsRuleList } // End of template m_body_json_dns_rule_list - + template (present) JsonBody mw_body_json_dns_rule_list( template (present) DnsRuleList p_dnsRuleList := ? ) := { dnsRuleList := p_dnsRuleList } // End of template mw_body_json_dns_rule_list - + template (value) JsonBody m_body_json_srv_avail_notif_subscription( in template (value) SerAvailabilityNotificationSubscription p_serAvailabilityNotificationSubscription ) := { serAvailabilityNotificationSubscription := p_serAvailabilityNotificationSubscription } // End of template m_body_json_srv_avail_notif_subscription - + template (present) JsonBody mw_body_json_srv_avail_notif_subscription( template (present) SerAvailabilityNotificationSubscription p_serAvailabilityNotificationSubscription := ? ) := { serAvailabilityNotificationSubscription := p_serAvailabilityNotificationSubscription } // End of template mw_body_json_srv_avail_notif_subscription - + template (value) JsonBody m_body_json_timing_caps( in template (value) TimingCaps p_timingCaps ) := { timingCaps := p_timingCaps } // End of template m_body_json_timing_caps - + template (present) JsonBody mw_body_json_timing_caps( template (present) TimingCaps p_timingCaps := ? ) := { timingCaps := p_timingCaps } // End of template mw_body_json_timing_caps - + template (value) JsonBody m_body_json_current_time( in template (value) CurrentTime p_currentTime ) := { currentTime := p_currentTime } // End of template m_body_json_current_time - + template (present) JsonBody mw_body_json_current_time( template (present) CurrentTime p_currentTime := ? ) := { currentTime := p_currentTime } // End of template mw_body_json_current_time - + template (value) JsonBody m_body_json_traffic_rule( in template (value) TrafficRule p_trafficRule ) := { trafficRule := p_trafficRule } // End of template m_body_json_traffic_rule - + template (present) JsonBody mw_body_json_traffic_rule( template (present) TrafficRule p_trafficRule := ? ) := { trafficRule := p_trafficRule } // End of template mw_body_json_traffic_rule - + template (value) JsonBody m_body_json_traffic_rule_list( in template (value) TrafficRuleList p_trafficRuleList ) := { trafficRuleList := p_trafficRuleList } // End of template m_body_json_traffic_rule_list - + template (present) JsonBody mw_body_json_traffic_rule_list( template (present) TrafficRuleList p_trafficRuleList := ? ) := { trafficRuleList := p_trafficRuleList } // End of template mw_body_json_traffic_rule_list - + } // End of group app_enablement_api - + group ue_app_ctx { - + template (value) JsonBody m_body_json_app_context( in template (value) UEAppInterfaceAPI_TypesAndValues.AppContext p_appContext ) := { appContext := p_appContext } // End of template m_body_json_app_context - + template (present) JsonBody mw_body_json_app_context( template (present) UEAppInterfaceAPI_TypesAndValues.AppContext p_appContext := ? ) := { appContext := p_appContext } // End of template mw_body_json_app_context - + template (value) JsonBody m_body_json_app_info( in template (value) UEAppInterfaceAPI_TypesAndValues.AppInfo p_appInfo ) := { appInfo := p_appInfo } // End of template m_body_json_app_info - + template (present) JsonBody mw_body_json_app_info( template (present) UEAppInterfaceAPI_TypesAndValues.AppInfo p_appInfo := ? ) := { appInfo := p_appInfo } // End of template mw_body_json_app_info - + } // End of group ue_app_ctx group device_information { @@ -1188,79 +1248,79 @@ group ams_api { } // End of group v2x_information_service group fai { - + template (value) JsonBody m_body_json_fai_fa_info( in template (value) FaInfo p_faInfo ) := { faInfo := p_faInfo } // End of template m_body_json_fai_fa_info - + template (present) JsonBody mw_body_json_fai_fa_info( template (present) FaInfo p_faInfo := ? ) := { faInfo := p_faInfo } // End of template mw_body_json_fai_fa_info - + template (value) JsonBody m_body_json_fai_device_info( in template (value) DeviceInfo p_deviceInfo ) := { deviceInfo := p_deviceInfo } // End of template m_body_json_fai_device_info - + template (present) JsonBody mw_body_json_fai_device_info( template (present) DeviceInfo p_deviceInfo := ? ) := { deviceInfo := p_deviceInfo } // End of template mw_body_json_fai_device_info - + template (value) JsonBody m_body_json_fai_cable_line_info( in template (value) CableLineInfo p_cableLineInfo ) := { cableLineInfo := p_cableLineInfo } // End of template m_body_json_fai_cable_line_info - + template (present) JsonBody mw_body_json_fai_cable_line_info( template (present) CableLineInfo p_cableLineInfo := ? ) := { cableLineInfo := p_cableLineInfo } // End of template mw_body_json_fai_cable_line_info - + template (value) JsonBody m_body_json_fai_pon_info( in template (value) PonInfo p_ponInfo ) := { ponInfo := p_ponInfo } // End of template m_body_json_fai_pon_info - + template (present) JsonBody mw_body_json_fai_pon_info( template (present) PonInfo p_ponInfo := ? ) := { ponInfo := p_ponInfo } // End of template mw_body_json_fai_pon_info - + template (value) JsonBody m_body_json_fai_subscription_link_list( in template (value) FixedAccessInformationServiceAPI_TypesAndValues.SubscriptionLinkList p_subscriptionLinkList ) := { subscriptionLinkList_fai := p_subscriptionLinkList } // End of template m_body_json_fai_subscription_link_list - + template (present) JsonBody mw_body_json_fai_subscription_link_list( template (present) FixedAccessInformationServiceAPI_TypesAndValues.SubscriptionLinkList p_subscriptionLinkList := ? ) := { subscriptionLinkList_fai := p_subscriptionLinkList } // End of template mw_body_json_fai_subscription_link_list - + template (value) JsonBody m_body_json_fai_onu_alarm_subscription_link_list( in template (value) OnuAlarmSubscription p_onuAlarmSubscription ) := { onuAlarmSubscription := p_onuAlarmSubscription } // End of template m_body_json_fai_onu_alarm_subscription_link_list - + template (present) JsonBody mw_body_json_fai_onu_alarm_subscription_link_list( template (present) OnuAlarmSubscription p_onuAlarmSubscription := ? ) := { onuAlarmSubscription := p_onuAlarmSubscription } // End of template mw_body_json_fai_onu_alarm_subscription_link_list - + } // End of group fai } // End of module LibHttp_JsonTemplates -- GitLab From 16b1e93dae1d04e486e72a39bece238503c85c27 Mon Sep 17 00:00:00 2001 From: garciay Date: Mon, 17 Jul 2023 10:22:51 +0200 Subject: [PATCH 35/99] Rebuild AtsMec with new typing --- ttcn/AtsMec_Location/module.mk | 1 + 1 file changed, 1 insertion(+) diff --git a/ttcn/AtsMec_Location/module.mk b/ttcn/AtsMec_Location/module.mk index f34f292..480db29 100644 --- a/ttcn/AtsMec_Location/module.mk +++ b/ttcn/AtsMec_Location/module.mk @@ -26,6 +26,7 @@ modules := ../LibCommon \ ../../titan-test-system-framework/ccsrc/loggers \ ../../titan-test-system-framework/ccsrc/Protocols/Http \ ../../titan-test-system-framework/ccsrc/Protocols/Tcp \ + ../../titan-test-system-framework/ccsrc/Protocols/Xml \ ../../titan-test-system-framework/ccsrc/Helpers \ ../../ccsrc/Ports/LibHttp \ ../../ccsrc/EncDec/LibMec \ -- GitLab From d1a0274e7de05a3d2d0487bfb86c9c55439f8cfd Mon Sep 17 00:00:00 2001 From: garciay Date: Mon, 17 Jul 2023 10:41:03 +0200 Subject: [PATCH 36/99] Align virtualization/docker-dev/Dockerfile.stfubuntu with the other ETSI projects --- virtualization/docker-dev/Dockerfile | 57 ++++++------------- .../docker-dev/Dockerfile.stfubuntu | 2 +- virtualization/docker-dev/build.sh | 2 +- 3 files changed, 19 insertions(+), 42 deletions(-) diff --git a/virtualization/docker-dev/Dockerfile b/virtualization/docker-dev/Dockerfile index cae4b24..37c7b15 100644 --- a/virtualization/docker-dev/Dockerfile +++ b/virtualization/docker-dev/Dockerfile @@ -1,49 +1,26 @@ -FROM alpine:latest - -# Install dependencies -RUN apk update && \ - apk add --no-cache sudo make git g++ diffutils expect openssl-dev libxml2-dev libxml2-utils libxslt-dev libtool ncurses-dev jsoncpp-dev readline-dev flex bison perl libexecinfo-dev bash libedit libedit-dev lksctp-tools lksctp-tools-dev libpcap-dev - -# Create user and sudouser -RUN \ - addgroup -g 1000 etsi && \ - adduser -S -D -u 1000 -G etsi -h /home/etsi -s /bin/bash etsi && \ - echo "etsi:etsi" | chpasswd && \ - echo "etsi ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers || exit 1 -USER etsi +FROM stfubuntu:20.04 -# Setup Hosts file at the boot time -RUN \ - echo 'sudo sh -c "cp /etc/hosts /etc/append && (echo \"127.0.1.1 $HOSTNAME\"; cat /etc/append) > /etc/hosts"' >> /home/etsi/.bashrc \ - echo 'sh' >> /home/etsi/.bashrc || exit 1 +MAINTAINER ETSI TTF T027 -# Clone Titan -WORKDIR /home/etsi -RUN mkdir -p frameworks dev tmp && cd frameworks && git clone https://github.com/eclipse/titan.core.git || exit 1 -WORKDIR /home/etsi/frameworks/titan.core/ +LABEL description="TTF_T027_Mec Docker Image" -# Setup ENV variables -ENV TTCN3_DIR=/home/etsi/frameworks/titan.core/Install -ENV PATH=$TTCN3_DIR/bin:$PATH \ - LD_LIBRARY_PATH=$TTCN3_DIR/lib:$LD_LIBRARY_PATH +ENV TERM=linux \ + HOME=/home/etsi \ + HOSTNAME=docker-titan-TTF_T027 -# Set flags -RUN \ - echo "ALPINE_LINUX=yes" > Makefile.personal && \ - echo "TTCN3_DIR=$TTCN3_DIR" >> Makefile.personal && \ - echo "JNI=no" >> Makefile.personal && \ - echo "GUI=no" >> Makefile.personal && \ - echo "DEBUG=no" >> Makefile.personal || exit 1 +COPY home /home/etsi -# Build Titan -RUN \ - sed --in-place 's/LINUX_LIBS := -lxml2/LINUX_LIBS := -lxml2 -lpthread/g' ./core/Makefile && \ - make install && make clean || exit 1 +RUN cd /home/etsi \ + && chown -R etsi:etsi . \ + && ls ./etc/init.d/*.sh | while read S; do chmod 0750 "$S" || exit 1; done -WORKDIR /home/etsi/dev +USER etsi -ENV ATS=AtsCise +RUN cd ${HOME} \ + && export PATH=$HOME/bin:$PATH \ + && ls ${HOME}/etc/init.d/*.sh | while read S; do /bin/bash -c "$S" || exit 1; done \ + && rm -fr ${HOME}/etc -EXPOSE 30181/tcp +CMD ["/bin/bash"] -ENTRYPOINT /home/yann/dev/cise/virtualization/docker/docker-entrypoint.sh +# That's all Floks diff --git a/virtualization/docker-dev/Dockerfile.stfubuntu b/virtualization/docker-dev/Dockerfile.stfubuntu index 9fa6645..2805900 100644 --- a/virtualization/docker-dev/Dockerfile.stfubuntu +++ b/virtualization/docker-dev/Dockerfile.stfubuntu @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 +FROM ubuntu:22.04 LABEL ETSI CTI LABEL description="STF Docker Ubuntu image" diff --git a/virtualization/docker-dev/build.sh b/virtualization/docker-dev/build.sh index a7859fb..accf9e0 100755 --- a/virtualization/docker-dev/build.sh +++ b/virtualization/docker-dev/build.sh @@ -13,7 +13,7 @@ if [ "$1" == "--force-stfubuntu" ]; then 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:22.04 -f Dockerfile.stfubuntu --force-rm . || exit 1 fi docker build --no-cache --tag mec_devel --force-rm . || ( echo "Docker build failed: $?"; exit 1 ) -- GitLab From 1cfe472e33c471c3d5c61071708b146393ecd456 Mon Sep 17 00:00:00 2001 From: garciay Date: Mon, 17 Jul 2023 11:01:00 +0200 Subject: [PATCH 37/99] Align virtualization/docker-dev/Dockerfile.stfubuntu with the other ETSI projects --- virtualization/docker-dev/Dockerfile.stfubuntu | 2 +- virtualization/docker-dev/build.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/virtualization/docker-dev/Dockerfile.stfubuntu b/virtualization/docker-dev/Dockerfile.stfubuntu index 2805900..9fa6645 100644 --- a/virtualization/docker-dev/Dockerfile.stfubuntu +++ b/virtualization/docker-dev/Dockerfile.stfubuntu @@ -1,4 +1,4 @@ -FROM ubuntu:22.04 +FROM ubuntu:20.04 LABEL ETSI CTI LABEL description="STF Docker Ubuntu image" diff --git a/virtualization/docker-dev/build.sh b/virtualization/docker-dev/build.sh index accf9e0..2eb0390 100755 --- a/virtualization/docker-dev/build.sh +++ b/virtualization/docker-dev/build.sh @@ -13,7 +13,7 @@ if [ "$1" == "--force-stfubuntu" ]; then fi # Check and build stfubuntu image if [ -z `docker images -q stfubuntu` ]; then - docker build --no-cache --tag stfubuntu:22.04 -f Dockerfile.stfubuntu --force-rm . || exit 1 + docker build --no-cache --tag stfubuntu:20.04 -f Dockerfile.stfubuntu --force-rm . || exit 1 fi docker build --no-cache --tag mec_devel --force-rm . || ( echo "Docker build failed: $?"; exit 1 ) -- GitLab From 155178092835f779813a29c09457543b999d2385 Mon Sep 17 00:00:00 2001 From: garciay Date: Mon, 7 Aug 2023 14:51:43 +0200 Subject: [PATCH 38/99] Review typing for MEC 010-2 V3.1.1; Rebuild all test suites before starting reviewing and implementations --- ...ceApplicationInterfaceAPI_TestControl.ttcn | 104 - .../AtsMec_UEAppInterfaceAPI_TestCases.ttcn | 641 --- .../module.mk | 48 - ...leAndOperationGrantingAPI_TestControl.ttcn | 103 - ttcn/AtsMec/AtsMec_LcRRm/module.mk | 48 - ...ycleAndOperationGrantingAPI_TestCases.ttcn | 34 +- ...leAndOperationGrantingAPI_TestControl.ttcn | 18 + .../module.mk | 36 + ...viceApplicationInterfaceAPI_TestCases.ttcn | 0 ...ceApplicationInterfaceAPI_TestControl.ttcn | 30 + .../module.mk | 37 + .../module.mk | 2 + ttcn/AtsMec_FederationEnablement/module.mk | 3 +- ...AccessInformationServiceAPI_TestCases.ttcn | 2 +- .../module.mk | 3 +- ttcn/AtsMec_IoT/module.mk | 3 +- .../AtsMec_Rnis/AtsMec_RnisAPI_TestCases.ttcn | 7 +- ttcn/AtsMec_Rnis/module.mk | 3 +- ..._MultiAccessSteeringInfoAPI_TestCases.ttcn | 85 +- ...AtsMec_TrafficManagementAPI_TestCases.ttcn | 24 +- ttcn/AtsMec_TrafficManagement/module.mk | 5 +- ttcn/AtsMec_UEidentity/module.mk | 2 +- ttcn/AtsMec_V2XInformationService/module.mk | 2 + .../AtsMec_WlanInformationAPI_TestCases.ttcn | 35 +- ttcn/AtsMec_WlanInformation/module.mk | 3 +- ...ycleAndOperationGrantingAPI_Templates.ttcn | 38 +- ...ndOperationGrantingAPI_TypesAndValues.ttcn | 3654 +++++++++-------- ...pplicationInterfaceAPI_TypesAndValues.ttcn | 16 +- ...plicationEnablementAPI_TypesAndValues.ttcn | 62 +- 29 files changed, 2203 insertions(+), 2845 deletions(-) delete mode 100644 ttcn/AtsMec/AtsMec_DeviceApplicationInterface/AtsMec_DeviceApplicationInterfaceAPI_TestControl.ttcn delete mode 100644 ttcn/AtsMec/AtsMec_DeviceApplicationInterface/AtsMec_UEAppInterfaceAPI_TestCases.ttcn delete mode 100644 ttcn/AtsMec/AtsMec_DeviceApplicationInterface/module.mk delete mode 100644 ttcn/AtsMec/AtsMec_LcRRm/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestControl.ttcn delete mode 100644 ttcn/AtsMec/AtsMec_LcRRm/module.mk rename ttcn/{AtsMec/AtsMec_LcRRm => AtsMec_AtsMec_ApplicationPackageLifecycleAndOperationGranting}/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases.ttcn (98%) create mode 100644 ttcn/AtsMec_AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestControl.ttcn create mode 100644 ttcn/AtsMec_AtsMec_ApplicationPackageLifecycleAndOperationGranting/module.mk rename ttcn/{AtsMec => }/AtsMec_DeviceApplicationInterface/AtsMec_DeviceApplicationInterfaceAPI_TestCases.ttcn (100%) create mode 100644 ttcn/AtsMec_DeviceApplicationInterface/AtsMec_DeviceApplicationInterfaceAPI_TestControl.ttcn create mode 100644 ttcn/AtsMec_DeviceApplicationInterface/module.mk diff --git a/ttcn/AtsMec/AtsMec_DeviceApplicationInterface/AtsMec_DeviceApplicationInterfaceAPI_TestControl.ttcn b/ttcn/AtsMec/AtsMec_DeviceApplicationInterface/AtsMec_DeviceApplicationInterfaceAPI_TestControl.ttcn deleted file mode 100644 index cb02a26..0000000 --- a/ttcn/AtsMec/AtsMec_DeviceApplicationInterface/AtsMec_DeviceApplicationInterfaceAPI_TestControl.ttcn +++ /dev/null @@ -1,104 +0,0 @@ -module AtsMec_TestControl { - - // LibMec/LocationAPI - import from LocationAPI_Pics all; - // LibMec/UEidentityAPI - import from UEidentityAPI_Pics all; - // LibMec/RnisAPI - import from RnisAPI_Pics all; - // LibMec/TrafficManagementAPI - import from TrafficManagementAPI_Pics all; - // LibMec/AppEnablementAPI - import from EdgePlatformApplicationEnablementAPI_Pics all; - // LibMec/UEAppInterfaceAPI - import from UEAppInterfaceAPI_Pics all; - - // LibMec - import from LibMec_Pics all; - - // AtsMec - import from AtsMec_UEidentityAPI_TestCases all; -// import from AtsMec_RadioNodeLocationAPI_TestCases all; - import from AtsMec_RnisAPI_TestCases all; - import from AtsMec_TrafficManagementAPI_TestCases all; - import from AtsMec_EdgePlatformApplicationEnablementAPI_TestCases all; - import from AtsMec_UEAppInterfaceAPI_TestCases all; - - control { - - if (PICS_MEC_PLAT and PICS_SERVICES) { - if (PICS_UE_IDENTITY_API_SUPPORTED) { - execute(TC_MEC_MEC014_SRV_UETAG_001_OK()); - execute(TC_MEC_MEC014_SRV_UETAG_001_BR()); - execute(TC_MEC_MEC014_SRV_UETAG_001_NF()); - execute(TC_MEC_MEC014_SRV_UETAG_002_OK()); - execute(TC_MEC_MEC014_SRV_UETAG_002_BR()); - execute(TC_MEC_MEC014_SRV_UETAG_002_PF()); - } - if (PICS_LOCATION_API_SUPPORTED) { - - -// execute(TC_MEC_PLAT_RLOC_001_OK()); -// execute(TC_MEC_PLAT_RLOC_001_NF()); - } - - if (PICS_APP_ENABLEMENT_API_SUPPORTED) { - /*execute(TC_MEC_SRV_TRANS_001_OK()); - execute(TC_MEC_SRV_TRAF_001_OK()); - execute(TC_MEC_SRV_TRAF_002_OK()); - execute(TC_MEC_SRV_TRAF_003_OK()); - execute(TC_MEC_SRV_TRAF_001_NF());*/ - } - - if (PICS_ENABLE_UE_APP_CTX) { - execute(TC_MEC_MEC016_MEO_UEAPPCTX_001_OK()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_001_BR()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_OK()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_BR()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_NF()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_003_OK()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_003_NF()); - execute(TC_MEC_MEC016_MEO_UEAPPS_001_OK()); - execute(TC_MEC_MEC016_MEO_UEAPPS_001_BR()); - execute(TC_MEC_MEC016_MEO_UEAPPS_001_NF()); - } - } - - /*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()); - execute(TC_MEC_MEC012_SRV_RNIS_011_BR()); - execute(TC_MEC_MEC012_SRV_RNIS_012_BR()); - } - if (PICS_RNIS_QUERY) { - execute(TC_MEC_MEC012_SRV_RNIS_016_OK()); - execute(TC_MEC_MEC012_SRV_RNIS_016_BR()); - execute(TC_MEC_MEC012_SRV_RNIS_016_NF()); - execute(TC_MEC_MEC012_SRV_RNIS_017_OK()); - execute(TC_MEC_MEC012_SRV_RNIS_017_BR()); - execute(TC_MEC_MEC012_SRV_RNIS_017_NF()); - execute(TC_MEC_MEC012_SRV_RNIS_018_OK()); - execute(TC_MEC_MEC012_SRV_RNIS_018_BR()); - execute(TC_MEC_MEC012_SRV_RNIS_018_NF()); - execute(TC_MEC_MEC012_SRV_RNIS_019_OK()); - execute(TC_MEC_MEC012_SRV_RNIS_019_BR()); - execute(TC_MEC_MEC012_SRV_RNIS_019_NF()); - } - }*/ - - if (PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED) { - execute(TC_MEC_MEC015_SRV_TM_001_OK()); - execute(TC_MEC_MEC015_SRV_TM_002_OK()); - execute(TC_MEC_MEC015_SRV_TM_002_BR()); - execute(TC_MEC_MEC015_SRV_TM_002_NF()); - } - } // End of 'control' statement - -} // End of module AtsMec_TestControl diff --git a/ttcn/AtsMec/AtsMec_DeviceApplicationInterface/AtsMec_UEAppInterfaceAPI_TestCases.ttcn b/ttcn/AtsMec/AtsMec_DeviceApplicationInterface/AtsMec_UEAppInterfaceAPI_TestCases.ttcn deleted file mode 100644 index 7952f35..0000000 --- a/ttcn/AtsMec/AtsMec_DeviceApplicationInterface/AtsMec_UEAppInterfaceAPI_TestCases.ttcn +++ /dev/null @@ -1,641 +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 013 V2.0.3 (2018-10) - */ -module AtsMec_UEAppInterfaceAPI_TestCases { - - // Libcommon - import from LibCommon_Sync all; - - // LibHttp - import from LibHttp_TypesAndValues all; - import from LibHttp_Functions all; - import from LibHttp_Templates all; - import from LibHttp_JsonTemplates all; - import from LibHttp_TestSystem all; - - // LibMec/UEAppInterfaceAPI - import from UEAppInterfaceAPI_Templates all; - import from UEAppInterfaceAPI_Functions all; - import from UEAppInterfaceAPI_Pics all; - import from UEAppInterfaceAPI_Pixits all; - - // LibMec - import from LibMec_Functions all; - import from LibMec_Pics all; - import from LibMec_Pixits all; - - group ue_app_ctx { - - /** - * @desc Check that the IUT acknowledges the creation of the application context when requested by an UE Application - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/MEO/UEAPPCTX/SysUeAppsContext.tplan2 - */ - testcase TC_MEC_MEC016_MEO_UEAPPCTX_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_ENABLE_UE_APP_CTX)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_ENABLE_UE_APP_CTX 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_UE_APP_CTX_URI, - v_headers, - m_http_message_body_json( - m_body_json_app_context( - m_app_context( - PX_CONTEXT_ID, - PX_ASSOCIATE_UE_APP_ID, - m_required_app_info( - PX_APP_NAME, - PX_APP_PROVIDER, - PX_REFERENCE_URL - ))))))); - 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_context( - mw_app_context( - -, - -, - mw_required_app_info( - PX_APP_NAME - ))))))) -> value v_response { - tc_ac.stop; - - if (f_check_headers(v_response.response.header) == true) { - log("*** " & testcasename() & ": PASS: IUT successfully responds with a AppContext ***"); - 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 - - // Postamble - f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC016_MEO_UEAPPCTX_001_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/gs032p2-test-purposes/blob/master/Test%20Purposes/MEO/UEAPPCTX/SysUeAppsContext.tplan2 - */ - testcase TC_MEC_MEC016_MEO_UEAPPCTX_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_ENABLE_UE_APP_CTX)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_ENABLE_UE_APP_CTX 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_UE_APP_CTX_URI, - v_headers, - m_http_message_body_json( - m_body_json_app_context( - m_app_context( - PX_CONTEXT_ID, - PX_ASSOCIATE_UE_APP_ID, - m_required_app_info( - PX_APP_NAME, - PX_APP_PROVIDER, - PX_REFERENCE_URL - ))))))); - 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 AppTerminationNotificationSubscription ***"); - 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_MEC016_MEO_UEAPPCTX_001_BR - - /** - * @desc Check that the IUT updates the application callback reference when commanded by an UE Application - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/MEO/UEAPPCTX/SysUeAppsContext.tplan2 - */ - testcase TC_MEC_MEC016_MEO_UEAPPCTX_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_ENABLE_UE_APP_CTX)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_ENABLE_UE_APP_CTX required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Test adapter configuration - - // Preamble - f_create_ue_app_ctx(); - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_post( - "/" & PICS_ROOT_API & PX_UE_APP_CTX_URI & "/" & oct2char(unichar2oct(PX_CONTEXT_ID)), - v_headers, - m_http_message_body_json( - m_body_json_app_context( - m_app_context( - PX_CONTEXT_ID, - PX_ASSOCIATE_UE_APP_ID, - m_required_app_info( - PX_APP_NAME, - PX_APP_PROVIDER, - PX_REFERENCE_URL - ), - PX_CALLBACK_REF - )))))); - 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 AppContext ***"); - 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_ue_app_ctx(); - f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC016_MEO_UEAPPCTX_002_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/gs032p2-test-purposes/blob/master/Test%20Purposes/MEO/UEAPPCTX/SysUeAppsContext.tplan2 - */ - testcase TC_MEC_MEC016_MEO_UEAPPCTX_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_ENABLE_UE_APP_CTX)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_ENABLE_UE_APP_CTX 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_UE_APP_CTX_URI & "/" & oct2char(unichar2oct(PX_CONTEXT_ID)), - v_headers, - m_http_message_body_json( - m_body_json_app_context( - m_app_context( - PX_CONTEXT_ID, - PX_ASSOCIATE_UE_APP_ID, - m_required_app_info( - PX_APP_NAME, - PX_APP_PROVIDER, - PX_REFERENCE_URL - ), - PX_CALLBACK_REF - )))))); - 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 AppContext ***"); - 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_MEC016_MEO_UEAPPCTX_002_BR - - /** - * @desc Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/MEO/UEAPPCTX/SysUeAppsContext.tplan2 - */ - testcase TC_MEC_MEC016_MEO_UEAPPCTX_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_ENABLE_UE_APP_CTX)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_ENABLE_UE_APP_CTX 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_UE_APP_CTX_URI & "/" & oct2char(unichar2oct(PX_CONTEXT_ID)), - v_headers, - m_http_message_body_json( - m_body_json_app_context( - m_app_context( - PX_NON_EXISTENT_CONTEXT_ID, - PX_ASSOCIATE_UE_APP_ID, - m_required_app_info( - PX_APP_NAME, - PX_APP_PROVIDER, - PX_REFERENCE_URL - ), - PX_CALLBACK_REF - )))))); - 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 AppContext ***"); - 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_MEC016_MEO_UEAPPCTX_002_NF - - /** - * @desc Check that the IUT deletes the application context when commanded by an UE Application - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/MEO/UEAPPCTX/SysUeAppsContext.tplan2 - */ - testcase TC_MEC_MEC016_MEO_UEAPPCTX_003_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_ENABLE_UE_APP_CTX)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_ENABLE_UE_APP_CTX required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Test adapter configuration - - // Preamble - f_create_ue_app_ctx(); - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_delete( - "/" & PICS_ROOT_API & PX_UE_APP_CTX_URI & "/" & oct2char(unichar2oct(PX_CONTEXT_ID)), - 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 delete AppContext ***"); - 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_MEC016_MEO_UEAPPCTX_003_OK - - /** - * @desc Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/MEO/UEAPPCTX/SysUeAppsContext.tplan2 - */ - testcase TC_MEC_MEC016_MEO_UEAPPCTX_003_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_ENABLE_UE_APP_CTX)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_ENABLE_UE_APP_CTX required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Test adapter configuration - - // Preamble - f_create_ue_app_ctx(); - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_delete( - "/" & PICS_ROOT_API & PX_UE_APP_CTX_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_CONTEXT_ID)), - 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 delete AppContext ***"); - 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_MEC016_MEO_UEAPPCTX_003_NF - - } // End of group ue_app_ctx - - group ue_apps { - - /** - * @desc Check that the IUT responds with the list of user applications available when requested by an UE Application - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/MEO/UEAPPS/SysUeApplications.tplan2 - */ - testcase TC_MEC_MEC016_MEO_UEAPPS_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_ENABLE_UE_APP_CTX)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_ENABLE_UE_APP_CTX required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Test adapter configuration - - // Preamble - f_create_ue_app_ctx(); - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_get( - "/" & PICS_ROOT_API & PX_UE_APPS_URI & "&appName=" & oct2char(unichar2oct(PX_APP_NAME)), - 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_info( - { *, mw_appInfo_list(PX_APP_NAME), *} - ))))) { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a AppInfo ***"); - 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_create_ue_app_ctx(); - f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC016_MEO_UEAPPS_001_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/gs032p2-test-purposes/blob/master/Test%20Purposes/MEO/UEAPPS/SysUeApplications.tplan2 - */ - testcase TC_MEC_MEC016_MEO_UEAPPS_001_BR() 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_ENABLE_UE_APP_CTX)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_ENABLE_UE_APP_CTX required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Test adapter configuration - - // Preamble - f_create_ue_app_ctx(); - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_get( - "/" & PICS_ROOT_API & PX_UE_APPS_URI & "&appName=" & oct2char(unichar2oct(PX_APP_NAME)) & "&serviceCont=unknown", // Wrong URI - 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 AppInfo ***"); - 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_create_ue_app_ctx(); - f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC016_MEO_UEAPPS_001_BR - - /** - * @desc Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/MEO/UEAPPS/SysUeApplications.tplan2 - */ - testcase TC_MEC_MEC016_MEO_UEAPPS_001_NF() 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_ENABLE_UE_APP_CTX)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_ENABLE_UE_APP_CTX 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_UE_APPS_URI & "&appName=" & oct2char(unichar2oct(PX_NON_EXISTENT_APP_NAME)), - 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 AppInfo ***"); - 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_MEC016_MEO_UEAPPS_001_NF - - } // End of group ue_apps - -} // End of module AtsMec_UEAppInterfaceAPI_TestCases diff --git a/ttcn/AtsMec/AtsMec_DeviceApplicationInterface/module.mk b/ttcn/AtsMec/AtsMec_DeviceApplicationInterface/module.mk deleted file mode 100644 index 449db40..0000000 --- a/ttcn/AtsMec/AtsMec_DeviceApplicationInterface/module.mk +++ /dev/null @@ -1,48 +0,0 @@ -suite := AtsMec - -sources := \ - AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn \ - AtsMec_TrafficManagementAPI_TestCases.ttcn \ - AtsMec_MultiAccessSteeringInfoAPI_TestCases.ttcn \ - AtsMec_LocationAPI_TestCases.ttcn \ - AtsMec_RnisAPI_TestCases.ttcn \ - AtsMec_TestControl.ttcn \ - AtsMec_UEAppInterfaceAPI_TestCases.ttcn \ - AtsMec_UEidentityAPI_TestCases.ttcn \ - AtsMec_V2XInformationServiceAPI_TestCases.ttcn \ - AtsMec_DeviceApplicationInterfaceAPI_TestCases.ttcn \ - AtsMec_WlanInformationAPI_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/EdgePlatformApplicationEnablementAPI \ - ../LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI \ - ../LibMec/TrafficManagementAPI \ - ../LibMec/LocationAPI \ - ../LibMec/RnisAPI \ - ../LibMec/UEAppInterfaceAPI \ - ../LibMec/UEidentityAPI \ - ../LibMec/V2XInformationServiceAPI \ - ../LibMec/DeviceApplicationInterfaceAPI \ - ../LibMec/WlanInformationAPI \ - ../LibMec/ApplicationMobilityServiceAPI \ - ../LibMec/FixedAccessInformationAPI \ - ../../ccsrc/Ports/LibHttp \ - ../../ccsrc/EncDec/LibHttp \ - ../../ccsrc/EncDec/LibMec \ - ../../ccsrc/Framework \ - ../../ccsrc/externals \ - ../../ccsrc/loggers \ - ../../ccsrc/Protocols/ETH \ - ../../ccsrc/Protocols/Http \ - ../../ccsrc/Protocols/Json \ - ../../ccsrc/Protocols/Pcap \ - ../../ccsrc/Protocols/Tcp \ - ../modules/titan.TestPorts.Common_Components.Abstract_Socket \ - diff --git a/ttcn/AtsMec/AtsMec_LcRRm/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestControl.ttcn b/ttcn/AtsMec/AtsMec_LcRRm/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestControl.ttcn deleted file mode 100644 index 9aace58..0000000 --- a/ttcn/AtsMec/AtsMec_LcRRm/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestControl.ttcn +++ /dev/null @@ -1,103 +0,0 @@ -module AtsMec_TestControl { - - // LibMec/LocationAPI - import from LocationAPI_Pics all; - // LibMec/UEidentityAPI - import from UEidentityAPI_Pics all; - // LibMec/RnisAPI - import from RnisAPI_Pics all; - // LibMec/TrafficManagementAPI - import from TrafficManagementAPI_Pics all; - // LibMec/AppEnablementAPI - import from EdgePlatformApplicationEnablementAPI_Pics all; - // LibMec/UEAppInterfaceAPI - import from UEAppInterfaceAPI_Pics all; - - // LibMec - import from LibMec_Pics all; - - // AtsMec - import from AtsMec_UEidentityAPI_TestCases all; -// import from AtsMec_RadioNodeLocationAPI_TestCases all; - import from AtsMec_RnisAPI_TestCases all; - import from AtsMec_TrafficManagementAPI_TestCases all; - import from AtsMec_EdgePlatformApplicationEnablementAPI_TestCases all; - import from AtsMec_UEAppInterfaceAPI_TestCases all; - - control { - - if (PICS_MEC_PLAT and PICS_SERVICES) { - if (PICS_UE_IDENTITY_API_SUPPORTED) { - execute(TC_MEC_MEC014_SRV_UETAG_001_OK()); - execute(TC_MEC_MEC014_SRV_UETAG_001_BR()); - execute(TC_MEC_MEC014_SRV_UETAG_001_NF()); - execute(TC_MEC_MEC014_SRV_UETAG_002_OK()); - execute(TC_MEC_MEC014_SRV_UETAG_002_BR()); - execute(TC_MEC_MEC014_SRV_UETAG_002_PF()); - } - if (PICS_LOCATION_API_SUPPORTED) { - -// execute(TC_MEC_PLAT_RLOC_001_OK()); -// execute(TC_MEC_PLAT_RLOC_001_NF()); - } - - if (PICS_APP_ENABLEMENT_API_SUPPORTED) { - /*execute(TC_MEC_SRV_TRANS_001_OK()); - execute(TC_MEC_SRV_TRAF_001_OK()); - execute(TC_MEC_SRV_TRAF_002_OK()); - execute(TC_MEC_SRV_TRAF_003_OK()); - execute(TC_MEC_SRV_TRAF_001_NF());*/ - } - - if (PICS_ENABLE_UE_APP_CTX) { - execute(TC_MEC_MEC016_MEO_UEAPPCTX_001_OK()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_001_BR()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_OK()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_BR()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_NF()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_003_OK()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_003_NF()); - execute(TC_MEC_MEC016_MEO_UEAPPS_001_OK()); - execute(TC_MEC_MEC016_MEO_UEAPPS_001_BR()); - execute(TC_MEC_MEC016_MEO_UEAPPS_001_NF()); - } - } - - /*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()); - execute(TC_MEC_MEC012_SRV_RNIS_011_BR()); - execute(TC_MEC_MEC012_SRV_RNIS_012_BR()); - } - if (PICS_RNIS_QUERY) { - execute(TC_MEC_MEC012_SRV_RNIS_016_OK()); - execute(TC_MEC_MEC012_SRV_RNIS_016_BR()); - execute(TC_MEC_MEC012_SRV_RNIS_016_NF()); - execute(TC_MEC_MEC012_SRV_RNIS_017_OK()); - execute(TC_MEC_MEC012_SRV_RNIS_017_BR()); - execute(TC_MEC_MEC012_SRV_RNIS_017_NF()); - execute(TC_MEC_MEC012_SRV_RNIS_018_OK()); - execute(TC_MEC_MEC012_SRV_RNIS_018_BR()); - execute(TC_MEC_MEC012_SRV_RNIS_018_NF()); - execute(TC_MEC_MEC012_SRV_RNIS_019_OK()); - execute(TC_MEC_MEC012_SRV_RNIS_019_BR()); - execute(TC_MEC_MEC012_SRV_RNIS_019_NF()); - } - }*/ - - if (PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED) { - execute(TC_MEC_MEC015_SRV_TM_001_OK()); - execute(TC_MEC_MEC015_SRV_TM_002_OK()); - execute(TC_MEC_MEC015_SRV_TM_002_BR()); - execute(TC_MEC_MEC015_SRV_TM_002_NF()); - } - } // End of 'control' statement - -} // End of module AtsMec_TestControl diff --git a/ttcn/AtsMec/AtsMec_LcRRm/module.mk b/ttcn/AtsMec/AtsMec_LcRRm/module.mk deleted file mode 100644 index 449db40..0000000 --- a/ttcn/AtsMec/AtsMec_LcRRm/module.mk +++ /dev/null @@ -1,48 +0,0 @@ -suite := AtsMec - -sources := \ - AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn \ - AtsMec_TrafficManagementAPI_TestCases.ttcn \ - AtsMec_MultiAccessSteeringInfoAPI_TestCases.ttcn \ - AtsMec_LocationAPI_TestCases.ttcn \ - AtsMec_RnisAPI_TestCases.ttcn \ - AtsMec_TestControl.ttcn \ - AtsMec_UEAppInterfaceAPI_TestCases.ttcn \ - AtsMec_UEidentityAPI_TestCases.ttcn \ - AtsMec_V2XInformationServiceAPI_TestCases.ttcn \ - AtsMec_DeviceApplicationInterfaceAPI_TestCases.ttcn \ - AtsMec_WlanInformationAPI_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/EdgePlatformApplicationEnablementAPI \ - ../LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI \ - ../LibMec/TrafficManagementAPI \ - ../LibMec/LocationAPI \ - ../LibMec/RnisAPI \ - ../LibMec/UEAppInterfaceAPI \ - ../LibMec/UEidentityAPI \ - ../LibMec/V2XInformationServiceAPI \ - ../LibMec/DeviceApplicationInterfaceAPI \ - ../LibMec/WlanInformationAPI \ - ../LibMec/ApplicationMobilityServiceAPI \ - ../LibMec/FixedAccessInformationAPI \ - ../../ccsrc/Ports/LibHttp \ - ../../ccsrc/EncDec/LibHttp \ - ../../ccsrc/EncDec/LibMec \ - ../../ccsrc/Framework \ - ../../ccsrc/externals \ - ../../ccsrc/loggers \ - ../../ccsrc/Protocols/ETH \ - ../../ccsrc/Protocols/Http \ - ../../ccsrc/Protocols/Json \ - ../../ccsrc/Protocols/Pcap \ - ../../ccsrc/Protocols/Tcp \ - ../modules/titan.TestPorts.Common_Components.Abstract_Socket \ - diff --git a/ttcn/AtsMec/AtsMec_LcRRm/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases.ttcn b/ttcn/AtsMec_AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases.ttcn similarity index 98% rename from ttcn/AtsMec/AtsMec_LcRRm/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases.ttcn rename to ttcn/AtsMec_AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases.ttcn index 3e2235a..1f1e4af 100644 --- a/ttcn/AtsMec/AtsMec_LcRRm/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases.ttcn +++ b/ttcn/AtsMec_AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases.ttcn @@ -131,7 +131,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { 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 @@ -1136,7 +1136,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { m_http_message_body_json( m_body_json_app_pkg_info_modification( m_app_pkg_info_modification( - UNKNOWN + DISABLED )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -2794,9 +2794,13 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { 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 - ))))))); + { + m_service_dependency( + "", + "" // TODO Add PIXITs + ) + } + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -2847,9 +2851,13 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { 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 - ))))))); + { + m_service_dependency( + "", + "" // TODO Add PIXITs + ) + } + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -2900,9 +2908,13 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { 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 - ))))))); + { + m_service_dependency( + "", + "" // TODO Add PIXITs + ) + } + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body diff --git a/ttcn/AtsMec_AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestControl.ttcn b/ttcn/AtsMec_AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestControl.ttcn new file mode 100644 index 0000000..bb58ede --- /dev/null +++ b/ttcn/AtsMec_AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestControl.ttcn @@ -0,0 +1,18 @@ +module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestControl { + + // LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI + import from ApplicationPackageLifecycleAndOperationGrantingAPI_Pics all; + + // LibMec + import from LibMec_Pics all; + + // AtsMec + import from AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases all; + + control { + + if (PICS_MEC_PLAT and PICS_SERVICES) { + } + } // End of 'control' statement + +} // End of module AtsMec_TestControl diff --git a/ttcn/AtsMec_AtsMec_ApplicationPackageLifecycleAndOperationGranting/module.mk b/ttcn/AtsMec_AtsMec_ApplicationPackageLifecycleAndOperationGranting/module.mk new file mode 100644 index 0000000..a11413d --- /dev/null +++ b/ttcn/AtsMec_AtsMec_ApplicationPackageLifecycleAndOperationGranting/module.mk @@ -0,0 +1,36 @@ +suite := AtsMec_ApplicationPackageLifecycleAndOperationGranting + +sources := \ + AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases.ttcn \ + AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestControl.ttcn + +modules := ../LibCommon \ + ../../titan-test-system-framework/ttcn/LibHelpers \ + ../../titan-test-system-framework/ttcn/LibHttp \ + ../../titan-test-system-framework/ttcn/LibXsd \ + ../../titan-test-system-framework/ttcn/LibJson \ + ../patch_lib_http \ + ../LibMec \ + ../LibMec/EdgePlatformApplicationEnablementAPI \ + ../LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI \ + ../LibMec/TrafficManagementAPI \ + ../LibMec/LocationAPI \ + ../LibMec/UEAppInterfaceAPI \ + ../LibMec/UEidentityAPI \ + ../LibMec/V2XInformationServiceAPI \ + ../LibMec/DeviceApplicationInterfaceAPI \ + ../LibMec/WlanInformationAPI \ + ../LibMec/FixedAccessInformationServiceAPI \ + ../LibMec/ApplicationMobilityServiceAPI \ + ../../titan-test-system-framework/ccsrc/Framework \ + ../../titan-test-system-framework/ccsrc/loggers \ + ../../titan-test-system-framework/ccsrc/Protocols/Http \ + ../../titan-test-system-framework/ccsrc/Protocols/Tcp \ + ../../titan-test-system-framework/ccsrc/Protocols/Xml \ + ../../titan-test-system-framework/ccsrc/Helpers \ + ../../ccsrc/Ports/LibHttp \ + ../../ccsrc/EncDec/LibMec \ + ../../ccsrc/externals \ + ../../ccsrc/Protocols/Http \ + ../../ccsrc/Protocols/Json \ + ../modules/titan.TestPorts.Common_Components.Abstract_Socket \ diff --git a/ttcn/AtsMec/AtsMec_DeviceApplicationInterface/AtsMec_DeviceApplicationInterfaceAPI_TestCases.ttcn b/ttcn/AtsMec_DeviceApplicationInterface/AtsMec_DeviceApplicationInterfaceAPI_TestCases.ttcn similarity index 100% rename from ttcn/AtsMec/AtsMec_DeviceApplicationInterface/AtsMec_DeviceApplicationInterfaceAPI_TestCases.ttcn rename to ttcn/AtsMec_DeviceApplicationInterface/AtsMec_DeviceApplicationInterfaceAPI_TestCases.ttcn diff --git a/ttcn/AtsMec_DeviceApplicationInterface/AtsMec_DeviceApplicationInterfaceAPI_TestControl.ttcn b/ttcn/AtsMec_DeviceApplicationInterface/AtsMec_DeviceApplicationInterfaceAPI_TestControl.ttcn new file mode 100644 index 0000000..0a20c8d --- /dev/null +++ b/ttcn/AtsMec_DeviceApplicationInterface/AtsMec_DeviceApplicationInterfaceAPI_TestControl.ttcn @@ -0,0 +1,30 @@ +module AtsMec_DeviceApplicationInterfaceAPI_TestControl { + + // LibMec/DeviceApplicationInterfaceAPI + import from DeviceApplicationInterfaceAPI_Pics all; + + // LibMec + import from LibMec_Pics all; + + // AtsMec + import from AtsMec_DeviceApplicationInterfaceAPI_TestCases all; + + control { + + if (PICS_MEC_PLAT and PICS_SERVICES) { + // if (PICS_ENABLE_UE_APP_CTX) { + // execute(TC_MEC_MEC016_MEO_UEAPPCTX_001_OK()); + // execute(TC_MEC_MEC016_MEO_UEAPPCTX_001_BR()); + // execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_OK()); + // execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_BR()); + // execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_NF()); + // execute(TC_MEC_MEC016_MEO_UEAPPCTX_003_OK()); + // execute(TC_MEC_MEC016_MEO_UEAPPCTX_003_NF()); + // execute(TC_MEC_MEC016_MEO_UEAPPS_001_OK()); + // execute(TC_MEC_MEC016_MEO_UEAPPS_001_BR()); + // execute(TC_MEC_MEC016_MEO_UEAPPS_001_NF()); + // } + } + } // End of 'control' statement + +} // End of module AtsMec_TestControl diff --git a/ttcn/AtsMec_DeviceApplicationInterface/module.mk b/ttcn/AtsMec_DeviceApplicationInterface/module.mk new file mode 100644 index 0000000..d6154fd --- /dev/null +++ b/ttcn/AtsMec_DeviceApplicationInterface/module.mk @@ -0,0 +1,37 @@ +suite := AtsMec_DeviceApplicationInterface + +sources := \ + AtsMec_DeviceApplicationInterfaceAPI_TestCases.ttcn \ + AtsMec_DeviceApplicationInterfaceAPI_TestControl.ttcn + +modules := ../LibCommon \ + ../../titan-test-system-framework/ttcn/LibHelpers \ + ../../titan-test-system-framework/ttcn/LibHttp \ + ../../titan-test-system-framework/ttcn/LibXsd \ + ../../titan-test-system-framework/ttcn/LibJson \ + ../patch_lib_http \ + ../LibMec \ + ../LibMec/LocationAPI \ + ../LibMec/EdgePlatformApplicationEnablementAPI \ + ../LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI \ + ../LibMec/TrafficManagementAPI \ + ../LibMec/UEAppInterfaceAPI \ + ../LibMec/UEidentityAPI \ + ../LibMec/V2XInformationServiceAPI \ + ../LibMec/DeviceApplicationInterfaceAPI \ + ../LibMec/WlanInformationAPI \ + ../LibMec/FixedAccessInformationServiceAPI \ + ../LibMec/ApplicationMobilityServiceAPI \ + ../../titan-test-system-framework/ccsrc/Framework \ + ../../titan-test-system-framework/ccsrc/loggers \ + ../../titan-test-system-framework/ccsrc/Protocols/Http \ + ../../titan-test-system-framework/ccsrc/Protocols/Tcp \ + ../../titan-test-system-framework/ccsrc/Protocols/Xml \ + ../../titan-test-system-framework/ccsrc/Helpers \ + ../../ccsrc/Ports/LibHttp \ + ../../ccsrc/EncDec/LibMec \ + ../../ccsrc/externals \ + ../../ccsrc/Protocols/Http \ + ../../ccsrc/Protocols/Json \ + ../modules/titan.TestPorts.Common_Components.Abstract_Socket \ + diff --git a/ttcn/AtsMec_EdgePlatformApplicationEnablement/module.mk b/ttcn/AtsMec_EdgePlatformApplicationEnablement/module.mk index a9e6d00..e5209bf 100644 --- a/ttcn/AtsMec_EdgePlatformApplicationEnablement/module.mk +++ b/ttcn/AtsMec_EdgePlatformApplicationEnablement/module.mk @@ -7,6 +7,7 @@ sources := \ modules := ../LibCommon \ ../../titan-test-system-framework/ttcn/LibHelpers \ ../../titan-test-system-framework/ttcn/LibHttp \ + ../../titan-test-system-framework/ttcn/LibXsd \ ../../titan-test-system-framework/ttcn/LibJson \ ../patch_lib_http \ ../LibMec \ @@ -26,6 +27,7 @@ modules := ../LibCommon \ ../../titan-test-system-framework/ccsrc/loggers \ ../../titan-test-system-framework/ccsrc/Protocols/Http \ ../../titan-test-system-framework/ccsrc/Protocols/Tcp \ + ../../titan-test-system-framework/ccsrc/Protocols/Xml \ ../../titan-test-system-framework/ccsrc/Helpers \ ../../ccsrc/Ports/LibHttp \ ../../ccsrc/EncDec/LibMec \ diff --git a/ttcn/AtsMec_FederationEnablement/module.mk b/ttcn/AtsMec_FederationEnablement/module.mk index dc03f6d..2310374 100644 --- a/ttcn/AtsMec_FederationEnablement/module.mk +++ b/ttcn/AtsMec_FederationEnablement/module.mk @@ -7,6 +7,7 @@ sources := \ modules := ../LibCommon \ ../../titan-test-system-framework/ttcn/LibHelpers \ ../../titan-test-system-framework/ttcn/LibHttp \ + ../../titan-test-system-framework/ttcn/LibXsd \ ../../titan-test-system-framework/ttcn/LibJson \ ../patch_lib_http \ ../LibMec \ @@ -14,7 +15,6 @@ modules := ../LibCommon \ ../LibMec/EdgePlatformApplicationEnablementAPI \ ../LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI \ ../LibMec/TrafficManagementAPI \ - ../LibMec/RnisAPI \ ../LibMec/UEAppInterfaceAPI \ ../LibMec/UEidentityAPI \ ../LibMec/V2XInformationServiceAPI \ @@ -28,6 +28,7 @@ modules := ../LibCommon \ ../../titan-test-system-framework/ccsrc/loggers \ ../../titan-test-system-framework/ccsrc/Protocols/Http \ ../../titan-test-system-framework/ccsrc/Protocols/Tcp \ + ../../titan-test-system-framework/ccsrc/Protocols/Xml \ ../../titan-test-system-framework/ccsrc/Helpers \ ../../ccsrc/Ports/LibHttp \ ../../ccsrc/EncDec/LibMec \ diff --git a/ttcn/AtsMec_FixedAccessInformationService/AtsMec_FixedAccessInformationServiceAPI_TestCases.ttcn b/ttcn/AtsMec_FixedAccessInformationService/AtsMec_FixedAccessInformationServiceAPI_TestCases.ttcn index 8655817..1d9036f 100644 --- a/ttcn/AtsMec_FixedAccessInformationService/AtsMec_FixedAccessInformationServiceAPI_TestCases.ttcn +++ b/ttcn/AtsMec_FixedAccessInformationService/AtsMec_FixedAccessInformationServiceAPI_TestCases.ttcn @@ -1527,7 +1527,7 @@ module AtsMec_FixedAccessInformationServiceAPI_TestCases { m_onu_alarm_subscription( PX_ONU_ALARM_SUB_CALLBACK_URI, m_filter_criteria_onu_alarm, - -, + -, -, -, m_time_stamp(1577836800) ) ) diff --git a/ttcn/AtsMec_FixedAccessInformationService/module.mk b/ttcn/AtsMec_FixedAccessInformationService/module.mk index 0d841e4..0c3a7e2 100644 --- a/ttcn/AtsMec_FixedAccessInformationService/module.mk +++ b/ttcn/AtsMec_FixedAccessInformationService/module.mk @@ -7,6 +7,7 @@ sources := \ modules := ../LibCommon \ ../../titan-test-system-framework/ttcn/LibHelpers \ ../../titan-test-system-framework/ttcn/LibHttp \ + ../../titan-test-system-framework/ttcn/LibXsd \ ../../titan-test-system-framework/ttcn/LibJson \ ../patch_lib_http \ ../LibMec \ @@ -14,7 +15,6 @@ modules := ../LibCommon \ ../LibMec/EdgePlatformApplicationEnablementAPI \ ../LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI \ ../LibMec/TrafficManagementAPI \ - ../LibMec/RnisAPI \ ../LibMec/UEAppInterfaceAPI \ ../LibMec/UEidentityAPI \ ../LibMec/V2XInformationServiceAPI \ @@ -26,6 +26,7 @@ modules := ../LibCommon \ ../../titan-test-system-framework/ccsrc/loggers \ ../../titan-test-system-framework/ccsrc/Protocols/Http \ ../../titan-test-system-framework/ccsrc/Protocols/Tcp \ + ../../titan-test-system-framework/ccsrc/Protocols/Xml \ ../../titan-test-system-framework/ccsrc/Helpers \ ../../ccsrc/Ports/LibHttp \ ../../ccsrc/EncDec/LibMec \ diff --git a/ttcn/AtsMec_IoT/module.mk b/ttcn/AtsMec_IoT/module.mk index e7966c8..36152a9 100644 --- a/ttcn/AtsMec_IoT/module.mk +++ b/ttcn/AtsMec_IoT/module.mk @@ -7,6 +7,7 @@ sources := \ modules := ../LibCommon \ ../../titan-test-system-framework/ttcn/LibHelpers \ ../../titan-test-system-framework/ttcn/LibHttp \ + ../../titan-test-system-framework/ttcn/LibXsd \ ../../titan-test-system-framework/ttcn/LibJson \ ../patch_lib_http \ ../LibMec \ @@ -14,7 +15,6 @@ modules := ../LibCommon \ ../LibMec/EdgePlatformApplicationEnablementAPI \ ../LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI \ ../LibMec/TrafficManagementAPI \ - ../LibMec/RnisAPI \ ../LibMec/UEAppInterfaceAPI \ ../LibMec/UEidentityAPI \ ../LibMec/V2XInformationServiceAPI \ @@ -28,6 +28,7 @@ modules := ../LibCommon \ ../../titan-test-system-framework/ccsrc/loggers \ ../../titan-test-system-framework/ccsrc/Protocols/Http \ ../../titan-test-system-framework/ccsrc/Protocols/Tcp \ + ../../titan-test-system-framework/ccsrc/Protocols/Xml \ ../../titan-test-system-framework/ccsrc/Helpers \ ../../ccsrc/Ports/LibHttp \ ../../ccsrc/EncDec/LibMec \ diff --git a/ttcn/AtsMec_Rnis/AtsMec_RnisAPI_TestCases.ttcn b/ttcn/AtsMec_Rnis/AtsMec_RnisAPI_TestCases.ttcn index 15150a3..9dc2638 100644 --- a/ttcn/AtsMec_Rnis/AtsMec_RnisAPI_TestCases.ttcn +++ b/ttcn/AtsMec_Rnis/AtsMec_RnisAPI_TestCases.ttcn @@ -447,9 +447,9 @@ module AtsMec_RnisAPI_TestCases { mw_meas_ta_subscription( PX_CALLBACK_REFERENCE, PX_LINKS_SELF, - mw_filter_criteria_ho( - PX_APP_INS_ID, - -//TODO PX_E_RAB_ID + mw_filter_criteria( + PX_APP_INS_ID, + -//TODO PX_E_RAB_ID ))))))) { tc_wait.stop; @@ -1157,6 +1157,7 @@ module AtsMec_RnisAPI_TestCases { ) } ), + -, -, v_json_body.cellChangeSubscription.links ) ) diff --git a/ttcn/AtsMec_Rnis/module.mk b/ttcn/AtsMec_Rnis/module.mk index 015a416..361f51f 100644 --- a/ttcn/AtsMec_Rnis/module.mk +++ b/ttcn/AtsMec_Rnis/module.mk @@ -4,10 +4,10 @@ sources := \ AtsMec_RnisAPI_TestCases.ttcn \ AtsMec_RnisAPI_TestControl.ttcn - modules := ../LibCommon \ ../../titan-test-system-framework/ttcn/LibHelpers \ ../../titan-test-system-framework/ttcn/LibHttp \ + ../../titan-test-system-framework/ttcn/LibXsd \ ../../titan-test-system-framework/ttcn/LibJson \ ../patch_lib_http \ ../LibMec \ @@ -26,6 +26,7 @@ modules := ../LibCommon \ ../../titan-test-system-framework/ccsrc/loggers \ ../../titan-test-system-framework/ccsrc/Protocols/Http \ ../../titan-test-system-framework/ccsrc/Protocols/Tcp \ + ../../titan-test-system-framework/ccsrc/Protocols/Xml \ ../../titan-test-system-framework/ccsrc/Helpers \ ../../ccsrc/Ports/LibHttp \ ../../ccsrc/EncDec/LibMec \ diff --git a/ttcn/AtsMec_TrafficManagement/AtsMec_MultiAccessSteeringInfoAPI_TestCases.ttcn b/ttcn/AtsMec_TrafficManagement/AtsMec_MultiAccessSteeringInfoAPI_TestCases.ttcn index 03ec397..96b574c 100644 --- a/ttcn/AtsMec_TrafficManagement/AtsMec_MultiAccessSteeringInfoAPI_TestCases.ttcn +++ b/ttcn/AtsMec_TrafficManagement/AtsMec_MultiAccessSteeringInfoAPI_TestCases.ttcn @@ -312,20 +312,8 @@ module AtsMec_MultiAccessSteeringInfoAPI_TestCases { APPLICATION_SPECIFIC_MTS_ALLOCATION, // Request type m_qosd, // QoS LowCost, // MtsMode - Downlink, // TrafficDirection - { - m_session_filter( - "10.10.10.10", - {"1010"} - ) - } // FlowFilter - - ) - ) - ) - ) - ) - ); + Downlink // TrafficDirection + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -396,20 +384,8 @@ module AtsMec_MultiAccessSteeringInfoAPI_TestCases { APPLICATION_SPECIFIC_MTS_ALLOCATION, // Request type m_qosd, // QoS LowCost, // MtsMode - Downlink, // TrafficDirection - { - m_session_filter( - "10.10.10.10", - {"10.10"} // Invalid port number - ) - } // FlowFilter - - ) - ) - ) - ) - ) - ); + Downlink // TrafficDirection + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -616,19 +592,8 @@ module AtsMec_MultiAccessSteeringInfoAPI_TestCases { APPLICATION_SPECIFIC_MTS_ALLOCATION, // Request type m_qosd_1, // QoS LowCost, // MtsMode - Downlink, // TrafficDirection - { - m_session_filter( - "10.10.10.10", - {"1010"} - ) - } // FlowFilter - ) - ) - ) - ) - ) - ); + Downlink // TrafficDirection + )))))); tc_ac.start; alt { [] httpPort.receive( @@ -641,13 +606,7 @@ module AtsMec_MultiAccessSteeringInfoAPI_TestCases { APPLICATION_SPECIFIC_MTS_ALLOCATION, // Request type mw_qosd_1, // QoS LowCost, // MtsMode - Downlink, // TrafficDirection - { - m_session_filter( - "10.10.10.10", - {"1010"} - ) - } // FlowFilter + Downlink // TrafficDirection )))))) -> value v_response { tc_ac.stop; @@ -711,19 +670,8 @@ module AtsMec_MultiAccessSteeringInfoAPI_TestCases { APPLICATION_SPECIFIC_MTS_ALLOCATION, // Request type m_qosd_1, // QoS LowCost, // MtsMode - Downlink, // TrafficDirection - { - m_session_filter( - "10.10.10.10", - {"10.10"} // Invalid port - ) - } // FlowFilter - ) - ) - ) - ) - ) - ); + Downlink // TrafficDirection + )))))); tc_ac.start; alt { [] httpPort.receive( @@ -789,19 +737,8 @@ module AtsMec_MultiAccessSteeringInfoAPI_TestCases { APPLICATION_SPECIFIC_MTS_ALLOCATION, // Request type m_qosd_1, // QoS LowCost, // MtsMode - Downlink, // TrafficDirection - { - m_session_filter( - "10.10.10.10", - {"1010"} - ) - } // FlowFilter - ) - ) - ) - ) - ) - ); + Downlink // TrafficDirection + )))))); tc_ac.start; alt { [] httpPort.receive( diff --git a/ttcn/AtsMec_TrafficManagement/AtsMec_TrafficManagementAPI_TestCases.ttcn b/ttcn/AtsMec_TrafficManagement/AtsMec_TrafficManagementAPI_TestCases.ttcn index cf5a3c5..9a4a577 100644 --- a/ttcn/AtsMec_TrafficManagement/AtsMec_TrafficManagementAPI_TestCases.ttcn +++ b/ttcn/AtsMec_TrafficManagement/AtsMec_TrafficManagementAPI_TestCases.ttcn @@ -391,8 +391,8 @@ module AtsMec_TrafficManagementAPI_TestCases { v_app_instance_id, SESSION_SPECIFIC_BW_ALLOCATION, // Request type "1024", // FixedAllocation - Downlink, // AllocationDirection - { m_session_filter("10.10.10.10", 1010) } + Downlink // AllocationDirection + //{ m_session_filter("10.10.10.10", 1010) } ) ) ) @@ -413,8 +413,8 @@ module AtsMec_TrafficManagementAPI_TestCases { v_app_instance_id, SESSION_SPECIFIC_BW_ALLOCATION, // Request type "1024", // FixedAllocation - Downlink, // AllocationDirection - { mw_session_filter } + Downlink // AllocationDirection + //{ mw_session_filter } )))))) -> value v_response { tc_ac.stop; @@ -542,8 +542,8 @@ module AtsMec_TrafficManagementAPI_TestCases { PX_APP_INSTANCE_ID, APPLICATION_SPECIFIC_BW_ALLOCATION, // Request type "1024", // FixedAllocation - Downlink, // AllocationDirection - { m_session_filter("10.10.10.10", 1010) } // MEC015 Clause 7.2.2 Type: BwInfo Table 7.2.2-1: Elements of BwInfo, sessionFilter shall be omit + Downlink // AllocationDirection + //{ m_session_filter("10.10.10.10", 1010) } // MEC015 Clause 7.2.2 Type: BwInfo Table 7.2.2-1: Elements of BwInfo, sessionFilter shall be omit ) ) ) @@ -1053,9 +1053,7 @@ module AtsMec_TrafficManagementAPI_TestCases { m_body_json_bw_info_deltas( m_bw_info_deltas( v_app_instance_id, - APPLICATION_SPECIFIC_BW_ALLOCATION, // Request type - -, - "5096" + APPLICATION_SPECIFIC_BW_ALLOCATION // Request type ) ) ) @@ -1134,9 +1132,7 @@ module AtsMec_TrafficManagementAPI_TestCases { m_body_json_bw_info_deltas( m_bw_info_deltas( v_app_instance_id, - APPLICATION_SPECIFIC_BW_ALLOCATION, // Request type - -, - "Invalid" + APPLICATION_SPECIFIC_BW_ALLOCATION // Request type ) ) ) @@ -1207,9 +1203,7 @@ module AtsMec_TrafficManagementAPI_TestCases { m_body_json_bw_info_deltas( m_bw_info_deltas( v_app_instance_id, - APPLICATION_SPECIFIC_BW_ALLOCATION, // Request type - -, - "5096" + APPLICATION_SPECIFIC_BW_ALLOCATION // Request type ) ) ) diff --git a/ttcn/AtsMec_TrafficManagement/module.mk b/ttcn/AtsMec_TrafficManagement/module.mk index 514accb..6c17382 100644 --- a/ttcn/AtsMec_TrafficManagement/module.mk +++ b/ttcn/AtsMec_TrafficManagement/module.mk @@ -2,12 +2,13 @@ suite := AtsMec_TrafficManagement sources := \ AtsMec_TrafficManagementAPI_TestCases.ttcn \ - AtsMec_TrafficManagementAPI_TestCases.ttcn \ + AtsMec_MultiAccessSteeringInfoAPI_TestCases.ttcn \ AtsMec_TrafficManagementAPI_TestControl modules := ../LibCommon \ ../../titan-test-system-framework/ttcn/LibHelpers \ ../../titan-test-system-framework/ttcn/LibHttp \ + ../../titan-test-system-framework/ttcn/LibXsd \ ../../titan-test-system-framework/ttcn/LibJson \ ../patch_lib_http \ ../LibMec \ @@ -15,7 +16,6 @@ modules := ../LibCommon \ ../LibMec/EdgePlatformApplicationEnablementAPI \ ../LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI \ ../LibMec/TrafficManagementAPI \ - ../LibMec/RnisAPI \ ../LibMec/UEAppInterfaceAPI \ ../LibMec/UEidentityAPI \ ../LibMec/V2XInformationServiceAPI \ @@ -27,6 +27,7 @@ modules := ../LibCommon \ ../../titan-test-system-framework/ccsrc/loggers \ ../../titan-test-system-framework/ccsrc/Protocols/Http \ ../../titan-test-system-framework/ccsrc/Protocols/Tcp \ + ../../titan-test-system-framework/ccsrc/Protocols/Xml \ ../../titan-test-system-framework/ccsrc/Helpers \ ../../ccsrc/Ports/LibHttp \ ../../ccsrc/EncDec/LibMec \ diff --git a/ttcn/AtsMec_UEidentity/module.mk b/ttcn/AtsMec_UEidentity/module.mk index ce0a0ee..907dd93 100644 --- a/ttcn/AtsMec_UEidentity/module.mk +++ b/ttcn/AtsMec_UEidentity/module.mk @@ -7,6 +7,7 @@ sources := \ modules := ../LibCommon \ ../../titan-test-system-framework/ttcn/LibHelpers \ ../../titan-test-system-framework/ttcn/LibHttp \ + ../../titan-test-system-framework/ttcn/LibXsd \ ../../titan-test-system-framework/ttcn/LibJson \ ../patch_lib_http \ ../LibMec \ @@ -14,7 +15,6 @@ modules := ../LibCommon \ ../LibMec/EdgePlatformApplicationEnablementAPI \ ../LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI \ ../LibMec/TrafficManagementAPI \ - ../LibMec/RnisAPI \ ../LibMec/UEAppInterfaceAPI \ ../LibMec/UEidentityAPI \ ../LibMec/V2XInformationServiceAPI \ diff --git a/ttcn/AtsMec_V2XInformationService/module.mk b/ttcn/AtsMec_V2XInformationService/module.mk index 311a0b3..366db2c 100644 --- a/ttcn/AtsMec_V2XInformationService/module.mk +++ b/ttcn/AtsMec_V2XInformationService/module.mk @@ -7,6 +7,7 @@ sources := \ modules := ../LibCommon \ ../../titan-test-system-framework/ttcn/LibHelpers \ ../../titan-test-system-framework/ttcn/LibHttp \ + ../../titan-test-system-framework/ttcn/LibXsd \ ../../titan-test-system-framework/ttcn/LibJson \ ../patch_lib_http \ ../LibMec \ @@ -25,6 +26,7 @@ modules := ../LibCommon \ ../../titan-test-system-framework/ccsrc/loggers \ ../../titan-test-system-framework/ccsrc/Protocols/Http \ ../../titan-test-system-framework/ccsrc/Protocols/Tcp \ + ../../titan-test-system-framework/ccsrc/Protocols/Xml \ ../../titan-test-system-framework/ccsrc/Helpers \ ../../ccsrc/Ports/LibHttp \ ../../ccsrc/EncDec/LibMec \ diff --git a/ttcn/AtsMec_WlanInformation/AtsMec_WlanInformationAPI_TestCases.ttcn b/ttcn/AtsMec_WlanInformation/AtsMec_WlanInformationAPI_TestCases.ttcn index 9ecbc2b..892b5d0 100644 --- a/ttcn/AtsMec_WlanInformation/AtsMec_WlanInformationAPI_TestCases.ttcn +++ b/ttcn/AtsMec_WlanInformation/AtsMec_WlanInformationAPI_TestCases.ttcn @@ -1502,9 +1502,9 @@ module AtsMec_WlanInformationAPI_TestCases { { m_sta_identity( PX_MAC_ID, - PX_SSID, + {PX_SSID}, -, - PX_IP_ADDRESS + {PX_IP_ADDRESS} ) }, PX_MEASUREMENT_ID, @@ -1523,9 +1523,9 @@ module AtsMec_WlanInformationAPI_TestCases { mw_measurement_config( ?, {mw_sta_identity(PX_MAC_ID, - PX_SSID, - -, - PX_IP_ADDRESS + {PX_SSID}, + -, + {PX_IP_ADDRESS} )}, PX_MEASUREMENT_ID, mw_measurement_info @@ -1581,9 +1581,9 @@ module AtsMec_WlanInformationAPI_TestCases { { m_sta_identity( PX_MAC_ID & ":00", // Invalid MAC address - PX_SSID, + {PX_SSID}, -, - PX_IP_ADDRESS + {PX_IP_ADDRESS} ) }, PX_MEASUREMENT_ID, @@ -1729,9 +1729,9 @@ module AtsMec_WlanInformationAPI_TestCases { { mw_sta_identity( PX_MAC_ID, - PX_SSID, + {PX_SSID}, -, - PX_IP_ADDRESS + {PX_IP_ADDRESS} ) }, PX_MEASUREMENT_ID, @@ -1849,9 +1849,9 @@ module AtsMec_WlanInformationAPI_TestCases { { m_sta_identity( PX_MAC_ID, - PX_SSID, + {PX_SSID}, -, - PX_IP_ADDRESS + {PX_IP_ADDRESS} ) }, PX_MEASUREMENT_ID, @@ -1869,10 +1869,11 @@ module AtsMec_WlanInformationAPI_TestCases { mw_body_json_wlan_measurement_config( mw_measurement_config( ?, - {mw_sta_identity(PX_MAC_ID, - PX_SSID, - -, - PX_IP_ADDRESS + {mw_sta_identity( + PX_MAC_ID, + {PX_SSID}, + -, + {PX_IP_ADDRESS} )}, PX_MEASUREMENT_ID, mw_measurement_info(2000, 20) @@ -1930,9 +1931,9 @@ module AtsMec_WlanInformationAPI_TestCases { { m_sta_identity( PX_MAC_ID, - PX_SSID, + {PX_SSID}, -, - PX_IP_ADDRESS + {PX_IP_ADDRESS} ) }, PX_MEASUREMENT_ID, diff --git a/ttcn/AtsMec_WlanInformation/module.mk b/ttcn/AtsMec_WlanInformation/module.mk index 390fd0d..221a3d4 100644 --- a/ttcn/AtsMec_WlanInformation/module.mk +++ b/ttcn/AtsMec_WlanInformation/module.mk @@ -7,6 +7,7 @@ sources := \ modules := ../LibCommon \ ../../titan-test-system-framework/ttcn/LibHelpers \ ../../titan-test-system-framework/ttcn/LibHttp \ + ../../titan-test-system-framework/ttcn/LibXsd \ ../../titan-test-system-framework/ttcn/LibJson \ ../patch_lib_http \ ../LibMec \ @@ -14,7 +15,6 @@ modules := ../LibCommon \ ../LibMec/EdgePlatformApplicationEnablementAPI \ ../LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI \ ../LibMec/TrafficManagementAPI \ - ../LibMec/RnisAPI \ ../LibMec/UEAppInterfaceAPI \ ../LibMec/UEidentityAPI \ ../LibMec/V2XInformationServiceAPI \ @@ -26,6 +26,7 @@ modules := ../LibCommon \ ../../titan-test-system-framework/ccsrc/loggers \ ../../titan-test-system-framework/ccsrc/Protocols/Http \ ../../titan-test-system-framework/ccsrc/Protocols/Tcp \ + ../../titan-test-system-framework/ccsrc/Protocols/Xml \ ../../titan-test-system-framework/ccsrc/Helpers \ ../../ccsrc/Ports/LibHttp \ ../../ccsrc/EncDec/LibMec \ diff --git a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Templates.ttcn b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Templates.ttcn index 4e19cc4..fe37d7a 100644 --- a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Templates.ttcn +++ b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Templates.ttcn @@ -4,7 +4,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Templates { import from Json all; // LibMec_EdgePlatformApplicationEnablementAPI - import from EdgePlatformApplicationEnablementAPI_TypesAndValues all; + //import from EdgePlatformApplicationEnablementAPI_TypesAndValues all; /* TITAN WORK-AROUND for build issue (class forward declaration) */ // LibMec_ApplicationMobilityServiceAPI import from ApplicationMobilityServiceAPI_TypesAndValues all; @@ -265,14 +265,14 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Templates { 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 (value) ServiceDependencies p_appServiceRequired, + in template (omit) ServiceDependencies p_appServiceOptional := omit, + in template (omit) ServiceDependencies p_appServiceProduced := omit, + in template (omit) FeatureDependencies p_appFeatureRequired := omit, + in template (omit) FeatureDependencies p_appFeatureOptional := omit, + in template (omit) TransportDependencies p_transportDependencies := omit, + in template (omit) TrafficRuleDescriptors p_appTrafficRule := omit, + in template (omit) DNSRuleDescriptors p_appDNSRule := omit, in template (omit) LatencyDescriptor p_appLatency := omit, in template (omit) UserContextTransferCapability p_userContextTransferCapability := omit, in template (omit) AppNetworkPolicy p_appNetworkPolicy := omit @@ -291,14 +291,14 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Templates { } // 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 (present) ServiceDependencies p_appServiceRequired := ?, + template ServiceDependencies p_appServiceOptional := *, + template ServiceDependencies p_appServiceProduced := *, + template FeatureDependencies p_appFeatureRequired := *, + template FeatureDependencies p_appFeatureOptional := *, + template TransportDependencies p_transportDependencies := *, + template TrafficRuleDescriptors p_appTrafficRule := *, + template DNSRuleDescriptors p_appDNSRule := *, template LatencyDescriptor p_appLatency := *, template UserContextTransferCapability p_userContextTransferCapability := *, template AppNetworkPolicy p_appNetworkPolicy := * @@ -319,7 +319,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Templates { template (omit) ServiceDependency m_service_dependency( in Json.String p_serName, in Json.String p_version, - in template (omit) ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.CategoryRef p_serCategory := omit, + in template (omit) CategoryRef p_serCategory := omit, in template (omit) TransportDependency p_serTransportDependencies := omit, in template (omit) Json.String p_requestedPermissions := omit ) := { @@ -333,7 +333,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Templates { template (present) ServiceDependency mw_service_dependency( template (present) Json.String p_serName := ?, template (present) Json.String p_version := ?, - template ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.CategoryRef p_serCategory := *, + template CategoryRef p_serCategory := *, template TransportDependency p_serTransportDependencies := *, template Json.String p_requestedPermissions := * ) := { diff --git a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.ttcn b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.ttcn index ff58f9a..d89f785 100644 --- a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.ttcn @@ -1,3 +1,13 @@ +/** + * @author ETSI / TTF T012 / TTF T027 + * @version $Url$ + * $Id$ + * @desc Types ANd Values for ETSI GS MEC 010-2 V3.2.1 (2023-06) + * @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 ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { // JSON @@ -9,11 +19,1925 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { // LibMec_ApplicationMobilityServiceAPI import from ApplicationMobilityServiceAPI_TypesAndValues all; - group edge_platform_application_enablement { + // LibMec_EdgePlatformApplicationEnablementAPI + //import from EdgePlatformApplicationEnablementAPI_TypesAndValues all; /* TITAN WORK-AROUND for build issue (class forward declaration) */ + + /** + * @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 osContainerDescriptor Describes CPU, memory requirements and limits, and software images of the OS Containers realizing this MEC application corresponding to OS Containers sharing the same host and same network namespace + * @member swImageDescriptor Describes the descriptors of the software image to be used by the virtualisation container used to realize this MEC application + * @member virtualStorageDescriptor Defines descriptors of virtual storage resources to be used by the 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 + * @member mciopId Identifies the MCIOP in the application package, used in containerized workload management, when the application is realized by a set of OS containers + * @member mcioIdentificationData Name and type of the Managed Container Infrastructure Object (MCIO) that realizes this application. It allows the VNFM to identify the MCIO e.g. when querying the Container Infrastructure Service Management (CISM). + * @member logicalNode The logical node requirements + * @member requestAdditionalCapabilities Specifies requirements for additional capabilities. These can be for a range of purposes + * @member mcioConstraintParams The parameter names for constraints expected to be assigned to MCIOs realizing this application + * @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 optional, + OsContainerDescriptors osContainerDescriptor optional, + SwImageDescriptors swImageDescriptor, + VirtualStorageDescriptors virtualStorageDescriptor optional, + AppExternalCpds appExtCpd optional, + ServiceDependencies appServiceRequired optional, + ServiceDependencies appServiceOptional optional, + ServiceDescriptors appServiceProduced optional, + FeatureDependencies appFeatureRequired optional, + FeatureDependencies appFeatureOptional optional, + TransportDependencies transportDependencies optional, + TrafficRuleDescriptors appTrafficRule optional, + DNSRuleDescriptors appDNSRule optional, + LatencyDescriptor appLatency optional, + TerminateAppInstanceOpConfig terminateAppInstanceOpConfig optional, + ChangeAppInstanceStateOpConfig changeAppInstanceStateOpConfig optional, + UserContextTransferCapability userContextTransferCapability optional, + AppNetworkPolicy appNetworkPolicy optional, + Json.String mciopId optional, + McioIdentificationData mcioIdentificationData optional, + LogicalNodeRequirements logicalNode optional, + RequestedAdditionalCapabilityData requestAdditionalCapabilities optional, + McioConstraintParams mcioConstraintParams optional + } // End of type AppD + + /** + * @desc Parameter names for constraints expected to be assigned to MCIOs realizing this application + * @see ETSI GS MEC 010-2 Clause 6.2.1.2.2 + */ + type enumerated McioConstraintParams { + localAffinityCisNode (0), + nodeAdditionalCapabilitySsd (1), + nodeAdditionalCapabilityDpdk (2), + nodeAdditionalCapabilitySriov (3), + nodeAdditionalCapabilityGpu (4), + nodeAdditionalCapabilityFpga (5), + nodeAdditionalCapabilityCpuPin (6), + nodeCapabilityLogicalNuma (7), + nodePool + } with { + variant "JSON: as number" + } + + /** + * @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 001 [1], with the following consideration: + } + type record of SwImageDescriptor SwImageDescriptors; + + /** + * @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: + } + type record of VirtualStorageDescriptor VirtualStorageDescriptors; + + /** + * @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 + * member additionalServiceData Additional service identification data of the external CP + * @see ETSI GS MEC 010-2 Clause 6.2.1.6 Type: AppExternalCpd + */ + type record AppExternalCpd { + VirtualNetworkInterfaceRequirements virtualNetworkInterfaceRequirements optional, + AdditionalServiceData additionalServiceData optional + // FIXME inherited attributes + } + type record of AppExternalCpd AppExternalCpds; + + type record VirtualNetworkInterfaceRequirement { + // FIXME For the definition of the VirtualNetworkInterfaceRequirements, please refer to clause 7.1.6.6 of ETSI GS NFV-IFA 001 [1]. For the definition of Cpd, please refer to clause 7.1.6.3 of ETSI GS NFV-IFA 001 [1] + } + + type record AdditionalServiceData { + // FIXME For the definition of the VirtualNetworkInterfaceRequirements, please refer to clause 7.1.18.3 of ETSI GS NFV IFA 011 [1]. + } + + 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 + } + type record of ServiceDescriptor ServiceDescriptors; + + /** + * @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 + } + type record of FeatureDependency FeatureDependencies; + + /** + * @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, + Json.Integer priority, + TrafficFilter trafficFilter, + Action action_, + InterfaceDescriptor dstInterface optional + } with { + variant (action_) "name as 'action'"; + } + type record of TrafficRuleDescriptor TrafficRuleDescriptors; + + /** + * @desc Definition of filter type: per FLOW or PACKET + */ + type enumerated FilterType { + FLOW, + PACKET + } with { + variant "JSON: as number" + } + + /** + * @desc Identifies the action of the MEC host data plane, when a packet matches the trafficFilter + */ + type enumerated Action { + DROP (0), + FORWARD_DECAPSULATED (1), + FORWARD_ENCAPSULATED (2), + PASSTHROUGH (3), + DUPLICATED_DECAPSULATED (4), + DUPLICATE_ENCAPSULATED (5) + } 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, + Json.Integer qCI optional, + Json.Integer dSCP optional, + Json.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 + * @member dstIPAddressIf the interface type is IP, the destination address identifies the IP 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, + Json.String dstIPAddress optional + } + + type enumerated InterfaceType { + TUNNEL (0), + MAC (1), + IP (2) + } 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 (0), + GRE (1) + } 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, + Json.Integer ttl optional + } + type record of DNSRuleDescriptor DNSRuleDescriptors; + + /** + * @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 { + Json.UInteger 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 001 [1]. + } + + /** + * @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 001 [1]. + } + + /** + * @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 + } + type record of ServiceDependency ServiceDependencies; + + /** + * @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 of TransportDependency TransportDependencies; + + 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 TransportType 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, + TransportType type_, + Json.String protocol, + Json.String version, + SecurityInfo security, + Json.String implSpecificInfo optional + } with { + variant (type_) "name as 'type'"; + } + + /** + * @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'"; + } + + /** + * @desc The OsContainerDescriptor data type supports the specification of requirements of container compute resources when a MEC application is intended to be realized by one or a set of OS Containers sharing the same host and same networking namespace + * @member + * @see ETSI GS MEC 010-2 Clause 6.2.1.22 Type: OsContainerDescriptor + */ + type record OsContainerDescriptor { + // FIXME shall follow the definition in clause 7.1.6.2 of ETSI GS NFV‑IFA 001 [1]. + } + type record of OsContainerDescriptor OsContainerDescriptors; + + /** + * @desc The McioIdentificationData data type contains data needed to identify an MCIO when interworking with the CISM + * @member + * @see ETSI GS MEC 010-2 Clause 6.2.1.23 Type: McioIdentificationData + */ + type record McioIdentificationData { + // FIXME shall follow the definition in clause 6.2.75.2 of ETSI GS NFV-SOL 001 [19]. + } + + /** + * @desc The LogicalNodeRequirements data type describes compute, memory and I/O requirements that are to be associated with the logical node of infrastructure + * @member + * @see ETSI GS MEC 010-2 Clause 6.2.1.24 Type: LogicalNodeRequirements + */ + type record LogicalNodeRequirements { + // FIXME shall follow the definition in clause 7.1.9.6.2 of ETSI GS NFV-IFA 011 [1]. + } + + /** + * @desc The RequestedAdditionalCapabilityData data type supports the specification of requested additional capability for a particular application. Such a capability may be for acceleration or specific tasks + * @member + * @see ETSI GS MEC 010-2 Clause 6.2.1.25 Type: RequestedAdditionalCapabilityData + */ + type record RequestedAdditionalCapabilityData { + // FIXME shall follow the definition in clause 7.1.9.5.2 of ETSI GS NFV-IFA 011 [1]. + } + + /** + * @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_ { + Json.Integer caType, + Json.String caValue + } + type record of CivicAddressElement_ CivicAddressElement; + + 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 communicationInterface Interface for communication with other application instances + * @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 enumerated InstantiationState { + INSTANTIATED (0), + NOT_INSTANTIATED (1) + } + + type record InstantiatedAppState { + OperationalState operationalState optional, + LocationInformation appInstLocation optional, + McioInfo mcioInfo optional + } + + type enumerated OperationalState { + STARTED (0), + STOPPED (1) + } + + /** + * @desc Links to resources related to this resource + * @member self_ Self referring URI + * @member instantiate Link to the "instantiate" task resource, if the related operation is possible based on the current status of this application instance resource + * @member terminate Link to the "terminate" task resource, if the related operation is possible based on the current status of this application instance resource + * @member operate Link to the "operate" task resource, if the related operation is supported for this application instance, and is possible based on the current status of this application instance resource + * @member appPrconfigure_platform_for_appovider Link to the "configure_platform_for_app" task resource, if the related operation is supported for this application instance, and is possible based on the current status of this application instance resource + * @see ETSI GS MEC 010-2 Clause 6.2.2.4 Type: AppInstanceInfo + */ + 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'"; + } + /** + * @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, + AppDVersion appDVersion optional + } + type record of Json.String AppDVersion; + + 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 (0), + OPERATE (1), + TERMINATE (2) + } + + type record length(1..infinity) of OperationType OperationTypes; + + type enumerated OperationState { + STARTING (0), + PROCESSING (1), + COMPLETED (2), + FAILED (3), + FAILED_TEMP (4) + } + + 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 osContainerDescriptor Describes CPU, memory requirements and limits, and software images of the OS Containers realizing this MEC application corresponding to OS Containers sharing the same host and same network namespace + * @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, + OsContainerDescriptors osContainerDescriptor optional, + VirtualStorageDescriptor virtualStorageDescriptor optional, + MECHostInformation selectedMECHostInfo, + LocationConstraints locationConstraints optional, + VimConnectionInfos 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, + Json.UInteger gracefulStopTimeout optional + } + + type enumerated StopType { + FORCEFUL (0), + GRACEFUL (1) + } + + /** + * @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, + Json.UInteger 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 (0), + STARTED (1), + STOPPED (2) + } + + /** + * @desc Links to resources related to this resource + * @member self_ URI of this resource + * @see ETSI GS MEC 010-2 Clause 6.2.2.10 Type: AppInstSubscriptionInfo + */ + 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 Links to resources related to this notification + * @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'"; + } + + /** + * @desc Links to resources related to this notification + * @member subscription A link to the related subscription + * @see ETSI GS MEC 010-2 Clause 6.2.2.11 Type: AppInstNotification + */ + 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, + OperationType lcmOperation, + OperationParams operationParams optional, + Json.Bool isCancelPending optional, + CancelMode cancelMode optional, + AppLcmOpOcc_Link links + } with { + variant (links) "name as '_links'"; + } + + /** + * @desc Input parameters of the LCM operation + * @see ETSI GS MEC 010-2 Clause 6.2.2.13 Type: AppLcmOpOcc + */ + type union OperationParams { + InstantiateAppRequest instantiateAppRequest, + OperateAppRequest operateAppRequest, + TerminateAppRequest terminateAppRequest + } + + /** + * @desc Link to the application instance that the operation applies to + * @member self_ URI of this resource + * @member appInstance 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_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'"; + } + + /** + * @desc Links to resources related to this resource + * @member self_ URI of this resource + * @see ETSI GS MEC 010-2 Clause 6.2.2.15 Type: AppLcmOpOccSubscriptionInfo + */ + 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 appLcmOpOccId, + Json.String appInstanceId, + AppLcmOpOccNotification_Link links + } with { + variant (links) "name as '_links'"; + } + + /** + * @desc Links to resources related to this resource + * @member appInstance Link to the resource representing the application instance to which the notified change applies + * @member subscription Link to the related subscription + * @member appLcmOpOcc Link to the application lifecycle management operation occurrence that this notification is related to + * @see ETSI GS MEC 010-2 Clause 6.2.2.16 Type: AppLcmOpOccNotification + */ + 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 + } + + type record of VimConnectionInfo VimConnectionInfos; + + /** + * @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'"; + } + + /** + * @desc List of hyperlinks related to the resource + * @member self_ URI of this resource + * @member subscriptions A link list to the subscriptions + * @see ETSI GS MEC 010-2 Clause 6.2.2.19 Type: AppInstanceSubscriptionLinkList + */ + type record SubscriptionLinkList_Link { + LinkType self_, + SubscriptionLinkList_Link_Subscriptions subscriptions optional + } with { + variant (self_) "name as 'self'"; + } + + /** + * @desc A link list to the subscriptions + * @member href The URI referring to the subscription + * @member subscriptionType Type of the subscription + * @see ETSI GS MEC 010-2 Clause 6.2.2.19 Type: AppInstanceSubscriptionLinkList + */ + 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 { + ServiceDependencies appServiceRequired optional, + ServiceDependencies appServiceOptional optional, + ServiceDependencies appServiceProduced optional, + FeatureDependencies appFeatureRequired optional, + FeatureDependencies appFeatureOptional optional, + TransportDependencies transportDependencies optional, + TrafficRuleDescriptors appTrafficRule optional, + DNSRuleDescriptors 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 + } + + /** + * @desc Sets of application options for the MEO/MEAO to select from as candidates for termination + * @member appInstIdTerminationCands List of application instance identifiers, constituting a candidate set for termination + * @see ETSI GS MEC 010-2 Clause 6.2.2.23 Type: AppTermCandsForCoord + */ + 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'"; + } + + /** + * @desc Links to resources related to this resource + * @member self_ URI of this resource + * @see ETSI GS MEC 010-2 Clause 6.2.2.26 Type: AppInstIdCreationSubscriptionInfo + */ + 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'"; + } + + /** + * @desc Links to resources related to this notification + * @member subscription A link to the related subscription + * @member appInstance Link to the resource representing the created application instance + * @see ETSI GS MEC 010-2 Clause 6.2.2.27 Type: AppInstanceIdentifierCreationNotification + */ + 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'"; + } + + /** + * @desc Links to resources related to this resource + * @member self_ URI of this resource + * @see ETSI GS MEC 010-2 Clause 6.2.2.29 Type: AppInstIdDeletionSubscriptionInfo + */ + 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, + AppInstIdDeletionSubscriptionRequest links + } with { + variant (links) "name as '_links'"; + } + + /** + * @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; - /** - * @desc The enumeration TransportType represents types of transports. - * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 8.1.6.4-1: Enumeration TransportType + /** + * @desc This data type represents the information about an MCIO representing the application instance realized by one or a set of OS containers + * @member + * @see ETSI GS MEC 010-2 Clause 6.2.2.31 Type: LocationInformation + */ + type record McioInfo { + // FIXME McioInfo shall follow the definition in clause 8.3.3.33.2 of ETSI GS NFV-IFA 013 [15]. + } + + + /** + * @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 (0), + UPLOADING (1), + PROCESSING (2), + ONBOARDED (3) + } + + type enumerated AppPkgInfo_OperationalState { + ENABLED (0), + DISABLED (1) + } + + type enumerated UsageState { + IN_USE (0), + NOT_IN_USE (1) + } + + type record length(1..infinity) of Json.String AppPkgInfo_MecInfo; + + /** + * @desc Links to resources related to this resource + * @member self_ Self referring URI + * @member appDId Link to the appD resource + * @member appPkgContent Link to the "Onboarded application package content" resource + * @member vnfPkgInfo Link to the corresponding VNF package resource at NFVO + * @see ETSI GS MEC 010-2 Clause 6.2.3.3 Type: AppPkgInfo + */ + 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'"; + } + + /** + * @desc Links to resources related to this resource + * @member self_ URI of this resource + * @see ETSI GS MEC 010-2 Clause 6.2.3.4 Type: AppPkgSubscriptionInfo + */ + 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'"; + } + + /** + * @desc A link list to the subscriptions to an application package + * @member href The URI referring to the subscription + * @member subscriptionType Type of the subscription + * @see ETSI GS MEC 010-2 Clause 6.2.3.5 Type: AppPkgSubscriptionLinkList + */ + 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 links Links 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'"; + } + + /** + * @desc Links to resources related to this notification + * @member subscription A link to the related subscription + * @see ETSI GS MEC 010-2 Clause 6.2.3.6 Type: AppPkgNotification + */ + 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 + } + + /** + * @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, + ResourceDefinitions addResources optional, + ResourceDefinitions tempResources optional, + ResourceDefinitions updateResources optional, + KeyValuePairs additionalParams optional, + GrantRequest_Link links + } with { + variant (links) "name as '_links'"; + } + + /** + * @desc Links to resources related to this request + * @member appLcmOpOcc Related lifecycle management operation occurrence + * @member appInstance Related application instance + * @see ETSI GS MEC 010-2 Clause 6.2.4 Granting information model + */ + 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, + ResourceTemplateId resourceTemplateId, + ResourceDefinition_Resource resource + } with { + variant (type_) "name as 'type'"; + } + + type record of ResourceDefinition ResourceDefinitions; + + type enumerated ResourceDefinition_Type { + COMPUTE (0), + STORAGE (1), + LINKPORT (2), + OSCONTAINER (3) + } + + type record of Json.String ResourceTemplateId; + + /** + * @desc Resource information for an existing resource + * @member vimConnectionInfo Specifies the connection information of VIM for the resources of the application instance + * @member resourceId Identifier of the resource in the scope of the VIM + * @see ETSI GS MEC 010-2 Clause 6.2.4.3 Type: ResourceDefinition + */ + 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, + VimConnectionInfos vimConnections optional, + ZoneInfos zones optional, + ZoneGroupInfos zoneGroups optional, + GrantInfos addResources optional, + GrantInfos tempResources optional, + GrantInfos removeResources optional, + GrantInfos updateResources optional, + VimAssets vimAssets optional, + ExtVirtualLinkDatas extVirtualLinks optional, + KeyValuePairs additionalParams optional, + Grant_Link links + } with { + variant (links) "name as '_links'"; + } + + type record VimAssets { + VimSoftwareImage softwareImages optional + } + + /** + * @desc Links to resources related to this request + * @member appLcmOpOcc Related lifecycle management operation occurrence + * @member appInstance Related application instance + * @see ETSI GS MEC 010-2 Clause 6.2.4.4 Type: Grant + */ + 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 + * @member mcioConstraints The constraint values to be assigned to MCIOs of an application with containerized components + * @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, + KeyValuePairs mcioConstraints optional + } + type record of GrantInfo GrantInfos; + + /** + * @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 + } + type record of ZoneInfo ZoneInfos; + + /** + * @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 of ZoneGroupInfo ZoneGroupInfos; + type record 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, + ExtLinkPortDatas extLinkPorts optional + } + type record of ExtVirtualLinkData ExtVirtualLinkDatas; + + /** + * @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 + } + type record of ExtLinkPortData ExtLinkPortDatas; + + /** + * @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, + Json.Integer numDynamicAddresses optional, + AddressRange addressRange optional + } with { + variant (type_) "name as 'type'"; + } + + 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 + } + + /** + * @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 Json.UInteger Seconds; + + /** + * @desc The nanoseconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC + */ + type Json.UInteger 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 + } + + group edge_platform_application_enablement { /* TITAN WORK-AROUND for build issue (class forward declaration) */ + + /** + * @desc The enumeration TransportType represents types of transports. + * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 8.1.6.4-1: Enumeration TransportType */ type enumerated TransportType { REST_HTTP, @@ -26,7 +1950,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { } /** - * @desc List of supported OAuth 2.0 grant types. + * @desc List of supported OAuth 2.0 grant types. */ type enumerated GrantTypes { OAUTH2_AUTHORIZATION_CODE, @@ -37,12 +1961,12 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { type record length(1..4) of GrantTypes GrantTypesList; /** - * @desc The token endpoint. + * @desc The token endpoint. */ type Json.String TokenEndpoint; /** - * @desc Parameters related to use of OAuth 2.0. + * @desc Parameters related to use of OAuth 2.0. */ type record OAuth2Info { GrantTypesList grantTypes, @@ -50,8 +1974,8 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { } /** - * @desc This type represents security information related to a transport. - * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 8.1.5.4-1: Attributes of SecurityInfo + * @desc This type represents security information related to a transport. + * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 8.1.5.4-1: Attributes of SecurityInfo */ type record SecurityInfo { OAuth2Info oAuth2Info optional, @@ -59,8 +1983,8 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { } /** - * @desc The enumeration SerializerTypes represents types of serializers. - * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 8.1.6.3-1: Enumeration SerializerType + * @desc The enumeration SerializerTypes represents types of serializers. + * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 8.1.6.3-1: Enumeration SerializerType */ type enumerated SerializerType { JSON, @@ -70,27 +1994,27 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { } /** - * @desc Reference of the catalogue. + * @desc Reference of the catalogue. */ type Json.String CategoryRef_Href; /** - * @desc Unique identifier of the category. + * @desc Unique identifier of the category. */ type Json.String CategoryRef_Id; /** - * @desc Name of the category. + * @desc Name of the category. */ type Json.String Name; /** - * @desc Category version. + * @desc Category version. */ type Json.String CategoryRef_Version; /** - * @desc This type represents the category reference. + * @desc This type represents the category reference. */ type record CategoryRef { CategoryRef_Href href, @@ -103,1704 +2027,6 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { } // End of group edge_platform_application_enablement - 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 { - Json.UInteger 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 TransportType 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, - TransportType type_, - Json.String protocol, - Json.String version, - SecurityInfo security, - Json.String implSpecificInfo optional - } with { - variant (type_) "name as 'type'"; - } - - /** - * @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, - Json.UInteger 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, - Json.UInteger 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 Json.UInteger Seconds; - - /** - * @desc The nanoseconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC - */ - type Json.UInteger 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 fd3a04d..b70a27f 100644 --- a/ttcn/LibMec/DeviceApplicationInterfaceAPI/ttcn/DeviceApplicationInterfaceAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/DeviceApplicationInterfaceAPI/ttcn/DeviceApplicationInterfaceAPI_TypesAndValues.ttcn @@ -31,7 +31,7 @@ module DeviceApplicationInterfaceAPI_TypesAndValues { */ type record AppListItem { ApplicationList_AppInfo appInfo, - VendorSpecificExt vendorSpecificExt optional + VendorSpecificExt vendorSpecificExt optional } type record of AppListItem AppList; @@ -145,8 +145,8 @@ module DeviceApplicationInterfaceAPI_TypesAndValues { * @see ETSI GS MEC 016 V2.2.1 (2020-04) Clause 6.2.3 Type: AppContext */ type record UserAppInstanceInfo { - Json.String appInstanceId optional, - Json.AnyURI referenceURI optional, + Json.String appInstanceId optional, + Json.AnyURI referenceURI optional, LocationConstraints appLocation optional } type record of UserAppInstanceInfo UserAppInstanceInfoList; @@ -229,8 +229,8 @@ module DeviceApplicationInterfaceAPI_TypesAndValues { * @see ETSI GS MEC 016 V2.2.1 (2020-04) Clause 6.4.4 Type: ApplicationContextUpdateNotification */ type record ApplicationContextUpdateNotification { - Json.String notificationType, - Json.String contextId, + Json.String notificationType, + Json.String contextId, UserAppInstanceInfoList userAppInstanceInfo } @@ -269,7 +269,7 @@ module DeviceApplicationInterfaceAPI_TypesAndValues { */ type record CivicAddressElement { Json.Integer caType, - Json.String caValue + Json.String caValue } /** @@ -278,8 +278,8 @@ module DeviceApplicationInterfaceAPI_TypesAndValues { */ type record Polygon { Json.String type_, - Geometry geometry, - Properties properties, + Geometry geometry, + Properties properties, Json.String this_ } with { variant (type_) "name as 'type'"; diff --git a/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_TypesAndValues.ttcn b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_TypesAndValues.ttcn index f237430..fd0248c 100644 --- a/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_TypesAndValues.ttcn @@ -24,7 +24,7 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { * @desc Operation that is being performed on the MEC */ type enumerated OperationAction { - STOPPING (0), + STOPPING (0), TERMINATING (1) } @@ -37,10 +37,10 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 7.1.4.2-1: Attributes of AppTerminationNotification */ type record AppTerminationNotification { - NotificationType notificationType, - OperationAction operationAction, + NotificationType notificationType, + OperationAction operationAction, MaxGracefulTimeout maxGracefulTimeout, - Subscription links + Subscription links } with { variant (links) "name as '_links'"; } @@ -118,8 +118,8 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { */ type record ServiceLivenessInfo { ServiceState state, - TimeStamp timeStamp, - integer interval + TimeStamp timeStamp, + integer interval } /** @@ -146,9 +146,9 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { * @desc This type represents the category reference. */ type record CategoryRef { - CategoryRef_Href href, - CategoryRef_Id id, - Name name, + CategoryRef_Href href, + CategoryRef_Id id, + Name name, CategoryRef_Version version } type record length(1..infinity) of CategoryRef CategoryRefList; @@ -202,18 +202,18 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { * @see ETSI GS MEC 011 V3.1.1 (2022-09) 7.1.2.6-1: Attributes of AppInfo */ type record AppInfo { - Json.String appName, - Json.String appProvider optional, - CategoryRef appCategory optional, - Json.String appDId optional, - Json.String appInstanceId optional, - EndPointInfo endpoint optional, - ServiceDependency appServiceRequired optional, - ServiceDependency appServiceOptional optional, - FeatureDependency appFeatureRequired optional, - FeatureDependency appFeatureOptional optional, - Json.Bool isInsByMec optional, - AppProfile appProfile optional + Json.String appName, + Json.String appProvider optional, + CategoryRef appCategory optional, + Json.String appDId optional, + Json.String appInstanceId optional, + EndPointInfo endpoint optional, + ServiceDependencies appServiceRequired optional, + ServiceDependencies appServiceOptional optional, + FeatureDependencies appFeatureRequired optional, + FeatureDependencies appFeatureOptional optional, + Json.Bool isInsByMec optional, + AppProfile appProfile optional } // End of type AppInfo /** @@ -254,11 +254,11 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 7.1.5.3-1: Attributes of DestinationInterface */ type record DestinationInterface { - InterfaceType interfaceType, - TunnelInfo tunnelInfo optional, + InterfaceType interfaceType, + TunnelInfo tunnelInfo optional, DestinationInterface_MacAddress srcMacAddress optional, DestinationInterface_MacAddress dstMacAddress optional, - DestinationInterface_IpAddress dstIpAddress optional + DestinationInterface_IpAddress dstIpAddress optional } type record of DestinationInterface DestinationInterfaceList; @@ -310,12 +310,12 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 7.1.2.3-1: Attributes of DnsRule */ type record DnsRule { - DnsRule_Id dnsRuleId, - DomainName domainName, + DnsRule_Id dnsRuleId, + DomainName domainName, DnsRule_IpAddressType ipAddressType, - DnsRule_IpAddress ipAddress, - Ttl ttl, - DnsRule_State state + DnsRule_IpAddress ipAddress, + Ttl ttl, + DnsRule_State state } type record of DnsRule DnsRuleList; @@ -333,7 +333,7 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { * @desc A IP address and port pair. */ type record Address { - Host host, + Host host, Address_Port port_ } with { variant (port_) "name as 'port'"; @@ -423,7 +423,7 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 6.2.2-1: Attributes of the SubscriptionLinkList */ type record Links { - LinkType self_, + LinkType self_, Subscriptions subscriptions } with { variant (self_) "name as 'self'"; -- GitLab From 49eadc03ad1075b1fa1c3ad74f5f4adf8deea237 Mon Sep 17 00:00:00 2001 From: garciay Date: Tue, 8 Aug 2023 10:23:43 +0200 Subject: [PATCH 39/99] Implementation od MEC 040 TPs --- ...Mec_FederationEnablementAPI_TestCases.ttcn | 1846 ++++++++++++++++- ...c_FederationEnablementAPI_TestControl.ttcn | 42 + .../FederationEnablementAPI_Functions.ttcn | 113 + .../ttcn/FederationEnablementAPI_Pics.ttcn | 5 + .../ttcn/FederationEnablementAPI_Pixits.ttcn | 39 + .../FederationEnablementAPI_Templates.ttcn | 48 + ...ederationEnablementAPI_TypesAndValues.ttcn | 3 +- ...FixedAccessInformationServiceAPI_Pics.ttcn | 3 + ttcn/LibMec/ttcn/LibMec_Pixits.ttcn | 8 +- .../ttcn/LibHttp_JsonMessageBodyTypes.ttcn | 13 +- .../ttcn/LibHttp_JsonTemplates.ttcn | 54 +- 11 files changed, 2163 insertions(+), 11 deletions(-) diff --git a/ttcn/AtsMec_FederationEnablement/AtsMec_FederationEnablementAPI_TestCases.ttcn b/ttcn/AtsMec_FederationEnablement/AtsMec_FederationEnablementAPI_TestCases.ttcn index 121d712..75a2179 100644 --- a/ttcn/AtsMec_FederationEnablement/AtsMec_FederationEnablementAPI_TestCases.ttcn +++ b/ttcn/AtsMec_FederationEnablement/AtsMec_FederationEnablementAPI_TestCases.ttcn @@ -9,6 +9,9 @@ module AtsMec_FederationEnablementAPI_TestCases { import from LibHttp_Templates all; import from LibHttp_JsonTemplates all; import from LibHttp_TestSystem all; + + // LibMec/EdgePlatformApplicationEnablementAPI + import from EdgePlatformApplicationEnablementAPI_Templates all; // LibMec/FederationEnablementAPI import from FederationEnablementAPI_TypesAndValues all; @@ -16,10 +19,1849 @@ module AtsMec_FederationEnablementAPI_TestCases { import from FederationEnablementAPI_Functions all; import from FederationEnablementAPI_Pics all; import from FederationEnablementAPI_Pixits all; - + // LibMec import from LibMec_Functions all; import from LibMec_Pics all; import from LibMec_Pixits all; - + + group lookup { + + /** + * @desc Check that the IUT responds with a list of all available systemInfo when requested by a MEC Orchestrator - No query parameters + */ + testcase TC_MEC_MEC040_SRV_MEF_001_OK_01() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var SystemInfoList v_system_info_list := { + valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_1, PX_FED_SYSTEM_NAME_1, PX_FED_SYSTEM_ID_1)), + valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_2, PX_FED_SYSTEM_NAME_2, PX_FED_SYSTEM_ID_2)), + valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_3, PX_FED_SYSTEM_NAME_3, PX_FED_SYSTEM_ID_3)) + }; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_FED_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FED_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_system_info_list(v_system_info_list); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_FED_API_LIST_SYSTEM_INFO, + 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_fed_system_info_list( + { + *, + mw_system_info( + PX_FED_SYSTEM_PROVIDER_1, + PX_FED_SYSTEM_NAME_1, + PX_FED_SYSTEM_ID_1 + ), + * + } + ))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a SystemInfoList ***"); + 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_system_info_list(v_system_info_list); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC040_SRV_MEF_001_OK_01 + + /** + * @desc Check that the IUT responds with a selection of all available systemInfo when requested by a MEC Orchestrator - SystemId query parameters + */ + testcase TC_MEC_MEC040_SRV_MEF_001_OK_02() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var SystemInfoList v_system_info_list := { + valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_1, PX_FED_SYSTEM_NAME_1, PX_FED_SYSTEM_ID_1)), + valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_2, PX_FED_SYSTEM_NAME_2, PX_FED_SYSTEM_ID_2)), + valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_3, PX_FED_SYSTEM_NAME_3, PX_FED_SYSTEM_ID_3)) + }; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_FED_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FED_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_system_info_list(v_system_info_list); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_FED_API_LIST_SYSTEM_INFO & "?systemId=" & oct2char(unichar2oct(PX_FED_SYSTEM_ID_1, "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_fed_system_info_list( + { + mw_system_info( + PX_FED_SYSTEM_PROVIDER_1, + PX_FED_SYSTEM_NAME_1, + PX_FED_SYSTEM_ID_1 + ) + } + ))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a SystemInfoList ***"); + 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_system_info_list(v_system_info_list); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC040_SRV_MEF_001_OK_02 + + /** + * @desc Check that the IUT responds with a selection of all available systemInfo when requested by a MEC Orchestrator - Multiple SystemId query parameters + */ + testcase TC_MEC_MEC040_SRV_MEF_001_OK_03() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var SystemInfoList v_system_info_list := { + valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_1, PX_FED_SYSTEM_NAME_1, PX_FED_SYSTEM_ID_1)), + valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_2, PX_FED_SYSTEM_NAME_2, PX_FED_SYSTEM_ID_2)), + valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_3, PX_FED_SYSTEM_NAME_3, PX_FED_SYSTEM_ID_3)) + }; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_FED_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FED_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_system_info_list(v_system_info_list); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_FED_API_LIST_SYSTEM_INFO & "?systemId=" & oct2char(unichar2oct(PX_FED_SYSTEM_ID_1, "UTF-8")) & "&systemName=" & oct2char(unichar2oct(PX_FED_SYSTEM_ID_2, "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_fed_system_info_list( + { + mw_system_info( + PX_FED_SYSTEM_PROVIDER_1, + PX_FED_SYSTEM_NAME_1, + PX_FED_SYSTEM_ID_1 + ), + mw_system_info( + PX_FED_SYSTEM_PROVIDER_2, + PX_FED_SYSTEM_NAME_2, + PX_FED_SYSTEM_ID_2 + ) + } + ))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a SystemInfoList ***"); + 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_system_info_list(v_system_info_list); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC040_SRV_MEF_001_OK_03 + + /** + * @desc Check that the IUT responds with a selection of all available systemInfo when requested by a MEC Orchestrator - Empty SystemId query parameters + */ + testcase TC_MEC_MEC040_SRV_MEF_001_OK_04() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var SystemInfoList v_system_info_list := { + valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_1, PX_FED_SYSTEM_NAME_1, PX_FED_SYSTEM_ID_1)), + valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_2, PX_FED_SYSTEM_NAME_2, PX_FED_SYSTEM_ID_2)), + valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_3, PX_FED_SYSTEM_NAME_3, PX_FED_SYSTEM_ID_3)) + }; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_FED_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FED_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_system_info_list(v_system_info_list); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_FED_API_LIST_SYSTEM_INFO & "?systemId=", + 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_fed_system_info_list( + { + mw_system_info( + PX_FED_SYSTEM_PROVIDER_1, + PX_FED_SYSTEM_NAME_1, + PX_FED_SYSTEM_ID_1 + ), + mw_system_info( + PX_FED_SYSTEM_PROVIDER_2, + PX_FED_SYSTEM_NAME_2, + PX_FED_SYSTEM_ID_2 + ) + } + ))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a SystemInfoList ***"); + 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_system_info_list(v_system_info_list); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC040_SRV_MEF_001_OK_04 + + /** + * @desc Check that the IUT responds with a selection of all available systemInfo when requested by a MEC Orchestrator - SystemName query parameters + */ + testcase TC_MEC_MEC040_SRV_MEF_001_OK_05() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var SystemInfoList v_system_info_list := { + valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_1, PX_FED_SYSTEM_NAME_1, PX_FED_SYSTEM_ID_1)), + valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_2, PX_FED_SYSTEM_NAME_2, PX_FED_SYSTEM_ID_2)), + valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_3, PX_FED_SYSTEM_NAME_3, PX_FED_SYSTEM_ID_3)) + }; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_FED_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FED_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_system_info_list(v_system_info_list); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_FED_API_LIST_SYSTEM_INFO & "?systemName=" & oct2char(unichar2oct(PX_FED_SYSTEM_NAME_1, "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_fed_system_info_list( + { + mw_system_info( + PX_FED_SYSTEM_PROVIDER_1, + PX_FED_SYSTEM_NAME_1, + PX_FED_SYSTEM_ID_1 + ) + } + ))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a SystemInfoList ***"); + 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_system_info_list(v_system_info_list); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC040_SRV_MEF_001_OK_05 + + /** + * @desc Check that the IUT responds with a selection of all available systemInfo when requested by a MEC Orchestrator - Multiple SystemName query parameters + */ + testcase TC_MEC_MEC040_SRV_MEF_001_OK_06() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var SystemInfoList v_system_info_list := { + valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_1, PX_FED_SYSTEM_NAME_1, PX_FED_SYSTEM_ID_1)), + valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_2, PX_FED_SYSTEM_NAME_2, PX_FED_SYSTEM_ID_2)), + valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_3, PX_FED_SYSTEM_NAME_3, PX_FED_SYSTEM_ID_3)) + }; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_FED_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FED_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_system_info_list(v_system_info_list); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_FED_API_LIST_SYSTEM_INFO & "?systemName=" & oct2char(unichar2oct(PX_FED_SYSTEM_NAME_1, "UTF-8")) & "&systemName=" & oct2char(unichar2oct(PX_FED_SYSTEM_NAME_2, "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_fed_system_info_list( + { + mw_system_info( + PX_FED_SYSTEM_PROVIDER_1, + PX_FED_SYSTEM_NAME_1, + PX_FED_SYSTEM_ID_1 + ), + mw_system_info( + PX_FED_SYSTEM_PROVIDER_2, + PX_FED_SYSTEM_NAME_2, + PX_FED_SYSTEM_ID_2 + ) + } + ))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a SystemInfoList ***"); + 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_system_info_list(v_system_info_list); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC040_SRV_MEF_001_OK_06 + + /** + * @desc Check that the IUT responds with a selection of all available systemInfo when requested by a MEC Orchestrator - Empty SystemName query parameters + */ + testcase TC_MEC_MEC040_SRV_MEF_001_OK_07() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var SystemInfoList v_system_info_list := { + valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_1, PX_FED_SYSTEM_NAME_1, PX_FED_SYSTEM_ID_1)), + valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_2, PX_FED_SYSTEM_NAME_2, PX_FED_SYSTEM_ID_2)), + valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_3, PX_FED_SYSTEM_NAME_3, PX_FED_SYSTEM_ID_3)) + }; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_FED_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FED_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_system_info_list(v_system_info_list); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_FED_API_LIST_SYSTEM_INFO & "?systemName=", + 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_fed_system_info_list( + { + mw_system_info( + PX_FED_SYSTEM_PROVIDER_1, + PX_FED_SYSTEM_NAME_1, + PX_FED_SYSTEM_ID_1 + ), + mw_system_info( + PX_FED_SYSTEM_PROVIDER_2, + PX_FED_SYSTEM_NAME_2, + PX_FED_SYSTEM_ID_2 + ) + } + ))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a SystemInfoList ***"); + 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_system_info_list(v_system_info_list); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC040_SRV_MEF_001_OK_07 + + /** + * @desc Check that the IUT responds with a selection of all available systemInfo when requested by a MEC Orchestrator - systemProvider query parameters + */ + testcase TC_MEC_MEC040_SRV_MEF_001_OK_08() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var SystemInfoList v_system_info_list := { + valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_1, PX_FED_SYSTEM_NAME_1, PX_FED_SYSTEM_ID_1)), + valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_2, PX_FED_SYSTEM_NAME_2, PX_FED_SYSTEM_ID_2)), + valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_3, PX_FED_SYSTEM_NAME_3, PX_FED_SYSTEM_ID_3)) + }; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_FED_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FED_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_system_info_list(v_system_info_list); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_FED_API_LIST_SYSTEM_INFO & "?systemProvider=" & oct2char(unichar2oct(PX_FED_SYSTEM_PROVIDER_1, "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_fed_system_info_list( + { + mw_system_info( + PX_FED_SYSTEM_PROVIDER_1, + PX_FED_SYSTEM_NAME_1, + PX_FED_SYSTEM_ID_1 + ) + } + ))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a SystemInfoList ***"); + 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_system_info_list(v_system_info_list); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC040_SRV_MEF_001_OK_08 + + /** + * @desc Check that the IUT responds with a selection of all available systemInfo when requested by a MEC Orchestrator - Multiple systemProvider query parameters + */ + testcase TC_MEC_MEC040_SRV_MEF_001_OK_09() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var SystemInfoList v_system_info_list := { + valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_1, PX_FED_SYSTEM_NAME_1, PX_FED_SYSTEM_ID_1)), + valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_2, PX_FED_SYSTEM_NAME_2, PX_FED_SYSTEM_ID_2)), + valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_3, PX_FED_SYSTEM_NAME_3, PX_FED_SYSTEM_ID_3)) + }; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_FED_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FED_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_system_info_list(v_system_info_list); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_FED_API_LIST_SYSTEM_INFO & "?systemProvider=" & oct2char(unichar2oct(PX_FED_SYSTEM_PROVIDER_1, "UTF-8")) & "?systemProvider=" & oct2char(unichar2oct(PX_FED_SYSTEM_PROVIDER_2, "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_fed_system_info_list( + { + mw_system_info( + PX_FED_SYSTEM_PROVIDER_1, + PX_FED_SYSTEM_NAME_1, + PX_FED_SYSTEM_ID_1 + ), + mw_system_info( + PX_FED_SYSTEM_PROVIDER_2, + PX_FED_SYSTEM_NAME_2, + PX_FED_SYSTEM_ID_2 + ) + } + ))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a SystemInfoList ***"); + 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_system_info_list(v_system_info_list); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC040_SRV_MEF_001_OK_09 + + /** + * @desc Check that the IUT responds with a selection of all available systemInfo when requested by a MEC Orchestrator - Empty systemProvider query parameters + */ + testcase TC_MEC_MEC040_SRV_MEF_001_OK_10() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var SystemInfoList v_system_info_list := { + valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_1, PX_FED_SYSTEM_NAME_1, PX_FED_SYSTEM_ID_1)), + valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_2, PX_FED_SYSTEM_NAME_2, PX_FED_SYSTEM_ID_2)), + valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_3, PX_FED_SYSTEM_NAME_3, PX_FED_SYSTEM_ID_3)) + }; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_FED_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FED_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_system_info_list(v_system_info_list); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_FED_API_LIST_SYSTEM_INFO & "?systemProvider=", + 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_fed_system_info_list( + { + mw_system_info( + PX_FED_SYSTEM_PROVIDER_1, + PX_FED_SYSTEM_NAME_1, + PX_FED_SYSTEM_ID_1 + ), + mw_system_info( + PX_FED_SYSTEM_PROVIDER_2, + PX_FED_SYSTEM_NAME_2, + PX_FED_SYSTEM_ID_2 + ) + } + ))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a SystemInfoList ***"); + 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_system_info_list(v_system_info_list); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC040_SRV_MEF_001_OK_10 + + /** + * @desc Check that the IUT responds with a selection of all available systemInfo when requested by a MEC Orchestrator - Multiple query parameters + */ + testcase TC_MEC_MEC040_SRV_MEF_001_OK_11() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var SystemInfoList v_system_info_list := { + valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_1, PX_FED_SYSTEM_NAME_1, PX_FED_SYSTEM_ID_1)), + valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_2, PX_FED_SYSTEM_NAME_2, PX_FED_SYSTEM_ID_2)), + valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_3, PX_FED_SYSTEM_NAME_3, PX_FED_SYSTEM_ID_3)) + }; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_FED_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FED_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_system_info_list(v_system_info_list); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_FED_API_LIST_SYSTEM_INFO & "?systemId=" & oct2char(unichar2oct(PX_FED_SYSTEM_ID_1, "UTF-8")) & "?systemName=" & oct2char(unichar2oct(PX_FED_SYSTEM_NAME_3, "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_fed_system_info_list( + { + mw_system_info( + PX_FED_SYSTEM_PROVIDER_1, + PX_FED_SYSTEM_NAME_1, + PX_FED_SYSTEM_ID_1 + ), + mw_system_info( + PX_FED_SYSTEM_PROVIDER_2, + PX_FED_SYSTEM_NAME_2, + PX_FED_SYSTEM_ID_2 + ) + } + ))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a SystemInfoList ***"); + 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_system_info_list(v_system_info_list); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC040_SRV_MEF_001_OK_11 + + /** + * @desc Check that the IUT responds with an error when selection is not applicable - SystemId + */ + testcase TC_MEC_MEC040_SRV_MEF_001_NF_01() 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_FED_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FED_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_FED_API_LIST_SYSTEM_INFO & "?systemId=" & oct2char(unichar2oct(PX_FED_SYSTEM_ID_UNKNOWN, "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 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_MEC040_SRV_MEF_001_NF_01 + + /** + * @desc Check that the IUT responds with an error when selection is not applicable - SystemName + */ + testcase TC_MEC_MEC040_SRV_MEF_001_NF_02() 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_FED_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FED_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_FED_API_LIST_SYSTEM_INFO & "?systemName=" & oct2char(unichar2oct(PX_FED_SYSTEM_NAME_UNKNOWN, "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 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_MEC040_SRV_MEF_001_NF_02 + + /** + * @desc Check that the IUT responds with an error when selection is not applicable - SystemProvider + */ + testcase TC_MEC_MEC040_SRV_MEF_001_NF_03() 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_FED_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FED_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_FED_API_LIST_SYSTEM_INFO & "?systemProvider=" & oct2char(unichar2oct(PX_FED_SYSTEM_PROVIDER_UNKNOWN, "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 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_MEC040_SRV_MEF_001_NF_03 + + /** + * @desc Check that the IUT responds with an error when request is malformed + */ + testcase TC_MEC_MEC040_SRV_MEF_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_FED_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FED_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_FED_API_LIST_SYSTEM_INFO & "?system=" & oct2char(unichar2oct(PX_FED_SYSTEM_ID_1, "UTF-8")), // system instead of systemId + 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_MEC040_SRV_MEF_001_BR + + } // End of group lookup + + group subscription { + + /** + * @desc Check that the IUT creates a new systemInfo when requested by a MEC Orchestrator + */ + testcase TC_MEC_MEC040_SRV_MEF_002_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_FED_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FED_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_FED_API_SUB, + v_headers, + m_http_message_body_json( + m_body_json_fed_system_info( + m_system_info( + PX_FED_SYSTEM_NAME_1, + PX_FED_SYSTEM_PROVIDER_1 + )))))); + 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_fed_system_info( + mw_system_info( + PX_FED_SYSTEM_PROVIDER_1, + PX_FED_SYSTEM_NAME_1, + PX_FED_SYSTEM_ID_1 + )))))) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds the success 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_system_info(v_response.response.body.json_body.systemInfo); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC040_SRV_MEF_002_OK + + /** + * @desc Check that the IUT responds with an error on creating an existing systemInfo + */ + testcase TC_MEC_MEC040_SRV_MEF_002_BR_01() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var SystemInfo v_system_info := valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_1, PX_FED_SYSTEM_NAME_1, PX_FED_SYSTEM_ID_1)); + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_FED_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FED_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_system_info(v_system_info); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_FED_API_SUB, + v_headers, + m_http_message_body_json( + m_body_json_fed_system_info( + m_system_info( // Already created + PX_FED_SYSTEM_NAME_1, + PX_FED_SYSTEM_PROVIDER_1 + )))))); + 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 yhe 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_system_info(v_system_info); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC040_SRV_MEF_002_BR_01 + + /** + * @desc Check that the IUT responds with an error on creating an existing systemInfo + */ + testcase TC_MEC_MEC040_SRV_MEF_002_BR_02() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var SystemInfo v_system_info := valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_2, PX_FED_SYSTEM_NAME_2, PX_FED_SYSTEM_ID_2)); + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_FED_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FED_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_system_info(v_system_info); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_FED_API_SUB, + v_headers, + m_http_message_body_json( + m_body_json_fed_system_info( + m_system_info( + PX_FED_SYSTEM_NAME_1, + PX_FED_SYSTEM_PROVIDER_1, + PX_FED_SYSTEM_ID_1 // Shall be omitted + )))))); + 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 yhe 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_system_info(v_system_info); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC040_SRV_MEF_002_BR_02 + + /** + * @desc Check that the IUT responds with a selection of all available systemInfo when requested by a MEC Orchestrator + */ + testcase TC_MEC_MEC040_SRV_MEF_003_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var SystemInfoList v_system_info_list := { + valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_1, PX_FED_SYSTEM_NAME_1, PX_FED_SYSTEM_ID_1)), + valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_2, PX_FED_SYSTEM_NAME_2, PX_FED_SYSTEM_ID_2)), + valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_3, PX_FED_SYSTEM_NAME_3, PX_FED_SYSTEM_ID_3)) + }; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_FED_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FED_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_system_info_list(v_system_info_list); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_FED_API_SUB & "/" & oct2char(unichar2oct(PX_FED_SYSTEM_ID_2, "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_fed_system_info( + mw_system_info( + PX_FED_SYSTEM_PROVIDER_2, + PX_FED_SYSTEM_NAME_2, + PX_FED_SYSTEM_ID_2 + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct SystemInfo entry ***"); + 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_system_info_list(v_system_info_list); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC040_SRV_MEF_003_OK + + /** + * @desc Check that the IUT responds with an error when it receives a request for returning a systemInfo referred with a wrong systemId + */ + testcase TC_MEC_MEC040_SRV_MEF_003_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var SystemInfoList v_system_info_list := { + valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_1, PX_FED_SYSTEM_NAME_1, PX_FED_SYSTEM_ID_1)), + valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_2, PX_FED_SYSTEM_NAME_2, PX_FED_SYSTEM_ID_2)) + }; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_FED_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FED_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_system_info_list(v_system_info_list); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_FED_API_SUB & "/" & oct2char(unichar2oct(PX_FED_SYSTEM_ID_3, "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 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_system_info_list(v_system_info_list); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC040_SRV_MEF_003_NF + + } // End of group subscription + + group patch { + + /** + * @desc Check that the IUT updates the systemInfo when requested by a MEC Orchestrator + */ + testcase TC_MEC_MEC040_SRV_MEF_004_OK_01() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var SystemInfoList v_system_info_list := { + valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_1, PX_FED_SYSTEM_NAME_1, PX_FED_SYSTEM_ID_1)), + valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_2, PX_FED_SYSTEM_NAME_2, PX_FED_SYSTEM_ID_2)), + valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_3, PX_FED_SYSTEM_NAME_3, PX_FED_SYSTEM_ID_3)) + }; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_FED_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FED_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_system_info_list(v_system_info_list); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_patch( + PICS_ROOT_API & PX_FED_API_SUB & "/" & oct2char(unichar2oct(PX_FED_SYSTEM_ID_2, "UTF-8")), + v_headers, + m_http_message_body_json( + m_body_json_fed_system_info_update( + m_system_info_update( + -, + m_end_point_uris( + { PX_FED_ENDPOINT_URI_1, PX_FED_ENDPOINT_URI_2 } + ))))))); + 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_fed_system_info( + mw_system_info( + PX_FED_SYSTEM_PROVIDER_2, + PX_FED_SYSTEM_NAME_1, + PX_FED_SYSTEM_ID_2 + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with the patched SystemInfo entry ***"); + 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_system_info_list(v_system_info_list); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC040_SRV_MEF_004_OK_01 + + /** + * @desc Check that the IUT updates the systemInfo when requested by a MEC Orchestrator + */ + testcase TC_MEC_MEC040_SRV_MEF_004_OK_02() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var SystemInfoList v_system_info_list := { + valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_1, PX_FED_SYSTEM_NAME_1, PX_FED_SYSTEM_ID_1)), + valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_2, PX_FED_SYSTEM_NAME_2, PX_FED_SYSTEM_ID_2)), + valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_3, PX_FED_SYSTEM_NAME_3, PX_FED_SYSTEM_ID_3)) + }; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_FED_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FED_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_system_info_list(v_system_info_list); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_patch( + PICS_ROOT_API & PX_FED_API_SUB & "/" & oct2char(unichar2oct(PX_FED_SYSTEM_ID_2, "UTF-8")), + v_headers, + m_http_message_body_json( + m_body_json_fed_system_info_update( + m_system_info_update( + PX_FED_SYSTEM_NAME_1 & "_patched" + )))))); + 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_fed_system_info( + mw_system_info( + PX_FED_SYSTEM_PROVIDER_2, + PX_FED_SYSTEM_NAME_1 & "_patched", + PX_FED_SYSTEM_ID_2 + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with the patched SystemInfo entry ***"); + 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_system_info_list(v_system_info_list); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC040_SRV_MEF_004_OK_02 + + /** + * @desc Check that the IUT updates the systemInfo when requested by a MEC Orchestrator + */ + testcase TC_MEC_MEC040_SRV_MEF_004_OK_03() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var SystemInfoList v_system_info_list := { + valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_1, PX_FED_SYSTEM_NAME_1, PX_FED_SYSTEM_ID_1)), + valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_2, PX_FED_SYSTEM_NAME_2, PX_FED_SYSTEM_ID_2)), + valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_3, PX_FED_SYSTEM_NAME_3, PX_FED_SYSTEM_ID_3)) + }; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_FED_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FED_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_system_info_list(v_system_info_list); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_patch( + PICS_ROOT_API & PX_FED_API_SUB & "/" & oct2char(unichar2oct(PX_FED_SYSTEM_ID_2, "UTF-8")), + v_headers, + m_http_message_body_json( + m_body_json_fed_system_info_update( + m_system_info_update( + PX_FED_SYSTEM_NAME_1 & "_patched", + m_end_point_uris( + { PX_FED_ENDPOINT_URI_1, PX_FED_ENDPOINT_URI_2 } + ))))))); + 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_fed_system_info( + mw_system_info( + PX_FED_SYSTEM_PROVIDER_2, + PX_FED_SYSTEM_NAME_1 & "_patched", + PX_FED_SYSTEM_ID_2 + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with the patched SystemInfo entry ***"); + 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_system_info_list(v_system_info_list); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC040_SRV_MEF_004_OK_03 + + /** + * @desc Check that the IUT responds with an error when requested to update an unknown systemInfo + */ + testcase TC_MEC_MEC040_SRV_MEF_004_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var SystemInfoList v_system_info_list := { + valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_1, PX_FED_SYSTEM_NAME_1, PX_FED_SYSTEM_ID_1)) + }; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_FED_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FED_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_system_info_list(v_system_info_list); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_patch( + PICS_ROOT_API & PX_FED_API_SUB & "/" & oct2char(unichar2oct(PX_FED_SYSTEM_ID_2, "UTF-8")), + v_headers, + m_http_message_body_json( + m_body_json_fed_system_info_update( + m_system_info_update( + -, + m_end_point_uris( + { PX_FED_ENDPOINT_URI_1, PX_FED_ENDPOINT_URI_2 } + ))))))); + 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_system_info_list(v_system_info_list); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC040_SRV_MEF_004_NF + + /** + * @desc Check that the IUT responds with an error when requested to update with an inconsistant URI + */ + testcase TC_MEC_MEC040_SRV_MEF_004_BR_01() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var SystemInfoList v_system_info_list := { + valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_1, PX_FED_SYSTEM_NAME_1, PX_FED_SYSTEM_ID_1)) + }; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_FED_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FED_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_system_info_list(v_system_info_list); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_patch( + PICS_ROOT_API & PX_FED_API_SUB_WRONG & "/" & oct2char(unichar2oct(PX_FED_SYSTEM_ID_2, "UTF-8")), // v10 instead of v1 + v_headers, + m_http_message_body_json( + m_body_json_fed_system_info_update( + m_system_info_update( + -, + m_end_point_uris( + { PX_FED_ENDPOINT_URI_1, PX_FED_ENDPOINT_URI_2 } + ))))))); + 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_delete_system_info_list(v_system_info_list); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC040_SRV_MEF_004_BR_01 + + /** + * @desc Check that the IUT responds with an error when requested to update with no data provided + */ + testcase TC_MEC_MEC040_SRV_MEF_004_BR_02() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var SystemInfoList v_system_info_list := { + valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_1, PX_FED_SYSTEM_NAME_1, PX_FED_SYSTEM_ID_1)) + }; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_FED_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FED_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_system_info_list(v_system_info_list); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_patch( + PICS_ROOT_API & PX_FED_API_SUB & "/" & oct2char(unichar2oct(PX_FED_SYSTEM_ID_2, "UTF-8")), + v_headers, + m_http_message_body_json( + m_body_json_fed_system_info_update( + m_system_info_update // No data provided + ))))); + 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_delete_system_info_list(v_system_info_list); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC040_SRV_MEF_004_BR_02 + + } // End of group patch + + group delete { + + /** + * @desc Check that the IUT deletes the systemInfo when requested by a MEC Orchestrator + */ + testcase TC_MEC_MEC040_SRV_MEF_005_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var SystemInfoList v_system_info_list := { + valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_1, PX_FED_SYSTEM_NAME_1, PX_FED_SYSTEM_ID_1)), + valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_2, PX_FED_SYSTEM_NAME_2, PX_FED_SYSTEM_ID_2)), + valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_3, PX_FED_SYSTEM_NAME_3, PX_FED_SYSTEM_ID_3)) + }; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_FED_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FED_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_system_info_list(v_system_info_list); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & PX_FED_API_SUB & "/" & oct2char(unichar2oct(PX_FED_SYSTEM_ID_2, "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 204 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_system_info_list(v_system_info_list); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC040_SRV_MEF_005_OK + + /** + * @desc Check that the IUT responds with an error when requested to delete an unknown systemInfo + */ + testcase TC_MEC_MEC040_SRV_MEF_005_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var SystemInfoList v_system_info_list := { + valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_1, PX_FED_SYSTEM_NAME_1, PX_FED_SYSTEM_ID_1)) + }; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_FED_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FED_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_system_info_list(v_system_info_list); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & PX_FED_API_SUB & "/" & oct2char(unichar2oct(PX_FED_SYSTEM_ID_2, "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 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_system_info_list(v_system_info_list); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC040_SRV_MEF_005_NF + + } // End of group delete + } // End of module AtsMec_FederationEnablementAPI_TestCases diff --git a/ttcn/AtsMec_FederationEnablement/AtsMec_FederationEnablementAPI_TestControl.ttcn b/ttcn/AtsMec_FederationEnablement/AtsMec_FederationEnablementAPI_TestControl.ttcn index 73c204b..2f973bc 100644 --- a/ttcn/AtsMec_FederationEnablement/AtsMec_FederationEnablementAPI_TestControl.ttcn +++ b/ttcn/AtsMec_FederationEnablement/AtsMec_FederationEnablementAPI_TestControl.ttcn @@ -11,6 +11,48 @@ module AtsMec_FederationEnablementAPI_TestControl { control { + if (PICS_FED_API_SUPPORTED) { + + if (PICS_MEC_PLAT and PICS_SERVICES) { + execute(TC_MEC_MEC040_SRV_MEF_001_OK_01()); + execute(TC_MEC_MEC040_SRV_MEF_001_OK_02()); + execute(TC_MEC_MEC040_SRV_MEF_001_OK_03()); + execute(TC_MEC_MEC040_SRV_MEF_001_OK_04()); + execute(TC_MEC_MEC040_SRV_MEF_001_OK_05()); + execute(TC_MEC_MEC040_SRV_MEF_001_OK_06()); + execute(TC_MEC_MEC040_SRV_MEF_001_OK_07()); + execute(TC_MEC_MEC040_SRV_MEF_001_OK_08()); + execute(TC_MEC_MEC040_SRV_MEF_001_OK_09()); + execute(TC_MEC_MEC040_SRV_MEF_001_OK_10()); + execute(TC_MEC_MEC040_SRV_MEF_001_OK_11()); + + execute(TC_MEC_MEC040_SRV_MEF_001_NF_01()); + execute(TC_MEC_MEC040_SRV_MEF_001_NF_02()); + execute(TC_MEC_MEC040_SRV_MEF_001_NF_03()); + + execute(TC_MEC_MEC040_SRV_MEF_001_BR()); + + execute(TC_MEC_MEC040_SRV_MEF_002_OK()); + execute(TC_MEC_MEC040_SRV_MEF_002_BR_01()); + execute(TC_MEC_MEC040_SRV_MEF_002_BR_02()); + + execute(TC_MEC_MEC040_SRV_MEF_003_OK()); + execute(TC_MEC_MEC040_SRV_MEF_003_NF()); + + execute(TC_MEC_MEC040_SRV_MEF_004_OK_01()); + execute(TC_MEC_MEC040_SRV_MEF_004_OK_02()); + execute(TC_MEC_MEC040_SRV_MEF_004_OK_03()); + + execute(TC_MEC_MEC040_SRV_MEF_004_NF()); + execute(TC_MEC_MEC040_SRV_MEF_004_BR_01()); + execute(TC_MEC_MEC040_SRV_MEF_004_BR_02()); + + execute(TC_MEC_MEC040_SRV_MEF_005_OK()); + execute(TC_MEC_MEC040_SRV_MEF_005_NF()); + } + + } + } // End of 'control' statement } // End of module AtsMec_FederationEnablementAPI_TestControl diff --git a/ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_Functions.ttcn b/ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_Functions.ttcn index 92a7a6a..aabbe21 100644 --- a/ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_Functions.ttcn +++ b/ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_Functions.ttcn @@ -1,3 +1,116 @@ module FederationEnablementAPI_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 LibHttp_TypesAndValues all; + import from LibHttp_Functions all; + import from LibHttp_Templates all; + import from LibHttp_JsonTemplates all; + import from LibHttp_TestSystem all; + + // LibMec/FixedAccessInformationServiceAPI + import from FederationEnablementAPI_TypesAndValues all; + import from FederationEnablementAPI_Templates all; + import from FederationEnablementAPI_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_system_info( + out SystemInfo p_system_info + ) 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_FED_API_SUB, + v_headers, + m_http_message_body_json( + m_body_json_fed_system_info( + m_system_info( + PX_FED_SYSTEM_NAME_1, + PX_FED_SYSTEM_PROVIDER_1 + )))))); + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_201_created( + mw_http_message_body_json( + mw_body_json_fed_system_info( + mw_system_info( + PX_FED_SYSTEM_PROVIDER_1, + PX_FED_SYSTEM_NAME_1, + PX_FED_SYSTEM_ID_1 + )))))) -> value v_response { + tc_ac.stop; + + p_system_info := v_response.response.body.json_body.systemInfo; + log("f_create_system_info: INFO: IUT successfully responds to the subscription: ", p_system_info); + } + [] tc_ac.timeout { + log("f_create_system_info: INCONC: Expected message not received"); + } + } // End of 'alt' statement + + } // End of function f_create_system_info + + function f_delete_system_info( + in SystemInfo p_system_info + ) 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_delete( + PICS_ROOT_API & PX_FED_API_SUB & "/" & oct2char(unichar2oct(p_system_info.systemId, "UTF-8")), + 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_system_info: INCONC: Expected message not received"); + } + } // End of 'alt' statement + + } // End of function f_delete_system_info + + function f_create_system_info_list( + out SystemInfoList p_system_info_list + ) runs on HttpComponent { + for (var integer i := 0; i < lengthof(p_system_info_list); i := i + 1) { + f_create_system_info(p_system_info_list[i]); + } + } // End of function f_create_system_info_list + + function f_delete_system_info_list( + in SystemInfoList p_system_info_list + ) runs on HttpComponent { + for (var integer i := 0; i < lengthof(p_system_info_list); i := i + 1) { + f_delete_system_info(p_system_info_list[i]); + } + } // End of function f_delete_system_info_list + } // End of modue FederationEnablementAPI_Functions \ No newline at end of file diff --git a/ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_Pics.ttcn b/ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_Pics.ttcn index a04be3d..d45a081 100644 --- a/ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_Pics.ttcn +++ b/ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_Pics.ttcn @@ -1,3 +1,8 @@ module FederationEnablementAPI_Pics { + /** + * @desc Does the IUT support MEC Federation API? + */ + modulepar boolean PICS_FED_API_SUPPORTED := true; + } // End of module FederationEnablementAPI_Pics \ No newline at end of file diff --git a/ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_Pixits.ttcn b/ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_Pixits.ttcn index ba1c4a9..a13a3bf 100644 --- a/ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_Pixits.ttcn +++ b/ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_Pixits.ttcn @@ -1,3 +1,42 @@ module FederationEnablementAPI_Pixits { + // JSON + import from Json all; + + // LibCommon + import from LibCommon_BasicTypesAndValues all; + + // LibMec/FixedAccessInformationServiceAPI + import from FederationEnablementAPI_TypesAndValues all; + + modulepar Json.String PX_FED_SYSTEM_ID_1 := ""; + + modulepar Json.String PX_FED_SYSTEM_NAME_1 := ""; + + modulepar Json.String PX_FED_SYSTEM_PROVIDER_1 := ""; + + modulepar Json.String PX_FED_SYSTEM_ID_2 := ""; + + modulepar Json.String PX_FED_SYSTEM_NAME_2 := ""; + + modulepar Json.String PX_FED_SYSTEM_PROVIDER_2 := ""; + + modulepar Json.String PX_FED_SYSTEM_ID_3 := ""; + + modulepar Json.String PX_FED_SYSTEM_NAME_3 := ""; + + modulepar Json.String PX_FED_SYSTEM_PROVIDER_3 := ""; + + modulepar Json.String PX_FED_SYSTEM_ID_UNKNOWN := ""; + + modulepar Json.String PX_FED_SYSTEM_NAME_UNKNOWN := ""; + + modulepar Json.String PX_FED_SYSTEM_PROVIDER_UNKNOWN := ""; + + modulepar Json.String PX_FED_ENDPOINT_URI_1 := ""; + + modulepar Json.String PX_FED_ENDPOINT_URI_2 := ""; + + modulepar Json.String PX_FED_ENDPOINT_URI_3 := ""; + } // End of module FederationEnablementAPI_Pixits \ No newline at end of file diff --git a/ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_Templates.ttcn b/ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_Templates.ttcn index 77eebbe..a724d4e 100644 --- a/ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_Templates.ttcn +++ b/ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_Templates.ttcn @@ -1,3 +1,51 @@ module FederationEnablementAPI_Templates { + // JSON + import from Json all; + + // LibCommon + import from LibCommon_BasicTypesAndValues all; + + // LibMec/EdgePlatformApplicationEnablementAPI + import from EdgePlatformApplicationEnablementAPI_TypesAndValues all; + + // LibMec/FixedAccessInformationServiceAPI + import from FederationEnablementAPI_TypesAndValues all; + + template (omit) SystemInfo m_system_info( + in Json.String p_system_name, + in Json.String p_system_provider, + in template (omit) Json.String p_system_id := omit + ) := { + systemId := p_system_id, + systemName := p_system_name, + systemProvider := p_system_provider + } // End of template m_system_info + + template (present) SystemInfo mw_system_info( + template (present) Json.String p_system_name := ?, + template (present) Json.String p_system_provider := ?, + template Json.String p_system_id := * + ) := { + systemId := p_system_id, + systemName := p_system_name, + systemProvider := p_system_provider + } // End of template mw_system_info + + template (omit) SystemInfoUpdate m_system_info_update( + in template (omit) Json.String p_system_name := omit, + in template (omit) EdgePlatformApplicationEnablementAPI_TypesAndValues.EndPointInfo p_end_point := omit + ) := { + systemName := p_system_name, + endPoint := p_end_point + } // End of template m_system_info_update + + template SystemInfoUpdate mw_system_info_update( + template Json.String p_system_name := *, + template EdgePlatformApplicationEnablementAPI_TypesAndValues.EndPointInfo p_end_point := * + ) := { + systemName := p_system_name, + endPoint := p_end_point + } // End of template mw_system_info_update + } // End of module FederationEnablementAPI_Templates \ No newline at end of file diff --git a/ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_TypesAndValues.ttcn b/ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_TypesAndValues.ttcn index 1e7895b..640e6c2 100644 --- a/ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_TypesAndValues.ttcn @@ -24,6 +24,7 @@ module FederationEnablementAPI_TypesAndValues { Json.String systemName, Json.String systemProvider } // End of type SystemInfo + type record of SystemInfo SystemInfoList; /** * @desc information provided by MEC orchestrator as a part of the "Update of MEC system(s) to the federation" @@ -33,7 +34,7 @@ module FederationEnablementAPI_TypesAndValues { */ type record SystemInfoUpdate { Json.String systemName optional, - EdgePlatformApplicationEnablementAPI_TypesAndValues.EndPointInfo endpoint optional + EdgePlatformApplicationEnablementAPI_TypesAndValues.EndPointInfo endPoint optional } // End of type SystemInfoUpdate } with { diff --git a/ttcn/LibMec/FixedAccessInformationServiceAPI/ttcn/FixedAccessInformationServiceAPI_Pics.ttcn b/ttcn/LibMec/FixedAccessInformationServiceAPI/ttcn/FixedAccessInformationServiceAPI_Pics.ttcn index 670fd23..e5c2449 100644 --- a/ttcn/LibMec/FixedAccessInformationServiceAPI/ttcn/FixedAccessInformationServiceAPI_Pics.ttcn +++ b/ttcn/LibMec/FixedAccessInformationServiceAPI/ttcn/FixedAccessInformationServiceAPI_Pics.ttcn @@ -1,5 +1,8 @@ module FixedAccessInformationServiceAPI_Pics { + /** + * @desc Does the IUT support MEC Federation API? + */ modulepar boolean PICS_FAI_API_SUPPORTED := true; } // End of module FixedAccessInformationServiceAPI_Pics diff --git a/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn b/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn index 1752a7d..78bd7c3 100644 --- a/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn +++ b/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn @@ -85,5 +85,11 @@ module LibMec_Pixits { modulepar charstring PX_FAI_SUB_URI := "/fai/v1/optical_network_info"; modulepar charstring PX_UE_ZONAL_TRAF_SUB_URI := "/fai/v1/optical_network_info"; - + + modulepar charstring PX_FED_API_LIST_SYSTEM_INFO := "/fed_enablement/v1/fed_resources/system_info"; + + modulepar charstring PX_FED_API_SUB := "/fed_enablement/v1/fed_resources/system_info"; + + modulepar charstring PX_FED_API_SUB_WRONG := "/fed_enablement/v10/fed_resources/system_info"; // v10 instead of v1 + } // End of module LibMec_Pixits diff --git a/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn b/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn index 7d94b67..c8498ab 100644 --- a/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn +++ b/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn @@ -24,6 +24,10 @@ module LibHttp_JsonMessageBodyTypes { import from FixedAccessInformationServiceAPI_TypesAndValues all; // LibMec/V2XInformationServiceAPI import from V2XInformationServiceAPI_TypesAndValues all; + // LibMec/IoT + import from IoTAPI_TypesAndValues all; + // LibMec/FixedAccessInformationServiceAPI + import from FederationEnablementAPI_TypesAndValues all; /** * This file volontary contains a trivial declaration of the type JsonBody. @@ -65,7 +69,7 @@ module LibHttp_JsonMessageBodyTypes { MtsCapabilityInfo mtsCapabilityInfo, MtsSessionInfo mtsSessionInfo, MtsSessionInfos mtsSessionInfos, - TransportInfoList transportInfoList, + EdgePlatformApplicationEnablementAPI_TypesAndValues.TransportInfoList transportInfoList, TrafficRuleList trafficRuleList, TrafficRule trafficRule, /*AppMobilityServiceInfo appMobilityServiceInfo,*/ @@ -138,7 +142,7 @@ module LibHttp_JsonMessageBodyTypes { MeasurementConfigLinkList measurementConfigLinkList, MeasurementConfig measurementConfig, FaInfo faInfo, - DeviceInfo deviceInfo, + FixedAccessInformationServiceAPI_TypesAndValues.DeviceInfo deviceInfo, CableLineInfo cableLineInfo, PonInfo ponInfo, OnuAlarmSubscription onuAlarmSubscription, @@ -156,7 +160,10 @@ module LibHttp_JsonMessageBodyTypes { ProvChgUuUniNotification provChgUuUniNotification, ProvChgUuMbmsNotification provChgUuMbmsNotification, ProvChgPc5Notification provChgPc5Notification, - // TODO Add here your custom variants + SystemInfo systemInfo, // ETSI GS MEC 040 V3.1.1 Clause 6.2.2 Type: SystemInfo + SystemInfoList systemInfoList, // ETSI GS MEC 040 V3.1.1 Clause 6.2.2 Type: SystemInfo + SystemInfoUpdate systemInfoUpdate, // ETSI GS MEC 040 V3.1.1 Clause 6.2.3 Type: SystemInfoUpdate + // TODO Add here your custom variants universal charstring raw } with { variant "" diff --git a/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn b/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn index 0f1b54b..700b069 100644 --- a/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn +++ b/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn @@ -46,6 +46,12 @@ module LibHttp_JsonTemplates { // LibMec/V2XInformationServiceAPI import from V2XInformationServiceAPI_TypesAndValues all; + // LibMec/IoT + import from IoTAPI_TypesAndValues all; + + // LibMec/FixedAccessInformationServiceAPI + import from FederationEnablementAPI_TypesAndValues all; + template (value) JsonBody m_json_body_raw( in template (value) charstring p_raw ) := { @@ -834,13 +840,13 @@ group ams_api { } // End of template mw_body_json_srv_liveness_info template (value) JsonBody m_body_json_transport_info_list( - in template (value) TransportInfoList p_transportInfoList + in template (value) EdgePlatformApplicationEnablementAPI_TypesAndValues.TransportInfoList p_transportInfoList ) := { transportInfoList := p_transportInfoList } // End of template m_body_json_transport_info_list template (present) JsonBody mw_body_json_transport_info_list( - template (present) TransportInfoList p_transportInfoList := ? + template (present) EdgePlatformApplicationEnablementAPI_TypesAndValues.TransportInfoList p_transportInfoList := ? ) := { transportInfoList := p_transportInfoList } // End of template mw_body_json_transport_info_list @@ -1262,13 +1268,13 @@ group ams_api { } // End of template mw_body_json_fai_fa_info template (value) JsonBody m_body_json_fai_device_info( - in template (value) DeviceInfo p_deviceInfo + in template (value) FixedAccessInformationServiceAPI_TypesAndValues.DeviceInfo p_deviceInfo ) := { deviceInfo := p_deviceInfo } // End of template m_body_json_fai_device_info template (present) JsonBody mw_body_json_fai_device_info( - template (present) DeviceInfo p_deviceInfo := ? + template (present) FixedAccessInformationServiceAPI_TypesAndValues.DeviceInfo p_deviceInfo := ? ) := { deviceInfo := p_deviceInfo } // End of template mw_body_json_fai_device_info @@ -1323,4 +1329,44 @@ group ams_api { } // End of group fai + group federation { + + template (value) JsonBody m_body_json_fed_system_info( + in template (value) SystemInfo p_systemInfo + ) := { + systemInfo := p_systemInfo + } // End of template m_body_json_fed_system_info + + template (present) JsonBody mw_body_json_fed_system_info( + template (present) SystemInfo p_systemInfo := ? + ) := { + systemInfo := p_systemInfo + } // End of template mw_body_json_fed_system_info + + template (value) JsonBody m_body_json_fed_system_info_list( + in template (value) SystemInfoList p_systemInfoList + ) := { + systemInfoList := p_systemInfoList + } // End of template m_body_json_fed_system_info_list + + template (present) JsonBody mw_body_json_fed_system_info_list( + template (present) SystemInfoList p_systemInfoList := ? + ) := { + systemInfoList := p_systemInfoList + } // End of template mw_body_json_fed_system_info_list + + template (value) JsonBody m_body_json_fed_system_info_update( + in template (value) SystemInfoUpdate p_systemInfoUpdate + ) := { + systemInfoUpdate := p_systemInfoUpdate + } // End of template m_body_json_fed_system_info_update + + template (present) JsonBody mw_body_json_fed_system_info_update( + template (present) SystemInfoUpdate p_systemInfoUpdate := ? + ) := { + systemInfoUpdate := p_systemInfoUpdate + } // End of template mw_body_json_fed_system_info_update + + } // End of group federation + } // End of module LibHttp_JsonTemplates -- GitLab From d2b4d9429d79e37d989193fbe636546004630c52 Mon Sep 17 00:00:00 2001 From: garciay Date: Wed, 9 Aug 2023 10:32:30 +0200 Subject: [PATCH 40/99] Implementation od MEC 033/iotdev TPs --- .../module.mk | 2 + .../module.mk | 2 + .../module.mk | 2 + ...Mec_FederationEnablementAPI_TestCases.ttcn | 1 + .../module.mk | 2 + ttcn/AtsMec_IoT/AtsMec_IoTAPI_TestCases.ttcn | 966 ++++++++++++++++++ .../AtsMec_IoT/AtsMec_IoTAPI_TestControl.ttcn | 23 + ttcn/AtsMec_Location/module.mk | 2 + ttcn/AtsMec_Rnis/module.mk | 2 + ttcn/AtsMec_TrafficManagement/module.mk | 2 + ttcn/AtsMec_UEidentity/module.mk | 2 + ttcn/AtsMec_V2XInformationService/module.mk | 2 + ttcn/AtsMec_WlanInformation/module.mk | 2 + ...fecycleAndOperationGrantingAPI_Pixits.ttcn | 16 + ...ycleAndOperationGrantingAPI_Templates.ttcn | 100 ++ .../FederationEnablementAPI_Functions.ttcn | 4 +- ttcn/LibMec/IoTAPI/ttcn/IoTAPI_Functions.ttcn | 122 ++- ttcn/LibMec/IoTAPI/ttcn/IoTAPI_Pics.ttcn | 5 + ttcn/LibMec/IoTAPI/ttcn/IoTAPI_Pixits.ttcn | 43 + ttcn/LibMec/IoTAPI/ttcn/IoTAPI_Templates.ttcn | 87 ++ .../IoTAPI/ttcn/IoTAPI_TypesAndValues.ttcn | 13 +- ttcn/LibMec/ttcn/LibMec_Pixits.ttcn | 4 + .../ttcn/LibHttp_JsonMessageBodyTypes.ttcn | 4 +- .../ttcn/LibHttp_JsonTemplates.ttcn | 28 + 24 files changed, 1428 insertions(+), 8 deletions(-) diff --git a/ttcn/AtsMec_AtsMec_ApplicationPackageLifecycleAndOperationGranting/module.mk b/ttcn/AtsMec_AtsMec_ApplicationPackageLifecycleAndOperationGranting/module.mk index a11413d..9b2aa7c 100644 --- a/ttcn/AtsMec_AtsMec_ApplicationPackageLifecycleAndOperationGranting/module.mk +++ b/ttcn/AtsMec_AtsMec_ApplicationPackageLifecycleAndOperationGranting/module.mk @@ -22,6 +22,8 @@ modules := ../LibCommon \ ../LibMec/WlanInformationAPI \ ../LibMec/FixedAccessInformationServiceAPI \ ../LibMec/ApplicationMobilityServiceAPI \ + ../LibMec/FederationEnablementAPI \ + ../LibMec/IoTAPI \ ../../titan-test-system-framework/ccsrc/Framework \ ../../titan-test-system-framework/ccsrc/loggers \ ../../titan-test-system-framework/ccsrc/Protocols/Http \ diff --git a/ttcn/AtsMec_DeviceApplicationInterface/module.mk b/ttcn/AtsMec_DeviceApplicationInterface/module.mk index d6154fd..a3bfbe0 100644 --- a/ttcn/AtsMec_DeviceApplicationInterface/module.mk +++ b/ttcn/AtsMec_DeviceApplicationInterface/module.mk @@ -22,6 +22,8 @@ modules := ../LibCommon \ ../LibMec/WlanInformationAPI \ ../LibMec/FixedAccessInformationServiceAPI \ ../LibMec/ApplicationMobilityServiceAPI \ + ../LibMec/FederationEnablementAPI \ + ../LibMec/IoTAPI \ ../../titan-test-system-framework/ccsrc/Framework \ ../../titan-test-system-framework/ccsrc/loggers \ ../../titan-test-system-framework/ccsrc/Protocols/Http \ diff --git a/ttcn/AtsMec_EdgePlatformApplicationEnablement/module.mk b/ttcn/AtsMec_EdgePlatformApplicationEnablement/module.mk index e5209bf..ec2ed73 100644 --- a/ttcn/AtsMec_EdgePlatformApplicationEnablement/module.mk +++ b/ttcn/AtsMec_EdgePlatformApplicationEnablement/module.mk @@ -23,6 +23,8 @@ modules := ../LibCommon \ ../LibMec/WlanInformationAPI \ ../LibMec/FixedAccessInformationServiceAPI \ ../LibMec/ApplicationMobilityServiceAPI \ + ../LibMec/FederationEnablementAPI \ + ../LibMec/IoTAPI \ ../../titan-test-system-framework/ccsrc/Framework \ ../../titan-test-system-framework/ccsrc/loggers \ ../../titan-test-system-framework/ccsrc/Protocols/Http \ diff --git a/ttcn/AtsMec_FederationEnablement/AtsMec_FederationEnablementAPI_TestCases.ttcn b/ttcn/AtsMec_FederationEnablement/AtsMec_FederationEnablementAPI_TestCases.ttcn index 75a2179..7030ecd 100644 --- a/ttcn/AtsMec_FederationEnablement/AtsMec_FederationEnablementAPI_TestCases.ttcn +++ b/ttcn/AtsMec_FederationEnablement/AtsMec_FederationEnablementAPI_TestCases.ttcn @@ -1849,6 +1849,7 @@ module AtsMec_FederationEnablementAPI_TestCases { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct error code ***"); + v_system_info_list[1].systemId := omit; f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { diff --git a/ttcn/AtsMec_FixedAccessInformationService/module.mk b/ttcn/AtsMec_FixedAccessInformationService/module.mk index 0c3a7e2..5b3e010 100644 --- a/ttcn/AtsMec_FixedAccessInformationService/module.mk +++ b/ttcn/AtsMec_FixedAccessInformationService/module.mk @@ -22,6 +22,8 @@ modules := ../LibCommon \ ../LibMec/WlanInformationAPI \ ../LibMec/FixedAccessInformationServiceAPI \ ../LibMec/ApplicationMobilityServiceAPI \ + ../LibMec/FederationEnablementAPI \ + ../LibMec/IoTAPI \ ../../titan-test-system-framework/ccsrc/Framework \ ../../titan-test-system-framework/ccsrc/loggers \ ../../titan-test-system-framework/ccsrc/Protocols/Http \ diff --git a/ttcn/AtsMec_IoT/AtsMec_IoTAPI_TestCases.ttcn b/ttcn/AtsMec_IoT/AtsMec_IoTAPI_TestCases.ttcn index f02d4df..854bb5c 100644 --- a/ttcn/AtsMec_IoT/AtsMec_IoTAPI_TestCases.ttcn +++ b/ttcn/AtsMec_IoT/AtsMec_IoTAPI_TestCases.ttcn @@ -10,6 +10,11 @@ module AtsMec_IoTAPI_TestCases { import from LibHttp_JsonTemplates all; import from LibHttp_TestSystem all; + // LibMec/LibMec_ApplicationPackageLifecycleAndOperationGrantingAPI + import from ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues all; + import from ApplicationPackageLifecycleAndOperationGrantingAPI_Templates all; + import from ApplicationPackageLifecycleAndOperationGrantingAPI_Pixits all; + // LibMec/IoTAPI import from IoTAPI_TypesAndValues all; import from IoTAPI_Templates all; @@ -22,4 +27,965 @@ module AtsMec_IoTAPI_TestCases { import from LibMec_Pics all; import from LibMec_Pixits all; + group iotdev { + + group lookup { + + /** + * @desc Check that the IUT responds with the list of registered IoT devices when queried by a Service Consumer + */ + testcase TC_MEC_MEC033_IOTS_IOTDEV_001_OK_01() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var DeviceInfoList v_device_info_list := { + valueof(m_device_info(PX_IOT_DEVICE_ID_1, PX_IOT_DEVICE_AUTH_1, -, PX_IOT_DEVICE_SUPI_1, PX_IOT_DEVICE_IMSI_1)), + valueof(m_device_info(PX_IOT_DEVICE_ID_2, PX_IOT_DEVICE_AUTH_2, -, PX_IOT_DEVICE_SUPI_2, PX_IOT_DEVICE_IMSI_2)), + valueof(m_device_info(PX_IOT_DEVICE_ID_3, PX_IOT_DEVICE_AUTH_3, -, PX_IOT_DEVICE_SUPI_3, PX_IOT_DEVICE_IMSI_3)) + }; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_IOT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FED_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_device_info_list(v_device_info_list); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_IOT_API_LIST_DEVICE_INFO, + 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_fed_device_info_list( + { + mw_device_info( + PX_IOT_DEVICE_ID_1, + PX_IOT_DEVICE_AUTH_1, + -, + PX_IOT_DEVICE_SUPI_1, + PX_IOT_DEVICE_IMSI_1 + ), + mw_device_info( + PX_IOT_DEVICE_ID_2, + PX_IOT_DEVICE_AUTH_2, + -, + PX_IOT_DEVICE_SUPI_2, + PX_IOT_DEVICE_IMSI_2 + ), + mw_device_info( + PX_IOT_DEVICE_ID_3, + PX_IOT_DEVICE_AUTH_3, + -, + PX_IOT_DEVICE_SUPI_3, + PX_IOT_DEVICE_IMSI_3 + ) + } + ))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a DeviceInfoList ***"); + 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_device_info_list(v_device_info_list); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC033_IOTS_IOTDEV_001_OK_01 + + /** + * @desc Check that the IUT responds with the list of registered IoT devices when queried using a filter by a Service Consumer + */ + testcase TC_MEC_MEC033_IOTS_IOTDEV_001_OK_02() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var DeviceInfoList v_device_info_list := { + valueof(m_device_info(PX_IOT_DEVICE_ID_1, PX_IOT_DEVICE_AUTH_1, -, PX_IOT_DEVICE_SUPI_1, PX_IOT_DEVICE_IMSI_1)), + valueof(m_device_info(PX_IOT_DEVICE_ID_2, PX_IOT_DEVICE_AUTH_2, -, PX_IOT_DEVICE_SUPI_2, PX_IOT_DEVICE_IMSI_2)), + valueof(m_device_info(PX_IOT_DEVICE_ID_3, PX_IOT_DEVICE_AUTH_3, -, PX_IOT_DEVICE_SUPI_3, PX_IOT_DEVICE_IMSI_3)) + }; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_IOT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FED_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_device_info_list(v_device_info_list); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_IOT_API_LIST_DEVICE_INFO & "?filter=(eq,enabled,false)", + 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_fed_device_info_list( + { + mw_device_info( + PX_IOT_DEVICE_ID_2, + PX_IOT_DEVICE_AUTH_2, + -, + PX_IOT_DEVICE_SUPI_2, + PX_IOT_DEVICE_IMSI_2 + ) + } + ))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a DeviceInfoList ***"); + 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_device_info_list(v_device_info_list); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC033_IOTS_IOTDEV_001_OK_02 + + /** + * @desc Check that the IUT responds with the list of registered IoT devices when queried by a Service Consumer filtering one field + */ + testcase TC_MEC_MEC033_IOTS_IOTDEV_001_OK_03() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var DeviceInfoList v_device_info_list := { + valueof(m_device_info(PX_IOT_DEVICE_ID_1, PX_IOT_DEVICE_AUTH_1, -, PX_IOT_DEVICE_SUPI_1, PX_IOT_DEVICE_IMSI_1)), + valueof(m_device_info(PX_IOT_DEVICE_ID_2, PX_IOT_DEVICE_AUTH_2, -, PX_IOT_DEVICE_SUPI_2, PX_IOT_DEVICE_IMSI_2)), + valueof(m_device_info(PX_IOT_DEVICE_ID_3, PX_IOT_DEVICE_AUTH_3, -, PX_IOT_DEVICE_SUPI_3, PX_IOT_DEVICE_IMSI_3)) + }; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_IOT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FED_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_device_info_list(v_device_info_list); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_IOT_API_LIST_DEVICE_INFO & "?fields=deviceId", + 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_fed_device_info_list( + { + mw_device_info( + PX_IOT_DEVICE_ID_3, + PX_IOT_DEVICE_AUTH_3, + -, + PX_IOT_DEVICE_SUPI_3, + PX_IOT_DEVICE_IMSI_3 + ) + } + ))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a DeviceInfoList ***"); + 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_device_info_list(v_device_info_list); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC033_IOTS_IOTDEV_001_OK_03 + + /** + * @desc Check that the IUT responds with the list of registered IoT devices when queried by a Service Consumer filtering the number of fields and applying a filter to a specific field + */ + testcase TC_MEC_MEC033_IOTS_IOTDEV_001_OK_04() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var DeviceInfoList v_device_info_list := { + valueof(m_device_info(PX_IOT_DEVICE_ID_1, PX_IOT_DEVICE_AUTH_1, -, PX_IOT_DEVICE_SUPI_1, PX_IOT_DEVICE_IMSI_1)), + valueof(m_device_info(PX_IOT_DEVICE_ID_2, PX_IOT_DEVICE_AUTH_2, -, PX_IOT_DEVICE_SUPI_2, PX_IOT_DEVICE_IMSI_2)), + valueof(m_device_info(PX_IOT_DEVICE_ID_3, PX_IOT_DEVICE_AUTH_3, -, PX_IOT_DEVICE_SUPI_3, PX_IOT_DEVICE_IMSI_3)) + }; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_IOT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FED_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_device_info_list(v_device_info_list); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_IOT_API_LIST_DEVICE_INFO & "?fields=deviceId&filter=(eq,enabled,false)", + 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_fed_device_info_list( + { + mw_device_info( + PX_IOT_DEVICE_ID_2, + PX_IOT_DEVICE_AUTH_2, + -, + PX_IOT_DEVICE_SUPI_2, + PX_IOT_DEVICE_IMSI_2 + ) + } + ))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a DeviceInfoList ***"); + 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_device_info_list(v_device_info_list); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC033_IOTS_IOTDEV_001_OK_04 + + } // End of group lookup + + group subscription { + + /** + * @desc Check that the IUT registers the information of an IoT device when requested by a Service Consumer + */ + testcase TC_MEC_MEC033_IOTS_IOTDEV_002_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_IOT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_IOT_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_IOT_API_SUB, + v_headers, + m_http_message_body_json( + m_body_json_fed_device_info( + m_device_info( + PX_IOT_DEVICE_ID_1, + PX_IOT_DEVICE_AUTH_1, + -, + PX_IOT_DEVICE_SUPI_1, + PX_IOT_DEVICE_IMSI_1 + )))))); + 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_fed_device_info( + mw_device_info( + PX_IOT_DEVICE_ID_1, + PX_IOT_DEVICE_AUTH_1, + false, + PX_IOT_DEVICE_SUPI_1, + PX_IOT_DEVICE_IMSI_1 + )))))) -> 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 create DeviceInfo entry ***"); + 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_device_info(v_response.response.body.json_body.deviceInfo_iot); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC033_IOTS_IOTDEV_002_OK + + /** + * @desc Check that the IUT returns an error when Service Consumer request to register an IoT device with incorrect parameters + */ + testcase TC_MEC_MEC033_IOTS_IOTDEV_002_BR() 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_IOT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_IOT_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_IOT_API_SUB, + v_headers, + m_http_message_body_json( + m_body_json_fed_device_info( + m_device_info( + PX_IOT_DEVICE_ID_1, + PX_IOT_DEVICE_AUTH_1, + false, + PX_IOT_DEVICE_SUPI_1, + PX_IOT_DEVICE_IMSI_1 + )))))); + 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 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_device_info(v_response.response.body.json_body.deviceInfo_iot); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC033_IOTS_IOTDEV_002_BR + + /** + * @desc Check that the IUT returns the IoT device information when requested by Service Consumer specifying the device identifier + */ + testcase TC_MEC_MEC033_IOTS_IOTDEV_003_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var DeviceInfoList v_device_info_list := { + valueof(m_device_info(PX_IOT_DEVICE_ID_1, PX_IOT_DEVICE_AUTH_1, -, PX_IOT_DEVICE_SUPI_1, PX_IOT_DEVICE_IMSI_1)), + valueof(m_device_info(PX_IOT_DEVICE_ID_2, PX_IOT_DEVICE_AUTH_2, -, PX_IOT_DEVICE_SUPI_2, PX_IOT_DEVICE_IMSI_2)), + valueof(m_device_info(PX_IOT_DEVICE_ID_3, PX_IOT_DEVICE_AUTH_3, -, PX_IOT_DEVICE_SUPI_3, PX_IOT_DEVICE_IMSI_3)) + }; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_IOT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_IOT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_device_info_list(v_device_info_list); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_FED_API_SUB & "/" & oct2char(unichar2oct(PX_IOT_DEVICE_ID_2, "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_fed_device_info( + mw_device_info( + PX_IOT_DEVICE_ID_2, + PX_IOT_DEVICE_AUTH_2, + true, // According to Note 3 of 6.2.2-1 table, it cannot be set directly by the service consumer + PX_IOT_DEVICE_SUPI_2, + PX_IOT_DEVICE_IMSI_2 + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct DeviceInfo entry ***"); + 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_device_info_list(v_device_info_list); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC033_IOTS_IOTDEV_003_OK + + /** + * @desc Check that the IUT returns the IoT device information when requested by Service Consumer specifying the device identifier + */ + testcase TC_MEC_MEC033_IOTS_IOTDEV_003_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var DeviceInfoList v_device_info_list := { + valueof(m_device_info(PX_IOT_DEVICE_ID_1, PX_IOT_DEVICE_AUTH_1, -, PX_IOT_DEVICE_SUPI_1, PX_IOT_DEVICE_IMSI_1)), + valueof(m_device_info(PX_IOT_DEVICE_ID_2, PX_IOT_DEVICE_AUTH_2, -, PX_IOT_DEVICE_SUPI_2, PX_IOT_DEVICE_IMSI_2)), + valueof(m_device_info(PX_IOT_DEVICE_ID_3, PX_IOT_DEVICE_AUTH_3, -, PX_IOT_DEVICE_SUPI_3, PX_IOT_DEVICE_IMSI_3)) + }; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_IOT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_IOT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_device_info_list(v_device_info_list); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_FED_API_SUB & "/" & oct2char(unichar2oct(PX_IOT_DEVICE_ID_UNKNOWN, "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 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_device_info_list(v_device_info_list); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC033_IOTS_IOTDEV_003_NF + + } // End of group subscribe + + group patch { + + /** + * @desc Check that the IUT updates the information about a registered IoT device when requested by a Service Consumer + */ + testcase TC_MEC_MEC033_IOTS_IOTDEV_004_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var DeviceInfoList v_device_info_list := { + valueof(m_device_info(PX_IOT_DEVICE_ID_1, PX_IOT_DEVICE_AUTH_1, -, PX_IOT_DEVICE_SUPI_1, PX_IOT_DEVICE_IMSI_1)), + valueof(m_device_info(PX_IOT_DEVICE_ID_2, PX_IOT_DEVICE_AUTH_2, -, PX_IOT_DEVICE_SUPI_2, PX_IOT_DEVICE_IMSI_2)), + valueof(m_device_info(PX_IOT_DEVICE_ID_3, PX_IOT_DEVICE_AUTH_3, -, PX_IOT_DEVICE_SUPI_3, PX_IOT_DEVICE_IMSI_3)) + }; + var TrafficRuleDescriptor v_traffic_rule_descriptor := valueof( + m_traffic_rule_descriptor( + PX_TRAFFIC_RULE_ID, + PX_TRAFFIC_FILTERTYPE, + PX_TRAFFIC_RULE_PRIORITY, + m_traffic_filter( + PX_TRAFFIC_FILTER_SRC_ADDRESS, + PX_TRAFFIC_FILTER_DST_ADDRESS, + PX_TRAFFIC_FILTER_SRC_PORT, + PX_TRAFFIC_FILTER_DST_PORT, + PX_TRAFFIC_FILTER_PROTOCOL + ), + PX_TRAFFIC_RULE_ACTION + )); + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_IOT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_IOT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_device_info_list(v_device_info_list); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_patch( + PICS_ROOT_API & PX_IOT_API_SUB & "/" & oct2char(unichar2oct(PX_IOT_DEVICE_ID_1, "UTF-8")), + v_headers, + m_http_message_body_json( + m_body_json_fed_device_info( + m_device_info( + PX_IOT_DEVICE_ID_1, + PX_IOT_DEVICE_AUTH_1, + -, + PX_IOT_DEVICE_SUPI_1, + PX_IOT_DEVICE_IMSI_1, + PX_REQUESTED_PLTF_ID, + {v_traffic_rule_descriptor} + )))))); + 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_fed_device_info( + mw_device_info( + PX_IOT_DEVICE_ID_1, + PX_IOT_DEVICE_AUTH_1, + -, + PX_IOT_DEVICE_SUPI_1, + PX_IOT_DEVICE_IMSI_1, + PX_REQUESTED_PLTF_ID, + {v_traffic_rule_descriptor} + )))))) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully updates DeviceInfo entry ***"); + 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_device_info_list(v_device_info_list); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC033_IOTS_IOTDEV_004_OK + + /** + * @desc Check that the IUT returns an error when a Service Consumer requests to update a not registered IoT device + */ + testcase TC_MEC_MEC033_IOTS_IOTDEV_004_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var DeviceInfoList v_device_info_list := { + valueof(m_device_info(PX_IOT_DEVICE_ID_1, PX_IOT_DEVICE_AUTH_1, -, PX_IOT_DEVICE_SUPI_1, PX_IOT_DEVICE_IMSI_1)), + valueof(m_device_info(PX_IOT_DEVICE_ID_2, PX_IOT_DEVICE_AUTH_2, -, PX_IOT_DEVICE_SUPI_2, PX_IOT_DEVICE_IMSI_2)), + valueof(m_device_info(PX_IOT_DEVICE_ID_3, PX_IOT_DEVICE_AUTH_3, -, PX_IOT_DEVICE_SUPI_3, PX_IOT_DEVICE_IMSI_3)) + }; + var TrafficRuleDescriptor v_traffic_rule_descriptor := valueof( + m_traffic_rule_descriptor( + PX_TRAFFIC_RULE_ID, + PX_TRAFFIC_FILTERTYPE, + PX_TRAFFIC_RULE_PRIORITY, + m_traffic_filter( + PX_TRAFFIC_FILTER_SRC_ADDRESS, + PX_TRAFFIC_FILTER_DST_ADDRESS, + PX_TRAFFIC_FILTER_SRC_PORT, + PX_TRAFFIC_FILTER_DST_PORT, + PX_TRAFFIC_FILTER_PROTOCOL + ), + PX_TRAFFIC_RULE_ACTION + )); + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_IOT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_IOT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_device_info_list(v_device_info_list); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_patch( + PICS_ROOT_API & PX_IOT_API_SUB & "/" & oct2char(unichar2oct(PX_IOT_DEVICE_ID_UNKNOWN, "UTF-8")), + v_headers, + m_http_message_body_json( + m_body_json_fed_device_info( + m_device_info( + PX_IOT_DEVICE_ID_1, + PX_IOT_DEVICE_AUTH_1, + -, + PX_IOT_DEVICE_SUPI_1, + PX_IOT_DEVICE_IMSI_1, + PX_REQUESTED_PLTF_ID, + {v_traffic_rule_descriptor} + )))))); + 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 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_device_info_list(v_device_info_list); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC033_IOTS_IOTDEV_004_NF + + /** + * @desc Check that the IUT returns an error when Service Consumer request to register an IoT device with incorrect parameters + */ + testcase TC_MEC_MEC033_IOTS_IOTDEV_004_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var DeviceInfoList v_device_info_list := { + valueof(m_device_info(PX_IOT_DEVICE_ID_1, PX_IOT_DEVICE_AUTH_1, -, PX_IOT_DEVICE_SUPI_1, PX_IOT_DEVICE_IMSI_1)), + valueof(m_device_info(PX_IOT_DEVICE_ID_2, PX_IOT_DEVICE_AUTH_2, -, PX_IOT_DEVICE_SUPI_2, PX_IOT_DEVICE_IMSI_2)), + valueof(m_device_info(PX_IOT_DEVICE_ID_3, PX_IOT_DEVICE_AUTH_3, -, PX_IOT_DEVICE_SUPI_3, PX_IOT_DEVICE_IMSI_3)) + }; + var TrafficRuleDescriptor v_traffic_rule_descriptor := valueof( + m_traffic_rule_descriptor( + PX_TRAFFIC_RULE_ID, + PX_TRAFFIC_FILTERTYPE, + PX_TRAFFIC_RULE_PRIORITY, + m_traffic_filter( + PX_TRAFFIC_FILTER_SRC_ADDRESS, + PX_TRAFFIC_FILTER_DST_ADDRESS, + PX_TRAFFIC_FILTER_SRC_PORT, + PX_TRAFFIC_FILTER_DST_PORT, + PX_TRAFFIC_FILTER_PROTOCOL + ), + PX_TRAFFIC_RULE_ACTION + )); + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_IOT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_IOT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_device_info_list(v_device_info_list); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_patch( + PICS_ROOT_API & PX_IOT_API_SUB & "/" & oct2char(unichar2oct(PX_IOT_DEVICE_ID_UNKNOWN, "UTF-8")), + v_headers, + m_http_message_body_json( + m_body_json_fed_device_info( + m_device_info( + PX_IOT_DEVICE_ID_1, + PX_IOT_DEVICE_AUTH_1, + true, // According to Note 3 of 6.2.2-1 table, it cannot be set directly by the service consumer + PX_IOT_DEVICE_SUPI_1, + PX_IOT_DEVICE_IMSI_1, + PX_REQUESTED_PLTF_ID, + {v_traffic_rule_descriptor} + )))))); + 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 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_device_info_list(v_device_info_list); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC033_IOTS_IOTDEV_004_BR + + } // End of group patch + + group delete { + + /** + * @desc Check that the IUT deregisters an IoT device information when requested by a Service Consumer specifying the IoT registered device identifier + */ + testcase TC_MEC_MEC033_IOTS_IOTDEV_005_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var DeviceInfoList v_device_info_list := { + valueof(m_device_info(PX_IOT_DEVICE_ID_1, PX_IOT_DEVICE_AUTH_1, -, PX_IOT_DEVICE_SUPI_1, PX_IOT_DEVICE_IMSI_1)), + valueof(m_device_info(PX_IOT_DEVICE_ID_2, PX_IOT_DEVICE_AUTH_2, -, PX_IOT_DEVICE_SUPI_2, PX_IOT_DEVICE_IMSI_2)), + valueof(m_device_info(PX_IOT_DEVICE_ID_3, PX_IOT_DEVICE_AUTH_3, -, PX_IOT_DEVICE_SUPI_3, PX_IOT_DEVICE_IMSI_3)) + }; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_IOT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_IOT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_device_info_list(v_device_info_list); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & PX_IOT_API_SUB & "/" & oct2char(unichar2oct(PX_IOT_DEVICE_ID_2, "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 204 code ***"); + v_device_info_list[1].deviceId := ""; + 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_device_info_list(v_device_info_list); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC033_IOTS_IOTDEV_005_OK + + /** + * @desc Check that the IUT deregisters an IoT device information when requested by a Service Consumer specifying the IoT registered device identifier + */ + testcase TC_MEC_MEC033_IOTS_IOTDEV_005_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var DeviceInfoList v_device_info_list := { + valueof(m_device_info(PX_IOT_DEVICE_ID_1, PX_IOT_DEVICE_AUTH_1, -, PX_IOT_DEVICE_SUPI_1, PX_IOT_DEVICE_IMSI_1)), + valueof(m_device_info(PX_IOT_DEVICE_ID_2, PX_IOT_DEVICE_AUTH_2, -, PX_IOT_DEVICE_SUPI_2, PX_IOT_DEVICE_IMSI_2)), + valueof(m_device_info(PX_IOT_DEVICE_ID_3, PX_IOT_DEVICE_AUTH_3, -, PX_IOT_DEVICE_SUPI_3, PX_IOT_DEVICE_IMSI_3)) + }; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_IOT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_IOT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_device_info_list(v_device_info_list); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & PX_IOT_API_SUB & "/" & oct2char(unichar2oct(PX_IOT_DEVICE_ID_UNKNOWN, "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 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_device_info_list(v_device_info_list); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC033_IOTS_IOTDEV_005_NF + + } // End of group delete + + } // End of group iotdev + + group iotpltf { + + } // End of group iotpltf + } // End of module AtsMec_IoTAPI_TestCases diff --git a/ttcn/AtsMec_IoT/AtsMec_IoTAPI_TestControl.ttcn b/ttcn/AtsMec_IoT/AtsMec_IoTAPI_TestControl.ttcn index ad2c195..1cec745 100644 --- a/ttcn/AtsMec_IoT/AtsMec_IoTAPI_TestControl.ttcn +++ b/ttcn/AtsMec_IoT/AtsMec_IoTAPI_TestControl.ttcn @@ -11,6 +11,29 @@ module AtsMec_IoTAPI_TestControl { control { + if (PICS_IOT_API_SUPPORTED) { + + if (PICS_MEC_PLAT and PICS_SERVICES) { + execute(TC_MEC_MEC033_IOTS_IOTDEV_001_OK_01()); + execute(TC_MEC_MEC033_IOTS_IOTDEV_001_OK_02()); + execute(TC_MEC_MEC033_IOTS_IOTDEV_001_OK_03()); + execute(TC_MEC_MEC033_IOTS_IOTDEV_001_OK_04()); + + execute(TC_MEC_MEC033_IOTS_IOTDEV_002_OK()); + execute(TC_MEC_MEC033_IOTS_IOTDEV_002_BR()); + + execute(TC_MEC_MEC033_IOTS_IOTDEV_003_OK()); + execute(TC_MEC_MEC033_IOTS_IOTDEV_003_NF()); + + execute(TC_MEC_MEC033_IOTS_IOTDEV_004_OK()); + execute(TC_MEC_MEC033_IOTS_IOTDEV_004_NF()); + execute(TC_MEC_MEC033_IOTS_IOTDEV_004_BR()); + + execute(TC_MEC_MEC033_IOTS_IOTDEV_005_OK()); + execute(TC_MEC_MEC033_IOTS_IOTDEV_005_NF()); + } + } + } // End of 'control' statement } // End of module AtsMec_IoTAPI_TestControl diff --git a/ttcn/AtsMec_Location/module.mk b/ttcn/AtsMec_Location/module.mk index 480db29..a601740 100644 --- a/ttcn/AtsMec_Location/module.mk +++ b/ttcn/AtsMec_Location/module.mk @@ -22,6 +22,8 @@ modules := ../LibCommon \ ../LibMec/WlanInformationAPI \ ../LibMec/FixedAccessInformationServiceAPI \ ../LibMec/ApplicationMobilityServiceAPI \ + ../LibMec/FederationEnablementAPI \ + ../LibMec/IoTAPI \ ../../titan-test-system-framework/ccsrc/Framework \ ../../titan-test-system-framework/ccsrc/loggers \ ../../titan-test-system-framework/ccsrc/Protocols/Http \ diff --git a/ttcn/AtsMec_Rnis/module.mk b/ttcn/AtsMec_Rnis/module.mk index 361f51f..5889511 100644 --- a/ttcn/AtsMec_Rnis/module.mk +++ b/ttcn/AtsMec_Rnis/module.mk @@ -22,6 +22,8 @@ modules := ../LibCommon \ ../LibMec/WlanInformationAPI \ ../LibMec/FixedAccessInformationServiceAPI \ ../LibMec/ApplicationMobilityServiceAPI \ + ../LibMec/FederationEnablementAPI \ + ../LibMec/IoTAPI \ ../../titan-test-system-framework/ccsrc/Framework \ ../../titan-test-system-framework/ccsrc/loggers \ ../../titan-test-system-framework/ccsrc/Protocols/Http \ diff --git a/ttcn/AtsMec_TrafficManagement/module.mk b/ttcn/AtsMec_TrafficManagement/module.mk index 6c17382..b24f6e6 100644 --- a/ttcn/AtsMec_TrafficManagement/module.mk +++ b/ttcn/AtsMec_TrafficManagement/module.mk @@ -23,6 +23,8 @@ modules := ../LibCommon \ ../LibMec/WlanInformationAPI \ ../LibMec/FixedAccessInformationServiceAPI \ ../LibMec/ApplicationMobilityServiceAPI \ + ../LibMec/FederationEnablementAPI \ + ../LibMec/IoTAPI \ ../../titan-test-system-framework/ccsrc/Framework \ ../../titan-test-system-framework/ccsrc/loggers \ ../../titan-test-system-framework/ccsrc/Protocols/Http \ diff --git a/ttcn/AtsMec_UEidentity/module.mk b/ttcn/AtsMec_UEidentity/module.mk index 907dd93..d351d3b 100644 --- a/ttcn/AtsMec_UEidentity/module.mk +++ b/ttcn/AtsMec_UEidentity/module.mk @@ -22,6 +22,8 @@ modules := ../LibCommon \ ../LibMec/WlanInformationAPI \ ../LibMec/FixedAccessInformationServiceAPI \ ../LibMec/ApplicationMobilityServiceAPI \ + ../LibMec/FederationEnablementAPI \ + ../LibMec/IoTAPI \ ../../titan-test-system-framework/ccsrc/Framework \ ../../titan-test-system-framework/ccsrc/loggers \ ../../titan-test-system-framework/ccsrc/Protocols/Http \ diff --git a/ttcn/AtsMec_V2XInformationService/module.mk b/ttcn/AtsMec_V2XInformationService/module.mk index 366db2c..4e4bc43 100644 --- a/ttcn/AtsMec_V2XInformationService/module.mk +++ b/ttcn/AtsMec_V2XInformationService/module.mk @@ -22,6 +22,8 @@ modules := ../LibCommon \ ../LibMec/WlanInformationAPI \ ../LibMec/FixedAccessInformationServiceAPI \ ../LibMec/ApplicationMobilityServiceAPI \ + ../LibMec/FederationEnablementAPI \ + ../LibMec/IoTAPI \ ../../titan-test-system-framework/ccsrc/Framework \ ../../titan-test-system-framework/ccsrc/loggers \ ../../titan-test-system-framework/ccsrc/Protocols/Http \ diff --git a/ttcn/AtsMec_WlanInformation/module.mk b/ttcn/AtsMec_WlanInformation/module.mk index 221a3d4..f543231 100644 --- a/ttcn/AtsMec_WlanInformation/module.mk +++ b/ttcn/AtsMec_WlanInformation/module.mk @@ -22,6 +22,8 @@ modules := ../LibCommon \ ../LibMec/WlanInformationAPI \ ../LibMec/FixedAccessInformationServiceAPI \ ../LibMec/ApplicationMobilityServiceAPI \ + ../LibMec/FederationEnablementAPI \ + ../LibMec/IoTAPI \ ../../titan-test-system-framework/ccsrc/Framework \ ../../titan-test-system-framework/ccsrc/loggers \ ../../titan-test-system-framework/ccsrc/Protocols/Http \ diff --git a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Pixits.ttcn b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Pixits.ttcn index a8d9de7..fbceab5 100644 --- a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Pixits.ttcn +++ b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Pixits.ttcn @@ -22,7 +22,23 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Pixits { modulepar Json.String PX_NON_EXISTANT_GRANTING_ID := "PX_NON_EXISTANT_GRANTING_ID"; + modulepar Json.String PX_TRAFFIC_RULE_ID := "PX_TRAFFIC_RULE_ID"; + modulepar FilterType PX_TRAFFIC_FILTERTYPE := FLOW; + + modulepar Json.Integer PX_TRAFFIC_RULE_PRIORITY := 0; + + modulepar Action PX_TRAFFIC_RULE_ACTION := PASSTHROUGH; + + modulepar Json.String PX_TRAFFIC_FILTER_SRC_ADDRESS := ""; + + modulepar Json.String PX_TRAFFIC_FILTER_DST_ADDRESS := ""; + + modulepar Json.String PX_TRAFFIC_FILTER_SRC_PORT := "12345"; + + modulepar Json.String PX_TRAFFIC_FILTER_DST_PORT := "12346"; + + modulepar Json.String PX_TRAFFIC_FILTER_PROTOCOL := ""; modulepar Json.String PX_APP_PKG_NAME := "APP_PKG_NAME" diff --git a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Templates.ttcn b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Templates.ttcn index fe37d7a..66ac297 100644 --- a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Templates.ttcn +++ b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Templates.ttcn @@ -344,6 +344,106 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Templates { requestedPermissions := p_requestedPermissions } // End of template mw_service_dependency + template (omit) TrafficRuleDescriptor m_traffic_rule_descriptor( + in template (value) Json.String p_trafficRuleId, + in template (value) FilterType p_filterType, + in template (value) Json.Integer p_priority, + in template (value) TrafficFilter p_trafficFilter, + in template (value) Action p_action, + in template (omit) InterfaceDescriptor p_dstInterface := omit + ) := { + trafficRuleId := p_trafficRuleId, + filterType := p_filterType, + priority := p_priority, + trafficFilter := p_trafficFilter, + action_ := p_action, + dstInterface := p_dstInterface + } // End of template m_traffic_rule_descriptor + + template (present) TrafficRuleDescriptor mw_traffic_rule_descriptor( + template (present) Json.String p_trafficRuleId := ?, + template (present) FilterType p_filterType := ?, + template (present) Json.Integer p_priority := ?, + template (present) TrafficFilter p_trafficFilter := ?, + template (present) Action p_action := ?, + template InterfaceDescriptor p_dstInterface := * + ) := { + trafficRuleId := p_trafficRuleId, + filterType := p_filterType, + priority := p_priority, + trafficFilter := p_trafficFilter, + action_ := p_action, + dstInterface := p_dstInterface + } // End of template mw_traffic_rule_descriptor + + template (omit) TrafficFilter m_traffic_filter( + in template (omit) Json.String p_srcAddress := omit, + in template (omit) Json.String p_dstAddress := omit, + in template (omit) Json.String p_srcPort := omit, + in template (omit) Json.String p_dstPort := omit, + in template (omit) Json.String p_protocol := omit, + in template (omit) Json.String p_tag := omit, + in template (omit) Json.String p_uri := omit, + in template (omit) Json.String p_packetLabel := omit, + in template (omit) Json.String p_srcTunnelAddress := omit, + in template (omit) Json.String p_tgtTunnelAddress := omit, + in template (omit) Json.String p_srcTunnelPort := omit, + in template (omit) Json.String p_dstTunnelPort := omit, + in template (omit) Json.Integer p_qCI := omit, + in template (omit) Json.Integer p_dSCP := omit, + in template (omit) Json.Integer p_tC := omit + ) :={ + srcAddress := p_srcAddress, + dstAddress := p_dstAddress, + srcPort := p_srcPort, + dstPort := p_dstPort, + protocol := p_protocol, + tag := p_tag, + uri := p_uri, + packetLabel := p_packetLabel, + srcTunnelAddress := p_srcTunnelAddress, + tgtTunnelAddress := p_tgtTunnelAddress, + srcTunnelPort := p_srcTunnelPort, + dstTunnelPort := p_dstTunnelPort, + qCI := p_qCI, + dSCP := p_dSCP, + tC := p_tC + } // End of template m_traffic_filter + + template TrafficFilter mw_traffic_filter( + template Json.String p_srcAddress := *, + template Json.String p_dstAddress := *, + template Json.String p_srcPort := *, + template Json.String p_dstPort := *, + template Json.String p_protocol := *, + template Json.String p_tag := *, + template Json.String p_uri := *, + template Json.String p_packetLabel := *, + template Json.String p_srcTunnelAddress := *, + template Json.String p_tgtTunnelAddress := *, + template Json.String p_srcTunnelPort := *, + template Json.String p_dstTunnelPort := *, + template Json.Integer p_qCI := *, + template Json.Integer p_dSCP := *, + template Json.Integer p_tC := * + ) :={ + srcAddress := p_srcAddress, + dstAddress := p_dstAddress, + srcPort := p_srcPort, + dstPort := p_dstPort, + protocol := p_protocol, + tag := p_tag, + uri := p_uri, + packetLabel := p_packetLabel, + srcTunnelAddress := p_srcTunnelAddress, + tgtTunnelAddress := p_tgtTunnelAddress, + srcTunnelPort := p_srcTunnelPort, + dstTunnelPort := p_dstTunnelPort, + qCI := p_qCI, + dSCP := p_dSCP, + tC := p_tC + } // End of template mw_traffic_filter + } // End of group mepm_lifcyclemgt group mex_lifcyclemgt { diff --git a/ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_Functions.ttcn b/ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_Functions.ttcn index aabbe21..cdf7464 100644 --- a/ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_Functions.ttcn +++ b/ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_Functions.ttcn @@ -101,7 +101,7 @@ module FederationEnablementAPI_Functions { out SystemInfoList p_system_info_list ) runs on HttpComponent { for (var integer i := 0; i < lengthof(p_system_info_list); i := i + 1) { - f_create_system_info(p_system_info_list[i]); + f_create_system_info(p_system_info_list[i]); } } // End of function f_create_system_info_list @@ -109,7 +109,9 @@ module FederationEnablementAPI_Functions { in SystemInfoList p_system_info_list ) runs on HttpComponent { for (var integer i := 0; i < lengthof(p_system_info_list); i := i + 1) { + if (ispresent(p_system_info_list[i].systemId)) { f_delete_system_info(p_system_info_list[i]); + } } } // End of function f_delete_system_info_list diff --git a/ttcn/LibMec/IoTAPI/ttcn/IoTAPI_Functions.ttcn b/ttcn/LibMec/IoTAPI/ttcn/IoTAPI_Functions.ttcn index 3a5a360..b728f05 100644 --- a/ttcn/LibMec/IoTAPI/ttcn/IoTAPI_Functions.ttcn +++ b/ttcn/LibMec/IoTAPI/ttcn/IoTAPI_Functions.ttcn @@ -1,3 +1,123 @@ module IoTAPI_Functions { -} // End of IoTAPI_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 LibHttp_TypesAndValues all; + import from LibHttp_Functions all; + import from LibHttp_Templates all; + import from LibHttp_JsonTemplates all; + import from LibHttp_TestSystem all; + + // LibMec/FixedAccessInformationServiceAPI + import from IoTAPI_TypesAndValues all; + import from IoTAPI_Templates all; + import from IoTAPI_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_device_info( + out DeviceInfo p_device_info + ) 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_IOT_API_SUB, + v_headers, + m_http_message_body_json( + m_body_json_fed_device_info( + m_device_info( + PX_IOT_DEVICE_ID_1, + PX_IOT_DEVICE_AUTH_1, + false, + PX_IOT_DEVICE_SUPI_1, + PX_IOT_DEVICE_IMSI_1 + )))))); + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_201_created( + mw_http_message_body_json( + mw_body_json_fed_device_info( + mw_device_info( + PX_IOT_DEVICE_ID_1, + PX_IOT_DEVICE_AUTH_1, + false, + PX_IOT_DEVICE_SUPI_1, + PX_IOT_DEVICE_IMSI_1 + )))))) -> value v_response { + tc_ac.stop; + + p_device_info := v_response.response.body.json_body.deviceInfo_iot; + log("f_create_device_info: INFO: IUT successfully responds to the subscription: ", p_device_info); + } + [] tc_ac.timeout { + log("f_create_device_info: INCONC: Expected message not received"); + } + } // End of 'alt' statement + + } // End of function f_create_device_info + + function f_delete_device_info( + in DeviceInfo p_device_info + ) 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_delete( + PICS_ROOT_API & PX_IOT_API_SUB & "/" & oct2char(unichar2oct(p_device_info.deviceId, "UTF-8")), + 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_device_info: INCONC: Expected message not received"); + } + } // End of 'alt' statement + + } // End of function f_delete_device_info + + function f_create_device_info_list( + out DeviceInfoList p_device_info_list + ) runs on HttpComponent { + for (var integer i := 0; i < lengthof(p_device_info_list); i := i + 1) { + f_create_device_info(p_device_info_list[i]); + } + } // End of function f_create_device_info_list + + function f_delete_device_info_list( + in DeviceInfoList p_device_info_list + ) runs on HttpComponent { + for (var integer i := 0; i < lengthof(p_device_info_list); i := i + 1) { + if (p_device_info_list[i].deviceId != "") { + f_delete_device_info(p_device_info_list[i]); + } + } + } // End of function f_delete_device_info_list + +} // End of modue IoTAPI_Functions \ No newline at end of file diff --git a/ttcn/LibMec/IoTAPI/ttcn/IoTAPI_Pics.ttcn b/ttcn/LibMec/IoTAPI/ttcn/IoTAPI_Pics.ttcn index 9d74084..52985e1 100644 --- a/ttcn/LibMec/IoTAPI/ttcn/IoTAPI_Pics.ttcn +++ b/ttcn/LibMec/IoTAPI/ttcn/IoTAPI_Pics.ttcn @@ -1,3 +1,8 @@ module IoTAPI_Pics { + /** + * @desc Does the IUT support MEC IoT API? + */ + modulepar boolean PICS_IOT_API_SUPPORTED := true; + } // End of IoTAPI_Pics diff --git a/ttcn/LibMec/IoTAPI/ttcn/IoTAPI_Pixits.ttcn b/ttcn/LibMec/IoTAPI/ttcn/IoTAPI_Pixits.ttcn index 9a5c93b..cc315ae 100644 --- a/ttcn/LibMec/IoTAPI/ttcn/IoTAPI_Pixits.ttcn +++ b/ttcn/LibMec/IoTAPI/ttcn/IoTAPI_Pixits.ttcn @@ -1,3 +1,46 @@ module IoTAPI_Pixits { + + // JSON + import from Json all; + + // LibCommon + import from LibCommon_BasicTypesAndValues all; + + // LibMec/FixedAccessInformationServiceAPI + import from FederationEnablementAPI_TypesAndValues all; + + modulepar Json.String PX_IOT_DEVICE_ID_1 := ""; + + modulepar Json.String PX_IOT_DEVICE_SUPI_1 := ""; + + modulepar Json.String PX_IOT_DEVICE_IMSI_1 := ""; + + modulepar Json.String PX_IOT_DEVICE_AUTH_1 := ""; + + modulepar Json.String PX_IOT_DEVICE_ID_2 := ""; + + modulepar Json.String PX_IOT_DEVICE_SUPI_2 := ""; + + modulepar Json.String PX_IOT_DEVICE_IMSI_2 := ""; + + modulepar Json.String PX_IOT_DEVICE_AUTH_2 := ""; + + modulepar Json.String PX_IOT_DEVICE_ID_3 := ""; + + modulepar Json.String PX_IOT_DEVICE_SUPI_3 := ""; + + modulepar Json.String PX_IOT_DEVICE_IMSI_3 := ""; + + modulepar Json.String PX_IOT_DEVICE_AUTH_3 := ""; + + modulepar Json.String PX_IOT_DEVICE_ID_UNKNOWN := ""; + + modulepar Json.String PX_IOT_ENDPOINT_URI_1 := ""; + + modulepar Json.String PX_IOT_ENDPOINT_URI_2 := ""; + + modulepar Json.String PX_IOT_ENDPOINT_URI_3 := ""; + + modulepar Json.String PX_REQUESTED_PLTF_ID := ""; } // End of IoTAPI_Pixits diff --git a/ttcn/LibMec/IoTAPI/ttcn/IoTAPI_Templates.ttcn b/ttcn/LibMec/IoTAPI/ttcn/IoTAPI_Templates.ttcn index a27bba0..040323d 100644 --- a/ttcn/LibMec/IoTAPI/ttcn/IoTAPI_Templates.ttcn +++ b/ttcn/LibMec/IoTAPI/ttcn/IoTAPI_Templates.ttcn @@ -1,3 +1,90 @@ module IoTAPI_Templates { + // JSON + import from Json all; + + // LibCommon + import from LibCommon_BasicTypesAndValues all; + + // LibMec/LibMec_ApplicationPackageLifecycleAndOperationGrantingAPI + import from ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues all; + + // LibMec/EdgePlatformApplicationEnablementAPI + import from EdgePlatformApplicationEnablementAPI_TypesAndValues all; + + // LibMec/IoTAPI + import from IoTAPI_TypesAndValues all; + + template (omit) DeviceInfo m_device_info( + in Json.String p_deviceId, + in Json.String p_deviceAuthenticationInfo, + in Json.Bool p_enabled := false, + in template (omit) Json.String p_supi := omit, + in template (omit) Json.String p_imsi := omit, + in template (omit) Json.String p_requestedIotPlatformId := omit, + in template (omit) TrafficRuleDescriptors p_requestedMecTrafficRule := omit, + in template (omit) DeviceMetatData p_deviceMetadata := omit, + in template (omit) Json.String p_gpsi := omit, + in template (omit) Json.String p_pei := omit, + in template (omit) Json.String p_msisdn := omit, + in template (omit) Json.String p_imei := omit, + in template (omit) Json.String p_iccid := omit, + in template (omit) DeviceSpecificMessageFormats p_deviceSpecificMessageFormats := omit, + in template (omit) DownlinkInfo p_downlinkInfo := omit, + in template (omit) Json.String p_clientCertificate := omit + + ) := { + deviceAuthenticationInfo := p_deviceAuthenticationInfo, + deviceMetadata := p_deviceMetadata, + gpsi := p_gpsi, + pei := p_pei, + supi := p_supi, + msisdn := p_msisdn, + imei := p_imei, + imsi := p_imsi, + iccid := p_iccid, + deviceId := p_deviceId, + requestedMecTrafficRule := p_requestedMecTrafficRule, + requestedIotPlatformId := p_requestedIotPlatformId, + deviceSpecificMessageFormats := p_deviceSpecificMessageFormats, + downlinkInfo := p_downlinkInfo, + clientCertificate := p_clientCertificate, + enabled := p_enabled + } // End of template m_device_info + + template (present) DeviceInfo mw_device_info( + template (present) Json.String p_deviceId := ?, + template (present) Json.String p_deviceAuthenticationInfo := ?, + template (present) Json.Bool p_enabled := ?, + template Json.String p_supi := *, + template Json.String p_imsi := *, + template Json.String p_requestedIotPlatformId := *, + template TrafficRuleDescriptors p_requestedMecTrafficRule := *, + template DeviceMetatData p_deviceMetadata := *, + template Json.String p_gpsi := *, + template Json.String p_pei := *, + template Json.String p_msisdn := *, + template Json.String p_imei := *, + template Json.String p_iccid := *, + template DeviceSpecificMessageFormats p_deviceSpecificMessageFormats := *, + template DownlinkInfo p_downlinkInfo := *, + template Json.String p_clientCertificate := * + ) := { + deviceAuthenticationInfo := p_deviceAuthenticationInfo, + deviceMetadata := p_deviceMetadata, + gpsi := p_gpsi, + pei := p_pei, + supi := p_supi, + msisdn := p_msisdn, + imei := p_imei, + imsi := p_imsi, + iccid := p_iccid, + deviceId := p_deviceId, + requestedMecTrafficRule := p_requestedMecTrafficRule, + requestedIotPlatformId := p_requestedIotPlatformId, + deviceSpecificMessageFormats := p_deviceSpecificMessageFormats, + downlinkInfo := p_downlinkInfo, + clientCertificate := p_clientCertificate, + enabled := p_enabled + } // End of template mw_device_info } // End of IoTAPI_Templates diff --git a/ttcn/LibMec/IoTAPI/ttcn/IoTAPI_TypesAndValues.ttcn b/ttcn/LibMec/IoTAPI/ttcn/IoTAPI_TypesAndValues.ttcn index 94f21a9..185df84 100644 --- a/ttcn/LibMec/IoTAPI/ttcn/IoTAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/IoTAPI/ttcn/IoTAPI_TypesAndValues.ttcn @@ -10,10 +10,10 @@ module IoTAPI_TypesAndValues { // LibCommon import from LibCommon_BasicTypesAndValues all; - // MEC-010-1 + // LibMec/LibMec_ApplicationPackageLifecycleAndOperationGrantingAPI import from ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues all; - // MEC-011 + // LibMec/EdgePlatformApplicationEnablementAPI import from EdgePlatformApplicationEnablementAPI_TypesAndValues all; /** @@ -38,7 +38,7 @@ module IoTAPI_TypesAndValues { */ type record DeviceInfo { Json.String deviceAuthenticationInfo, - record of Json.String deviceMetadata optional, + DeviceMetatData deviceMetadata optional, Json.String gpsi optional, Json.String pei optional, Json.String supi optional, @@ -47,7 +47,7 @@ module IoTAPI_TypesAndValues { Json.String imsi optional, Json.String iccid optional, Json.String deviceId, - TrafficRuleDescriptorList requestedMecTrafficRule optional, + TrafficRuleDescriptors requestedMecTrafficRule optional, Json.String requestedIotPlatformId optional, DeviceSpecificMessageFormats deviceSpecificMessageFormats optional, DownlinkInfo downlinkInfo optional, @@ -55,6 +55,10 @@ module IoTAPI_TypesAndValues { Json.Bool enabled } // End of type DeviceInfo + type record of DeviceInfo DeviceInfoList; + + type record of Json.String DeviceMetatData; + /** * @desc * @member eventMsgFormat Event message format configuration @@ -132,7 +136,6 @@ module IoTAPI_TypesAndValues { type record of Json.String UplinkTopics; type record of Json.String DownlinkTopics; - type record of ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.TrafficRuleDescriptor TrafficRuleDescriptorList; type record of EdgePlatformApplicationEnablementAPI_TypesAndValues.TransportInfo TransportInfoList; /** diff --git a/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn b/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn index 78bd7c3..8f29c11 100644 --- a/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn +++ b/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn @@ -92,4 +92,8 @@ module LibMec_Pixits { modulepar charstring PX_FED_API_SUB_WRONG := "/fed_enablement/v10/fed_resources/system_info"; // v10 instead of v1 + modulepar charstring PX_IOT_API_LIST_DEVICE_INFO := "/iots/v1/registered_devices"; + + modulepar charstring PX_IOT_API_SUB := "/iots/v1/registered_devices"; + } // End of module LibMec_Pixits diff --git a/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn b/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn index c8498ab..492d3cd 100644 --- a/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn +++ b/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn @@ -163,7 +163,9 @@ module LibHttp_JsonMessageBodyTypes { SystemInfo systemInfo, // ETSI GS MEC 040 V3.1.1 Clause 6.2.2 Type: SystemInfo SystemInfoList systemInfoList, // ETSI GS MEC 040 V3.1.1 Clause 6.2.2 Type: SystemInfo SystemInfoUpdate systemInfoUpdate, // ETSI GS MEC 040 V3.1.1 Clause 6.2.3 Type: SystemInfoUpdate - // TODO Add here your custom variants + IoTAPI_TypesAndValues.DeviceInfo deviceInfo_iot, // ETSI GS MEC 033 V3.1.1 Clause 6.2.2 Type: DeviceInfo + IoTAPI_TypesAndValues.DeviceInfoList deviceInfoList_iot, // ETSI GS MEC 033 V3.1.1 Clause 6.2.2 Type: DeviceInfo + // TODO Add here your custom variants universal charstring raw } with { variant "" diff --git a/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn b/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn index 700b069..e7e183e 100644 --- a/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn +++ b/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn @@ -1329,6 +1329,34 @@ group ams_api { } // End of group fai + group iot { + + template (value) JsonBody m_body_json_fed_device_info( + in template (value) IoTAPI_TypesAndValues.DeviceInfo p_deviceInfo + ) := { + deviceInfo_iot := p_deviceInfo + } // End of template m_body_json_fed_device_info + + template (present) JsonBody mw_body_json_fed_device_info( + template (present) IoTAPI_TypesAndValues.DeviceInfo p_deviceInfo := ? + ) := { + deviceInfo_iot := p_deviceInfo + } // End of template mw_body_json_fed_device_info + + template (value) JsonBody m_body_json_fed_device_info_list( + in template (value) IoTAPI_TypesAndValues.DeviceInfoList p_deviceInfoList + ) := { + deviceInfoList_iot := p_deviceInfoList + } // End of template m_body_json_fed_device_info_list + + template (present) JsonBody mw_body_json_fed_device_info_list( + template (present) IoTAPI_TypesAndValues.DeviceInfoList p_deviceInfoList := ? + ) := { + deviceInfoList_iot := p_deviceInfoList + } // End of template mw_body_json_fed_device_info_list + + } // End of group iot + group federation { template (value) JsonBody m_body_json_fed_system_info( -- GitLab From a6ace51ee2c5508ba1da432670ff1934ae968dea Mon Sep 17 00:00:00 2001 From: garciay Date: Wed, 9 Aug 2023 15:14:49 +0200 Subject: [PATCH 41/99] Implementation od MEC 033/iotpltf TPs --- ttcn/AtsMec_IoT/AtsMec_IoTAPI_TestCases.ttcn | 2640 +++++++++++------ .../AtsMec_IoT/AtsMec_IoTAPI_TestControl.ttcn | 14 + ttcn/LibMec/IoTAPI/ttcn/IoTAPI_Functions.ttcn | 118 +- ttcn/LibMec/IoTAPI/ttcn/IoTAPI_Pixits.ttcn | 47 +- ttcn/LibMec/IoTAPI/ttcn/IoTAPI_Templates.ttcn | 102 + .../IoTAPI/ttcn/IoTAPI_TypesAndValues.ttcn | 3 +- ttcn/LibMec/ttcn/LibMec_Pixits.ttcn | 4 + .../ttcn/LibHttp_JsonMessageBodyTypes.ttcn | 2 + .../ttcn/LibHttp_JsonTemplates.ttcn | 36 +- 9 files changed, 2078 insertions(+), 888 deletions(-) diff --git a/ttcn/AtsMec_IoT/AtsMec_IoTAPI_TestCases.ttcn b/ttcn/AtsMec_IoT/AtsMec_IoTAPI_TestCases.ttcn index 854bb5c..60301b6 100644 --- a/ttcn/AtsMec_IoT/AtsMec_IoTAPI_TestCases.ttcn +++ b/ttcn/AtsMec_IoT/AtsMec_IoTAPI_TestCases.ttcn @@ -15,6 +15,9 @@ module AtsMec_IoTAPI_TestCases { import from ApplicationPackageLifecycleAndOperationGrantingAPI_Templates all; import from ApplicationPackageLifecycleAndOperationGrantingAPI_Pixits all; + // LibMec/EdgePlatformApplicationEnablementAPI + import from EdgePlatformApplicationEnablementAPI_Templates all; + // LibMec/IoTAPI import from IoTAPI_TypesAndValues all; import from IoTAPI_Templates all; @@ -32,301 +35,293 @@ module AtsMec_IoTAPI_TestCases { group lookup { /** - * @desc Check that the IUT responds with the list of registered IoT devices when queried by a Service Consumer - */ + * @desc Check that the IUT responds with the list of registered IoT devices when queried by a Service Consumer + */ testcase TC_MEC_MEC033_IOTS_IOTDEV_001_OK_01() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var DeviceInfoList v_device_info_list := { - valueof(m_device_info(PX_IOT_DEVICE_ID_1, PX_IOT_DEVICE_AUTH_1, -, PX_IOT_DEVICE_SUPI_1, PX_IOT_DEVICE_IMSI_1)), - valueof(m_device_info(PX_IOT_DEVICE_ID_2, PX_IOT_DEVICE_AUTH_2, -, PX_IOT_DEVICE_SUPI_2, PX_IOT_DEVICE_IMSI_2)), - valueof(m_device_info(PX_IOT_DEVICE_ID_3, PX_IOT_DEVICE_AUTH_3, -, PX_IOT_DEVICE_SUPI_3, PX_IOT_DEVICE_IMSI_3)) - }; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_IOT_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FED_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Test adapter configuration - - // Preamble - f_create_device_info_list(v_device_info_list); - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_get( - PICS_ROOT_API & PX_IOT_API_LIST_DEVICE_INFO, - 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_fed_device_info_list( - { - mw_device_info( - PX_IOT_DEVICE_ID_1, - PX_IOT_DEVICE_AUTH_1, - -, - PX_IOT_DEVICE_SUPI_1, - PX_IOT_DEVICE_IMSI_1 - ), - mw_device_info( - PX_IOT_DEVICE_ID_2, - PX_IOT_DEVICE_AUTH_2, - -, - PX_IOT_DEVICE_SUPI_2, - PX_IOT_DEVICE_IMSI_2 - ), - mw_device_info( - PX_IOT_DEVICE_ID_3, - PX_IOT_DEVICE_AUTH_3, - -, - PX_IOT_DEVICE_SUPI_3, - PX_IOT_DEVICE_IMSI_3 - ) + // Local variables + var Headers v_headers; + var DeviceInfoList v_device_info_list := { + valueof(m_device_info(PX_IOT_DEVICE_ID_1, PX_IOT_DEVICE_AUTH_1, -, PX_IOT_DEVICE_SUPI_1, PX_IOT_DEVICE_IMSI_1)), + valueof(m_device_info(PX_IOT_DEVICE_ID_2, PX_IOT_DEVICE_AUTH_2, -, PX_IOT_DEVICE_SUPI_2, PX_IOT_DEVICE_IMSI_2)), + valueof(m_device_info(PX_IOT_DEVICE_ID_3, PX_IOT_DEVICE_AUTH_3, -, PX_IOT_DEVICE_SUPI_3, PX_IOT_DEVICE_IMSI_3)) + }; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_IOT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_IOT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_device_info_list(v_device_info_list); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_IOT_API_LIST_DEVICE_INFO, + 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_iot_device_info_list( + { + mw_device_info( + PX_IOT_DEVICE_ID_1, + PX_IOT_DEVICE_AUTH_1, + -, + PX_IOT_DEVICE_SUPI_1, + PX_IOT_DEVICE_IMSI_1 + ), + mw_device_info( + PX_IOT_DEVICE_ID_2, + PX_IOT_DEVICE_AUTH_2, + -, + PX_IOT_DEVICE_SUPI_2, + PX_IOT_DEVICE_IMSI_2 + ), + mw_device_info( + PX_IOT_DEVICE_ID_3, + PX_IOT_DEVICE_AUTH_3, + -, + PX_IOT_DEVICE_SUPI_3, + PX_IOT_DEVICE_IMSI_3 + ) } - ))))) { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a DeviceInfoList ***"); - 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_device_info_list(v_device_info_list); - f_cf_01_http_down(); + ))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a DeviceInfoList ***"); + 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_device_info_list(v_device_info_list); + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC033_IOTS_IOTDEV_001_OK_01 /** - * @desc Check that the IUT responds with the list of registered IoT devices when queried using a filter by a Service Consumer - */ + * @desc Check that the IUT responds with the list of registered IoT devices when queried using a filter by a Service Consumer + */ testcase TC_MEC_MEC033_IOTS_IOTDEV_001_OK_02() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var DeviceInfoList v_device_info_list := { - valueof(m_device_info(PX_IOT_DEVICE_ID_1, PX_IOT_DEVICE_AUTH_1, -, PX_IOT_DEVICE_SUPI_1, PX_IOT_DEVICE_IMSI_1)), - valueof(m_device_info(PX_IOT_DEVICE_ID_2, PX_IOT_DEVICE_AUTH_2, -, PX_IOT_DEVICE_SUPI_2, PX_IOT_DEVICE_IMSI_2)), - valueof(m_device_info(PX_IOT_DEVICE_ID_3, PX_IOT_DEVICE_AUTH_3, -, PX_IOT_DEVICE_SUPI_3, PX_IOT_DEVICE_IMSI_3)) - }; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_IOT_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FED_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Test adapter configuration - - // Preamble - f_create_device_info_list(v_device_info_list); - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_get( - PICS_ROOT_API & PX_IOT_API_LIST_DEVICE_INFO & "?filter=(eq,enabled,false)", - 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_fed_device_info_list( - { - mw_device_info( - PX_IOT_DEVICE_ID_2, - PX_IOT_DEVICE_AUTH_2, - -, - PX_IOT_DEVICE_SUPI_2, - PX_IOT_DEVICE_IMSI_2 - ) + // Local variables + var Headers v_headers; + var DeviceInfoList v_device_info_list := { + valueof(m_device_info(PX_IOT_DEVICE_ID_1, PX_IOT_DEVICE_AUTH_1, -, PX_IOT_DEVICE_SUPI_1, PX_IOT_DEVICE_IMSI_1)), + valueof(m_device_info(PX_IOT_DEVICE_ID_2, PX_IOT_DEVICE_AUTH_2, -, PX_IOT_DEVICE_SUPI_2, PX_IOT_DEVICE_IMSI_2)), + valueof(m_device_info(PX_IOT_DEVICE_ID_3, PX_IOT_DEVICE_AUTH_3, -, PX_IOT_DEVICE_SUPI_3, PX_IOT_DEVICE_IMSI_3)) + }; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_IOT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_IOT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_device_info_list(v_device_info_list); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_IOT_API_LIST_DEVICE_INFO & "?filter=(eq,enabled,false)", + 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_iot_device_info_list( + { + mw_device_info( + PX_IOT_DEVICE_ID_2, + PX_IOT_DEVICE_AUTH_2, + -, + PX_IOT_DEVICE_SUPI_2, + PX_IOT_DEVICE_IMSI_2 + ) } - ))))) { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a DeviceInfoList ***"); - 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_device_info_list(v_device_info_list); - f_cf_01_http_down(); + ))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a DeviceInfoList ***"); + 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_device_info_list(v_device_info_list); + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC033_IOTS_IOTDEV_001_OK_02 /** - * @desc Check that the IUT responds with the list of registered IoT devices when queried by a Service Consumer filtering one field - */ + * @desc Check that the IUT responds with the list of registered IoT devices when queried by a Service Consumer filtering one field + */ testcase TC_MEC_MEC033_IOTS_IOTDEV_001_OK_03() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var DeviceInfoList v_device_info_list := { - valueof(m_device_info(PX_IOT_DEVICE_ID_1, PX_IOT_DEVICE_AUTH_1, -, PX_IOT_DEVICE_SUPI_1, PX_IOT_DEVICE_IMSI_1)), - valueof(m_device_info(PX_IOT_DEVICE_ID_2, PX_IOT_DEVICE_AUTH_2, -, PX_IOT_DEVICE_SUPI_2, PX_IOT_DEVICE_IMSI_2)), - valueof(m_device_info(PX_IOT_DEVICE_ID_3, PX_IOT_DEVICE_AUTH_3, -, PX_IOT_DEVICE_SUPI_3, PX_IOT_DEVICE_IMSI_3)) - }; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_IOT_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FED_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Test adapter configuration - - // Preamble - f_create_device_info_list(v_device_info_list); - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_get( - PICS_ROOT_API & PX_IOT_API_LIST_DEVICE_INFO & "?fields=deviceId", - 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_fed_device_info_list( - { - mw_device_info( - PX_IOT_DEVICE_ID_3, - PX_IOT_DEVICE_AUTH_3, - -, - PX_IOT_DEVICE_SUPI_3, - PX_IOT_DEVICE_IMSI_3 - ) - } - ))))) { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a DeviceInfoList ***"); - 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_device_info_list(v_device_info_list); - f_cf_01_http_down(); + // Local variables + var Headers v_headers; + var DeviceInfoList v_device_info_list := { + valueof(m_device_info(PX_IOT_DEVICE_ID_1, PX_IOT_DEVICE_AUTH_1, -, PX_IOT_DEVICE_SUPI_1, PX_IOT_DEVICE_IMSI_1)), + valueof(m_device_info(PX_IOT_DEVICE_ID_2, PX_IOT_DEVICE_AUTH_2, -, PX_IOT_DEVICE_SUPI_2, PX_IOT_DEVICE_IMSI_2)), + valueof(m_device_info(PX_IOT_DEVICE_ID_3, PX_IOT_DEVICE_AUTH_3, -, PX_IOT_DEVICE_SUPI_3, PX_IOT_DEVICE_IMSI_3)) + }; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_IOT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_IOT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_device_info_list(v_device_info_list); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_IOT_API_LIST_DEVICE_INFO & "?fields=deviceId", + 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_iot_device_info_list( + { + mw_device_info( + PX_IOT_DEVICE_ID_3, + PX_IOT_DEVICE_AUTH_3, + -, + PX_IOT_DEVICE_SUPI_3, + PX_IOT_DEVICE_IMSI_3 + ) + } + ))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a DeviceInfoList ***"); + 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_device_info_list(v_device_info_list); + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC033_IOTS_IOTDEV_001_OK_03 /** - * @desc Check that the IUT responds with the list of registered IoT devices when queried by a Service Consumer filtering the number of fields and applying a filter to a specific field - */ + * @desc Check that the IUT responds with the list of registered IoT devices when queried by a Service Consumer filtering the number of fields and applying a filter to a specific field + */ testcase TC_MEC_MEC033_IOTS_IOTDEV_001_OK_04() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var DeviceInfoList v_device_info_list := { - valueof(m_device_info(PX_IOT_DEVICE_ID_1, PX_IOT_DEVICE_AUTH_1, -, PX_IOT_DEVICE_SUPI_1, PX_IOT_DEVICE_IMSI_1)), - valueof(m_device_info(PX_IOT_DEVICE_ID_2, PX_IOT_DEVICE_AUTH_2, -, PX_IOT_DEVICE_SUPI_2, PX_IOT_DEVICE_IMSI_2)), - valueof(m_device_info(PX_IOT_DEVICE_ID_3, PX_IOT_DEVICE_AUTH_3, -, PX_IOT_DEVICE_SUPI_3, PX_IOT_DEVICE_IMSI_3)) - }; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_IOT_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FED_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Test adapter configuration - - // Preamble - f_create_device_info_list(v_device_info_list); - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_get( - PICS_ROOT_API & PX_IOT_API_LIST_DEVICE_INFO & "?fields=deviceId&filter=(eq,enabled,false)", - 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_fed_device_info_list( - { - mw_device_info( - PX_IOT_DEVICE_ID_2, - PX_IOT_DEVICE_AUTH_2, - -, - PX_IOT_DEVICE_SUPI_2, - PX_IOT_DEVICE_IMSI_2 - ) + // Local variables + var Headers v_headers; + var DeviceInfoList v_device_info_list := { + valueof(m_device_info(PX_IOT_DEVICE_ID_1, PX_IOT_DEVICE_AUTH_1, -, PX_IOT_DEVICE_SUPI_1, PX_IOT_DEVICE_IMSI_1)), + valueof(m_device_info(PX_IOT_DEVICE_ID_2, PX_IOT_DEVICE_AUTH_2, -, PX_IOT_DEVICE_SUPI_2, PX_IOT_DEVICE_IMSI_2)), + valueof(m_device_info(PX_IOT_DEVICE_ID_3, PX_IOT_DEVICE_AUTH_3, -, PX_IOT_DEVICE_SUPI_3, PX_IOT_DEVICE_IMSI_3)) + }; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_IOT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_IOT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_device_info_list(v_device_info_list); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_IOT_API_LIST_DEVICE_INFO & "?fields=deviceId&filter=(eq,enabled,false)", + 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_iot_device_info_list( + { + mw_device_info( + PX_IOT_DEVICE_ID_2, + PX_IOT_DEVICE_AUTH_2, + -, + PX_IOT_DEVICE_SUPI_2, + PX_IOT_DEVICE_IMSI_2 + ) } - ))))) { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a DeviceInfoList ***"); - 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_device_info_list(v_device_info_list); - f_cf_01_http_down(); + ))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a DeviceInfoList ***"); + 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_device_info_list(v_device_info_list); + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC033_IOTS_IOTDEV_001_OK_04 } // End of group lookup @@ -334,266 +329,260 @@ module AtsMec_IoTAPI_TestCases { group subscription { /** - * @desc Check that the IUT registers the information of an IoT device when requested by a Service Consumer - */ + * @desc Check that the IUT registers the information of an IoT device when requested by a Service Consumer + */ testcase TC_MEC_MEC033_IOTS_IOTDEV_002_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_IOT_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_IOT_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_IOT_API_SUB, - v_headers, - m_http_message_body_json( - m_body_json_fed_device_info( - m_device_info( - PX_IOT_DEVICE_ID_1, - PX_IOT_DEVICE_AUTH_1, - -, - PX_IOT_DEVICE_SUPI_1, - PX_IOT_DEVICE_IMSI_1 - )))))); - 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_fed_device_info( - mw_device_info( - PX_IOT_DEVICE_ID_1, - PX_IOT_DEVICE_AUTH_1, - false, - PX_IOT_DEVICE_SUPI_1, - PX_IOT_DEVICE_IMSI_1 - )))))) -> 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 create DeviceInfo entry ***"); - f_selfOrClientSyncAndVerdict(c_tbDone, e_success); - } - } - [] tc_ac.timeout { - log("*** " & testcasename() & ": INCONC: Expected message not received ***"); - f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_IOT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_IOT_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_IOT_API_SUB, + v_headers, + m_http_message_body_json( + m_body_json_iot_device_info( + m_device_info( + PX_IOT_DEVICE_ID_1, + PX_IOT_DEVICE_AUTH_1, + -, + PX_IOT_DEVICE_SUPI_1, + PX_IOT_DEVICE_IMSI_1 + )))))); + 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_iot_device_info( + mw_device_info( + PX_IOT_DEVICE_ID_1, + PX_IOT_DEVICE_AUTH_1, + false, + PX_IOT_DEVICE_SUPI_1, + PX_IOT_DEVICE_IMSI_1 + )))))) -> 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 create DeviceInfo entry ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } - } // End of 'alt' statement - - // Postamble - f_delete_device_info(v_response.response.body.json_body.deviceInfo_iot); - f_cf_01_http_down(); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_delete_device_info(v_response.response.body.json_body.deviceInfo_iot); + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC033_IOTS_IOTDEV_002_OK /** - * @desc Check that the IUT returns an error when Service Consumer request to register an IoT device with incorrect parameters - */ + * @desc Check that the IUT returns an error when Service Consumer request to register an IoT device with incorrect parameters + */ testcase TC_MEC_MEC033_IOTS_IOTDEV_002_BR() 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_IOT_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_IOT_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_IOT_API_SUB, - v_headers, - m_http_message_body_json( - m_body_json_fed_device_info( - m_device_info( - PX_IOT_DEVICE_ID_1, - PX_IOT_DEVICE_AUTH_1, - false, - PX_IOT_DEVICE_SUPI_1, - PX_IOT_DEVICE_IMSI_1 - )))))); - 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 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_device_info(v_response.response.body.json_body.deviceInfo_iot); - f_cf_01_http_down(); + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_IOT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_IOT_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_IOT_API_SUB, + v_headers, + m_http_message_body_json( + m_body_json_iot_device_info( + m_device_info( + PX_IOT_DEVICE_ID_1, + PX_IOT_DEVICE_AUTH_1, + false, + PX_IOT_DEVICE_SUPI_1, + PX_IOT_DEVICE_IMSI_1 + )))))); + 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 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_MEC033_IOTS_IOTDEV_002_BR /** - * @desc Check that the IUT returns the IoT device information when requested by Service Consumer specifying the device identifier - */ + * @desc Check that the IUT returns the IoT device information when requested by Service Consumer specifying the device identifier + */ testcase TC_MEC_MEC033_IOTS_IOTDEV_003_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var DeviceInfoList v_device_info_list := { - valueof(m_device_info(PX_IOT_DEVICE_ID_1, PX_IOT_DEVICE_AUTH_1, -, PX_IOT_DEVICE_SUPI_1, PX_IOT_DEVICE_IMSI_1)), - valueof(m_device_info(PX_IOT_DEVICE_ID_2, PX_IOT_DEVICE_AUTH_2, -, PX_IOT_DEVICE_SUPI_2, PX_IOT_DEVICE_IMSI_2)), - valueof(m_device_info(PX_IOT_DEVICE_ID_3, PX_IOT_DEVICE_AUTH_3, -, PX_IOT_DEVICE_SUPI_3, PX_IOT_DEVICE_IMSI_3)) - }; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_IOT_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_IOT_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Test adapter configuration - - // Preamble - f_create_device_info_list(v_device_info_list); - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_get( - PICS_ROOT_API & PX_FED_API_SUB & "/" & oct2char(unichar2oct(PX_IOT_DEVICE_ID_2, "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_fed_device_info( - mw_device_info( - PX_IOT_DEVICE_ID_2, - PX_IOT_DEVICE_AUTH_2, - true, // According to Note 3 of 6.2.2-1 table, it cannot be set directly by the service consumer - PX_IOT_DEVICE_SUPI_2, - PX_IOT_DEVICE_IMSI_2 - )))))) { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct DeviceInfo entry ***"); - 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_device_info_list(v_device_info_list); - f_cf_01_http_down(); + // Local variables + var Headers v_headers; + var DeviceInfoList v_device_info_list := { + valueof(m_device_info(PX_IOT_DEVICE_ID_1, PX_IOT_DEVICE_AUTH_1, -, PX_IOT_DEVICE_SUPI_1, PX_IOT_DEVICE_IMSI_1)), + valueof(m_device_info(PX_IOT_DEVICE_ID_2, PX_IOT_DEVICE_AUTH_2, -, PX_IOT_DEVICE_SUPI_2, PX_IOT_DEVICE_IMSI_2)), + valueof(m_device_info(PX_IOT_DEVICE_ID_3, PX_IOT_DEVICE_AUTH_3, -, PX_IOT_DEVICE_SUPI_3, PX_IOT_DEVICE_IMSI_3)) + }; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_IOT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_IOT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_device_info_list(v_device_info_list); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_FED_API_SUB & "/" & oct2char(unichar2oct(PX_IOT_DEVICE_ID_2, "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_iot_device_info( + mw_device_info( + PX_IOT_DEVICE_ID_2, + PX_IOT_DEVICE_AUTH_2, + true, // According to Note 3 of 6.2.2-1 table, it cannot be set directly by the service consumer + PX_IOT_DEVICE_SUPI_2, + PX_IOT_DEVICE_IMSI_2 + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct DeviceInfo entry ***"); + 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_device_info_list(v_device_info_list); + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC033_IOTS_IOTDEV_003_OK /** - * @desc Check that the IUT returns the IoT device information when requested by Service Consumer specifying the device identifier - */ + * @desc Check that the IUT returns the IoT device information when requested by Service Consumer specifying the device identifier + */ testcase TC_MEC_MEC033_IOTS_IOTDEV_003_NF() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var DeviceInfoList v_device_info_list := { - valueof(m_device_info(PX_IOT_DEVICE_ID_1, PX_IOT_DEVICE_AUTH_1, -, PX_IOT_DEVICE_SUPI_1, PX_IOT_DEVICE_IMSI_1)), - valueof(m_device_info(PX_IOT_DEVICE_ID_2, PX_IOT_DEVICE_AUTH_2, -, PX_IOT_DEVICE_SUPI_2, PX_IOT_DEVICE_IMSI_2)), - valueof(m_device_info(PX_IOT_DEVICE_ID_3, PX_IOT_DEVICE_AUTH_3, -, PX_IOT_DEVICE_SUPI_3, PX_IOT_DEVICE_IMSI_3)) - }; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_IOT_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_IOT_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Test adapter configuration - - // Preamble - f_create_device_info_list(v_device_info_list); - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_get( - PICS_ROOT_API & PX_FED_API_SUB & "/" & oct2char(unichar2oct(PX_IOT_DEVICE_ID_UNKNOWN, "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 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_device_info_list(v_device_info_list); - f_cf_01_http_down(); + // Local variables + var Headers v_headers; + var DeviceInfoList v_device_info_list := { + valueof(m_device_info(PX_IOT_DEVICE_ID_1, PX_IOT_DEVICE_AUTH_1, -, PX_IOT_DEVICE_SUPI_1, PX_IOT_DEVICE_IMSI_1)), + valueof(m_device_info(PX_IOT_DEVICE_ID_2, PX_IOT_DEVICE_AUTH_2, -, PX_IOT_DEVICE_SUPI_2, PX_IOT_DEVICE_IMSI_2)), + valueof(m_device_info(PX_IOT_DEVICE_ID_3, PX_IOT_DEVICE_AUTH_3, -, PX_IOT_DEVICE_SUPI_3, PX_IOT_DEVICE_IMSI_3)) + }; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_IOT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_IOT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_device_info_list(v_device_info_list); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_FED_API_SUB & "/" & oct2char(unichar2oct(PX_IOT_DEVICE_ID_UNKNOWN, "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 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_device_info_list(v_device_info_list); + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC033_IOTS_IOTDEV_003_NF } // End of group subscribe @@ -601,262 +590,260 @@ module AtsMec_IoTAPI_TestCases { group patch { /** - * @desc Check that the IUT updates the information about a registered IoT device when requested by a Service Consumer - */ + * @desc Check that the IUT updates the information about a registered IoT device when requested by a Service Consumer + */ testcase TC_MEC_MEC033_IOTS_IOTDEV_004_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - var DeviceInfoList v_device_info_list := { - valueof(m_device_info(PX_IOT_DEVICE_ID_1, PX_IOT_DEVICE_AUTH_1, -, PX_IOT_DEVICE_SUPI_1, PX_IOT_DEVICE_IMSI_1)), - valueof(m_device_info(PX_IOT_DEVICE_ID_2, PX_IOT_DEVICE_AUTH_2, -, PX_IOT_DEVICE_SUPI_2, PX_IOT_DEVICE_IMSI_2)), - valueof(m_device_info(PX_IOT_DEVICE_ID_3, PX_IOT_DEVICE_AUTH_3, -, PX_IOT_DEVICE_SUPI_3, PX_IOT_DEVICE_IMSI_3)) - }; - var TrafficRuleDescriptor v_traffic_rule_descriptor := valueof( - m_traffic_rule_descriptor( - PX_TRAFFIC_RULE_ID, - PX_TRAFFIC_FILTERTYPE, - PX_TRAFFIC_RULE_PRIORITY, - m_traffic_filter( - PX_TRAFFIC_FILTER_SRC_ADDRESS, - PX_TRAFFIC_FILTER_DST_ADDRESS, - PX_TRAFFIC_FILTER_SRC_PORT, - PX_TRAFFIC_FILTER_DST_PORT, - PX_TRAFFIC_FILTER_PROTOCOL - ), - PX_TRAFFIC_RULE_ACTION - )); - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_IOT_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_IOT_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Test adapter configuration - - // Preamble - f_create_device_info_list(v_device_info_list); - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_patch( + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var DeviceInfoList v_device_info_list := { + valueof(m_device_info(PX_IOT_DEVICE_ID_1, PX_IOT_DEVICE_AUTH_1, -, PX_IOT_DEVICE_SUPI_1, PX_IOT_DEVICE_IMSI_1)), + valueof(m_device_info(PX_IOT_DEVICE_ID_2, PX_IOT_DEVICE_AUTH_2, -, PX_IOT_DEVICE_SUPI_2, PX_IOT_DEVICE_IMSI_2)), + valueof(m_device_info(PX_IOT_DEVICE_ID_3, PX_IOT_DEVICE_AUTH_3, -, PX_IOT_DEVICE_SUPI_3, PX_IOT_DEVICE_IMSI_3)) + }; + var TrafficRuleDescriptor v_traffic_rule_descriptor := valueof( + m_traffic_rule_descriptor( + PX_TRAFFIC_RULE_ID, + PX_TRAFFIC_FILTERTYPE, + PX_TRAFFIC_RULE_PRIORITY, + m_traffic_filter( + PX_TRAFFIC_FILTER_SRC_ADDRESS, + PX_TRAFFIC_FILTER_DST_ADDRESS, + PX_TRAFFIC_FILTER_SRC_PORT, + PX_TRAFFIC_FILTER_DST_PORT, + PX_TRAFFIC_FILTER_PROTOCOL + ), + PX_TRAFFIC_RULE_ACTION + )); + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_IOT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_IOT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_device_info_list(v_device_info_list); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_patch( PICS_ROOT_API & PX_IOT_API_SUB & "/" & oct2char(unichar2oct(PX_IOT_DEVICE_ID_1, "UTF-8")), v_headers, m_http_message_body_json( - m_body_json_fed_device_info( - m_device_info( - PX_IOT_DEVICE_ID_1, - PX_IOT_DEVICE_AUTH_1, - -, - PX_IOT_DEVICE_SUPI_1, - PX_IOT_DEVICE_IMSI_1, - PX_REQUESTED_PLTF_ID, - {v_traffic_rule_descriptor} - )))))); - 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_fed_device_info( - mw_device_info( - PX_IOT_DEVICE_ID_1, - PX_IOT_DEVICE_AUTH_1, - -, - PX_IOT_DEVICE_SUPI_1, - PX_IOT_DEVICE_IMSI_1, - PX_REQUESTED_PLTF_ID, - {v_traffic_rule_descriptor} - )))))) -> value v_response { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully updates DeviceInfo entry ***"); - 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_device_info_list(v_device_info_list); - f_cf_01_http_down(); + m_body_json_iot_device_info( + m_device_info( + PX_IOT_DEVICE_ID_1, + PX_IOT_DEVICE_AUTH_1, + -, + PX_IOT_DEVICE_SUPI_1, + PX_IOT_DEVICE_IMSI_1, + PX_REQUESTED_PLTF_ID, + {v_traffic_rule_descriptor} + )))))); + 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_iot_device_info( + mw_device_info( + PX_IOT_DEVICE_ID_1, + PX_IOT_DEVICE_AUTH_1, + -, + PX_IOT_DEVICE_SUPI_1, + PX_IOT_DEVICE_IMSI_1, + PX_REQUESTED_PLTF_ID, + {v_traffic_rule_descriptor} + )))))) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully updates DeviceInfo entry ***"); + 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_device_info_list(v_device_info_list); + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC033_IOTS_IOTDEV_004_OK /** - * @desc Check that the IUT returns an error when a Service Consumer requests to update a not registered IoT device - */ + * @desc Check that the IUT returns an error when a Service Consumer requests to update a not registered IoT device + */ testcase TC_MEC_MEC033_IOTS_IOTDEV_004_NF() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - var DeviceInfoList v_device_info_list := { - valueof(m_device_info(PX_IOT_DEVICE_ID_1, PX_IOT_DEVICE_AUTH_1, -, PX_IOT_DEVICE_SUPI_1, PX_IOT_DEVICE_IMSI_1)), - valueof(m_device_info(PX_IOT_DEVICE_ID_2, PX_IOT_DEVICE_AUTH_2, -, PX_IOT_DEVICE_SUPI_2, PX_IOT_DEVICE_IMSI_2)), - valueof(m_device_info(PX_IOT_DEVICE_ID_3, PX_IOT_DEVICE_AUTH_3, -, PX_IOT_DEVICE_SUPI_3, PX_IOT_DEVICE_IMSI_3)) - }; - var TrafficRuleDescriptor v_traffic_rule_descriptor := valueof( - m_traffic_rule_descriptor( - PX_TRAFFIC_RULE_ID, - PX_TRAFFIC_FILTERTYPE, - PX_TRAFFIC_RULE_PRIORITY, - m_traffic_filter( - PX_TRAFFIC_FILTER_SRC_ADDRESS, - PX_TRAFFIC_FILTER_DST_ADDRESS, - PX_TRAFFIC_FILTER_SRC_PORT, - PX_TRAFFIC_FILTER_DST_PORT, - PX_TRAFFIC_FILTER_PROTOCOL - ), - PX_TRAFFIC_RULE_ACTION - )); - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_IOT_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_IOT_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Test adapter configuration - - // Preamble - f_create_device_info_list(v_device_info_list); - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_patch( - PICS_ROOT_API & PX_IOT_API_SUB & "/" & oct2char(unichar2oct(PX_IOT_DEVICE_ID_UNKNOWN, "UTF-8")), - v_headers, - m_http_message_body_json( - m_body_json_fed_device_info( - m_device_info( - PX_IOT_DEVICE_ID_1, - PX_IOT_DEVICE_AUTH_1, - -, - PX_IOT_DEVICE_SUPI_1, - PX_IOT_DEVICE_IMSI_1, - PX_REQUESTED_PLTF_ID, - {v_traffic_rule_descriptor} - )))))); - 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 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_device_info_list(v_device_info_list); - f_cf_01_http_down(); + // Local variables + var Headers v_headers; + var DeviceInfoList v_device_info_list := { + valueof(m_device_info(PX_IOT_DEVICE_ID_1, PX_IOT_DEVICE_AUTH_1, -, PX_IOT_DEVICE_SUPI_1, PX_IOT_DEVICE_IMSI_1)), + valueof(m_device_info(PX_IOT_DEVICE_ID_2, PX_IOT_DEVICE_AUTH_2, -, PX_IOT_DEVICE_SUPI_2, PX_IOT_DEVICE_IMSI_2)), + valueof(m_device_info(PX_IOT_DEVICE_ID_3, PX_IOT_DEVICE_AUTH_3, -, PX_IOT_DEVICE_SUPI_3, PX_IOT_DEVICE_IMSI_3)) + }; + var TrafficRuleDescriptor v_traffic_rule_descriptor := valueof( + m_traffic_rule_descriptor( + PX_TRAFFIC_RULE_ID, + PX_TRAFFIC_FILTERTYPE, + PX_TRAFFIC_RULE_PRIORITY, + m_traffic_filter( + PX_TRAFFIC_FILTER_SRC_ADDRESS, + PX_TRAFFIC_FILTER_DST_ADDRESS, + PX_TRAFFIC_FILTER_SRC_PORT, + PX_TRAFFIC_FILTER_DST_PORT, + PX_TRAFFIC_FILTER_PROTOCOL + ), + PX_TRAFFIC_RULE_ACTION + )); + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_IOT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_IOT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_device_info_list(v_device_info_list); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_patch( + PICS_ROOT_API & PX_IOT_API_SUB & "/" & oct2char(unichar2oct(PX_IOT_DEVICE_ID_UNKNOWN, "UTF-8")), + v_headers, + m_http_message_body_json( + m_body_json_iot_device_info( + m_device_info( + PX_IOT_DEVICE_ID_1, + PX_IOT_DEVICE_AUTH_1, + -, + PX_IOT_DEVICE_SUPI_1, + PX_IOT_DEVICE_IMSI_1, + PX_REQUESTED_PLTF_ID, + {v_traffic_rule_descriptor} + )))))); + 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_device_info_list(v_device_info_list); + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC033_IOTS_IOTDEV_004_NF /** - * @desc Check that the IUT returns an error when Service Consumer request to register an IoT device with incorrect parameters - */ + * @desc Check that the IUT returns an error when Service Consumer request to register an IoT device with incorrect parameters + */ testcase TC_MEC_MEC033_IOTS_IOTDEV_004_BR() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - var DeviceInfoList v_device_info_list := { - valueof(m_device_info(PX_IOT_DEVICE_ID_1, PX_IOT_DEVICE_AUTH_1, -, PX_IOT_DEVICE_SUPI_1, PX_IOT_DEVICE_IMSI_1)), - valueof(m_device_info(PX_IOT_DEVICE_ID_2, PX_IOT_DEVICE_AUTH_2, -, PX_IOT_DEVICE_SUPI_2, PX_IOT_DEVICE_IMSI_2)), - valueof(m_device_info(PX_IOT_DEVICE_ID_3, PX_IOT_DEVICE_AUTH_3, -, PX_IOT_DEVICE_SUPI_3, PX_IOT_DEVICE_IMSI_3)) - }; - var TrafficRuleDescriptor v_traffic_rule_descriptor := valueof( - m_traffic_rule_descriptor( - PX_TRAFFIC_RULE_ID, - PX_TRAFFIC_FILTERTYPE, - PX_TRAFFIC_RULE_PRIORITY, - m_traffic_filter( - PX_TRAFFIC_FILTER_SRC_ADDRESS, - PX_TRAFFIC_FILTER_DST_ADDRESS, - PX_TRAFFIC_FILTER_SRC_PORT, - PX_TRAFFIC_FILTER_DST_PORT, - PX_TRAFFIC_FILTER_PROTOCOL - ), - PX_TRAFFIC_RULE_ACTION - )); - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_IOT_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_IOT_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Test adapter configuration - - // Preamble - f_create_device_info_list(v_device_info_list); - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_patch( + // Local variables + var Headers v_headers; + var DeviceInfoList v_device_info_list := { + valueof(m_device_info(PX_IOT_DEVICE_ID_1, PX_IOT_DEVICE_AUTH_1, -, PX_IOT_DEVICE_SUPI_1, PX_IOT_DEVICE_IMSI_1)), + valueof(m_device_info(PX_IOT_DEVICE_ID_2, PX_IOT_DEVICE_AUTH_2, -, PX_IOT_DEVICE_SUPI_2, PX_IOT_DEVICE_IMSI_2)), + valueof(m_device_info(PX_IOT_DEVICE_ID_3, PX_IOT_DEVICE_AUTH_3, -, PX_IOT_DEVICE_SUPI_3, PX_IOT_DEVICE_IMSI_3)) + }; + var TrafficRuleDescriptor v_traffic_rule_descriptor := valueof( + m_traffic_rule_descriptor( + PX_TRAFFIC_RULE_ID, + PX_TRAFFIC_FILTERTYPE, + PX_TRAFFIC_RULE_PRIORITY, + m_traffic_filter( + PX_TRAFFIC_FILTER_SRC_ADDRESS, + PX_TRAFFIC_FILTER_DST_ADDRESS, + PX_TRAFFIC_FILTER_SRC_PORT, + PX_TRAFFIC_FILTER_DST_PORT, + PX_TRAFFIC_FILTER_PROTOCOL + ), + PX_TRAFFIC_RULE_ACTION + )); + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_IOT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_IOT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_device_info_list(v_device_info_list); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_patch( PICS_ROOT_API & PX_IOT_API_SUB & "/" & oct2char(unichar2oct(PX_IOT_DEVICE_ID_UNKNOWN, "UTF-8")), v_headers, m_http_message_body_json( - m_body_json_fed_device_info( - m_device_info( - PX_IOT_DEVICE_ID_1, - PX_IOT_DEVICE_AUTH_1, - true, // According to Note 3 of 6.2.2-1 table, it cannot be set directly by the service consumer - PX_IOT_DEVICE_SUPI_1, - PX_IOT_DEVICE_IMSI_1, - PX_REQUESTED_PLTF_ID, - {v_traffic_rule_descriptor} - )))))); - 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 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_device_info_list(v_device_info_list); - f_cf_01_http_down(); + m_body_json_iot_device_info( + m_device_info( + PX_IOT_DEVICE_ID_1, + PX_IOT_DEVICE_AUTH_1, + true, // According to Note 3 of 6.2.2-1 table, it cannot be set directly by the service consumer + PX_IOT_DEVICE_SUPI_1, + PX_IOT_DEVICE_IMSI_1, + PX_REQUESTED_PLTF_ID, + {v_traffic_rule_descriptor} + )))))); + 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_device_info_list(v_device_info_list); + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC033_IOTS_IOTDEV_004_BR } // End of group patch @@ -864,120 +851,120 @@ module AtsMec_IoTAPI_TestCases { group delete { /** - * @desc Check that the IUT deregisters an IoT device information when requested by a Service Consumer specifying the IoT registered device identifier - */ + * @desc Check that the IUT deregisters an IoT device information when requested by a Service Consumer specifying the IoT registered device identifier + */ testcase TC_MEC_MEC033_IOTS_IOTDEV_005_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var DeviceInfoList v_device_info_list := { - valueof(m_device_info(PX_IOT_DEVICE_ID_1, PX_IOT_DEVICE_AUTH_1, -, PX_IOT_DEVICE_SUPI_1, PX_IOT_DEVICE_IMSI_1)), - valueof(m_device_info(PX_IOT_DEVICE_ID_2, PX_IOT_DEVICE_AUTH_2, -, PX_IOT_DEVICE_SUPI_2, PX_IOT_DEVICE_IMSI_2)), - valueof(m_device_info(PX_IOT_DEVICE_ID_3, PX_IOT_DEVICE_AUTH_3, -, PX_IOT_DEVICE_SUPI_3, PX_IOT_DEVICE_IMSI_3)) - }; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_IOT_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_IOT_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Test adapter configuration - - // Preamble - f_create_device_info_list(v_device_info_list); - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_delete( - PICS_ROOT_API & PX_IOT_API_SUB & "/" & oct2char(unichar2oct(PX_IOT_DEVICE_ID_2, "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 204 code ***"); - v_device_info_list[1].deviceId := ""; - 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_device_info_list(v_device_info_list); - f_cf_01_http_down(); + // Local variables + var Headers v_headers; + var DeviceInfoList v_device_info_list := { + valueof(m_device_info(PX_IOT_DEVICE_ID_1, PX_IOT_DEVICE_AUTH_1, -, PX_IOT_DEVICE_SUPI_1, PX_IOT_DEVICE_IMSI_1)), + valueof(m_device_info(PX_IOT_DEVICE_ID_2, PX_IOT_DEVICE_AUTH_2, -, PX_IOT_DEVICE_SUPI_2, PX_IOT_DEVICE_IMSI_2)), + valueof(m_device_info(PX_IOT_DEVICE_ID_3, PX_IOT_DEVICE_AUTH_3, -, PX_IOT_DEVICE_SUPI_3, PX_IOT_DEVICE_IMSI_3)) + }; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_IOT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_IOT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_device_info_list(v_device_info_list); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & PX_IOT_API_SUB & "/" & oct2char(unichar2oct(PX_IOT_DEVICE_ID_2, "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 204 code ***"); + v_device_info_list[1].deviceId := ""; + 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_device_info_list(v_device_info_list); + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC033_IOTS_IOTDEV_005_OK /** - * @desc Check that the IUT deregisters an IoT device information when requested by a Service Consumer specifying the IoT registered device identifier - */ + * @desc Check that the IUT deregisters an IoT device information when requested by a Service Consumer specifying the IoT registered device identifier + */ testcase TC_MEC_MEC033_IOTS_IOTDEV_005_NF() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var DeviceInfoList v_device_info_list := { - valueof(m_device_info(PX_IOT_DEVICE_ID_1, PX_IOT_DEVICE_AUTH_1, -, PX_IOT_DEVICE_SUPI_1, PX_IOT_DEVICE_IMSI_1)), - valueof(m_device_info(PX_IOT_DEVICE_ID_2, PX_IOT_DEVICE_AUTH_2, -, PX_IOT_DEVICE_SUPI_2, PX_IOT_DEVICE_IMSI_2)), - valueof(m_device_info(PX_IOT_DEVICE_ID_3, PX_IOT_DEVICE_AUTH_3, -, PX_IOT_DEVICE_SUPI_3, PX_IOT_DEVICE_IMSI_3)) - }; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_IOT_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_IOT_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Test adapter configuration - - // Preamble - f_create_device_info_list(v_device_info_list); - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_delete( - PICS_ROOT_API & PX_IOT_API_SUB & "/" & oct2char(unichar2oct(PX_IOT_DEVICE_ID_UNKNOWN, "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 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_device_info_list(v_device_info_list); - f_cf_01_http_down(); + // Local variables + var Headers v_headers; + var DeviceInfoList v_device_info_list := { + valueof(m_device_info(PX_IOT_DEVICE_ID_1, PX_IOT_DEVICE_AUTH_1, -, PX_IOT_DEVICE_SUPI_1, PX_IOT_DEVICE_IMSI_1)), + valueof(m_device_info(PX_IOT_DEVICE_ID_2, PX_IOT_DEVICE_AUTH_2, -, PX_IOT_DEVICE_SUPI_2, PX_IOT_DEVICE_IMSI_2)), + valueof(m_device_info(PX_IOT_DEVICE_ID_3, PX_IOT_DEVICE_AUTH_3, -, PX_IOT_DEVICE_SUPI_3, PX_IOT_DEVICE_IMSI_3)) + }; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_IOT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_IOT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_device_info_list(v_device_info_list); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & PX_IOT_API_SUB & "/" & oct2char(unichar2oct(PX_IOT_DEVICE_ID_UNKNOWN, "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 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_device_info_list(v_device_info_list); + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC033_IOTS_IOTDEV_005_NF } // End of group delete @@ -986,6 +973,909 @@ module AtsMec_IoTAPI_TestCases { group iotpltf { + group lookup { + + /** + * @desc Check that the IUT responds with the list of registered IoT platforms when queried by a Service Consumer + */ + testcase TC_MEC_MEC033_MEX_IOTS_IOTPLAT_001_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var IotPlatformInfoList v_iot_platform_list := { + valueof(m_iot_platform_info(PX_IOT_PLTF_ID_1, + { + m_mb_transport_info( + PX_MB_TRANSPORTINFO_ID_1, + PX_MB_TRANSPORTINFO_NAME_1, + PX_MB_TRANSPORTINFO_TYPE_1, + PX_MB_TRANSPORTINFO_PROTOCOL_1, + PX_MB_TRANSPORTINFO_VERSION_1, + m_end_point_uris({ PX_IOT_ENDPOINT_URI_1 }), + m_security_info, + m_impl_specific_info + ) + } + )), + valueof(m_iot_platform_info(PX_IOT_PLTF_ID_2, + { + m_mb_transport_info( + PX_MB_TRANSPORTINFO_ID_2, + PX_MB_TRANSPORTINFO_NAME_2, + PX_MB_TRANSPORTINFO_TYPE_2, + PX_MB_TRANSPORTINFO_PROTOCOL_2, + PX_MB_TRANSPORTINFO_VERSION_2, + m_end_point_uris({ PX_IOT_ENDPOINT_URI_2 }), + m_security_info, + m_impl_specific_info + ) + } + )), + valueof(m_iot_platform_info(PX_IOT_PLTF_ID_3, + { + m_mb_transport_info( + PX_MB_TRANSPORTINFO_ID_3, + PX_MB_TRANSPORTINFO_NAME_3, + PX_MB_TRANSPORTINFO_TYPE_3, + PX_MB_TRANSPORTINFO_PROTOCOL_3, + PX_MB_TRANSPORTINFO_VERSION_3, + m_end_point_uris({ PX_IOT_ENDPOINT_URI_3 }), + m_security_info, + m_impl_specific_info + ) + } + )) + }; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_IOT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_IOT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_iot_platform_info_list(v_iot_platform_list); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_IOT_API_LIST_PLTF_INFO, + 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_iot_iot_platform_info_list( + v_iot_platform_list + ))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a DeviceInfoList ***"); + 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_iot_platform_info_list(v_iot_platform_list); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC033_MEX_IOTS_IOTPLAT_001_OK + + } // End of group lookup + + group subscribe { + + /** + * @desc Check that the IUT registers the information of a new IoT platform when requested by a Service Consumer + */ + testcase TC_MEC_MEC033_MEX_IOTS_IOTPLAT_002_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_IOT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_IOT_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_IOT_API_LIST_PLTF_SUB, + v_headers, + m_http_message_body_json( + m_body_json_iot_iot_platform_info( + m_iot_platform_info( + PX_IOT_PLTF_ID_1, + { + m_mb_transport_info( + PX_MB_TRANSPORTINFO_ID_1, + PX_MB_TRANSPORTINFO_NAME_1, + PX_MB_TRANSPORTINFO_TYPE_1, + PX_MB_TRANSPORTINFO_PROTOCOL_1, + PX_MB_TRANSPORTINFO_VERSION_1, + m_end_point_uris({ PX_IOT_ENDPOINT_URI_1 }), + m_security_info, + m_impl_specific_info + ) + } + )))))); + 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_iot_iot_platform_info( + mw_iot_platform_info( + PX_IOT_PLTF_ID_1, + { + mw_mb_transport_info( + PX_MB_TRANSPORTINFO_ID_1, + PX_MB_TRANSPORTINFO_NAME_1, + PX_MB_TRANSPORTINFO_TYPE_1, + PX_MB_TRANSPORTINFO_PROTOCOL_1, + PX_MB_TRANSPORTINFO_VERSION_1, + mw_end_point_uris({ PX_IOT_ENDPOINT_URI_1 }), + mw_security_info, + mw_impl_specific_info + ) + } + )))))) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a IotPlatformInfoList ***"); + 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_iot_platform_info(v_response.response.body.json_body.iotPlatformInfo); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC033_MEX_IOTS_IOTPLAT_002_OK + + /** + * @desc Check that the IUT returns an error when Service Consumer request to register an IoT device with incorrect parameters + */ + testcase TC_MEC_MEC033_MEX_IOTS_IOTPLAT_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_IOT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_IOT_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_IOT_API_LIST_PLTF_SUB, + v_headers, + m_http_message_body_json( + m_body_json_iot_iot_platform_info( + m_iot_platform_info_error( + PX_IOT_PLTF_ID_1 + )))))); + 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_MEC033_MEX_IOTS_IOTPLAT_002_BR + + /** + * @desc Check that the IUT returns the IoT platform information when requested by Service Consumer specifying the IoT platform identifier + */ + testcase TC_MEC_MEC033_MEX_IOTS_IOTPLAT_003_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var IotPlatformInfoList v_iot_platform_list := { + valueof(m_iot_platform_info(PX_IOT_PLTF_ID_1, + { + m_mb_transport_info( + PX_MB_TRANSPORTINFO_ID_1, + PX_MB_TRANSPORTINFO_NAME_1, + PX_MB_TRANSPORTINFO_TYPE_1, + PX_MB_TRANSPORTINFO_PROTOCOL_1, + PX_MB_TRANSPORTINFO_VERSION_1, + m_end_point_uris({ PX_IOT_ENDPOINT_URI_1 }), + m_security_info, + m_impl_specific_info + ) + } + )), + valueof(m_iot_platform_info(PX_IOT_PLTF_ID_2, + { + m_mb_transport_info( + PX_MB_TRANSPORTINFO_ID_2, + PX_MB_TRANSPORTINFO_NAME_2, + PX_MB_TRANSPORTINFO_TYPE_2, + PX_MB_TRANSPORTINFO_PROTOCOL_2, + PX_MB_TRANSPORTINFO_VERSION_2, + m_end_point_uris({ PX_IOT_ENDPOINT_URI_2 }), + m_security_info, + m_impl_specific_info + ) + } + )), + valueof(m_iot_platform_info(PX_IOT_PLTF_ID_3, + { + m_mb_transport_info( + PX_MB_TRANSPORTINFO_ID_3, + PX_MB_TRANSPORTINFO_NAME_3, + PX_MB_TRANSPORTINFO_TYPE_3, + PX_MB_TRANSPORTINFO_PROTOCOL_3, + PX_MB_TRANSPORTINFO_VERSION_3, + m_end_point_uris({ PX_IOT_ENDPOINT_URI_3 }), + m_security_info, + m_impl_specific_info + ) + } + )) + }; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_IOT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_IOT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_iot_platform_info_list(v_iot_platform_list); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_IOT_API_LIST_PLTF_SUB & "/" & oct2char(unichar2oct(PX_IOT_PLTF_ID_2, "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_iot_iot_platform_info( + m_iot_platform_info( + PX_IOT_PLTF_ID_2, + { + m_mb_transport_info( + PX_MB_TRANSPORTINFO_ID_2, + PX_MB_TRANSPORTINFO_NAME_2, + PX_MB_TRANSPORTINFO_TYPE_2, + PX_MB_TRANSPORTINFO_PROTOCOL_2, + PX_MB_TRANSPORTINFO_VERSION_2, + m_end_point_uris({ PX_IOT_ENDPOINT_URI_2 }), + m_security_info, + m_impl_specific_info + ) + } + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct IotPlatformInfo entry ***"); + 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_iot_platform_info_list(v_iot_platform_list); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC033_MEX_IOTS_IOTPLAT_003_OK + + /** + * @desc Check that the IUT returns error when Service Consumer request to retrieve a not registered IoT platform + */ + testcase TC_MEC_MEC033_MEX_IOTS_IOTPLAT_003_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var IotPlatformInfoList v_iot_platform_list := { + valueof(m_iot_platform_info(PX_IOT_PLTF_ID_1, + { + m_mb_transport_info( + PX_MB_TRANSPORTINFO_ID_1, + PX_MB_TRANSPORTINFO_NAME_1, + PX_MB_TRANSPORTINFO_TYPE_1, + PX_MB_TRANSPORTINFO_PROTOCOL_1, + PX_MB_TRANSPORTINFO_VERSION_1, + m_end_point_uris({ PX_IOT_ENDPOINT_URI_1 }), + m_security_info, + m_impl_specific_info + ) + } + )), + valueof(m_iot_platform_info(PX_IOT_PLTF_ID_2, + { + m_mb_transport_info( + PX_MB_TRANSPORTINFO_ID_2, + PX_MB_TRANSPORTINFO_NAME_2, + PX_MB_TRANSPORTINFO_TYPE_2, + PX_MB_TRANSPORTINFO_PROTOCOL_2, + PX_MB_TRANSPORTINFO_VERSION_2, + m_end_point_uris({ PX_IOT_ENDPOINT_URI_2 }), + m_security_info, + m_impl_specific_info + ) + } + )), + valueof(m_iot_platform_info(PX_IOT_PLTF_ID_3, + { + m_mb_transport_info( + PX_MB_TRANSPORTINFO_ID_3, + PX_MB_TRANSPORTINFO_NAME_3, + PX_MB_TRANSPORTINFO_TYPE_3, + PX_MB_TRANSPORTINFO_PROTOCOL_3, + PX_MB_TRANSPORTINFO_VERSION_3, + m_end_point_uris({ PX_IOT_ENDPOINT_URI_3 }), + m_security_info, + m_impl_specific_info + ) + } + )) + }; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_IOT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_IOT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_iot_platform_info_list(v_iot_platform_list); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_IOT_API_LIST_PLTF_SUB & "/" & oct2char(unichar2oct(PX_IOT_PLTF_ID_UNKNOWN, "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 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_iot_platform_info_list(v_iot_platform_list); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC033_MEX_IOTS_IOTPLAT_003_NF + + } // End of group subscribe + + group patch { + + /** + * @desc Check that the IUT updates the information about a registered IoT platform when requested by a Service Consumer + */ + testcase TC_MEC_MEC033_MEX_IOTS_IOTPLAT_004_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var IotPlatformInfoList v_iot_platform_list := { + valueof(m_iot_platform_info(PX_IOT_PLTF_ID_1, + { + m_mb_transport_info( + PX_MB_TRANSPORTINFO_ID_1, + PX_MB_TRANSPORTINFO_NAME_1, + PX_MB_TRANSPORTINFO_TYPE_1, + PX_MB_TRANSPORTINFO_PROTOCOL_1, + PX_MB_TRANSPORTINFO_VERSION_1, + m_end_point_uris({ PX_IOT_ENDPOINT_URI_1 }), + m_security_info, + m_impl_specific_info + ) + } + )), + valueof(m_iot_platform_info(PX_IOT_PLTF_ID_2, + { + m_mb_transport_info( + PX_MB_TRANSPORTINFO_ID_2, + PX_MB_TRANSPORTINFO_NAME_2, + PX_MB_TRANSPORTINFO_TYPE_2, + PX_MB_TRANSPORTINFO_PROTOCOL_2, + PX_MB_TRANSPORTINFO_VERSION_2, + m_end_point_uris({ PX_IOT_ENDPOINT_URI_2 }), + m_security_info, + m_impl_specific_info + ) + } + )), + valueof(m_iot_platform_info(PX_IOT_PLTF_ID_3, + { + m_mb_transport_info( + PX_MB_TRANSPORTINFO_ID_3, + PX_MB_TRANSPORTINFO_NAME_3, + PX_MB_TRANSPORTINFO_TYPE_3, + PX_MB_TRANSPORTINFO_PROTOCOL_3, + PX_MB_TRANSPORTINFO_VERSION_3, + m_end_point_uris({ PX_IOT_ENDPOINT_URI_3 }), + m_security_info, + m_impl_specific_info + ) + } + )) + }; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_IOT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_IOT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_iot_platform_info_list(v_iot_platform_list); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_patch( + PICS_ROOT_API & PX_IOT_API_LIST_PLTF_SUB & "/" & oct2char(unichar2oct(PX_IOT_PLTF_ID_2, "UTF-8")), + v_headers, + m_http_message_body_json( + m_body_json_iot_iot_platform_info( + m_iot_platform_info( + PX_IOT_PLTF_ID_1, + { + m_mb_transport_info( + PX_MB_TRANSPORTINFO_ID_1, + PX_MB_TRANSPORTINFO_NAME_1 & "_patch", + PX_MB_TRANSPORTINFO_TYPE_1, + PX_MB_TRANSPORTINFO_PROTOCOL_1, + PX_MB_TRANSPORTINFO_VERSION_1, + m_end_point_uris({ PX_IOT_ENDPOINT_URI_1, PX_IOT_ENDPOINT_URI_2 }), + m_security_info, + m_impl_specific_info + ) + } + )))))); + 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_iot_iot_platform_info( + m_iot_platform_info( + PX_IOT_PLTF_ID_2, + { + m_mb_transport_info( + PX_MB_TRANSPORTINFO_ID_1, + PX_MB_TRANSPORTINFO_NAME_1 & "_patch", + PX_MB_TRANSPORTINFO_TYPE_1, + PX_MB_TRANSPORTINFO_PROTOCOL_1, + PX_MB_TRANSPORTINFO_VERSION_1, + m_end_point_uris({ PX_IOT_ENDPOINT_URI_1, PX_IOT_ENDPOINT_URI_2 }), + m_security_info, + m_impl_specific_info + ) + } + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct IotPlatformInfo entry ***"); + 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_iot_platform_info_list(v_iot_platform_list); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC033_MEX_IOTS_IOTPLAT_004_OK + + /** + * @desc Check that the IUT returns an error when a Service Consumer requests to update a not registered IoT platform + */ + testcase TC_MEC_MEC033_MEX_IOTS_IOTPLAT_004_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var IotPlatformInfoList v_iot_platform_list := { + valueof(m_iot_platform_info(PX_IOT_PLTF_ID_1, + { + m_mb_transport_info( + PX_MB_TRANSPORTINFO_ID_1, + PX_MB_TRANSPORTINFO_NAME_1, + PX_MB_TRANSPORTINFO_TYPE_1, + PX_MB_TRANSPORTINFO_PROTOCOL_1, + PX_MB_TRANSPORTINFO_VERSION_1, + m_end_point_uris({ PX_IOT_ENDPOINT_URI_1 }), + m_security_info, + m_impl_specific_info + ) + } + )), + valueof(m_iot_platform_info(PX_IOT_PLTF_ID_2, + { + m_mb_transport_info( + PX_MB_TRANSPORTINFO_ID_2, + PX_MB_TRANSPORTINFO_NAME_2, + PX_MB_TRANSPORTINFO_TYPE_2, + PX_MB_TRANSPORTINFO_PROTOCOL_2, + PX_MB_TRANSPORTINFO_VERSION_2, + m_end_point_uris({ PX_IOT_ENDPOINT_URI_2 }), + m_security_info, + m_impl_specific_info + ) + } + )), + valueof(m_iot_platform_info(PX_IOT_PLTF_ID_3, + { + m_mb_transport_info( + PX_MB_TRANSPORTINFO_ID_3, + PX_MB_TRANSPORTINFO_NAME_3, + PX_MB_TRANSPORTINFO_TYPE_3, + PX_MB_TRANSPORTINFO_PROTOCOL_3, + PX_MB_TRANSPORTINFO_VERSION_3, + m_end_point_uris({ PX_IOT_ENDPOINT_URI_3 }), + m_security_info, + m_impl_specific_info + ) + } + )) + }; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_IOT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_IOT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_iot_platform_info_list(v_iot_platform_list); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_patch( + PICS_ROOT_API & PX_IOT_API_LIST_PLTF_SUB & "/" & oct2char(unichar2oct(PX_IOT_PLTF_ID_UNKNOWN, "UTF-8")), + v_headers, + m_http_message_body_json( + m_body_json_iot_iot_platform_info( + m_iot_platform_info( + PX_IOT_PLTF_ID_1, + { + m_mb_transport_info( + PX_MB_TRANSPORTINFO_ID_1, + PX_MB_TRANSPORTINFO_NAME_1 & "_patch", + PX_MB_TRANSPORTINFO_TYPE_1, + PX_MB_TRANSPORTINFO_PROTOCOL_1, + PX_MB_TRANSPORTINFO_VERSION_1, + m_end_point_uris({ PX_IOT_ENDPOINT_URI_1, PX_IOT_ENDPOINT_URI_2 }), + m_security_info, + m_impl_specific_info + ) + } + )))))); + 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 IotPlatformInfo entry ***"); + 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_iot_platform_info_list(v_iot_platform_list); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC033_MEX_IOTS_IOTPLAT_004_NF + + } // End of group patch + + group delete { + + /** + * @desc Check that the IUT deregisters an IoT platform information when requested by a Service Consumer specifying the registered IoT platform identifier + */ + testcase TC_MEC_MEC033_MEX_IOTS_IOTPLAT_005_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var IotPlatformInfoList v_iot_platform_list := { + valueof(m_iot_platform_info(PX_IOT_PLTF_ID_1, + { + m_mb_transport_info( + PX_MB_TRANSPORTINFO_ID_1, + PX_MB_TRANSPORTINFO_NAME_1, + PX_MB_TRANSPORTINFO_TYPE_1, + PX_MB_TRANSPORTINFO_PROTOCOL_1, + PX_MB_TRANSPORTINFO_VERSION_1, + m_end_point_uris({ PX_IOT_ENDPOINT_URI_1 }), + m_security_info, + m_impl_specific_info + ) + } + )), + valueof(m_iot_platform_info(PX_IOT_PLTF_ID_2, + { + m_mb_transport_info( + PX_MB_TRANSPORTINFO_ID_2, + PX_MB_TRANSPORTINFO_NAME_2, + PX_MB_TRANSPORTINFO_TYPE_2, + PX_MB_TRANSPORTINFO_PROTOCOL_2, + PX_MB_TRANSPORTINFO_VERSION_2, + m_end_point_uris({ PX_IOT_ENDPOINT_URI_2 }), + m_security_info, + m_impl_specific_info + ) + } + )), + valueof(m_iot_platform_info(PX_IOT_PLTF_ID_3, + { + m_mb_transport_info( + PX_MB_TRANSPORTINFO_ID_3, + PX_MB_TRANSPORTINFO_NAME_3, + PX_MB_TRANSPORTINFO_TYPE_3, + PX_MB_TRANSPORTINFO_PROTOCOL_3, + PX_MB_TRANSPORTINFO_VERSION_3, + m_end_point_uris({ PX_IOT_ENDPOINT_URI_3 }), + m_security_info, + m_impl_specific_info + ) + } + )) + }; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_IOT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_IOT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_iot_platform_info_list(v_iot_platform_list); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & PX_IOT_API_LIST_PLTF_SUB & "/" & oct2char(unichar2oct(PX_IOT_PLTF_ID_2, "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 the correct success code ***"); + v_iot_platform_list[1].iotPlatformId := ""; + 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_iot_platform_info_list(v_iot_platform_list); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC033_MEX_IOTS_IOTPLAT_005_OK + + /** + * @desc Check that the IUT returns an error when a Service Consumer request to deregister an IoT platform using incorrect parameters + */ + testcase TC_MEC_MEC033_MEX_IOTS_IOTPLAT_005_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var IotPlatformInfoList v_iot_platform_list := { + valueof(m_iot_platform_info(PX_IOT_PLTF_ID_1, + { + m_mb_transport_info( + PX_MB_TRANSPORTINFO_ID_1, + PX_MB_TRANSPORTINFO_NAME_1, + PX_MB_TRANSPORTINFO_TYPE_1, + PX_MB_TRANSPORTINFO_PROTOCOL_1, + PX_MB_TRANSPORTINFO_VERSION_1, + m_end_point_uris({ PX_IOT_ENDPOINT_URI_1 }), + m_security_info, + m_impl_specific_info + ) + } + )), + valueof(m_iot_platform_info(PX_IOT_PLTF_ID_2, + { + m_mb_transport_info( + PX_MB_TRANSPORTINFO_ID_2, + PX_MB_TRANSPORTINFO_NAME_2, + PX_MB_TRANSPORTINFO_TYPE_2, + PX_MB_TRANSPORTINFO_PROTOCOL_2, + PX_MB_TRANSPORTINFO_VERSION_2, + m_end_point_uris({ PX_IOT_ENDPOINT_URI_2 }), + m_security_info, + m_impl_specific_info + ) + } + )), + valueof(m_iot_platform_info(PX_IOT_PLTF_ID_3, + { + m_mb_transport_info( + PX_MB_TRANSPORTINFO_ID_3, + PX_MB_TRANSPORTINFO_NAME_3, + PX_MB_TRANSPORTINFO_TYPE_3, + PX_MB_TRANSPORTINFO_PROTOCOL_3, + PX_MB_TRANSPORTINFO_VERSION_3, + m_end_point_uris({ PX_IOT_ENDPOINT_URI_3 }), + m_security_info, + m_impl_specific_info + ) + } + )) + }; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_IOT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_IOT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_iot_platform_info_list(v_iot_platform_list); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & PX_IOT_API_LIST_PLTF_SUB & "/" & oct2char(unichar2oct(PX_IOT_PLTF_ID_UNKNOWN, "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 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_iot_platform_info_list(v_iot_platform_list); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC033_MEX_IOTS_IOTPLAT_005_NF + + } // End of group delete + } // End of group iotpltf } // End of module AtsMec_IoTAPI_TestCases diff --git a/ttcn/AtsMec_IoT/AtsMec_IoTAPI_TestControl.ttcn b/ttcn/AtsMec_IoT/AtsMec_IoTAPI_TestControl.ttcn index 1cec745..70941a0 100644 --- a/ttcn/AtsMec_IoT/AtsMec_IoTAPI_TestControl.ttcn +++ b/ttcn/AtsMec_IoT/AtsMec_IoTAPI_TestControl.ttcn @@ -31,6 +31,20 @@ module AtsMec_IoTAPI_TestControl { execute(TC_MEC_MEC033_IOTS_IOTDEV_005_OK()); execute(TC_MEC_MEC033_IOTS_IOTDEV_005_NF()); + + execute(TC_MEC_MEC033_MEX_IOTS_IOTPLAT_001_OK()); + + execute(TC_MEC_MEC033_MEX_IOTS_IOTPLAT_002_OK()); + execute(TC_MEC_MEC033_MEX_IOTS_IOTPLAT_002_BR()); + + execute(TC_MEC_MEC033_MEX_IOTS_IOTPLAT_003_OK()); + execute(TC_MEC_MEC033_MEX_IOTS_IOTPLAT_003_NF()); + + execute(TC_MEC_MEC033_MEX_IOTS_IOTPLAT_004_OK()); + execute(TC_MEC_MEC033_MEX_IOTS_IOTPLAT_004_NF()); + + execute(TC_MEC_MEC033_MEX_IOTS_IOTPLAT_005_OK()); + execute(TC_MEC_MEC033_MEX_IOTS_IOTPLAT_005_NF()); } } diff --git a/ttcn/LibMec/IoTAPI/ttcn/IoTAPI_Functions.ttcn b/ttcn/LibMec/IoTAPI/ttcn/IoTAPI_Functions.ttcn index b728f05..b338fce 100644 --- a/ttcn/LibMec/IoTAPI/ttcn/IoTAPI_Functions.ttcn +++ b/ttcn/LibMec/IoTAPI/ttcn/IoTAPI_Functions.ttcn @@ -16,7 +16,10 @@ module IoTAPI_Functions { import from LibHttp_JsonTemplates all; import from LibHttp_TestSystem all; - // LibMec/FixedAccessInformationServiceAPI + // LibMec/EdgePlatformApplicationEnablementAPI + import from EdgePlatformApplicationEnablementAPI_Templates all; + + // LibMec/IoTAPI import from IoTAPI_TypesAndValues all; import from IoTAPI_Templates all; import from IoTAPI_Pixits all; @@ -40,7 +43,7 @@ module IoTAPI_Functions { PICS_ROOT_API & PX_IOT_API_SUB, v_headers, m_http_message_body_json( - m_body_json_fed_device_info( + m_body_json_iot_device_info( m_device_info( PX_IOT_DEVICE_ID_1, PX_IOT_DEVICE_AUTH_1, @@ -54,7 +57,7 @@ module IoTAPI_Functions { mw_http_response( mw_http_response_201_created( mw_http_message_body_json( - mw_body_json_fed_device_info( + mw_body_json_iot_device_info( mw_device_info( PX_IOT_DEVICE_ID_1, PX_IOT_DEVICE_AUTH_1, @@ -120,4 +123,113 @@ module IoTAPI_Functions { } } // End of function f_delete_device_info_list + function f_create_iot_platform_info( + out IotPlatformInfo p_iot_platform_info + ) 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_IOT_API_LIST_PLTF_SUB, + v_headers, + m_http_message_body_json( + m_body_json_iot_iot_platform_info( + m_iot_platform_info( + PX_IOT_PLTF_ID_1, + { + m_mb_transport_info( + PX_MB_TRANSPORTINFO_ID_1, + PX_MB_TRANSPORTINFO_NAME_1, + PX_MB_TRANSPORTINFO_TYPE_1, + PX_MB_TRANSPORTINFO_PROTOCOL_1, + PX_MB_TRANSPORTINFO_VERSION_1, + m_end_point_uris({ PX_IOT_ENDPOINT_URI_1 }), + m_security_info, + m_impl_specific_info + ) + } + )))))); + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_201_created( + mw_http_message_body_json( + mw_body_json_iot_iot_platform_info( + mw_iot_platform_info( + PX_IOT_PLTF_ID_1, + { + m_mb_transport_info( + PX_MB_TRANSPORTINFO_ID_1, + PX_MB_TRANSPORTINFO_NAME_1, + PX_MB_TRANSPORTINFO_TYPE_1, + PX_MB_TRANSPORTINFO_PROTOCOL_1, + PX_MB_TRANSPORTINFO_VERSION_1, + m_end_point_uris({ PX_IOT_ENDPOINT_URI_1 }), + m_security_info, + m_impl_specific_info + ) + } + )))))) -> value v_response { + tc_ac.stop; + + p_iot_platform_info := v_response.response.body.json_body.iotPlatformInfo; + log("f_create_iot_platform_info: INFO: IUT successfully responds to the subscription: ", p_iot_platform_info); + } + [] tc_ac.timeout { + log("f_create_iot_platform_info: INCONC: Expected message not received"); + } + } // End of 'alt' statement + + } // End of function f_create_iot_platform_info + + function f_delete_iot_platform_info( + in IotPlatformInfo p_iot_platform_info + ) 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_delete( + PICS_ROOT_API & PX_IOT_API_LIST_PLTF_SUB & "/" & oct2char(unichar2oct(p_iot_platform_info.iotPlatformId, "UTF-8")), + 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_iot_platform_info: INCONC: Expected message not received"); + } + } // End of 'alt' statement + + } // End of function f_delete_iot_platform_info + + function f_create_iot_platform_info_list( + out IotPlatformInfoList p_iot_platform_info_list + ) runs on HttpComponent { + for (var integer i := 0; i < lengthof(p_iot_platform_info_list); i := i + 1) { + f_create_iot_platform_info(p_iot_platform_info_list[i]); + } + } // End of function f_create_iot_platform_info_list + + function f_delete_iot_platform_info_list( + in IotPlatformInfoList p_iot_platform_info_list + ) runs on HttpComponent { + for (var integer i := 0; i < lengthof(p_iot_platform_info_list); i := i + 1) { + if (p_iot_platform_info_list[i].iotPlatformId != "") { + f_delete_iot_platform_info(p_iot_platform_info_list[i]); + } + } + } // End of function f_delete_iot_platform_info_list + } // End of modue IoTAPI_Functions \ No newline at end of file diff --git a/ttcn/LibMec/IoTAPI/ttcn/IoTAPI_Pixits.ttcn b/ttcn/LibMec/IoTAPI/ttcn/IoTAPI_Pixits.ttcn index cc315ae..1d9f8ed 100644 --- a/ttcn/LibMec/IoTAPI/ttcn/IoTAPI_Pixits.ttcn +++ b/ttcn/LibMec/IoTAPI/ttcn/IoTAPI_Pixits.ttcn @@ -6,8 +6,8 @@ module IoTAPI_Pixits { // LibCommon import from LibCommon_BasicTypesAndValues all; - // LibMec/FixedAccessInformationServiceAPI - import from FederationEnablementAPI_TypesAndValues all; + // LibMec/EdgePlatformApplicationEnablementAPI + import from EdgePlatformApplicationEnablementAPI_TypesAndValues all; modulepar Json.String PX_IOT_DEVICE_ID_1 := ""; @@ -43,4 +43,45 @@ module IoTAPI_Pixits { modulepar Json.String PX_REQUESTED_PLTF_ID := ""; -} // End of IoTAPI_Pixits + modulepar Json.String PX_IOT_PLTF_ID_1 := ""; + + modulepar Json.String PX_IOT_PLTF_ID_2 := ""; + + modulepar Json.String PX_IOT_PLTF_ID_3 := ""; + + modulepar Json.String PX_MB_TRANSPORTINFO_ID_1 := ""; + + modulepar Json.String PX_MB_TRANSPORTINFO_NAME_1 := ""; + + modulepar EdgePlatformApplicationEnablementAPI_TypesAndValues.TransportType PX_MB_TRANSPORTINFO_TYPE_1 + := REST_HTTP; + + modulepar Json.String PX_MB_TRANSPORTINFO_PROTOCOL_1 := ""; + + modulepar Json.String PX_MB_TRANSPORTINFO_VERSION_1 := ""; + + modulepar Json.String PX_MB_TRANSPORTINFO_ID_2 := ""; + + modulepar Json.String PX_MB_TRANSPORTINFO_NAME_2 := ""; + + modulepar EdgePlatformApplicationEnablementAPI_TypesAndValues.TransportType PX_MB_TRANSPORTINFO_TYPE_2 + := REST_HTTP; + + modulepar Json.String PX_MB_TRANSPORTINFO_PROTOCOL_2 := ""; + + modulepar Json.String PX_MB_TRANSPORTINFO_VERSION_2 := ""; + + modulepar Json.String PX_MB_TRANSPORTINFO_ID_3 := ""; + + modulepar Json.String PX_MB_TRANSPORTINFO_NAME_3 := ""; + + modulepar EdgePlatformApplicationEnablementAPI_TypesAndValues.TransportType PX_MB_TRANSPORTINFO_TYPE_3 + := REST_HTTP; + + modulepar Json.String PX_MB_TRANSPORTINFO_PROTOCOL_3 := ""; + + modulepar Json.String PX_MB_TRANSPORTINFO_VERSION_3 := ""; + + modulepar Json.String PX_IOT_PLTF_ID_UNKNOWN := ""; + +} // End of module IoTAPI_Pixits \ No newline at end of file diff --git a/ttcn/LibMec/IoTAPI/ttcn/IoTAPI_Templates.ttcn b/ttcn/LibMec/IoTAPI/ttcn/IoTAPI_Templates.ttcn index 040323d..12199bd 100644 --- a/ttcn/LibMec/IoTAPI/ttcn/IoTAPI_Templates.ttcn +++ b/ttcn/LibMec/IoTAPI/ttcn/IoTAPI_Templates.ttcn @@ -87,4 +87,106 @@ module IoTAPI_Templates { enabled := p_enabled } // End of template mw_device_info + template (omit) IotPlatformInfo m_iot_platform_info( + in Json.String p_iotPlatformId, + in template (value) MBTransportInfoList p_userTransportInfo, + in Json.Bool p_enabled := false, + in template (omit) EdgePlatformApplicationEnablementAPI_TypesAndValues.TransportInfoList p_customServicesTransportInfo := omit + + ) := { + iotPlatformId := p_iotPlatformId, + userTransportInfo := p_userTransportInfo, + customServicesTransportInfo := p_customServicesTransportInfo, + enabled := p_enabled + } // End of template m_iot_platform_info + + template (omit) IotPlatformInfo m_iot_platform_info_error( + in Json.String p_iotPlatformId, + in Json.Bool p_enabled := false, + in template (omit) EdgePlatformApplicationEnablementAPI_TypesAndValues.TransportInfoList p_customServicesTransportInfo := omit + + ) := { + iotPlatformId := p_iotPlatformId, + userTransportInfo := omit, + customServicesTransportInfo := p_customServicesTransportInfo, + enabled := p_enabled + } // End of template m_iot_platform_info_error + + template (present) IotPlatformInfo mw_iot_platform_info( + template (present) Json.String p_iotPlatformId := ?, + template (present) MBTransportInfoList p_userTransportInfo := ?, + template (present) Json.Bool p_enabled := ?, + template EdgePlatformApplicationEnablementAPI_TypesAndValues.TransportInfoList p_customServicesTransportInfo := * + + ) := { + iotPlatformId := p_iotPlatformId, + userTransportInfo := p_userTransportInfo, + customServicesTransportInfo := p_customServicesTransportInfo, + enabled := p_enabled + } // End of template mw_iot_platform_info + + template (omit) MBTransportInfo m_mb_transport_info( + in Json.String p_id, + in Json.String p_name, + in EdgePlatformApplicationEnablementAPI_TypesAndValues.TransportType p_type, + in Json.String p_protocol, + in Json.String p_version, + in template (value) EdgePlatformApplicationEnablementAPI_TypesAndValues.EndPointInfo p_endpoint, + in template (value) EdgePlatformApplicationEnablementAPI_TypesAndValues.SecurityInfo p_security, + in template (value) ImplSpecificInfo p_implSpecificInfo, + in template (omit) Json.String p_description := omit + ) := { + id := p_id, + name := p_name, + description := p_description, + type_ := p_type, + protocol := p_protocol, + version := p_version, + endpoint := p_endpoint, + security := p_security, + implSpecificInfo := p_implSpecificInfo + } // End of template m_mb_transport_info + + template (present) MBTransportInfo mw_mb_transport_info( + template (present) Json.String p_id := ?, + template (present) Json.String p_name := ?, + template (present) EdgePlatformApplicationEnablementAPI_TypesAndValues.TransportType p_type := ?, + template (present) Json.String p_protocol := ?, + template (present) Json.String p_version := ?, + template (present) EdgePlatformApplicationEnablementAPI_TypesAndValues.EndPointInfo p_endpoint := ?, + template (present) EdgePlatformApplicationEnablementAPI_TypesAndValues.SecurityInfo p_security := ?, + template (present) ImplSpecificInfo p_implSpecificInfo := ?, + template Json.String p_description := * + ) := { + id := p_id, + name := p_name, + description := p_description, + type_ := p_type, + protocol := p_protocol, + version := p_version, + endpoint := p_endpoint, + security := p_security, + implSpecificInfo := p_implSpecificInfo + } // End of template mw_mb_transport_info + + template (omit) ImplSpecificInfo m_impl_specific_info( + in template (omit) EventTopics p_eventTopics := omit, + in template (omit) UplinkTopics p_uplinkTopics := omit, + in template (omit) DownlinkTopics p_downlinkTopics := omit + ) := { + eventTopics := p_eventTopics, + uplinkTopics := p_uplinkTopics, + downlinkTopics := p_downlinkTopics + } // End of template m_impl_specific_info + + template ImplSpecificInfo mw_impl_specific_info( + template EventTopics p_eventTopics := *, + template UplinkTopics p_uplinkTopics := *, + template DownlinkTopics p_downlinkTopics := * + ) := { + eventTopics := p_eventTopics, + uplinkTopics := p_uplinkTopics, + downlinkTopics := p_downlinkTopics + } // End of template mw_impl_specific_info + } // End of IoTAPI_Templates diff --git a/ttcn/LibMec/IoTAPI/ttcn/IoTAPI_TypesAndValues.ttcn b/ttcn/LibMec/IoTAPI/ttcn/IoTAPI_TypesAndValues.ttcn index 185df84..20fe1aa 100644 --- a/ttcn/LibMec/IoTAPI/ttcn/IoTAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/IoTAPI/ttcn/IoTAPI_TypesAndValues.ttcn @@ -89,10 +89,11 @@ module IoTAPI_TypesAndValues { */ type record IotPlatformInfo { Json.String iotPlatformId, - MBTransportInfoList userTransportInfo, + MBTransportInfoList userTransportInfo optional, // optional on;ly for the 400 Bad Request TP TransportInfoList customServicesTransportInfo optional, Json.Bool enabled } // End of IotPlatformInfo + type record of IotPlatformInfo IotPlatformInfoList; /** * @desc User transport based on a message bus diff --git a/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn b/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn index 8f29c11..385e889 100644 --- a/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn +++ b/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn @@ -96,4 +96,8 @@ module LibMec_Pixits { modulepar charstring PX_IOT_API_SUB := "/iots/v1/registered_devices"; + modulepar charstring PX_IOT_API_LIST_PLTF_INFO := "/iots/v1/registered_iot_platforms"; + + modulepar charstring PX_IOT_API_LIST_PLTF_SUB := "/iots/v1/registered_iot_platforms"; + } // End of module LibMec_Pixits diff --git a/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn b/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn index 492d3cd..124821a 100644 --- a/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn +++ b/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn @@ -165,6 +165,8 @@ module LibHttp_JsonMessageBodyTypes { SystemInfoUpdate systemInfoUpdate, // ETSI GS MEC 040 V3.1.1 Clause 6.2.3 Type: SystemInfoUpdate IoTAPI_TypesAndValues.DeviceInfo deviceInfo_iot, // ETSI GS MEC 033 V3.1.1 Clause 6.2.2 Type: DeviceInfo IoTAPI_TypesAndValues.DeviceInfoList deviceInfoList_iot, // ETSI GS MEC 033 V3.1.1 Clause 6.2.2 Type: DeviceInfo + IotPlatformInfoList iotPlatformInfoList, // ETSI GS MEC 033 V3.1.1 Clause 6.2.3 Type: IotPlatformInfo + IotPlatformInfo iotPlatformInfo, // ETSI GS MEC 033 V3.1.1 Clause 6.2.3 Type: IotPlatformInfo // TODO Add here your custom variants universal charstring raw } with { diff --git a/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn b/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn index e7e183e..d6fa9dd 100644 --- a/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn +++ b/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn @@ -1331,17 +1331,17 @@ group ams_api { group iot { - template (value) JsonBody m_body_json_fed_device_info( + template (value) JsonBody m_body_json_iot_device_info( in template (value) IoTAPI_TypesAndValues.DeviceInfo p_deviceInfo ) := { deviceInfo_iot := p_deviceInfo - } // End of template m_body_json_fed_device_info + } // End of template m_body_json_iot_device_info - template (present) JsonBody mw_body_json_fed_device_info( + template (present) JsonBody mw_body_json_iot_device_info( template (present) IoTAPI_TypesAndValues.DeviceInfo p_deviceInfo := ? ) := { deviceInfo_iot := p_deviceInfo - } // End of template mw_body_json_fed_device_info + } // End of template mw_body_json_iot_device_info template (value) JsonBody m_body_json_fed_device_info_list( in template (value) IoTAPI_TypesAndValues.DeviceInfoList p_deviceInfoList @@ -1349,11 +1349,35 @@ group ams_api { deviceInfoList_iot := p_deviceInfoList } // End of template m_body_json_fed_device_info_list - template (present) JsonBody mw_body_json_fed_device_info_list( + template (present) JsonBody mw_body_json_iot_device_info_list( template (present) IoTAPI_TypesAndValues.DeviceInfoList p_deviceInfoList := ? ) := { deviceInfoList_iot := p_deviceInfoList - } // End of template mw_body_json_fed_device_info_list + } // End of template mw_body_json_iot_device_info_list + + template (value) JsonBody m_body_json_iot_iot_platform_info( + in template (value) IotPlatformInfo p_iotPlatformInfo + ) := { + iotPlatformInfo := p_iotPlatformInfo + } // End of template m_body_json_iot_iot_platform_info + + template (present) JsonBody mw_body_json_iot_iot_platform_info( + template (present) IotPlatformInfo p_iotPlatformInfo := ? + ) := { + iotPlatformInfo := p_iotPlatformInfo + } // End of template mw_body_json_iot_iot_platform_info + + template (value) JsonBody m_body_json_iot_iot_platform_info_list( + in template (value) IotPlatformInfoList p_iotPlatformInfoList + ) := { + iotPlatformInfoList := p_iotPlatformInfoList + } // End of template m_body_json_iot_iot_platform_info_list + + template (present) JsonBody mw_body_json_iot_iot_platform_info_list( + template (present) IotPlatformInfoList p_iotPlatformInfoList := ? + ) := { + iotPlatformInfoList := p_iotPlatformInfoList + } // End of template mw_body_json_iot_iot_platform_info_list } // End of group iot -- GitLab From f69de71a232c23ce083ba196306a8bd75b28a665 Mon Sep 17 00:00:00 2001 From: garciay Date: Wed, 13 Sep 2023 08:15:14 +0200 Subject: [PATCH 42/99] Bug fixed in TP_MEC_MEC040_SRV_MEF_003_NF/BR --- gs032p3-ttcn-test-suite.code-workspace | 3 + ...Mec_FederationEnablementAPI_TestCases.ttcn | 59 +++++++++++++++++++ ...c_FederationEnablementAPI_TestControl.ttcn | 1 + 3 files changed, 63 insertions(+) diff --git a/gs032p3-ttcn-test-suite.code-workspace b/gs032p3-ttcn-test-suite.code-workspace index 6894bd4..da72d48 100644 --- a/gs032p3-ttcn-test-suite.code-workspace +++ b/gs032p3-ttcn-test-suite.code-workspace @@ -5,6 +5,9 @@ }, { "path": "../gs032p2-test-purposes" + }, + { + "path": "../eurecom" } ], "settings": { diff --git a/ttcn/AtsMec_FederationEnablement/AtsMec_FederationEnablementAPI_TestCases.ttcn b/ttcn/AtsMec_FederationEnablement/AtsMec_FederationEnablementAPI_TestCases.ttcn index 7030ecd..cda5f3b 100644 --- a/ttcn/AtsMec_FederationEnablement/AtsMec_FederationEnablementAPI_TestCases.ttcn +++ b/ttcn/AtsMec_FederationEnablement/AtsMec_FederationEnablementAPI_TestCases.ttcn @@ -1349,6 +1349,65 @@ module AtsMec_FederationEnablementAPI_TestCases { f_cf_01_http_down(); } // End of testcase TC_MEC_MEC040_SRV_MEF_003_NF + /** + * @desc Check that the IUT responds with an error when it receives a request with an inconsistant URI + */ + testcase TC_MEC_MEC040_SRV_MEF_003_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var SystemInfoList v_system_info_list := { + valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_1, PX_FED_SYSTEM_NAME_1, PX_FED_SYSTEM_ID_1)), + valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_2, PX_FED_SYSTEM_NAME_2, PX_FED_SYSTEM_ID_2)) + }; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_FED_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FED_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_system_info_list(v_system_info_list); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_FED_API_SUB_WRONG & "/" & oct2char(unichar2oct(PX_FED_SYSTEM_ID_1, "UTF-8")), // Inconsistent URI + 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_system_info_list(v_system_info_list); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC040_SRV_MEF_003_BR + } // End of group subscription group patch { diff --git a/ttcn/AtsMec_FederationEnablement/AtsMec_FederationEnablementAPI_TestControl.ttcn b/ttcn/AtsMec_FederationEnablement/AtsMec_FederationEnablementAPI_TestControl.ttcn index 2f973bc..f5634c7 100644 --- a/ttcn/AtsMec_FederationEnablement/AtsMec_FederationEnablementAPI_TestControl.ttcn +++ b/ttcn/AtsMec_FederationEnablement/AtsMec_FederationEnablementAPI_TestControl.ttcn @@ -38,6 +38,7 @@ module AtsMec_FederationEnablementAPI_TestControl { execute(TC_MEC_MEC040_SRV_MEF_003_OK()); execute(TC_MEC_MEC040_SRV_MEF_003_NF()); + execute(TC_MEC_MEC040_SRV_MEF_003_BR()); execute(TC_MEC_MEC040_SRV_MEF_004_OK_01()); execute(TC_MEC_MEC040_SRV_MEF_004_OK_02()); -- GitLab From 3cd64eefa0d7d10aa3b1a5eb8b104e074106bf95 Mon Sep 17 00:00:00 2001 From: garciay Date: Tue, 31 Oct 2023 08:47:05 +0100 Subject: [PATCH 43/99] Rename AtsMec_AtsMec_ApplicationPackageLifecycleAndOperationGranting into AtsMec_ApplicationPackageLifecycleAndOperationGranting --- .../AtsMec_Ams/AtsMec_Ams_TestCases.ttcn | 48 +++---- ...ycleAndOperationGrantingAPI_TestCases.ttcn | 122 +++++++++--------- ...leAndOperationGrantingAPI_TestControl.ttcn | 0 .../module.mk | 0 .../module/demo/HTTP_Test_no_ASPs.ttcn | 2 +- .../ttcn/LibCommon_Sync.ttcn | 2 +- 6 files changed, 87 insertions(+), 87 deletions(-) rename ttcn/{AtsMec_AtsMec_ApplicationPackageLifecycleAndOperationGranting => AtsMec_ApplicationPackageLifecycleAndOperationGranting}/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases.ttcn (98%) rename ttcn/{AtsMec_AtsMec_ApplicationPackageLifecycleAndOperationGranting => AtsMec_ApplicationPackageLifecycleAndOperationGranting}/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestControl.ttcn (100%) rename ttcn/{AtsMec_AtsMec_ApplicationPackageLifecycleAndOperationGranting => AtsMec_ApplicationPackageLifecycleAndOperationGranting}/module.mk (100%) diff --git a/ttcn/AtsMec/AtsMec_Ams/AtsMec_Ams_TestCases.ttcn b/ttcn/AtsMec/AtsMec_Ams/AtsMec_Ams_TestCases.ttcn index 4778a5e..7044065 100644 --- a/ttcn/AtsMec/AtsMec_Ams/AtsMec_Ams_TestCases.ttcn +++ b/ttcn/AtsMec/AtsMec_Ams/AtsMec_Ams_TestCases.ttcn @@ -46,7 +46,7 @@ var HttpMessage v_response; // Test control - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)){ + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); setverdict(inconc); stop; @@ -109,7 +109,7 @@ var Headers v_headers; // Test control - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)){ + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); setverdict(inconc); stop; @@ -161,7 +161,7 @@ */ testcase TC_MEC_MEC012_SRV_AMS_002_OK() runs on HttpComponent system HttpTestAdapter { var Headers v_headers; - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)){ + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); setverdict(inconc); stop; @@ -239,7 +239,7 @@ */ testcase TC_MEC_MEC012_SRV_AMS_002_BR() runs on HttpComponent system HttpTestAdapter { var Headers v_headers; - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)){ + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); setverdict(inconc); stop; @@ -315,7 +315,7 @@ var HttpMessage v_response; // Test control - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)){ + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); setverdict(inconc); stop; @@ -367,7 +367,7 @@ var Headers v_headers; // Test control - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)){ + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); setverdict(inconc); stop; @@ -418,7 +418,7 @@ var HttpMessage v_response; // Test control - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)){ + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); setverdict(inconc); stop; @@ -494,7 +494,7 @@ var Headers v_headers; // Test control - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)){ + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); setverdict(inconc); stop; @@ -554,7 +554,7 @@ var Headers v_headers; // Test control - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)){ + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); setverdict(inconc); stop; @@ -617,7 +617,7 @@ var HttpMessage v_response; // Test control - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)){ + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); setverdict(inconc); stop; @@ -665,7 +665,7 @@ var Headers v_headers; // Test control - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)){ + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); setverdict(inconc); stop; @@ -718,7 +718,7 @@ var HttpMessage v_response; // Test control - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)){ + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); setverdict(inconc); stop; @@ -783,7 +783,7 @@ var HttpMessage v_response; // Test control - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)){ + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); setverdict(inconc); stop; @@ -835,7 +835,7 @@ */ testcase TC_MEC_MEC012_SRV_AMS_003_OK() runs on HttpComponent system HttpTestAdapter { var Headers v_headers; - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)){ + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); setverdict(inconc); stop; @@ -898,7 +898,7 @@ */ testcase TC_MEC_MEC012_SRV_AMS_003_BR() runs on HttpComponent system HttpTestAdapter { var Headers v_headers; - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)){ + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); setverdict(inconc); stop; @@ -959,7 +959,7 @@ */ testcase TC_MEC_MEC012_SRV_AMS_004_OK() runs on HttpComponent system HttpTestAdapter { var Headers v_headers; - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)){ + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); setverdict(inconc); stop; @@ -1035,7 +1035,7 @@ */ testcase TC_MEC_MEC012_SRV_AMS_004_BR() runs on HttpComponent system HttpTestAdapter { var Headers v_headers; - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)){ + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); setverdict(inconc); stop; @@ -1107,7 +1107,7 @@ */ testcase TC_MEC_MEC012_SRV_AMS_005_OK() runs on HttpComponent system HttpTestAdapter { var Headers v_headers; - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)){ + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); setverdict(inconc); stop; @@ -1163,7 +1163,7 @@ */ testcase TC_MEC_MEC012_SRV_AMS_005_NF() runs on HttpComponent system HttpTestAdapter { var Headers v_headers; - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)){ + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); setverdict(inconc); stop; @@ -1221,7 +1221,7 @@ */ testcase TC_MEC_MEC012_SRV_AMS_006_OK() runs on HttpComponent system HttpTestAdapter { var Headers v_headers; - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)){ + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); setverdict(inconc); stop; @@ -1271,7 +1271,7 @@ */ testcase TC_MEC_MEC012_SRV_AMS_006_NF() runs on HttpComponent system HttpTestAdapter { var Headers v_headers; - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)){ + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); setverdict(inconc); stop; @@ -1329,7 +1329,7 @@ */ testcase TC_MEC_MEC012_SRV_AMS_007_OK() runs on HttpComponent system HttpTestAdapter { var Headers v_headers; - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)){ + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); setverdict(inconc); stop; @@ -1395,7 +1395,7 @@ */ testcase TC_MEC_MEC012_SRV_AMS_007_BR() runs on HttpComponent system HttpTestAdapter { var Headers v_headers; - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)){ + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); setverdict(inconc); stop; @@ -1459,7 +1459,7 @@ */ testcase TC_MEC_MEC012_SRV_AMS_007_NF() runs on HttpComponent system HttpTestAdapter { var Headers v_headers; - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)){ + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); setverdict(inconc); stop; diff --git a/ttcn/AtsMec_AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases.ttcn b/ttcn/AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases.ttcn similarity index 98% rename from ttcn/AtsMec_AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases.ttcn rename to ttcn/AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases.ttcn index 1f1e4af..4d9627b 100644 --- a/ttcn/AtsMec_AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases.ttcn +++ b/ttcn/AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases.ttcn @@ -45,7 +45,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var HttpMessage v_response; // Test control - if (not(PICS_GRANTS_MANAGEMENT)){ + if (not(PICS_GRANTS_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_GRANTS_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -109,7 +109,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var Headers v_headers; // Test control - if (not(PICS_GRANTS_MANAGEMENT)){ + if (not(PICS_GRANTS_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_GRANTS_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -166,7 +166,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var HttpMessage v_response; // Test control - if (not(PICS_GRANTS_MANAGEMENT)){ + if (not(PICS_GRANTS_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_GRANTS_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -232,7 +232,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var HttpMessage v_response_2; // Test control - if (not(PICS_GRANTS_MANAGEMENT)){ + if (not(PICS_GRANTS_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_GRANTS_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -310,7 +310,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var HttpMessage v_response; // Test control - if (not(PICS_GRANTS_MANAGEMENT)){ + if (not(PICS_GRANTS_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_GRANTS_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -361,7 +361,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var HttpMessage v_response; // Test control - if (not(PICS_GRANTS_MANAGEMENT)){ + if (not(PICS_GRANTS_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_GRANTS_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -424,7 +424,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var HttpMessage v_response; // Test control - if (not(PICS_GRANTS_MANAGEMENT)){ + if (not(PICS_GRANTS_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_GRANTS_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -479,7 +479,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var Headers v_headers; // Test control - if (not(PICS_GRANTS_MANAGEMENT)){ + if (not(PICS_GRANTS_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_GRANTS_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -530,7 +530,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var HttpMessage v_response; // Test control - if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + if (not(PICS_APP_PACKAGE_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -597,7 +597,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var Headers v_headers; // Test control - if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + if (not(PICS_APP_PACKAGE_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -653,7 +653,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var HttpMessage v_response; // Test control - if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + if (not(PICS_APP_PACKAGE_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -704,7 +704,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var HttpMessage v_response; // Test control - if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + if (not(PICS_APP_PACKAGE_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -755,7 +755,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var Headers v_headers; // Test control - if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + if (not(PICS_APP_PACKAGE_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -804,7 +804,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var HttpMessage v_response; // Test control - if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + if (not(PICS_APP_PACKAGE_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -857,7 +857,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var HttpMessage v_response; // Test control - if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + if (not(PICS_APP_PACKAGE_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -911,7 +911,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var HttpMessage v_response; // Test control - if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + if (not(PICS_APP_PACKAGE_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -960,7 +960,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var HttpMessage v_response; // Test control - if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + if (not(PICS_APP_PACKAGE_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -1010,7 +1010,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var HttpMessage v_response; // Test control - if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + if (not(PICS_APP_PACKAGE_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -1059,7 +1059,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var HttpMessage v_response; // Test control - if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + if (not(PICS_APP_PACKAGE_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -1117,7 +1117,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var HttpMessage v_response; // Test control - if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + if (not(PICS_APP_PACKAGE_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -1171,7 +1171,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var HttpMessage v_response; // Test control - if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + if (not(PICS_APP_PACKAGE_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -1224,7 +1224,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var HttpMessage v_response; // Test control - if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + if (not(PICS_APP_PACKAGE_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -1284,7 +1284,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var HttpMessage v_response; // Test control - if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + if (not(PICS_APP_PACKAGE_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -1338,7 +1338,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var HttpMessage v_response; // Test control - if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + if (not(PICS_APP_PACKAGE_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -1389,7 +1389,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var HttpMessage v_response; // Test control - if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + if (not(PICS_APP_PACKAGE_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -1445,7 +1445,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var HttpMessage v_response; // Test control - if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + if (not(PICS_APP_PACKAGE_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -1494,7 +1494,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var HttpMessage v_response; // Test control - if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + if (not(PICS_APP_PACKAGE_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -1544,7 +1544,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var HttpMessage v_response; // Test control - if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + if (not(PICS_APP_PACKAGE_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -1594,7 +1594,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var HttpMessage v_response; // Test control - if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + if (not(PICS_APP_PACKAGE_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -1641,7 +1641,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var HttpMessage v_response; // Test control - if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + if (not(PICS_APP_PACKAGE_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -1692,7 +1692,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var HttpMessage v_response; // Test control - if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + if (not(PICS_APP_PACKAGE_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -1742,7 +1742,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var HttpMessage v_response; // Test control - if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + if (not(PICS_APP_PACKAGE_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -1793,7 +1793,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var HttpMessage v_response; // Test control - if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + if (not(PICS_APP_PACKAGE_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -1844,7 +1844,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var HttpMessage v_response; // Test control - if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + if (not(PICS_APP_PACKAGE_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -1893,7 +1893,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var HttpMessage v_response; // Test control - if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + if (not(PICS_APP_PACKAGE_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -1946,7 +1946,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var HttpMessage v_response; // Test control - if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + if (not(PICS_APP_PACKAGE_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -1997,7 +1997,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var HttpMessage v_response; // Test control - if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + if (not(PICS_APP_PACKAGE_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -2048,7 +2048,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var Headers v_headers; // Test control - if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + if (not(PICS_APP_PACKAGE_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -2097,7 +2097,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var HttpMessage v_response; // Test control - if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + if (not(PICS_APP_PACKAGE_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -2150,7 +2150,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var HttpMessage v_response; // Test control - if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + if (not(PICS_APP_PACKAGE_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -2204,7 +2204,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var HttpMessage v_response; // Test control - if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + if (not(PICS_APP_PACKAGE_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -2253,7 +2253,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var HttpMessage v_response; // Test control - if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + if (not(PICS_APP_PACKAGE_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -2313,7 +2313,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var HttpMessage v_response; // Test control - if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + if (not(PICS_APP_PACKAGE_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -2367,7 +2367,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var HttpMessage v_response; // Test control - if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + if (not(PICS_APP_PACKAGE_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -2418,7 +2418,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var HttpMessage v_response; // Test control - if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + if (not(PICS_APP_PACKAGE_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -2474,7 +2474,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var HttpMessage v_response; // Test control - if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + if (not(PICS_APP_PACKAGE_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -2523,7 +2523,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var HttpMessage v_response; // Test control - if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + if (not(PICS_APP_PACKAGE_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -2573,7 +2573,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var HttpMessage v_response; // Test control - if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + if (not(PICS_APP_PACKAGE_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -2623,7 +2623,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var HttpMessage v_response; // Test control - if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + if (not(PICS_APP_PACKAGE_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -2670,7 +2670,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var HttpMessage v_response; // Test control - if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + if (not(PICS_APP_PACKAGE_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -2721,7 +2721,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var HttpMessage v_response; // Test control - if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + if (not(PICS_APP_PACKAGE_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -2775,7 +2775,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var HttpMessage v_response; // Test control - if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + if (not(PICS_APP_PACKAGE_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -2832,7 +2832,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var HttpMessage v_response; // Test control - if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + if (not(PICS_APP_PACKAGE_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -2889,7 +2889,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var HttpMessage v_response; // Test control - if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + if (not(PICS_APP_PACKAGE_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -2949,7 +2949,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var HttpMessage v_response; // Test control - if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + if (not(PICS_APP_PACKAGE_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -3006,7 +3006,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var HttpMessage v_response; // Test control - if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + if (not(PICS_APP_PACKAGE_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -3057,7 +3057,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var HttpMessage v_response; // Test control - if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + if (not(PICS_APP_PACKAGE_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -3108,7 +3108,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var HttpMessage v_response; // Test control - if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + if (not(PICS_APP_PACKAGE_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -3164,7 +3164,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var HttpMessage v_response; // Test control - if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + if (not(PICS_APP_PACKAGE_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -3211,7 +3211,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var HttpMessage v_response; // Test control - if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + if (not(PICS_APP_PACKAGE_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; @@ -3258,7 +3258,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var HttpMessage v_response; // Test control - if (not(PICS_APP_PACKAGE_MANAGEMENT)){ + if (not(PICS_APP_PACKAGE_MANAGEMENT)) { log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); setverdict(inconc); stop; diff --git a/ttcn/AtsMec_AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestControl.ttcn b/ttcn/AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestControl.ttcn similarity index 100% rename from ttcn/AtsMec_AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestControl.ttcn rename to ttcn/AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestControl.ttcn diff --git a/ttcn/AtsMec_AtsMec_ApplicationPackageLifecycleAndOperationGranting/module.mk b/ttcn/AtsMec_ApplicationPackageLifecycleAndOperationGranting/module.mk similarity index 100% rename from ttcn/AtsMec_AtsMec_ApplicationPackageLifecycleAndOperationGranting/module.mk rename to ttcn/AtsMec_ApplicationPackageLifecycleAndOperationGranting/module.mk diff --git a/ttcn/modules/titan.TestPorts.HTTPmsg/module/demo/HTTP_Test_no_ASPs.ttcn b/ttcn/modules/titan.TestPorts.HTTPmsg/module/demo/HTTP_Test_no_ASPs.ttcn index 3d69543..dfe710b 100644 --- a/ttcn/modules/titan.TestPorts.HTTPmsg/module/demo/HTTP_Test_no_ASPs.ttcn +++ b/ttcn/modules/titan.TestPorts.HTTPmsg/module/demo/HTTP_Test_no_ASPs.ttcn @@ -158,7 +158,7 @@ function f_singleEncDecCheck( in HTTPMessage p_msg) if(ischosen( p_msg.request ) ){ tr_expectedMsg.request.client_id := *; } - else if(ischosen( p_msg.response )){ + else if(ischosen( p_msg.response )) { tr_expectedMsg.response.client_id := *; } diff --git a/ttcn/patch_lib_common_titan/ttcn/LibCommon_Sync.ttcn b/ttcn/patch_lib_common_titan/ttcn/LibCommon_Sync.ttcn index 5b2ae66..7c54ff1 100644 --- a/ttcn/patch_lib_common_titan/ttcn/LibCommon_Sync.ttcn +++ b/ttcn/patch_lib_common_titan/ttcn/LibCommon_Sync.ttcn @@ -991,7 +991,7 @@ module LibCommon_Sync { syncPort.send(m_syncClientReady(p_syncId)); tc_sync.start; alt{ - [] syncPort.receive(m_syncServerReady(p_syncId)){ + [] syncPort.receive(m_syncServerReady(p_syncId)) { tc_sync.stop ; } [] tc_sync.timeout{ log("**** f_clientSync: Sync client did not receive message from sync server within the specified time limit - sync client will ask sync server to stop test case! ****") ; -- GitLab From 2c13226408e4b194a12932c97baed945f72a303b Mon Sep 17 00:00:00 2001 From: garciay Date: Tue, 31 Oct 2023 09:52:38 +0100 Subject: [PATCH 44/99] Rebuild AtsMec_V2XInformationServiceAPI --- ...ec_V2XInformationServiceAPI_TestCases.ttcn | 251 +++++++++++------- .../V2XInformationServiceAPI_Templates.ttcn | 74 +++++- 2 files changed, 219 insertions(+), 106 deletions(-) diff --git a/ttcn/AtsMec_V2XInformationService/AtsMec_V2XInformationServiceAPI_TestCases.ttcn b/ttcn/AtsMec_V2XInformationService/AtsMec_V2XInformationServiceAPI_TestCases.ttcn index ca8f28e..75e8df8 100644 --- a/ttcn/AtsMec_V2XInformationService/AtsMec_V2XInformationServiceAPI_TestCases.ttcn +++ b/ttcn/AtsMec_V2XInformationService/AtsMec_V2XInformationServiceAPI_TestCases.ttcn @@ -763,7 +763,15 @@ module AtsMec_V2XInformationServiceAPI_TestCases { m_http_message_body_json( m_body_json_v2x_predicted_qos( m_predicted_qos( + -, PX_LOC_GRANULARITY, + m_qos( + { + m_stream({ m_qos_kpi("", ""), m_qos_kpi("", "") }), // FIXME To be refined + m_stream({ m_qos_kpi("", ""), m_qos_kpi("", "") }), + m_stream({ m_qos_kpi("", ""), m_qos_kpi("", "") }) + } + )/*, { m_predicted_qos_routes( { @@ -793,7 +801,7 @@ module AtsMec_V2XInformationServiceAPI_TestCases { ) } ) - } + }*/ )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -806,6 +814,7 @@ module AtsMec_V2XInformationServiceAPI_TestCases { mw_http_message_body_json( mw_body_json_v2x_predicted_qos( mw_predicted_qos( + -, PX_LOC_GRANULARITY )))))) -> value v_response { tc_ac.stop; @@ -855,7 +864,15 @@ module AtsMec_V2XInformationServiceAPI_TestCases { m_http_message_body_json( m_body_json_v2x_predicted_qos( m_predicted_qos( + -, PX_LOC_GRANULARITY & "InvalidSemantic", + m_qos( + { + m_stream({ m_qos_kpi("", ""), m_qos_kpi("", "") }), // FIXME To be refined + m_stream({ m_qos_kpi("", ""), m_qos_kpi("", "") }), + m_stream({ m_qos_kpi("", ""), m_qos_kpi("", "") }) + } + )/*, { m_predicted_qos_routes( { @@ -885,7 +902,7 @@ module AtsMec_V2XInformationServiceAPI_TestCases { ) } ) - } + }*/ )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -943,7 +960,15 @@ module AtsMec_V2XInformationServiceAPI_TestCases { m_http_message_body_json( m_body_json_v2x_predicted_qos( m_predicted_qos( + -, PX_LOC_GRANULARITY, + m_qos( + { + m_stream({ m_qos_kpi("", ""), m_qos_kpi("", "") }), // FIXME To be refined + m_stream({ m_qos_kpi("", ""), m_qos_kpi("", "") }), + m_stream({ m_qos_kpi("", ""), m_qos_kpi("", "") }) + } + )/*, { m_predicted_qos_routes( { @@ -973,7 +998,7 @@ module AtsMec_V2XInformationServiceAPI_TestCases { ) } ) - } + }*/ )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -1030,8 +1055,16 @@ module AtsMec_V2XInformationServiceAPI_TestCases { v_headers, m_http_message_body_json( m_body_json_v2x_message( - m_v2x_message - ))))); + m_v2x_message( + m_v2x_msg_properties_values( + -, -, -, + m_location_info( + m_ecgi( + PX_CELL_ID, + m_plmn(PX_MCC, PX_MNC) + ), + m_location_info_geo_area(43.72, 10.41) + )))))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -1088,7 +1121,15 @@ module AtsMec_V2XInformationServiceAPI_TestCases { m_http_message_body_json( m_body_json_v2x_message( m_v2x_message( - -, + m_v2x_msg_properties_values( + -, -, -, + m_location_info( + m_ecgi( + PX_CELL_ID, + m_plmn(PX_MCC, PX_MNC) + ), + m_location_info_geo_area(43.72, 10.41) + )), "UnknownEncodeFormat" )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -1425,7 +1466,6 @@ module AtsMec_V2XInformationServiceAPI_TestCases { m_http_message_body_json( m_body_json_prov_chg_uu_uni_subscription( m_prov_chg_uu_uni_subscription( - PX_PROV_UU_UNI_SUB_CALLBACK, m_prov_chg_uu_uni_filter_criteria( m_location_info( m_ecgi( @@ -1438,7 +1478,9 @@ module AtsMec_V2XInformationServiceAPI_TestCases { m_v2x_application_server( oct2char(unichar2oct(PX_V2X_SERVER_IP_ADDRESS, "UTF-8")), oct2char(unichar2oct(PX_V2X_SERVER_UDP_PORT, "UTF-8")) - )))))))); + )), + PX_PROV_UU_UNI_SUB_CALLBACK + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -1450,8 +1492,8 @@ module AtsMec_V2XInformationServiceAPI_TestCases { mw_http_message_body_json( mw_body_json_prov_chg_uu_uni_subscription( mw_prov_chg_uu_uni_subscription( - PX_PROV_UU_UNI_SUB_CALLBACK, -, + PX_PROV_UU_UNI_SUB_CALLBACK, ? )))))) { tc_ac.stop; @@ -1501,7 +1543,6 @@ module AtsMec_V2XInformationServiceAPI_TestCases { m_http_message_body_json( m_body_json_prov_chg_uu_mbms_subscription( m_prov_chg_uu_mbms_subscription( - PX_PROV_UU_MBMS_SUB_CALLBACK, m_prov_chg_uu_mbms_filter_criteria( m_location_info( m_ecgi( @@ -1521,7 +1562,9 @@ module AtsMec_V2XInformationServiceAPI_TestCases { PX_V2X_SERVICE_AREA_ID, PX_MCC, PX_MNC - ))))))))); + ))), + PX_PROV_UU_MBMS_SUB_CALLBACK + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -1533,8 +1576,8 @@ module AtsMec_V2XInformationServiceAPI_TestCases { mw_http_message_body_json( mw_body_json_prov_chg_uu_mbms_subscription( mw_prov_chg_uu_mbms_subscription( - PX_PROV_UU_MBMS_SUB_CALLBACK, -, + PX_PROV_UU_MBMS_SUB_CALLBACK, ? )))))) { tc_ac.stop; @@ -1584,17 +1627,18 @@ module AtsMec_V2XInformationServiceAPI_TestCases { m_http_message_body_json( m_body_json_prov_chg_pc5_subscription( m_prov_chg_pc5_subscription( - PX_PROV_PC5_SUB_CALLBACK, - m_filter_criteria( - PX_V2X_DST_LAYER_2_ID, - m_location_info( - m_ecgi( - PX_CELL_ID,m_plmn(PX_MCC, PX_MNC) - ), - m_location_info_geo_area( - 43.72, - 10.41 - ))))))))); + m_filter_criteria( + PX_V2X_DST_LAYER_2_ID, + m_location_info( + m_ecgi( + PX_CELL_ID,m_plmn(PX_MCC, PX_MNC) + ), + m_location_info_geo_area( + 43.72, + 10.41 + ))), + PX_PROV_PC5_SUB_CALLBACK + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -1606,8 +1650,8 @@ module AtsMec_V2XInformationServiceAPI_TestCases { mw_http_message_body_json( mw_body_json_prov_chg_pc5_subscription( mw_prov_chg_pc5_subscription( - PX_PROV_PC5_SUB_CALLBACK, -, + PX_PROV_PC5_SUB_CALLBACK, ? )))))) { tc_ac.stop; @@ -1657,8 +1701,8 @@ module AtsMec_V2XInformationServiceAPI_TestCases { m_http_message_body_json( m_body_json_v2x_msg_subscription( m_v2x_msg_subscription( - PX_PROV_V2X_SUB_CALLBACK, - m_v2x_msg_subscription_filter_criteria + m_v2x_msg_subscription_filter_criteria, + PX_PROV_V2X_SUB_CALLBACK )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -1671,8 +1715,8 @@ module AtsMec_V2XInformationServiceAPI_TestCases { mw_http_message_body_json( mw_body_json_v2x_msg_subscription( mw_v2x_msg_subscription( - PX_PROV_V2X_SUB_CALLBACK, -, + PX_PROV_V2X_SUB_CALLBACK, ? )))))) { tc_ac.stop; @@ -1722,20 +1766,21 @@ module AtsMec_V2XInformationServiceAPI_TestCases { m_http_message_body_json( m_body_json_prov_chg_uu_uni_subscription( m_prov_chg_uu_uni_subscription_invalid( - PX_PROV_UU_UNI_SUB_CALLBACK, - m_prov_chg_uu_uni_filter_criteria( - m_location_info( - m_ecgi( - PX_CELL_ID,m_plmn(PX_MCC, PX_MNC) - ), - m_location_info_geo_area( - 43.72, - 10.41 - )), - m_v2x_application_server( - oct2char(unichar2oct(PX_V2X_SERVER_IP_ADDRESS, "UTF-8")), - oct2char(unichar2oct(PX_V2X_SERVER_UDP_PORT, "UTF-8")) - )))))))); + m_prov_chg_uu_uni_filter_criteria( + m_location_info( + m_ecgi( + PX_CELL_ID,m_plmn(PX_MCC, PX_MNC) + ), + m_location_info_geo_area( + 43.72, + 10.41 + )), + m_v2x_application_server( + oct2char(unichar2oct(PX_V2X_SERVER_IP_ADDRESS, "UTF-8")), + oct2char(unichar2oct(PX_V2X_SERVER_UDP_PORT, "UTF-8")) + )), + PX_PROV_UU_UNI_SUB_CALLBACK + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -1789,7 +1834,7 @@ module AtsMec_V2XInformationServiceAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & v_prov_chg_uu_uni_subscription.links.self_, + PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & v_prov_chg_uu_uni_subscription.links.self_.href, v_headers ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -1803,8 +1848,8 @@ module AtsMec_V2XInformationServiceAPI_TestCases { mw_http_message_body_json( mw_body_json_prov_chg_uu_uni_subscription( mw_prov_chg_uu_uni_subscription( - PX_PROV_UU_UNI_SUB_CALLBACK, -, + PX_PROV_UU_UNI_SUB_CALLBACK, ? )))))) { tc_ac.stop; @@ -1852,7 +1897,7 @@ module AtsMec_V2XInformationServiceAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & v_prov_chg_uu_mbms_subscription.links.self_, + PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & v_prov_chg_uu_mbms_subscription.links.self_.href, v_headers ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -1866,8 +1911,8 @@ module AtsMec_V2XInformationServiceAPI_TestCases { mw_http_message_body_json( mw_body_json_prov_chg_uu_mbms_subscription( mw_prov_chg_uu_mbms_subscription( - PX_PROV_UU_MBMS_SUB_CALLBACK, -, + PX_PROV_UU_MBMS_SUB_CALLBACK, ? )))))) { tc_ac.stop; @@ -1915,7 +1960,7 @@ module AtsMec_V2XInformationServiceAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & v_prov_chg_pc5_subscription.links.self_, + PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & v_prov_chg_pc5_subscription.links.self_.href, v_headers ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -1928,11 +1973,11 @@ module AtsMec_V2XInformationServiceAPI_TestCases { mw_http_response_ok( mw_http_message_body_json( mw_body_json_prov_chg_pc5_subscription( - mw_prov_chg_pc5_subscription( - PX_PROV_PC5_SUB_CALLBACK, - -, - ? - )))))) { + mw_prov_chg_pc5_subscription( + -, + PX_PROV_PC5_SUB_CALLBACK, + ? + )))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully registers subscription ***"); @@ -1978,7 +2023,7 @@ module AtsMec_V2XInformationServiceAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & v_v2x_msg_subscription.links.self_, + PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & v_v2x_msg_subscription.links.self_.href, v_headers ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -1992,8 +2037,8 @@ module AtsMec_V2XInformationServiceAPI_TestCases { mw_http_message_body_json( mw_body_json_v2x_msg_subscription( mw_v2x_msg_subscription( - PX_PROV_V2X_SUB_CALLBACK, -, + PX_PROV_V2X_SUB_CALLBACK, ? )))))) { tc_ac.stop; @@ -2041,7 +2086,7 @@ module AtsMec_V2XInformationServiceAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & v_v2x_msg_subscription.links.self_, + PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & v_v2x_msg_subscription.links.self_.href, v_headers ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -2152,12 +2197,11 @@ module AtsMec_V2XInformationServiceAPI_TestCases { httpPort.send( m_http_request( m_http_request_put( - PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & v_prov_chg_uu_uni_subscription.links.self_, + PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & v_prov_chg_uu_uni_subscription.links.self_.href, v_headers, m_http_message_body_json( m_body_json_prov_chg_uu_uni_subscription( m_prov_chg_uu_uni_subscription( - PX_PROV_UU_UNI_SUB_CALLBACK, m_prov_chg_uu_uni_filter_criteria( m_location_info( m_ecgi( @@ -2170,7 +2214,8 @@ module AtsMec_V2XInformationServiceAPI_TestCases { m_v2x_application_server( oct2char(unichar2oct(PX_V2X_SERVER_IP_ADDRESS, "UTF-8")), oct2char(unichar2oct(PX_V2X_SERVER_UDP_PORT, "UTF-8")) - )), + )), + PX_PROV_UU_UNI_SUB_CALLBACK, v_prov_chg_uu_uni_subscription.links )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -2184,8 +2229,8 @@ module AtsMec_V2XInformationServiceAPI_TestCases { mw_http_message_body_json( mw_body_json_prov_chg_uu_uni_subscription( mw_prov_chg_uu_uni_subscription( - PX_PROV_UU_UNI_SUB_CALLBACK, -, + PX_PROV_UU_UNI_SUB_CALLBACK, v_prov_chg_uu_uni_subscription.links )))))) { tc_ac.stop; @@ -2233,12 +2278,11 @@ module AtsMec_V2XInformationServiceAPI_TestCases { httpPort.send( m_http_request( m_http_request_put( - PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & v_prov_chg_uu_mbms_subscription.links.self_, + PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & v_prov_chg_uu_mbms_subscription.links.self_.href, v_headers, m_http_message_body_json( m_body_json_prov_chg_uu_mbms_subscription( m_prov_chg_uu_mbms_subscription( - PX_PROV_UU_MBMS_SUB_CALLBACK, m_prov_chg_uu_mbms_filter_criteria( m_location_info( m_ecgi( @@ -2259,6 +2303,7 @@ module AtsMec_V2XInformationServiceAPI_TestCases { PX_MCC, PX_MNC ))), + PX_PROV_UU_MBMS_SUB_CALLBACK, v_prov_chg_uu_mbms_subscription.links )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -2272,8 +2317,8 @@ module AtsMec_V2XInformationServiceAPI_TestCases { mw_http_message_body_json( mw_body_json_prov_chg_uu_mbms_subscription( mw_prov_chg_uu_mbms_subscription( - PX_PROV_UU_MBMS_SUB_CALLBACK, -, + PX_PROV_UU_MBMS_SUB_CALLBACK, v_prov_chg_uu_mbms_subscription.links )))))) { tc_ac.stop; @@ -2321,23 +2366,23 @@ module AtsMec_V2XInformationServiceAPI_TestCases { httpPort.send( m_http_request( m_http_request_put( - PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & v_prov_chg_pc5_subscription.links.self_, + PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & v_prov_chg_pc5_subscription.links.self_.href, v_headers, m_http_message_body_json( m_body_json_prov_chg_pc5_subscription( m_prov_chg_pc5_subscription( - PX_PROV_PC5_SUB_CALLBACK, - m_filter_criteria( - PX_V2X_DST_LAYER_2_ID, - m_location_info( - m_ecgi( - PX_CELL_ID,m_plmn(PX_MCC, PX_MNC) - ), - m_location_info_geo_area( - 43.77, - 10.46 - ))), - v_prov_chg_pc5_subscription.links + m_filter_criteria( + PX_V2X_DST_LAYER_2_ID, + m_location_info( + m_ecgi( + PX_CELL_ID,m_plmn(PX_MCC, PX_MNC) + ), + m_location_info_geo_area( + 43.77, + 10.46 + ))), + PX_PROV_PC5_SUB_CALLBACK, + v_prov_chg_pc5_subscription.links )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -2349,11 +2394,11 @@ module AtsMec_V2XInformationServiceAPI_TestCases { mw_http_response_ok( mw_http_message_body_json( mw_body_json_prov_chg_pc5_subscription( - mw_prov_chg_pc5_subscription( - PX_PROV_PC5_SUB_CALLBACK, - -, - v_prov_chg_pc5_subscription.links - )))))) { + mw_prov_chg_pc5_subscription( + -, + PX_PROV_PC5_SUB_CALLBACK, + v_prov_chg_pc5_subscription.links + )))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully registers subscription ***"); @@ -2399,13 +2444,13 @@ module AtsMec_V2XInformationServiceAPI_TestCases { httpPort.send( m_http_request( m_http_request_put( - PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & v_v2x_msg_subscription.links.self_, + PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & v_v2x_msg_subscription.links.self_.href, v_headers, m_http_message_body_json( m_body_json_v2x_msg_subscription( m_v2x_msg_subscription( - PX_PROV_V2X_SUB_CALLBACK, m_v2x_msg_subscription_filter_criteria, + PX_PROV_V2X_SUB_CALLBACK, v_v2x_msg_subscription.links )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -2419,8 +2464,8 @@ module AtsMec_V2XInformationServiceAPI_TestCases { mw_http_message_body_json( mw_body_json_v2x_msg_subscription( mw_v2x_msg_subscription( - PX_PROV_V2X_SUB_CALLBACK, -, + PX_PROV_V2X_SUB_CALLBACK, v_v2x_msg_subscription.links )))))) { tc_ac.stop; @@ -2467,26 +2512,26 @@ module AtsMec_V2XInformationServiceAPI_TestCases { httpPort.send( m_http_request( m_http_request_put( - PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & v_prov_chg_uu_uni_subscription.links.self_, + PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & v_prov_chg_uu_uni_subscription.links.self_.href, v_headers, m_http_message_body_json( m_body_json_prov_chg_uu_uni_subscription( m_prov_chg_uu_uni_subscription_invalid( - PX_PROV_UU_UNI_SUB_CALLBACK, - m_prov_chg_uu_uni_filter_criteria( - m_location_info( - m_ecgi( - PX_CELL_ID,m_plmn(PX_MCC, PX_MNC) - ), - m_location_info_geo_area( - 43.72, - 10.41 - )), - m_v2x_application_server( - oct2char(unichar2oct(PX_V2X_SERVER_IP_ADDRESS, "UTF-8")), - oct2char(unichar2oct(PX_V2X_SERVER_UDP_PORT, "UTF-8")) - )), - v_prov_chg_uu_uni_subscription.links + m_prov_chg_uu_uni_filter_criteria( + m_location_info( + m_ecgi( + PX_CELL_ID,m_plmn(PX_MCC, PX_MNC) + ), + m_location_info_geo_area( + 43.72, + 10.41 + )), + m_v2x_application_server( + oct2char(unichar2oct(PX_V2X_SERVER_IP_ADDRESS, "UTF-8")), + oct2char(unichar2oct(PX_V2X_SERVER_UDP_PORT, "UTF-8")) + )), + PX_PROV_UU_UNI_SUB_CALLBACK, + v_prov_chg_uu_uni_subscription.links )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -2546,7 +2591,6 @@ module AtsMec_V2XInformationServiceAPI_TestCases { m_http_message_body_json( m_body_json_prov_chg_uu_uni_subscription( m_prov_chg_uu_uni_subscription_invalid( - PX_PROV_UU_UNI_SUB_CALLBACK, m_prov_chg_uu_uni_filter_criteria( m_location_info( m_ecgi( @@ -2560,6 +2604,7 @@ module AtsMec_V2XInformationServiceAPI_TestCases { oct2char(unichar2oct(PX_V2X_SERVER_IP_ADDRESS, "UTF-8")), oct2char(unichar2oct(PX_V2X_SERVER_UDP_PORT, "UTF-8")) )), + PX_PROV_UU_UNI_SUB_CALLBACK, v_prov_chg_uu_uni_subscription.links )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -2616,7 +2661,7 @@ module AtsMec_V2XInformationServiceAPI_TestCases { httpPort.send( m_http_request( m_http_request_delete( - PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & v_prov_chg_uu_uni_subscription.links.self_, + PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & v_prov_chg_uu_uni_subscription.links.self_.href, v_headers ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -2672,7 +2717,7 @@ module AtsMec_V2XInformationServiceAPI_TestCases { httpPort.send( m_http_request( m_http_request_delete( - PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & v_prov_chg_uu_mbms_subscription.links.self_, + PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & v_prov_chg_uu_mbms_subscription.links.self_.href, v_headers ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -2728,7 +2773,7 @@ module AtsMec_V2XInformationServiceAPI_TestCases { httpPort.send( m_http_request( m_http_request_delete( - PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & v_prov_chg_pc5_subscription.links.self_, + PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & v_prov_chg_pc5_subscription.links.self_.href, v_headers ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -2784,7 +2829,7 @@ module AtsMec_V2XInformationServiceAPI_TestCases { httpPort.send( m_http_request( m_http_request_delete( - PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & v_v2x_msg_subscription.links.self_, + PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & v_v2x_msg_subscription.links.self_.href, v_headers ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); diff --git a/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Templates.ttcn b/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Templates.ttcn index 69f6243..5365b30 100644 --- a/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Templates.ttcn +++ b/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Templates.ttcn @@ -69,7 +69,7 @@ module V2XInformationServiceAPI_Templates { } // End of template mw_pc5_provisioning_info template (omit) PredictedQos m_predicted_qos( - in template (value) PredictionTarget p_predictionTarget, + in template (value) PredictionTarget p_predictionTarget := E2E_APPLICATION_INSTANCE_PREDICTION, in template (value) Json.String p_locationGranularity, in template (value) Qos p_qos, in template (omit) TimeStamp p_noticePeriod := omit, @@ -104,9 +104,53 @@ module V2XInformationServiceAPI_Templates { qos := p_qos } // End of template mw_predicted_qos + template (value) Qos m_qos( + in template (value) StreamList p_stream + ) := { + stream := p_stream + } // End of template m_qos + + template (present) Qos mw_qos( + template (present) StreamList p_stream := ? + ) := { + stream := p_stream + } // End of template mw_qos + + template (value) Stream m_stream( + in template (value) QosKpiList p_qos_kpi + ) := { + qosKpi := p_qos_kpi + } // End of template m_stream + + template (present) Stream mw_stream( + template (present) QosKpiList p_qos_kpi := ? + ) := { + qosKpi := p_qos_kpi + } // End of template mw_stream + + template (omit) QosKpi m_qos_kpi( + in Json.String p_kpi_name, + in Json.String p_kpi_value, + in template (omit) Json.String p_confidence := omit + ) := { + kpiName := p_kpi_name, + kpiValue := p_kpi_value, + confidence := p_confidence + } // End of template m_qos_kpi + + template (present) QosKpi mw_qos_kpi( + template (present) Json.String p_kpi_name := ?, + template (present) Json.String p_kpi_value := ?, + template Json.String p_confidence := * + ) := { + kpiName := p_kpi_name, + kpiValue := p_kpi_value, + confidence := p_confidence + } // End of template mw_qos_kpi + template (omit) RouteInfo m_route_info( - in template (value) LocationInfo p_location, - in template (omit) TimeStamp p_time := omit + in template (value) LocationInfo p_location, + in template (omit) TimeStamp p_time := omit ) := { location := p_location, time := p_time @@ -208,6 +252,30 @@ module V2XInformationServiceAPI_Templates { msgContent := p_msgContent } // End of template mw_v2x_message + template (value) V2xMsgPropertiesValues m_v2x_msg_properties_values( + in StdOrganization p_std_organization := ETSI, + in MsgType p_msg_type := cam, + in Json.Integer p_msg_protocol_version := 1, + in template (value) LocationInfo p_location_info + ) := { + stdOrganization := p_std_organization, + msgType := p_msg_type, + msgProtocolVersion := p_msg_protocol_version, + locationInfo := p_location_info + } // End of template m_v2x_msg_properties_values + + template (present) V2xMsgPropertiesValues mw_v2x_msg_properties_values( + template (present) StdOrganization p_std_organization := ?, + template (present) MsgType p_msg_type := ?, + template (present) Json.Integer p_msg_protocol_version := ?, + template (present) LocationInfo p_location_info := ? + ) := { + stdOrganization := p_std_organization, + msgType := p_msg_type, + msgProtocolVersion := p_msg_protocol_version, + locationInfo := p_location_info + } // End of template mw_v2x_msg_properties_values + template (omit) ProvChgUuUniSubscription m_prov_chg_uu_uni_subscription( in template (value) ProvChgUuUniSubscriptionFilterCriteria p_filterCriteria, in template (omit) Json.AnyURI p_callbackReference := omit, -- GitLab From 1bb177ed7a07dfea3acbb189dfe029abe1ec0ece Mon Sep 17 00:00:00 2001 From: garciay Date: Tue, 31 Oct 2023 10:58:27 +0100 Subject: [PATCH 45/99] Rebuild AtsMec_EdgePlatformApplicationEnablement --- ttcn/AtsMec_EdgePlatformApplicationEnablement/module.mk | 1 - 1 file changed, 1 deletion(-) diff --git a/ttcn/AtsMec_EdgePlatformApplicationEnablement/module.mk b/ttcn/AtsMec_EdgePlatformApplicationEnablement/module.mk index ec2ed73..25ab67b 100644 --- a/ttcn/AtsMec_EdgePlatformApplicationEnablement/module.mk +++ b/ttcn/AtsMec_EdgePlatformApplicationEnablement/module.mk @@ -15,7 +15,6 @@ modules := ../LibCommon \ ../LibMec/EdgePlatformApplicationEnablementAPI \ ../LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI \ ../LibMec/TrafficManagementAPI \ - ../LibMec/RnisAPI \ ../LibMec/UEAppInterfaceAPI \ ../LibMec/UEidentityAPI \ ../LibMec/V2XInformationServiceAPI \ -- GitLab From 71c6bbad37edd89f61c18ee2dd4b5f7780612a98 Mon Sep 17 00:00:00 2001 From: garciay Date: Tue, 31 Oct 2023 11:02:28 +0100 Subject: [PATCH 46/99] Rebuild AtsMec_UEidentity --- ttcn/AtsMec_UEidentity/module.mk | 1 + 1 file changed, 1 insertion(+) diff --git a/ttcn/AtsMec_UEidentity/module.mk b/ttcn/AtsMec_UEidentity/module.mk index d351d3b..9fc9bb4 100644 --- a/ttcn/AtsMec_UEidentity/module.mk +++ b/ttcn/AtsMec_UEidentity/module.mk @@ -28,6 +28,7 @@ modules := ../LibCommon \ ../../titan-test-system-framework/ccsrc/loggers \ ../../titan-test-system-framework/ccsrc/Protocols/Http \ ../../titan-test-system-framework/ccsrc/Protocols/Tcp \ + ../../titan-test-system-framework/ccsrc/Protocols/Xml \ ../../titan-test-system-framework/ccsrc/Helpers \ ../../ccsrc/Ports/LibHttp \ ../../ccsrc/EncDec/LibMec \ -- GitLab From ec0413371f2bddf8ce2c869f8f3890cb4352ca29 Mon Sep 17 00:00:00 2001 From: garciay Date: Tue, 31 Oct 2023 16:35:49 +0100 Subject: [PATCH 47/99] Rebuild LibMec/ApplicationMobilityServiceAPI --- .../AtsMec_Ams/AtsMec_Ams_TestCases.ttcn | 1733 ----------------- .../AtsMec_Ams/AtsMec_Ams_TestControl.ttcn | 103 - ttcn/AtsMec/AtsMec_Ams/module.mk | 48 - .../ApplicationMobilityServiceAPI_Pics.ttcn | 5 + .../ApplicationMobilityServiceAPI_Pixits.ttcn | 18 + ...plicationMobilityServiceAPI_Templates.ttcn | 172 ++ ...tionMobilityServiceAPI_TypesAndValues.ttcn | 4 +- .../ttcn/LibHttp_JsonMessageBodyTypes.ttcn | 12 +- .../ttcn/LibHttp_JsonTemplates.ttcn | 129 +- 9 files changed, 269 insertions(+), 1955 deletions(-) delete mode 100644 ttcn/AtsMec/AtsMec_Ams/AtsMec_Ams_TestCases.ttcn delete mode 100644 ttcn/AtsMec/AtsMec_Ams/AtsMec_Ams_TestControl.ttcn delete mode 100644 ttcn/AtsMec/AtsMec_Ams/module.mk diff --git a/ttcn/AtsMec/AtsMec_Ams/AtsMec_Ams_TestCases.ttcn b/ttcn/AtsMec/AtsMec_Ams/AtsMec_Ams_TestCases.ttcn deleted file mode 100644 index 7044065..0000000 --- a/ttcn/AtsMec/AtsMec_Ams/AtsMec_Ams_TestCases.ttcn +++ /dev/null @@ -1,1733 +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 021 V2.1.1 -*/ - module AtsMec_Ams_TestCases { - - // Libcommon - import from LibCommon_BasicTypesAndValues all; - import from LibCommon_Sync all; - - // LibHttp - import from LibHttp_TypesAndValues all; - import from LibHttp_Functions all; - import from LibHttp_Templates all; - import from LibHttp_JsonTemplates all; - import from LibHttp_TestSystem all; - - // LibMec_LocationAPI - import from Ams_Templates all; - import from Ams_Pics all; - import from Ams_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; - - group appMobilityServices { - - /** - * @desc Check that the AMS service returns information about the registered application mobility services when requested - * @see ETSI GS MEC 021 2.1.1, clause 8.3.3.1 - */ - testcase TC_MEC_MEC012_SRV_AMS_001_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_AMS 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_ME_APP_AMS_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_mobility_service_info( - mw_app_mobility_service_info( - { - mw_app_mobility_registration_info( - mw_service_consumer_id( - PX_APP_INS_ID, - PX_MEP_ID - ) - ) - } - )))))) -> value v_response { - tc_ac.stop; - - if (f_check_headers(valueof(v_response.response.header)) == true) { - log("*** " & testcasename() & ": PASS: IUT successfully responds with a AppTerminationNotificationSubscription ***"); - 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_MEC012_SRV_AMS_001_OK - - /** - * @desc Check that the AMS service returns an error when receives a query about a registered application mobility service with wrong parameters - * @see ETSI GS MEC 021 2.1.1, clause 8.3.3.1 - */ - testcase TC_MEC_MEC012_SRV_AMS_001_BR() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - - // Test control - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_AMS 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_ME_APP_AMS_URI & "?appMobilityService=" & oct2char(unichar2oct(PX_APP_MOBILITY_SERVICE_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( - mw_http_message_body_json( - mw_body_json_problem_details( - mw_problem_details( - -, - -, - 400 - )))))) { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a ProblemDetails set to 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_MEC012_SRV_AMS_001_BR - - - /** - * @desc Check that the AMS service creates a new application mobility services when requested - * @see ETSI GS MEC 021 2.1.1, clause 8.3.3.4 - */ - testcase TC_MEC_MEC012_SRV_AMS_002_OK() runs on HttpComponent system HttpTestAdapter { - var Headers v_headers; - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_AMS 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_ME_APP_AMS_URI, - v_headers, - m_http_message_body_json( - m_body_json_ams_registration_request( - m_registration_request( - m_service_consumer_id( - PX_APP_INS_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_mobility_service_info( - mw_app_mobility_service_info( - mw_registration_info( - mw_service_consumer_id( - PX_APP_INS_ID, - - - ), - -, - - - ), - PX_APP_MOBILITY_SERVICE_ID - ) - ) - ) - ) - ) - ) - - { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a AppMobilityServiceInfo and status code set to 201 Created ***"); - 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_MEC012_SRV_AMS_002_OK - - /** - * @desc Check that the AMS service sends an error when it receives a malformed request to create a new application mobility service - * @see ETSI GS MEC 021 2.1.1, clause 8.3.3.4 - */ - testcase TC_MEC_MEC012_SRV_AMS_002_BR() runs on HttpComponent system HttpTestAdapter { - var Headers v_headers; - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_AMS 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_ME_APP_AMS_URI, - v_headers, - m_http_message_body_json( - m_body_json_ams_registration_request( - m_registration_request_error( - m_service_consumer_error( - PX_APP_INS_ID, - - - ) - ) - ) - ) - ) - ) - ); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body - tc_ac.start; - 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 - ) - ) - ) - ) - ) - ) - { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a Problem Details when bad request is performed ***"); - 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_MEC012_SRV_AMS_002_BR - } // End of group appMobilityServices - - - group individualAppMobilityService{ - - /** - * @desc Check that the AMS service returns information about this individual application mobility service - * @see ETSI GS MEC 021 2.0.10, clause 8.4.3.1 - */ - testcase TC_MEC_MEC012_SRV_AMS_011_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_AMS 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_ME_APP_AMS_URI & oct2char(unichar2oct(PX_APP_MOBILITY_SERVICE_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_mobility_service_info( - mw_app_mobility_service_info( - -, - PX_APP_MOBILITY_SERVICE_ID - )))))) -> value v_response { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a AppMobilityServiceInfo***"); - 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_MEC012_SRV_AMS_011_OK - - /** - * @desc Check that the AMS service sends an error when receives a query about a not existing individual application mobility service - * @see ETSI GS MEC 021 2.0.10, clause 8.4.3.1 - */ - testcase TC_MEC_MEC012_SRV_AMS_011_NF() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - - // Test control - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_AMS 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_ME_APP_AMS_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_APP_MOBILITY_SERVICE_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 - - } // End of testcase TC_MEC_MEC012_SRV_AMS_011_NF - - - - /** - * @desc Check that the AMS service modifies the individual application mobility service when requested - * @see ETSI GS MEC 021 2.0.10, clause 8.4.3.2 - */ - testcase TC_MEC_MEC012_SRV_AMS_012_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_AMS 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_ME_APP_AMS_URI & oct2char(unichar2oct(PX_APP_MOBILITY_SERVICE_ID, "UTF-8")), - v_headers, - m_http_message_body_json( - m_body_json_ams_registration_request( - m_registration_request( - m_service_consumer_id( - PX_APP_INS_ID, - - - ), - -, - - - ) - ) - ) - ))); - 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_mobility_service_info( - mw_app_mobility_service_info({ - *, - mw_app_mobility_registration_info( - mw_service_consumer_id( - PX_APP_INS_ID, - - - ), - -, - - - ), - *}, - - - ) - ) - ) - ))) -> value v_response { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a AppMobilityServiceInfo***"); - 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_MEC012_SRV_AMS_012_OK - - /** - * @desc Check that the AMS service sends an error when receives a request to modify a not existing individual application mobility service - * @see ETSI GS MEC 021 2.0.10, clause 8.4.3.2 - */ - testcase TC_MEC_MEC012_SRV_AMS_012_NF() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - - // Test control - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_AMS 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_ME_APP_AMS_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_APP_MOBILITY_SERVICE_ID, "UTF-8")), - v_headers, - m_http_message_body_json( - m_body_json_ams_registration_request( - m_registration_request( - m_service_consumer_id( - PX_APP_INS_ID, - - - ), - -, - - - ) - ) - ) - ))); - 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 - - } // End of testcase TC_MEC_MEC012_SRV_AMS_012_NF - - /** - * @desc Check that the AMS service sends an error when receives a request to modify a individual application mobility service using bad parameters - * @see ETSI GS MEC 021 2.0.10, clause 8.4.3.2 - */ - testcase TC_MEC_MEC012_SRV_AMS_012_BR() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - - // Test control - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_AMS 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_ME_APP_AMS_URI & "/" & oct2char(unichar2oct(PX_APP_MOBILITY_SERVICE_ID, "UTF-8")), - v_headers, - m_http_message_body_json( - m_body_json_ams_registration_request_with_error( - m_registration_request_with_error( - m_service_consumer_id_with_error( - PX_APP_INS_ID, - - - ), - -, - - - ) - ) - ) - ))); - 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 - - } // End of testcase TC_MEC_MEC012_SRV_AMS_012_BR - - - /** - * @desc Check that the AMS service de-register the individual application mobility service and delete the resource - * that represents the individual application mobility service - * @see ETSI GS MEC 021 2.0.10, clause 8.4.3.5 - */ - testcase TC_MEC_MEC012_SRV_AMS_013_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_AMS 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_ME_APP_AMS_URI & oct2char(unichar2oct(PX_APP_MOBILITY_SERVICE_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 ***"); - 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_MEC012_SRV_AMS_013_OK - - /** - * @desc Check that the AMS service sends an error when is requested to delete the resource - * that represents the individual application mobility service - * @see ETSI GS MEC 021 2.0.10, clause 8.4.3.5 - */ - testcase TC_MEC_MEC012_SRV_AMS_013_NF() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - - // Test control - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_AMS 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_ME_APP_AMS_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_APP_MOBILITY_SERVICE_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 - - } // End of testcase TC_MEC_MEC012_SRV_AMS_013_NF - - } - - group appMobilityServiceDeregisterTask { - - /** - * @desc Check that the AMS service deregister an individual application mobility service on expiry of the timer associated with the service - * @see ETSI GS MEC 021 2.0.10, clause 8.5.3.4 - */ - testcase TC_MEC_MEC012_SRV_AMS_014_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_AMS 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_ME_APP_AMS_URI & oct2char(unichar2oct(PX_APP_MOBILITY_SERVICE_ID, "UTF-8")) & "/deregisterTask", - 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_mobility_service_info( - mw_app_mobility_service_info({ - *, - mw_app_mobility_registration_info( - mw_service_consumer_id( - PX_APP_INS_ID, - - - ), - -, - - - ), - *}, - - - ) - ) - ) - ))) -> value v_response { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a AppMobilityServiceInfo***"); - 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_MEC012_SRV_AMS_014_OK - - /** - * @desc Check that the AMS service send an error when is requested to deregister a not existent individual application mobility service - * @see ETSI GS MEC 021 2.0.10, clause 8.5.3.4 - */ - testcase TC_MEC_MEC012_SRV_AMS_014_NF() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_AMS 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_ME_APP_AMS_URI & oct2char(unichar2oct(PX_NON_EXISTENT_APP_MOBILITY_SERVICE_ID, "UTF-8")) & "/deregisterTask", - 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***"); - 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_MEC012_SRV_AMS_012_OK - - - } - - group appMobilityServicesSubscriptions { - - /** - * @desc Check that the AMS service returns information about the available subscriptions when requested. - * Permitted SUBSCRIPTION_TYPE are: - * - MobilityProcedureSubscription - * - AdjacentAppInfoSubscription - * @see ETSI GS MEC 021 2.1.1, clause 8.6.3.1 - */ - testcase TC_MEC_MEC012_SRV_AMS_003_OK() runs on HttpComponent system HttpTestAdapter { - var Headers v_headers; - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_AMS 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( - //@TODO: How can we convert enums in strings? - "/" & PICS_ROOT_API & PX_ME_APP_AMS_SUBS & "?subscriptionType=" & int2str(enum2int(PX_SUBSCRIPTION_TYPE)), - 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_ams_subscriptions( - mw_ams_subscription( - PX_SUBSCRIPTION_TYPE, - -, - -, - -, - - - ) - ) - ) - ) - ) - ) - { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with the list of subscriptions type MobilityProcedureSubscription ***"); - 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 TC_MEC_MEC012_SRV_AMS_003_OK - - /** - * @desc Check that the AMS service sends an error when it receives a malformed query about the available subscriptions - * @see ETSI GS MEC 021 2.1.1, clause 8.6.3.1 - */ - testcase TC_MEC_MEC012_SRV_AMS_003_BR() runs on HttpComponent system HttpTestAdapter { - var Headers v_headers; - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_AMS 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_ME_APP_AMS_SUBS & "?subscriptionTyp=" & int2str(enum2int(PX_SUBSCRIPTION_TYPE)), - 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( - mw_http_message_body_json( - mw_body_json_problem_details( - mw_problem_details( - -, -, 400 - ) - ) - ) - ) - ) - ) - { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a ProblemDetails set to 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 TC_MEC_MEC012_SRV_AMS_003_BR - - /** - * @desc Check that the AMS service creates a notification subscriptions when requested. - * Permitted SUBSCRIPTION_TYPE are: - * - MobilityProcedureSubscription - * - AdjacentAppInfoSubscription - * @see ETSI GS MEC 021 2.1.1, clause 8.6.3.4 - */ - testcase TC_MEC_MEC012_SRV_AMS_004_OK() runs on HttpComponent system HttpTestAdapter { - var Headers v_headers; - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_AMS 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_ME_APP_AMS_SUBS, - v_headers, - m_http_message_body_json( - m_body_json_ams_subscriptions( - m_ams_subscription( - PX_SUBSCRIPTION_TYPE, - PX_CALLBACK_REFERENCE, - -, - -, - - - ) - ) - ) - ) - ) - ); - 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_ams_subscriptions( - mw_ams_subscription( - PX_SUBSCRIPTION_TYPE, - PX_CALLBACK_REFERENCE, - -, - -, - - - ) - ) - ) - ) - ) - ) - { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a AMS Subscription and 201 Created 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 TC_MEC_MEC012_SRV_AMS_004_OK - - /** - * @desc Check that the AMS service sends an error when it receives a malformed request to create a notification subscription - * Permitted SUBSCRIPTION_TYPE are: - * - MobilityProcedureSubscription - * - AdjacentAppInfoSubscription - * @see ETSI GS MEC 021 2.1.1, clause 8.6.3.4 - */ - testcase TC_MEC_MEC012_SRV_AMS_004_BR() runs on HttpComponent system HttpTestAdapter { - var Headers v_headers; - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_AMS 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_ME_APP_AMS_SUBS, - v_headers, - m_http_message_body_json( - m_body_json_ams_subscriptions( - m_ams_subscription_error( - PX_SUBSCRIPTION_TYPE, - PX_CALLBACK_REFERENCE, - -, - -, - - - ) - ) - ) - ) - ) - ); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body - tc_ac.start; - 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 - ) - ) - ) - ) - ) - ) - { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a Problem Details and 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 TC_MEC_MEC012_SRV_AMS_004_BR - - /** - * @desc Check that the AMS service returns information about a given subscription when requested. - * Permitted SUBSCRIPTION_TYPE are: - * - MobilityProcedureSubscription - * - AdjacentAppInfoSubscription - * @see ETSI GS MEC 021 2.1.1, clause 8.7.3.1 - */ - testcase TC_MEC_MEC012_SRV_AMS_005_OK() runs on HttpComponent system HttpTestAdapter { - var Headers v_headers; - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_AMS 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_ME_APP_AMS_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_ams_subscriptions( - mw_ams_subscription(PX_SUBSCRIPTION_TYPE, -, -, -, -) - ) - ) - ) - ) - ) - { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with the list of subscriptions type MobilityProcedureSubscription ***"); - 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 TC_MEC_MEC012_SRV_AMS_005_OK - - /** - * @desc Check that the AMS service returns an error when receives a query about a not existing subscription - * @see ETSI GS MEC 021 2.1.1, clause 8.7.3.1 - */ - testcase TC_MEC_MEC012_SRV_AMS_005_NF() runs on HttpComponent system HttpTestAdapter { - var Headers v_headers; - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_AMS 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_ME_APP_AMS_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( - mw_http_message_body_json( - mw_body_json_problem_details( - mw_problem_details( - -, -, 404 - ) - ) - ) - ) - ) - ) - { - 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 - - } // End of TC_MEC_MEC012_SRV_AMS_005_NF - - /** - * @desc Check that the AMS service deletes a given subscription when requested - * @see ETSI GS MEC 021 2.1.1, clause 8.7.3.5 - */ - testcase TC_MEC_MEC012_SRV_AMS_006_OK() runs on HttpComponent system HttpTestAdapter { - var Headers v_headers; - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_AMS 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_ME_APP_AMS_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 - ) - ) - { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with 204 No Content on deletion 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 TC_MEC_MEC012_SRV_AMS_006_OK - - /** - * @desc Check that the AMS service sends an error when it receives a delete request for a not existing subscription - * @see ETSI GS MEC 021 2.1.1, clause 8.7.3.5 - */ - testcase TC_MEC_MEC012_SRV_AMS_006_NF() runs on HttpComponent system HttpTestAdapter { - var Headers v_headers; - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_AMS 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_ME_APP_AMS_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( - mw_http_message_body_json( - mw_body_json_problem_details( - ) - ) - ) - ) - ) - { - 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 - - } // End of TC_MEC_MEC012_SRV_AMS_006_NF - - /** - * @desc Check that the AMS service modifies a given subscription when requested. - * Permitted SUBSCRIPTION_TYPE are: - * - MobilityProcedureSubscription - * - AdjacentAppInfoSubscription - * @see ETSI GS MEC 021 2.1.1, clause 8.7.3.2 - */ - testcase TC_MEC_MEC012_SRV_AMS_007_OK() runs on HttpComponent system HttpTestAdapter { - var Headers v_headers; - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_AMS 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_ME_APP_AMS_SUBS & "/" & oct2char(unichar2oct(PX_SUBSCRIPTION_ID, "UTF-8")), - v_headers, - m_http_message_body_json( - m_body_json_ams_subscriptions( - m_ams_subscription( - PX_SUBSCRIPTION_TYPE, PX_CALLBACK_REFERENCE, -, -, - - ) - ) - ) - ) - ) - ); - 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_ams_subscriptions( - mw_ams_subscription(PX_SUBSCRIPTION_TYPE, -, -, -, -) - ) - ) - ) - ) - ) - { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a AppMobilityServiceInfo ***"); - 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 TC_MEC_MEC012_SRV_AMS_007_OK - - /** - * @desc Check that the AMS service sends an error when it receives a malformed modify request for a given subscription. - * Permitted SUBSCRIPTION_TYPE are: - * - MobilityProcedureSubscription - * - AdjacentAppInfoSubscription - * @see ETSI GS MEC 021 2.1.1, clause 8.7.3.2 - */ - testcase TC_MEC_MEC012_SRV_AMS_007_BR() runs on HttpComponent system HttpTestAdapter { - var Headers v_headers; - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_AMS 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_ME_APP_AMS_SUBS & "/" & oct2char(unichar2oct(PX_SUBSCRIPTION_ID, "UTF-8")), - v_headers, - m_http_message_body_json( - m_body_json_ams_registration_request( - m_registration_request( - m_service_consumer_error(PX_APP_INS_ID, -), - -, - - - ) - ) - ) - ) - ) - ); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body - tc_ac.start; - alt { - [] httpPort.receive( - mw_http_response( - mw_http_response_400_bad_request( - mw_http_message_body_json( - mw_body_json_problem_details( - ) - ) - ) - ) - ) - { - 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 - - } // End of TC_MEC_MEC012_SRV_AMS_007_BR - - /** - * @desc Check that the AMS service sends an error when it receives a modify request for a not existing subscription - * @see ETSI GS MEC 021 2.1.1, clause 8.7.3.2 - */ - testcase TC_MEC_MEC012_SRV_AMS_007_NF() runs on HttpComponent system HttpTestAdapter { - var Headers v_headers; - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_AMS 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_ME_APP_AMS_SUBS & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_ID, "UTF-8")), - v_headers, - m_http_message_body_json( - m_body_json_ams_subscriptions( - m_ams_subscription( - PX_SUBSCRIPTION_TYPE, PX_CALLBACK_REFERENCE, -, -, - - ) - ) - ) - ) - ) - ); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body - tc_ac.start; - alt { - [] httpPort.receive( - mw_http_response( - mw_http_response_404_not_found( - mw_http_message_body_json( - mw_body_json_problem_details( - ) - ) - ) - ) - ) - { - 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 - - } // End of TC_MEC_MEC012_SRV_AMS_007_NF - - - } // End of group appMobilityServicesSubscriptions - - group ams_notifications { - - /** - * @desc Check that the AMS service sends an AMS notification about a mobility procedure if the AMS service has an associated subscription and the event is generated - * @see ETSI GS MEC 021 2.1.1, clause 7.4.2 - */ - testcase TC_MEC_MEC012_SRV_AMS_008_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - - // Test control - if (not(PICS_AMS) or not(PICS_AMS_NOTIFICATIONS)) { - log("*** " & testcasename() & ": PICS_AMS and PICS_AMS_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 mobility procedure 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_mobility_procedure_notification( - mw_mobility_procedure_notification( - -, - PX_CALLBACK_REFERENCE, - -, - -, - - - ) - ) - ) - ) - ) - ) { - tc_wait.stop; - log("*** " & testcasename() & ": INFO: IUT successfully sends mobility procedure 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 mobility procedure 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 TC_MEC_MEC012_SRV_AMS_008_OK - - /** - * @desc Check that the AMS service sends an AMS notification about adjacent application instances if the AMS service has an associated subscription and the event is generated - * @see ETSI GS MEC 021 2.1.1, clause 7.4.3 - */ - testcase TC_MEC_MEC012_SRV_AMS_009_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - - // Test control - if (not(PICS_AMS) or not(PICS_AMS_NOTIFICATIONS)) { - log("*** " & testcasename() & ": PICS_AMS and PICS_AMS_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 adjacent application info 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_adjacent_application_info_notification( - mw_adjacent_application_info_notification( - -, - PX_CALLBACK_REFERENCE, - -, - -, - - - ) - ) - ) - ) - ) - ) { - tc_wait.stop; - log("*** " & testcasename() & ": INFO: IUT successfully sends adjacent application info 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 adjacent application info 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(); - } - - - /** - * @desc Check that the AMS service sends an AMS notification on subscription expiration if the AMS service has an associated subscription and the event is generated - * @see ETSI GS MEC 021 2.1.1, clause 7.4.4 - */ - testcase TC_MEC_MEC012_SRV_AMS_010_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var UInt64 v_timestamp; - - // Test control - if (not(PICS_AMS) or not(PICS_AMS_NOTIFICATIONS)) { - log("*** " & testcasename() & ": PICS_AMS and PICS_AMS_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"); - v_timestamp := f_get_current_timestamp_utc(); - 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_expire_notification( - mw_expire_notification( - -, - -, - { seconds := v_timestamp / 1000, nanoSeconds := 1000 * v_timestamp mod 1000 } - ) - ) - ) - ) - ) - ) { - tc_wait.stop; - log("*** " & testcasename() & ": INFO: IUT successfully sends adjacent application info 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 adjacent applicationinfo 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 ams_notifications - -} // End of module AtsMec_Ams_TestCases - - - - - - - diff --git a/ttcn/AtsMec/AtsMec_Ams/AtsMec_Ams_TestControl.ttcn b/ttcn/AtsMec/AtsMec_Ams/AtsMec_Ams_TestControl.ttcn deleted file mode 100644 index 9aace58..0000000 --- a/ttcn/AtsMec/AtsMec_Ams/AtsMec_Ams_TestControl.ttcn +++ /dev/null @@ -1,103 +0,0 @@ -module AtsMec_TestControl { - - // LibMec/LocationAPI - import from LocationAPI_Pics all; - // LibMec/UEidentityAPI - import from UEidentityAPI_Pics all; - // LibMec/RnisAPI - import from RnisAPI_Pics all; - // LibMec/TrafficManagementAPI - import from TrafficManagementAPI_Pics all; - // LibMec/AppEnablementAPI - import from EdgePlatformApplicationEnablementAPI_Pics all; - // LibMec/UEAppInterfaceAPI - import from UEAppInterfaceAPI_Pics all; - - // LibMec - import from LibMec_Pics all; - - // AtsMec - import from AtsMec_UEidentityAPI_TestCases all; -// import from AtsMec_RadioNodeLocationAPI_TestCases all; - import from AtsMec_RnisAPI_TestCases all; - import from AtsMec_TrafficManagementAPI_TestCases all; - import from AtsMec_EdgePlatformApplicationEnablementAPI_TestCases all; - import from AtsMec_UEAppInterfaceAPI_TestCases all; - - control { - - if (PICS_MEC_PLAT and PICS_SERVICES) { - if (PICS_UE_IDENTITY_API_SUPPORTED) { - execute(TC_MEC_MEC014_SRV_UETAG_001_OK()); - execute(TC_MEC_MEC014_SRV_UETAG_001_BR()); - execute(TC_MEC_MEC014_SRV_UETAG_001_NF()); - execute(TC_MEC_MEC014_SRV_UETAG_002_OK()); - execute(TC_MEC_MEC014_SRV_UETAG_002_BR()); - execute(TC_MEC_MEC014_SRV_UETAG_002_PF()); - } - if (PICS_LOCATION_API_SUPPORTED) { - -// execute(TC_MEC_PLAT_RLOC_001_OK()); -// execute(TC_MEC_PLAT_RLOC_001_NF()); - } - - if (PICS_APP_ENABLEMENT_API_SUPPORTED) { - /*execute(TC_MEC_SRV_TRANS_001_OK()); - execute(TC_MEC_SRV_TRAF_001_OK()); - execute(TC_MEC_SRV_TRAF_002_OK()); - execute(TC_MEC_SRV_TRAF_003_OK()); - execute(TC_MEC_SRV_TRAF_001_NF());*/ - } - - if (PICS_ENABLE_UE_APP_CTX) { - execute(TC_MEC_MEC016_MEO_UEAPPCTX_001_OK()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_001_BR()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_OK()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_BR()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_NF()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_003_OK()); - execute(TC_MEC_MEC016_MEO_UEAPPCTX_003_NF()); - execute(TC_MEC_MEC016_MEO_UEAPPS_001_OK()); - execute(TC_MEC_MEC016_MEO_UEAPPS_001_BR()); - execute(TC_MEC_MEC016_MEO_UEAPPS_001_NF()); - } - } - - /*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()); - execute(TC_MEC_MEC012_SRV_RNIS_011_BR()); - execute(TC_MEC_MEC012_SRV_RNIS_012_BR()); - } - if (PICS_RNIS_QUERY) { - execute(TC_MEC_MEC012_SRV_RNIS_016_OK()); - execute(TC_MEC_MEC012_SRV_RNIS_016_BR()); - execute(TC_MEC_MEC012_SRV_RNIS_016_NF()); - execute(TC_MEC_MEC012_SRV_RNIS_017_OK()); - execute(TC_MEC_MEC012_SRV_RNIS_017_BR()); - execute(TC_MEC_MEC012_SRV_RNIS_017_NF()); - execute(TC_MEC_MEC012_SRV_RNIS_018_OK()); - execute(TC_MEC_MEC012_SRV_RNIS_018_BR()); - execute(TC_MEC_MEC012_SRV_RNIS_018_NF()); - execute(TC_MEC_MEC012_SRV_RNIS_019_OK()); - execute(TC_MEC_MEC012_SRV_RNIS_019_BR()); - execute(TC_MEC_MEC012_SRV_RNIS_019_NF()); - } - }*/ - - if (PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED) { - execute(TC_MEC_MEC015_SRV_TM_001_OK()); - execute(TC_MEC_MEC015_SRV_TM_002_OK()); - execute(TC_MEC_MEC015_SRV_TM_002_BR()); - execute(TC_MEC_MEC015_SRV_TM_002_NF()); - } - } // End of 'control' statement - -} // End of module AtsMec_TestControl diff --git a/ttcn/AtsMec/AtsMec_Ams/module.mk b/ttcn/AtsMec/AtsMec_Ams/module.mk deleted file mode 100644 index 449db40..0000000 --- a/ttcn/AtsMec/AtsMec_Ams/module.mk +++ /dev/null @@ -1,48 +0,0 @@ -suite := AtsMec - -sources := \ - AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn \ - AtsMec_TrafficManagementAPI_TestCases.ttcn \ - AtsMec_MultiAccessSteeringInfoAPI_TestCases.ttcn \ - AtsMec_LocationAPI_TestCases.ttcn \ - AtsMec_RnisAPI_TestCases.ttcn \ - AtsMec_TestControl.ttcn \ - AtsMec_UEAppInterfaceAPI_TestCases.ttcn \ - AtsMec_UEidentityAPI_TestCases.ttcn \ - AtsMec_V2XInformationServiceAPI_TestCases.ttcn \ - AtsMec_DeviceApplicationInterfaceAPI_TestCases.ttcn \ - AtsMec_WlanInformationAPI_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/EdgePlatformApplicationEnablementAPI \ - ../LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI \ - ../LibMec/TrafficManagementAPI \ - ../LibMec/LocationAPI \ - ../LibMec/RnisAPI \ - ../LibMec/UEAppInterfaceAPI \ - ../LibMec/UEidentityAPI \ - ../LibMec/V2XInformationServiceAPI \ - ../LibMec/DeviceApplicationInterfaceAPI \ - ../LibMec/WlanInformationAPI \ - ../LibMec/ApplicationMobilityServiceAPI \ - ../LibMec/FixedAccessInformationAPI \ - ../../ccsrc/Ports/LibHttp \ - ../../ccsrc/EncDec/LibHttp \ - ../../ccsrc/EncDec/LibMec \ - ../../ccsrc/Framework \ - ../../ccsrc/externals \ - ../../ccsrc/loggers \ - ../../ccsrc/Protocols/ETH \ - ../../ccsrc/Protocols/Http \ - ../../ccsrc/Protocols/Json \ - ../../ccsrc/Protocols/Pcap \ - ../../ccsrc/Protocols/Tcp \ - ../modules/titan.TestPorts.Common_Components.Abstract_Socket \ - diff --git a/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_Pics.ttcn b/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_Pics.ttcn index 0499a19..89a128a 100644 --- a/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_Pics.ttcn +++ b/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_Pics.ttcn @@ -3,4 +3,9 @@ module ApplicationMobilityServiceAPI_Pics { // JSON import from Json all; + /** + * @desc Does the IUT support LocationAPI? + */ + modulepar boolean PICS_AMS_API_SUPPORTED := true; + } // End of module ApplicationMobilityServiceAPI_Pics diff --git a/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_Pixits.ttcn b/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_Pixits.ttcn index f07ed63..e4d5979 100644 --- a/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_Pixits.ttcn +++ b/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_Pixits.ttcn @@ -3,4 +3,22 @@ module ApplicationMobilityServiceAPI_Pixits { // JSON import from Json all; + // LibMec/ApplicationMobilityServiceAPI + import from ApplicationMobilityServiceAPI_TypesAndValues all; + + modulepar Json.String PX_APP_MOBILITY_SERVICE_ID := "KtRGymNQ84dG3mQfRepa"; + + modulepar Json.String PX_APP_INS_ID := "5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f"; + + 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.String PX_NON_EXISTENT_APP_MOBILITY_SERVICE_ID := "PX_NON_EXISTENT_APP_MOBILITY_SERVICE_ID"; + + modulepar Json.String PX_CALLBACK_REFERENCE := "http://127.0.0.1/callback"; + + modulepar charstring PX_CALLBACK_URI := "http://127.0.0.1/callback"; + + modulepar Json.String PX_MEP_ID := ""; } // End of module ApplicationMobilityServiceAPI_Pixits diff --git a/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_Templates.ttcn b/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_Templates.ttcn index e63aa9a..7ea2bb1 100644 --- a/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_Templates.ttcn +++ b/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_Templates.ttcn @@ -3,7 +3,179 @@ module ApplicationMobilityServiceAPI_Templates { // JSON import from Json all; + // MEC 012 + import from RnisAPI_TypesAndValues all; + // LibMec/ApplicationMobilityServiceAPI import from ApplicationMobilityServiceAPI_TypesAndValues all; + import from ApplicationMobilityServiceAPI_Pixits all; + + // LibCommon + import from LibCommon_BasicTypesAndValues all; + + // 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_registration_info( + in Json.String p_app_mobility_service_id, + in template (value) ServiceConsumerId p_serviceConsumerId, + in template (omit) DeviceInformation p_deviceInformation := omit, + in template (omit) UInt32 p_expiryTime := omit + ) := { + appMobilityServiceId := p_app_mobility_service_id, + serviceConsumerId := p_serviceConsumerId, + deviceInformation := p_deviceInformation, + expiryTime := p_expiryTime + } // End of template m_registration_info + + template RegistrationInfo mw_registration_info( + template (present) Json.String p_app_mobility_service_id := ?, + template (present) ServiceConsumerId p_serviceConsumerId := ?, + template DeviceInformation p_deviceInformation := *, + template UInt32 p_expiryTime := * + ) := { + appMobilityServiceId := p_app_mobility_service_id, + serviceConsumerId := p_serviceConsumerId, + deviceInformation := p_deviceInformation, + expiryTime := p_expiryTime + } // End of template m_registration_info + + 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 + } // End of template m_service_consumer_id + + template ServiceConsumerId mw_service_consumer_id( + template String p_appInstanceId := *, + template String p_mepId := * + ) := { + appInstanceId := p_appInstanceId, + mepId := p_mepId + } // End of template mw_service_consumer_id + + template (omit) DeviceInformation_ m_device_info( + in String p_associate_id, + in template (omit) AppMobilityServiceLevel p_appMobilityServiceLevel := omit, + in template (omit) ContextTransferState p_contextTransferState := omit + ) := { + associateId := p_associate_id, + appMobilityServiceLevel := p_appMobilityServiceLevel, + contextTransferState := p_contextTransferState + } // End of template m_device_info + + template (present) DeviceInformation_ mw_device_info( + template (present) String p_associate_id := ?, + template AppMobilityServiceLevel p_appMobilityServiceLevel := *, + template ContextTransferState p_contextTransferState := * + ) := { + associateId := p_associate_id, + appMobilityServiceLevel := p_appMobilityServiceLevel, + contextTransferState := p_contextTransferState + } // End of template mw_device_info + + template (value) AdjacentAppInfoSubscription m_adjacent_app_info_subscription( + in Json.String p_subscriptionType, + in template (omit) Json.AnyURI p_callbackReference := omit, + in template (omit) ApplicationMobilityServiceAPI_TypesAndValues.Links p_links := omit, + in template (omit) AdjacentFilterCriteria p_filterCriteria := omit, + in template (omit) ApplicationMobilityServiceAPI_TypesAndValues.TimeStamp p_expiryDeadline := omit, + in template (omit) Json.Bool p_requestTestNotification := omit, + in template (omit) ApplicationMobilityServiceAPI_TypesAndValues.WebsockNotifConfig p_websockNotifConfig := omit + ) := { + subscriptionType := p_subscriptionType , + callbackReference := p_callbackReference, + requestTestNotification := p_requestTestNotification, + websockNotifConfig := p_websockNotifConfig, + links := p_links, + filterCriteria := p_filterCriteria, + expiryDeadline := p_expiryDeadline + } // End of template m_adjacent_app_info_subscription + + template (present) AdjacentAppInfoSubscription mw_adjacent_app_info_subscription( + template (present) Json.String p_subscriptionType := ?, + template Json.AnyURI p_callbackReference := *, + template ApplicationMobilityServiceAPI_TypesAndValues.Links p_links := *, + template AdjacentFilterCriteria p_filterCriteria := *, + template ApplicationMobilityServiceAPI_TypesAndValues.TimeStamp p_expiryDeadline := *, + template Json.Bool p_requestTestNotification := *, + template ApplicationMobilityServiceAPI_TypesAndValues.WebsockNotifConfig p_websockNotifConfig := * + ) := { + subscriptionType := p_subscriptionType , + callbackReference := p_callbackReference, + requestTestNotification := p_requestTestNotification, + websockNotifConfig := p_websockNotifConfig, + links := p_links, + filterCriteria := p_filterCriteria, + expiryDeadline := p_expiryDeadline + } // End of template mw_adjacent_app_info_subscription + + template (value) MobilityProcedureNotification m_mobility_procedure_notification( + in Json.String p_notificationType, + in template (value) Links_Notification p_links, + in template (value) AssociateId p_associateId, + in template (value) MobilityStatus p_mobilityStatus, + in template (omit) ApplicationMobilityServiceAPI_TypesAndValues.TimeStamp p_timeStamp := omit, + in template (omit) TargetAppInfo p_targetAppInfo := omit + ) := { + notificationType := p_notificationType, + timeStamp := p_timeStamp, + associateId := p_associateId, + mobilityStatus := p_mobilityStatus, + targetAppInfo := p_targetAppInfo, + links := p_links + } // End of template m_mobility_procedure_notification + + template (present) MobilityProcedureNotification mw_mobility_procedure_notification( + template (present) Json.String p_notificationType := ?, + template (present) Links_Notification p_links := ?, + template (present) AssociateId p_associateId := ?, + template (present) MobilityStatus p_mobilityStatus := ?, + template ApplicationMobilityServiceAPI_TypesAndValues.TimeStamp p_timeStamp := *, + template TargetAppInfo p_targetAppInfo := * + ) := { + notificationType := p_notificationType, + timeStamp := p_timeStamp, + associateId := p_associateId, + mobilityStatus := p_mobilityStatus, + targetAppInfo := p_targetAppInfo, + links := p_links + } // End of template mw_mobility_procedure_notification + + template (omit) ApplicationMobilityServiceAPI_TypesAndValues.ExpiryNotification m_expire_notification( + in Json.String p_notificationType, + in template (omit) ApplicationMobilityServiceAPI_TypesAndValues.TimeStamp p_timestamp := omit, + in template (omit) ApplicationMobilityServiceAPI_TypesAndValues.Links p_links := omit + ) := { + notificationType := p_notificationType, + timeStamp := p_timestamp, + links := p_links + } // End of template m_expire_notification + + template (present) ApplicationMobilityServiceAPI_TypesAndValues.ExpiryNotification mw_expire_notification( + template (present) Json.String p_notificationType := ?, + template ApplicationMobilityServiceAPI_TypesAndValues.TimeStamp p_timestamp := *, + template ApplicationMobilityServiceAPI_TypesAndValues.Links p_links := * + ) := { + notificationType := p_notificationType, + timeStamp := p_timestamp, + links := p_links + } // End of template mw_expire_notification } // End of module ApplicationMobilityServiceAPI_Templates diff --git a/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_TypesAndValues.ttcn b/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_TypesAndValues.ttcn index f2410a9..16bdcfd 100644 --- a/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_TypesAndValues.ttcn @@ -191,7 +191,7 @@ module ApplicationMobilityServiceAPI_TypesAndValues { * @desc This type represents a notification from AMS with regards to mobility procedure * @member notificationType Shall be set to "MobilityProcedureNotification" * @member timeStamp Date and time of the generation of the notification - * @member associateId 1 to N identifiers to associate the information for specific UE(s) and flow(s) + * @member associateId Identifiers to associate the information for specific UE(s) and flow(s) * @member mobilityStatus Indicate the status of the UE mobility * @member targetAppInfo Identifiers to associate the information of target application instance * @member links Object containing hyperlinks related to the resource @@ -200,7 +200,7 @@ module ApplicationMobilityServiceAPI_TypesAndValues { type record MobilityProcedureNotification { Json.String notificationType, TimeStamp timeStamp optional, - AssociateId_ associateId, + AssociateId associateId, MobilityStatus mobilityStatus, TargetAppInfo targetAppInfo optional, Links_Notification links diff --git a/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn b/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn index 124821a..c1d811b 100644 --- a/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn +++ b/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn @@ -22,6 +22,8 @@ module LibHttp_JsonMessageBodyTypes { import from WlanInformationAPI_TypesAndValues all; // LibMec/FixedAccessInformationServiceAPI import from FixedAccessInformationServiceAPI_TypesAndValues all; + // LibMec/ApplicationMobilityServiceAPI_TypesAndValues + import from ApplicationMobilityServiceAPI_TypesAndValues all; // LibMec/V2XInformationServiceAPI import from V2XInformationServiceAPI_TypesAndValues all; // LibMec/IoT @@ -73,11 +75,11 @@ module LibHttp_JsonMessageBodyTypes { 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, */ - /* Ams_TypesAndValues.RegistrationRequestWithError registrationRequestWithError_ams, */ + RegistrationInfo registrationInfo, + ApplicationMobilityServiceAPI_TypesAndValues.MobilityProcedureSubscription subscriptionLinkList_ams, + ApplicationMobilityServiceAPI_TypesAndValues.AdjacentAppInfoSubscription adjacentAppInfoSubscription_ams, + ApplicationMobilityServiceAPI_TypesAndValues.ExpiryNotification expireNotification_ams, + /* ApplicationMobilityServiceAPI_TypesAndValues.RegistrationRequestWithError registrationRequestWithError_ams, */ GrantRequest grantRequest, Grant grantResponse, CreateAppPkg createAppPkg, diff --git a/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn b/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn index d6fa9dd..52126d5 100644 --- a/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn +++ b/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn @@ -37,6 +37,9 @@ module LibHttp_JsonTemplates { // LibMec/module FixedAccessInformationServiceAPI import from FixedAccessInformationServiceAPI_TypesAndValues all; + // LibMec/module ApplicationMobilityServiceAPI + import from ApplicationMobilityServiceAPI_TypesAndValues all; + // LibMec/DeviceApplicationInterfaceAPI import from DeviceApplicationInterfaceAPI_TypesAndValues all; @@ -64,8 +67,14 @@ module LibHttp_JsonTemplates { raw := p_raw } // End of template mw_json_body_raw + template (value) JsonBody m_body_json_problem_details( + in template (value) LibMec_TypesAndValues.ProblemDetails p_problemDetails + ) := { + 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 := ? + template (present) LibMec_TypesAndValues.ProblemDetails p_problemDetails := ? ) := { problemDetails := p_problemDetails } // End of template mw_body_json_problem_details @@ -286,80 +295,72 @@ module LibHttp_JsonTemplates { */ } // 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 - ) := { - appMobilityServiceInfo := p_app_mobility_service_info - } // End of template mw_body_json_app_mobility_service_info - - template (present) JsonBody mw_body_json_app_mobility_service_info( - template (present) AppMobilityServiceInfo p_app_mobility_service_info := ? - ) := { - appMobilityServiceInfo := p_app_mobility_service_info - } // End of template mw_body_json_app_mobility_service_info - - - template (value) JsonBody m_body_json_problem_details( - in template (value) LibMec_TypesAndValues.ProblemDetails p_problemDetails - ) := { - problemDetails := p_problemDetails - } // End of template m_body_json_problem_details + group application_mobilty_service_api { + // template (value) JsonBody m_body_json_app_mobility_service_info( + // in template (value) AppMobilityServiceInfo p_app_mobility_service_info + // ) := { + // appMobilityServiceInfo := p_app_mobility_service_info + // } // End of template mw_body_json_app_mobility_service_info + // template (present) JsonBody mw_body_json_app_mobility_service_info( + // template (present) AppMobilityServiceInfo p_app_mobility_service_info := ? + // ) := { + // appMobilityServiceInfo := p_app_mobility_service_info + // } // End of template mw_body_json_app_mobility_service_info - template (present) JsonBody mw_body_json_ams_registration_request( - template (present) Ams_TypesAndValues.RegistrationRequest p_registrationRequest := ? - ) := { - registrationRequest_ams := p_registrationRequest - } // End of template mw_body_json_ue_identity_problem_details - template (value) JsonBody m_body_json_ams_registration_request( - in template (value) Ams_TypesAndValues.RegistrationRequest p_registrationRequest - ) := { - registrationRequest_ams := p_registrationRequest - } // End of template m_body_json_ue_identity_problem_details - - template (value) JsonBody m_body_json_ams_registration_request_with_error( - in template (value) Ams_TypesAndValues.RegistrationRequestWithError p_registrationRequestWithError - ) := { - registrationRequestWithError_ams := p_registrationRequestWithError - } // End of template m_body_json_ue_identity_problem_details + template (value) JsonBody m_body_json_ams_registration_info( + in template (value) RegistrationInfo p_registrationInfo + ) := { + registrationInfo := p_registrationInfo + } // End of template m_body_json_ams_registration_info - template (present) JsonBody mw_body_json_ams_subscriptions( - template (present) Ams_TypesAndValues.MobilityProcedureSubscription_ p_amsSubscriptionLinkList := ? - ) := { - subscriptionLinkList_ams := p_amsSubscriptionLinkList - } // End of template mw_body_json_ue_identity_problem_details + template (present) JsonBody mw_body_json_ams_registration_request( + template (present) RegistrationInfo p_registrationInfo := ? + ) := { + registrationInfo := p_registrationInfo + } // End of template mw_body_json_ams_registration_request + + // template (value) JsonBody m_body_json_ams_registration_request_with_error( + // in template (value) ApplicationMobilityServiceAPI_TypesAndValues.RegistrationRequestWithError p_registrationRequestWithError + // ) := { + // registrationRequestWithError_ams := p_registrationRequestWithError + // } // End of template m_body_json_ue_identity_problem_details + + // template (present) JsonBody mw_body_json_ams_subscriptions( + // template (present) ApplicationMobilityServiceAPI_TypesAndValues.MobilityProcedureSubscription p_amsSubscriptionLinkList := ? + // ) := { + // subscriptionLinkList_ams := p_amsSubscriptionLinkList + // } // End of template mw_body_json_ue_identity_problem_details + + template (present) JsonBody m_body_json_ams_subscriptions( + template (present) ApplicationMobilityServiceAPI_TypesAndValues.MobilityProcedureSubscription p_amsSubscriptionLinkList := ? + ) := { + subscriptionLinkList_ams := p_amsSubscriptionLinkList + } // End of template mw_body_json_ue_identity_problem_details - template (present) JsonBody m_body_json_ams_subscriptions( - template (present) Ams_TypesAndValues.MobilityProcedureSubscription_ p_amsSubscriptionLinkList := ? - ) := { - subscriptionLinkList_ams := p_amsSubscriptionLinkList - } // End of template mw_body_json_ue_identity_problem_details + template (present) JsonBody mw_body_json_mobility_procedure_notification( + template (present) ApplicationMobilityServiceAPI_TypesAndValues.MobilityProcedureSubscription p_amsSubscriptionLinkList := ? + ) := { + subscriptionLinkList_ams := p_amsSubscriptionLinkList + } // End of template mw_body_json_mobility_procedure_notification - template (present) JsonBody mw_body_json_mobility_procedure_notification( - template (present) Ams_TypesAndValues.MobilityProcedureSubscription_ p_amsSubscriptionLinkList := ? - ) := { - subscriptionLinkList_ams := p_amsSubscriptionLinkList - } // End of template mw_body_json_mobility_procedure_notification + template (present) JsonBody mw_body_json_adjacent_application_info_notification( + template (present) ApplicationMobilityServiceAPI_TypesAndValues.AdjacentAppInfoSubscription p_adjacentAppInfoSubscription := ? + ) := { + adjacentAppInfoSubscription_ams := p_adjacentAppInfoSubscription + } // End of template mw_body_json_mobility_procedure_notification - template (present) JsonBody mw_body_json_adjacent_application_info_notification( - template (present) Ams_TypesAndValues.AdjacentAppInfoSubscription_ p_adjacentAppInfoSubscription := ? - ) := { - adjacentAppInfoSubscription_ams := p_adjacentAppInfoSubscription - } // End of template mw_body_json_mobility_procedure_notification + template (present) JsonBody mw_body_json_expire_notification( + template (present) ApplicationMobilityServiceAPI_TypesAndValues.ExpiryNotification p_expire_notification := ? + ) := { + expireNotification_ams := p_expire_notification + } // End of template mw_body_json_mobility_procedure_notification - template (present) JsonBody mw_body_json_expire_notification( - template (present) Ams_TypesAndValues.ExpiryNotification p_expire_notification := ? - ) := { - expireNotification_ams := p_expire_notification - } // End of template mw_body_json_mobility_procedure_notification - */ -} // end of group ams api + } // end of group application_mobilty_service_api group location_api { -- GitLab From 0dc7c2bfdac70baa510cfed935843d0e3f75e059 Mon Sep 17 00:00:00 2001 From: garciay Date: Tue, 31 Oct 2023 16:36:31 +0100 Subject: [PATCH 48/99] Reorganize AtsMec_ApplicationMobiltyService --- ...pplicationMobiltyServiceAPI_TestCases.ttcn | 1739 +++++++++++++++++ ...licationMobiltyServiceAPI_TestControl.ttcn | 20 + .../module.mk | 39 + 3 files changed, 1798 insertions(+) create mode 100644 ttcn/AtsMec_ApplicationMobiltyService/AtsMec_ApplicationMobiltyServiceAPI_TestCases.ttcn create mode 100644 ttcn/AtsMec_ApplicationMobiltyService/AtsMec_ApplicationMobiltyServiceAPI_TestControl.ttcn create mode 100644 ttcn/AtsMec_ApplicationMobiltyService/module.mk diff --git a/ttcn/AtsMec_ApplicationMobiltyService/AtsMec_ApplicationMobiltyServiceAPI_TestCases.ttcn b/ttcn/AtsMec_ApplicationMobiltyService/AtsMec_ApplicationMobiltyServiceAPI_TestCases.ttcn new file mode 100644 index 0000000..485c9ac --- /dev/null +++ b/ttcn/AtsMec_ApplicationMobiltyService/AtsMec_ApplicationMobiltyServiceAPI_TestCases.ttcn @@ -0,0 +1,1739 @@ +/** +* @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 021 V2.1.1 +*/ + module AtsMec_ApplicationMobiltyServiceAPI_TestCases { + + // Libcommon + import from LibCommon_BasicTypesAndValues all; + import from LibCommon_Sync all; + + // LibHttp + import from LibHttp_TypesAndValues all; + import from LibHttp_Functions all; + import from LibHttp_Templates all; + import from LibHttp_JsonTemplates all; + import from LibHttp_TestSystem all; + + // LibMec_ApplicationMobiltyServiceAPI + import from ApplicationMobilityServiceAPI_Templates all; + import from ApplicationMobilityServiceAPI_Pics all; + import from ApplicationMobilityServiceAPI_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; + + group appMobilityServices { + + /** + * @desc Check that the AMS service returns information about the registered application mobility services when requested + * @see ETSI GS MEC 021 2.1.1, clause 8.3.3.1 + */ + // testcase TC_MEC_MEC012_SRV_AMS_001_OK() runs on HttpComponent system HttpTestAdapter { + // // Local variables + // var Headers v_headers; + // var HttpMessage v_response; + + // // Test control + // if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { + // log("*** " & testcasename() & ": PICS_AMS 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_ME_APP_AMS_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_mobility_service_info( + // mw_app_mobility_service_info( + // { + // mw_app_mobility_registration_info( + // mw_service_consumer_id( + // PX_APP_INS_ID, + // PX_MEP_ID + // ) + // ) + // } + // )))))) -> value v_response { + // tc_ac.stop; + + // if (f_check_headers(valueof(v_response.response.header)) == true) { + // log("*** " & testcasename() & ": PASS: IUT successfully responds with a AppTerminationNotificationSubscription ***"); + // 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_MEC012_SRV_AMS_001_OK + + /** + * @desc Check that the AMS service returns an error when receives a query about a registered application mobility service with wrong parameters + * @see ETSI GS MEC 021 2.1.1, clause 8.3.3.1 + */ + testcase TC_MEC_MEC012_SRV_AMS_001_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_AMS 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_ME_APP_AMS_URI & "?appMobilityService=" & oct2char(unichar2oct(PX_APP_MOBILITY_SERVICE_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( + mw_http_message_body_json( + mw_body_json_problem_details( + mw_problem_details( + -, + -, + 400 + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a ProblemDetails set to 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_MEC012_SRV_AMS_001_BR + + + /** + * @desc Check that the AMS service creates a new application mobility services when requested + * @see ETSI GS MEC 021 2.1.1, clause 8.3.3.4 + */ + testcase TC_MEC_MEC012_SRV_AMS_002_OK() runs on HttpComponent system HttpTestAdapter { + var Headers v_headers; + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_AMS 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_ME_APP_AMS_URI, + v_headers, + m_http_message_body_json( + m_body_json_ams_registration_info( + m_registration_info( + PX_APP_MOBILITY_SERVICE_ID, + m_service_consumer_id( + PX_APP_INS_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_mobility_service_info( + mw_app_mobility_service_info( + mw_registration_info( + mw_service_consumer_id( + PX_APP_INS_ID, + - + ), + -, + - + ), + PX_APP_MOBILITY_SERVICE_ID + ) + ) + ) + ) + ) + ) + + { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a AppMobilityServiceInfo and status code set to 201 Created ***"); + 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_MEC012_SRV_AMS_002_OK + + /** + * @desc Check that the AMS service sends an error when it receives a malformed request to create a new application mobility service + * @see ETSI GS MEC 021 2.1.1, clause 8.3.3.4 + */ + testcase TC_MEC_MEC012_SRV_AMS_002_BR() runs on HttpComponent system HttpTestAdapter { + var Headers v_headers; + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_AMS 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_ME_APP_AMS_URI, + v_headers, + m_http_message_body_json( + m_body_json_ams_registration_info( + m_registration_info( + PX_APP_MOBILITY_SERVICE_ID, + m_service_consumer_error( + PX_APP_INS_ID, + - + ) + ) + ) + ) + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + 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 + ) + ) + ) + ) + ) + ) + { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a Problem Details when bad request is performed ***"); + 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_MEC012_SRV_AMS_002_BR + } // End of group appMobilityServices + + + group individualAppMobilityService{ + + /** + * @desc Check that the AMS service returns information about this individual application mobility service + * @see ETSI GS MEC 021 2.0.10, clause 8.4.3.1 + */ + testcase TC_MEC_MEC012_SRV_AMS_011_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_AMS 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_ME_APP_AMS_URI & oct2char(unichar2oct(PX_APP_MOBILITY_SERVICE_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_mobility_service_info( + mw_app_mobility_service_info( + -, + PX_APP_MOBILITY_SERVICE_ID + )))))) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a AppMobilityServiceInfo***"); + 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_MEC012_SRV_AMS_011_OK + + /** + * @desc Check that the AMS service sends an error when receives a query about a not existing individual application mobility service + * @see ETSI GS MEC 021 2.0.10, clause 8.4.3.1 + */ + testcase TC_MEC_MEC012_SRV_AMS_011_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_AMS 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_ME_APP_AMS_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_APP_MOBILITY_SERVICE_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 + + } // End of testcase TC_MEC_MEC012_SRV_AMS_011_NF + + + + /** + * @desc Check that the AMS service modifies the individual application mobility service when requested + * @see ETSI GS MEC 021 2.0.10, clause 8.4.3.2 + */ + testcase TC_MEC_MEC012_SRV_AMS_012_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_AMS 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_ME_APP_AMS_URI & oct2char(unichar2oct(PX_APP_MOBILITY_SERVICE_ID, "UTF-8")), + v_headers, + m_http_message_body_json( + m_body_json_ams_registration_info( + m_registration_info( + PX_APP_MOBILITY_SERVICE_ID, + m_service_consumer_id( + PX_APP_INS_ID, + - + ), + -, + - + ) + ) + ) + ))); + 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_mobility_service_info( + mw_app_mobility_service_info({ + *, + mw_app_mobility_registration_info( + mw_service_consumer_id( + PX_APP_INS_ID, + - + ), + -, + - + ), + *}, + - + ) + ) + ) + ))) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a AppMobilityServiceInfo***"); + 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_MEC012_SRV_AMS_012_OK + + /** + * @desc Check that the AMS service sends an error when receives a request to modify a not existing individual application mobility service + * @see ETSI GS MEC 021 2.0.10, clause 8.4.3.2 + */ + testcase TC_MEC_MEC012_SRV_AMS_012_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_AMS 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_ME_APP_AMS_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_APP_MOBILITY_SERVICE_ID, "UTF-8")), + v_headers, + m_http_message_body_json( + m_body_json_ams_registration_info( + m_registration_info( + PX_APP_MOBILITY_SERVICE_ID, + m_service_consumer_id( + PX_APP_INS_ID, + - + ), + -, + - + ) + ) + ) + ))); + 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 + + } // End of testcase TC_MEC_MEC012_SRV_AMS_012_NF + + /** + * @desc Check that the AMS service sends an error when receives a request to modify a individual application mobility service using bad parameters + * @see ETSI GS MEC 021 2.0.10, clause 8.4.3.2 + */ + testcase TC_MEC_MEC012_SRV_AMS_012_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_AMS 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_ME_APP_AMS_URI & "/" & oct2char(unichar2oct(PX_APP_MOBILITY_SERVICE_ID, "UTF-8")), + v_headers, + m_http_message_body_json( + m_body_json_ams_registration_request( + m_registration_info( + PX_APP_MOBILITY_SERVICE_ID, + m_service_consumer_id_with_error( + PX_APP_INS_ID, + - + ), + -, + - + ) + ) + ) + ))); + 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 + + } // End of testcase TC_MEC_MEC012_SRV_AMS_012_BR + + + /** + * @desc Check that the AMS service de-register the individual application mobility service and delete the resource + * that represents the individual application mobility service + * @see ETSI GS MEC 021 2.0.10, clause 8.4.3.5 + */ + testcase TC_MEC_MEC012_SRV_AMS_013_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_AMS 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_ME_APP_AMS_URI & oct2char(unichar2oct(PX_APP_MOBILITY_SERVICE_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 ***"); + 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_MEC012_SRV_AMS_013_OK + + /** + * @desc Check that the AMS service sends an error when is requested to delete the resource + * that represents the individual application mobility service + * @see ETSI GS MEC 021 2.0.10, clause 8.4.3.5 + */ + testcase TC_MEC_MEC012_SRV_AMS_013_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_AMS 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_ME_APP_AMS_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_APP_MOBILITY_SERVICE_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 + + } // End of testcase TC_MEC_MEC012_SRV_AMS_013_NF + + } + + group appMobilityServiceDeregisterTask { + + /** + * @desc Check that the AMS service deregister an individual application mobility service on expiry of the timer associated with the service + * @see ETSI GS MEC 021 2.0.10, clause 8.5.3.4 + */ + testcase TC_MEC_MEC012_SRV_AMS_014_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_AMS 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_ME_APP_AMS_URI & oct2char(unichar2oct(PX_APP_MOBILITY_SERVICE_ID, "UTF-8")) & "/deregisterTask", + 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_mobility_service_info( + mw_app_mobility_service_info({ + *, + mw_app_mobility_registration_info( + mw_service_consumer_id( + PX_APP_INS_ID, + - + ), + -, + - + ), + *}, + - + ) + ) + ) + ))) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a AppMobilityServiceInfo***"); + 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_MEC012_SRV_AMS_014_OK + + /** + * @desc Check that the AMS service send an error when is requested to deregister a not existent individual application mobility service + * @see ETSI GS MEC 021 2.0.10, clause 8.5.3.4 + */ + testcase TC_MEC_MEC012_SRV_AMS_014_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_AMS 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_ME_APP_AMS_URI & oct2char(unichar2oct(PX_NON_EXISTENT_APP_MOBILITY_SERVICE_ID, "UTF-8")) & "/deregisterTask", + 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***"); + 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_MEC012_SRV_AMS_012_OK + + + } + + group appMobilityServicesSubscriptions { + + /** + * @desc Check that the AMS service returns information about the available subscriptions when requested. + * Permitted SUBSCRIPTION_TYPE are: + * - MobilityProcedureSubscription + * - AdjacentAppInfoSubscription + * @see ETSI GS MEC 021 2.1.1, clause 8.6.3.1 + */ + testcase TC_MEC_MEC012_SRV_AMS_003_OK() runs on HttpComponent system HttpTestAdapter { + var Headers v_headers; + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_AMS 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( + //@TODO: How can we convert enums in strings? + "/" & PICS_ROOT_API & PX_ME_APP_AMS_SUBS & "?subscriptionType=" & int2str(enum2int(PX_SUBSCRIPTION_TYPE)), + 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_ams_subscriptions( + mw_ams_subscription( + PX_SUBSCRIPTION_TYPE, + -, + -, + -, + - + ) + ) + ) + ) + ) + ) + { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with the list of subscriptions type MobilityProcedureSubscription ***"); + 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 TC_MEC_MEC012_SRV_AMS_003_OK + + /** + * @desc Check that the AMS service sends an error when it receives a malformed query about the available subscriptions + * @see ETSI GS MEC 021 2.1.1, clause 8.6.3.1 + */ + testcase TC_MEC_MEC012_SRV_AMS_003_BR() runs on HttpComponent system HttpTestAdapter { + var Headers v_headers; + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_AMS 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_ME_APP_AMS_SUBS & "?subscriptionTyp=" & int2str(enum2int(PX_SUBSCRIPTION_TYPE)), + 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( + mw_http_message_body_json( + mw_body_json_problem_details( + mw_problem_details( + -, -, 400 + ) + ) + ) + ) + ) + ) + { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a ProblemDetails set to 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 TC_MEC_MEC012_SRV_AMS_003_BR + + /** + * @desc Check that the AMS service creates a notification subscriptions when requested. + * Permitted SUBSCRIPTION_TYPE are: + * - MobilityProcedureSubscription + * - AdjacentAppInfoSubscription + * @see ETSI GS MEC 021 2.1.1, clause 8.6.3.4 + */ + testcase TC_MEC_MEC012_SRV_AMS_004_OK() runs on HttpComponent system HttpTestAdapter { + var Headers v_headers; + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_AMS 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_ME_APP_AMS_SUBS, + v_headers, + m_http_message_body_json( + m_body_json_ams_subscriptions( + m_ams_subscription( + PX_SUBSCRIPTION_TYPE, + PX_CALLBACK_REFERENCE, + -, + -, + - + ) + ) + ) + ) + ) + ); + 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_ams_subscriptions( + mw_ams_subscription( + PX_SUBSCRIPTION_TYPE, + PX_CALLBACK_REFERENCE, + -, + -, + - + ) + ) + ) + ) + ) + ) + { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a AMS Subscription and 201 Created 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 TC_MEC_MEC012_SRV_AMS_004_OK + + /** + * @desc Check that the AMS service sends an error when it receives a malformed request to create a notification subscription + * Permitted SUBSCRIPTION_TYPE are: + * - MobilityProcedureSubscription + * - AdjacentAppInfoSubscription + * @see ETSI GS MEC 021 2.1.1, clause 8.6.3.4 + */ + testcase TC_MEC_MEC012_SRV_AMS_004_BR() runs on HttpComponent system HttpTestAdapter { + var Headers v_headers; + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_AMS 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_ME_APP_AMS_SUBS, + v_headers, + m_http_message_body_json( + m_body_json_ams_subscriptions( + m_ams_subscription_error( + PX_SUBSCRIPTION_TYPE, + PX_CALLBACK_REFERENCE, + -, + -, + - + ) + ) + ) + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + 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 + ) + ) + ) + ) + ) + ) + { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a Problem Details and 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 TC_MEC_MEC012_SRV_AMS_004_BR + + /** + * @desc Check that the AMS service returns information about a given subscription when requested. + * Permitted SUBSCRIPTION_TYPE are: + * - MobilityProcedureSubscription + * - AdjacentAppInfoSubscription + * @see ETSI GS MEC 021 2.1.1, clause 8.7.3.1 + */ + testcase TC_MEC_MEC012_SRV_AMS_005_OK() runs on HttpComponent system HttpTestAdapter { + var Headers v_headers; + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_AMS 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_ME_APP_AMS_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_ams_subscriptions( + mw_ams_subscription(PX_SUBSCRIPTION_TYPE, -, -, -, -) + ) + ) + ) + ) + ) + { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with the list of subscriptions type MobilityProcedureSubscription ***"); + 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 TC_MEC_MEC012_SRV_AMS_005_OK + + /** + * @desc Check that the AMS service returns an error when receives a query about a not existing subscription + * @see ETSI GS MEC 021 2.1.1, clause 8.7.3.1 + */ + testcase TC_MEC_MEC012_SRV_AMS_005_NF() runs on HttpComponent system HttpTestAdapter { + var Headers v_headers; + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_AMS 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_ME_APP_AMS_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( + mw_http_message_body_json( + mw_body_json_problem_details( + mw_problem_details( + -, -, 404 + ) + ) + ) + ) + ) + ) + { + 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 + + } // End of TC_MEC_MEC012_SRV_AMS_005_NF + + /** + * @desc Check that the AMS service deletes a given subscription when requested + * @see ETSI GS MEC 021 2.1.1, clause 8.7.3.5 + */ + testcase TC_MEC_MEC012_SRV_AMS_006_OK() runs on HttpComponent system HttpTestAdapter { + var Headers v_headers; + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_AMS 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_ME_APP_AMS_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 + ) + ) + { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with 204 No Content on deletion 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 TC_MEC_MEC012_SRV_AMS_006_OK + + /** + * @desc Check that the AMS service sends an error when it receives a delete request for a not existing subscription + * @see ETSI GS MEC 021 2.1.1, clause 8.7.3.5 + */ + testcase TC_MEC_MEC012_SRV_AMS_006_NF() runs on HttpComponent system HttpTestAdapter { + var Headers v_headers; + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_AMS 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_ME_APP_AMS_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( + mw_http_message_body_json( + mw_body_json_problem_details( + ) + ) + ) + ) + ) + { + 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 + + } // End of TC_MEC_MEC012_SRV_AMS_006_NF + + /** + * @desc Check that the AMS service modifies a given subscription when requested. + * Permitted SUBSCRIPTION_TYPE are: + * - MobilityProcedureSubscription + * - AdjacentAppInfoSubscription + * @see ETSI GS MEC 021 2.1.1, clause 8.7.3.2 + */ + testcase TC_MEC_MEC012_SRV_AMS_007_OK() runs on HttpComponent system HttpTestAdapter { + var Headers v_headers; + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_AMS 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_ME_APP_AMS_SUBS & "/" & oct2char(unichar2oct(PX_SUBSCRIPTION_ID, "UTF-8")), + v_headers, + m_http_message_body_json( + m_body_json_ams_subscriptions( + m_ams_subscription( + PX_SUBSCRIPTION_TYPE, PX_CALLBACK_REFERENCE, -, -, - + ) + ) + ) + ) + ) + ); + 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_ams_subscriptions( + mw_ams_subscription(PX_SUBSCRIPTION_TYPE, -, -, -, -) + ) + ) + ) + ) + ) + { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a AppMobilityServiceInfo ***"); + 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 TC_MEC_MEC012_SRV_AMS_007_OK + + /** + * @desc Check that the AMS service sends an error when it receives a malformed modify request for a given subscription. + * Permitted SUBSCRIPTION_TYPE are: + * - MobilityProcedureSubscription + * - AdjacentAppInfoSubscription + * @see ETSI GS MEC 021 2.1.1, clause 8.7.3.2 + */ + testcase TC_MEC_MEC012_SRV_AMS_007_BR() runs on HttpComponent system HttpTestAdapter { + var Headers v_headers; + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_AMS 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_ME_APP_AMS_SUBS & "/" & oct2char(unichar2oct(PX_SUBSCRIPTION_ID, "UTF-8")), + v_headers, + m_http_message_body_json( + m_body_json_ams_registration_info( + m_registration_info( + PX_APP_MOBILITY_SERVICE_ID, + m_service_consumer_error(PX_APP_INS_ID, -), + -, + - + ) + ) + ) + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_400_bad_request( + mw_http_message_body_json( + mw_body_json_problem_details( + ) + ) + ) + ) + ) + { + 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 + + } // End of TC_MEC_MEC012_SRV_AMS_007_BR + + /** + * @desc Check that the AMS service sends an error when it receives a modify request for a not existing subscription + * @see ETSI GS MEC 021 2.1.1, clause 8.7.3.2 + */ + testcase TC_MEC_MEC012_SRV_AMS_007_NF() runs on HttpComponent system HttpTestAdapter { + var Headers v_headers; + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_AMS 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_ME_APP_AMS_SUBS & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_ID, "UTF-8")), + v_headers, + m_http_message_body_json( + m_body_json_ams_subscriptions( + m_ams_subscription( + PX_SUBSCRIPTION_TYPE, PX_CALLBACK_REFERENCE, -, -, - + ) + ) + ) + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_404_not_found( + mw_http_message_body_json( + mw_body_json_problem_details( + ) + ) + ) + ) + ) + { + 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 + + } // End of TC_MEC_MEC012_SRV_AMS_007_NF + + + } // End of group appMobilityServicesSubscriptions + + group ams_notifications { + + /** + * @desc Check that the AMS service sends an AMS notification about a mobility procedure if the AMS service has an associated subscription and the event is generated + * @see ETSI GS MEC 021 2.1.1, clause 7.4.2 + */ + testcase TC_MEC_MEC012_SRV_AMS_008_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_AMS) or not(PICS_AMS_NOTIFICATIONS)) { + log("*** " & testcasename() & ": PICS_AMS and PICS_AMS_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 mobility procedure 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_mobility_procedure_notification( + mw_mobility_procedure_notification( + -, + PX_CALLBACK_REFERENCE, + -, + -, + - + ) + ) + ) + ) + ) + ) { + tc_wait.stop; + log("*** " & testcasename() & ": INFO: IUT successfully sends mobility procedure 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 mobility procedure 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 TC_MEC_MEC012_SRV_AMS_008_OK + + /** + * @desc Check that the AMS service sends an AMS notification about adjacent application instances if the AMS service has an associated subscription and the event is generated + * @see ETSI GS MEC 021 2.1.1, clause 7.4.3 + */ + testcase TC_MEC_MEC012_SRV_AMS_009_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_AMS) or not(PICS_AMS_NOTIFICATIONS)) { + log("*** " & testcasename() & ": PICS_AMS and PICS_AMS_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 adjacent application info 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_adjacent_application_info_notification( + mw_adjacent_application_info_notification( + -, + PX_CALLBACK_REFERENCE, + -, + -, + - + ) + ) + ) + ) + ) + ) { + tc_wait.stop; + log("*** " & testcasename() & ": INFO: IUT successfully sends adjacent application info 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 adjacent application info 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(); + } + + + /** + * @desc Check that the AMS service sends an AMS notification on subscription expiration if the AMS service has an associated subscription and the event is generated + * @see ETSI GS MEC 021 2.1.1, clause 7.4.4 + */ + testcase TC_MEC_MEC012_SRV_AMS_010_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var UInt64 v_timestamp; + + // Test control + if (not(PICS_AMS) or not(PICS_AMS_NOTIFICATIONS)) { + log("*** " & testcasename() & ": PICS_AMS and PICS_AMS_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"); + v_timestamp := f_get_current_timestamp_utc(); + 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_expire_notification( + mw_expire_notification( + -, + -, + { seconds := v_timestamp / 1000, nanoSeconds := 1000 * v_timestamp mod 1000 } + ) + ) + ) + ) + ) + ) { + tc_wait.stop; + log("*** " & testcasename() & ": INFO: IUT successfully sends adjacent application info 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 adjacent applicationinfo 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 ams_notifications + +} // End of module AtsMec_ApplicationMobiltyServiceAPI_TestCases + + + + + + + diff --git a/ttcn/AtsMec_ApplicationMobiltyService/AtsMec_ApplicationMobiltyServiceAPI_TestControl.ttcn b/ttcn/AtsMec_ApplicationMobiltyService/AtsMec_ApplicationMobiltyServiceAPI_TestControl.ttcn new file mode 100644 index 0000000..ca476c0 --- /dev/null +++ b/ttcn/AtsMec_ApplicationMobiltyService/AtsMec_ApplicationMobiltyServiceAPI_TestControl.ttcn @@ -0,0 +1,20 @@ +module AtsMec_ApplicationMobiltyServiceAPI_TestControl { + + // LibMec_ApplicationMobiltyServiceAPI + import from ApplicationMobilityServiceAPI_Pics all; + + // LibMec + import from LibMec_Pics all; + + // AtsMec + import from AtsMec_ApplicationMobiltyServiceAPI_TestCases all; + + + control { + + if (PICS_MEC_PLAT and PICS_SERVICES) { + } + + } // End of 'control' statement + +} // End of module AtsMec_ApplicationMobiltyServiceAPI_TestControl diff --git a/ttcn/AtsMec_ApplicationMobiltyService/module.mk b/ttcn/AtsMec_ApplicationMobiltyService/module.mk new file mode 100644 index 0000000..3f0d273 --- /dev/null +++ b/ttcn/AtsMec_ApplicationMobiltyService/module.mk @@ -0,0 +1,39 @@ +suite := AtsMec_ApplicationMobiltyService + +sources := \ + AtsMec_ApplicationMobiltyServiceAPI_TestCases.ttcn \ + AtsMec_ApplicationMobiltyServiceAPI_TestControl.ttcn + +modules := ../LibCommon \ + ../../titan-test-system-framework/ttcn/LibHelpers \ + ../../titan-test-system-framework/ttcn/LibHttp \ + ../../titan-test-system-framework/ttcn/LibXsd \ + ../../titan-test-system-framework/ttcn/LibJson \ + ../patch_lib_http \ + ../LibMec \ + ../LibMec/LocationAPI \ + ../LibMec/EdgePlatformApplicationEnablementAPI \ + ../LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI \ + ../LibMec/TrafficManagementAPI \ + ../LibMec/UEAppInterfaceAPI \ + ../LibMec/UEidentityAPI \ + ../LibMec/V2XInformationServiceAPI \ + ../LibMec/DeviceApplicationInterfaceAPI \ + ../LibMec/WlanInformationAPI \ + ../LibMec/FixedAccessInformationServiceAPI \ + ../LibMec/ApplicationMobilityServiceAPI \ + ../LibMec/IoTAPI \ + ../LibMec/FederationEnablementAPI \ + ../../titan-test-system-framework/ccsrc/Framework \ + ../../titan-test-system-framework/ccsrc/loggers \ + ../../titan-test-system-framework/ccsrc/Protocols/Http \ + ../../titan-test-system-framework/ccsrc/Protocols/Tcp \ + ../../titan-test-system-framework/ccsrc/Protocols/Xml \ + ../../titan-test-system-framework/ccsrc/Helpers \ + ../../ccsrc/Ports/LibHttp \ + ../../ccsrc/EncDec/LibMec \ + ../../ccsrc/externals \ + ../../ccsrc/Protocols/Http \ + ../../ccsrc/Protocols/Json \ + ../modules/titan.TestPorts.Common_Components.Abstract_Socket \ + -- GitLab From fa4c21fa98506f97d52f76085fa7d074cb7efd55 Mon Sep 17 00:00:00 2001 From: garciay Date: Mon, 6 Nov 2023 14:56:30 +0100 Subject: [PATCH 49/99] TTF T027: Review MEC 010-2/MEO/Grant --- ...ycleAndOperationGrantingAPI_TestCases.ttcn | 165 +++++++++++++----- ...ycleAndOperationGrantingAPI_Functions.ttcn | 113 ++++++++++++ ...fecycleAndOperationGrantingAPI_Pixits.ttcn | 6 +- ...ycleAndOperationGrantingAPI_Templates.ttcn | 97 ++++++++-- 4 files changed, 322 insertions(+), 59 deletions(-) diff --git a/ttcn/AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases.ttcn b/ttcn/AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases.ttcn index 4d9627b..dbd6084 100644 --- a/ttcn/AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases.ttcn +++ b/ttcn/AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases.ttcn @@ -25,7 +25,9 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { import from LibHttp_TestSystem all; // LibMec_ApplicationPackageLifecycleAndOperationGrantingAPI + import from ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues all; import from ApplicationPackageLifecycleAndOperationGrantingAPI_Templates all; + import from ApplicationPackageLifecycleAndOperationGrantingAPI_Functions all; import from ApplicationPackageLifecycleAndOperationGrantingAPI_Pics all; import from ApplicationPackageLifecycleAndOperationGrantingAPI_Pixits all; @@ -69,9 +71,23 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { PX_APP_ID, INSTANTIATE, m_grant_request_link( - m_link_type(""), // TODO - m_link_type("") // TODO - ))))))); + m_link_type(PX_APP_LCM_OP_OCC_ID_URI), + m_link_type(PX_APP_INSTANCE_ID_URI) + ), + { + m_resource_definition( + "", // TODO + -, + { "" }, // TODO + m_resource_definition_resource( + m_vim_connection_info( + "", // TODO + "" // TODO + ), + "" // TODO + )) + } + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -99,6 +115,9 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEO_GRANT_001_OK /** @@ -131,11 +150,13 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { 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 - ))))))); + m_link_type(PX_APP_LCM_OP_OCC_ID_URI), + m_link_type(PX_APP_INSTANCE_ID_URI) + ) + // addResources not set + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -155,6 +176,9 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEO_GRANT_001_BR /** @@ -190,8 +214,8 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { PX_APP_ID, PX_APP_OPERATION, m_grant_request_link( - m_link_type(""), // TODO - m_link_type("") // TODO + m_link_type(PX_APP_LCM_OP_OCC_ID_URI), + m_link_type(PX_APP_INSTANCE_ID_URI) ))))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -220,6 +244,9 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEO_GRANT_002_OK /** @@ -256,8 +283,8 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { PX_APP_ID, PX_APP_OPERATION, m_grant_request_link( - m_link_type(""), // TODO - m_link_type("") // TODO + m_link_type(PX_APP_LCM_OP_OCC_ID_URI), + m_link_type(PX_APP_INSTANCE_ID_URI) ))))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -299,10 +326,13 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); } // 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 + * @desc Check that MEO sends a asynchronous grant response when a grant request is requested */ testcase TC_MEC_MEC010p2_MEO_GRANT_004_OK() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -323,33 +353,64 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { 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); + 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(PX_APP_LCM_OP_OCC_ID_URI), + m_link_type(PX_APP_INSTANCE_ID_URI) + ), + { + m_resource_definition( + "", // TODO + -, + { "" }, // TODO + m_resource_definition_resource( + m_vim_connection_info( + "", // TODO + "" // TODO + ), + "" // TODO + )) + } + )))))); + 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 { + // 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; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a 202 accepted status code ***"); - f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + + if (f_check_headers(valueof(v_response.response.header), -, PX_MEO_GRANT_URI & "/" & oct2char(unichar2oct(v_response.response.body.json_body.grantResponse.id))) == 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 and cirrect Location header ***"); + 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_MEC010p2_MEO_GRANT_004_OK /** @@ -359,6 +420,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Local variables var Headers v_headers; var HttpMessage v_response; + var Grant v_grant; // Test control if (not(PICS_GRANTS_MANAGEMENT)) { @@ -371,11 +433,12 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_cf_01_http_up(); // Preamble + f_create_grant_request(v_grant); 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")), + PICS_ROOT_API & PX_MEO_GRANT_URI & oct2char(unichar2oct(v_grant.id, "UTF-8")), v_headers ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -383,36 +446,29 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // 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( + v_grant.id, PX_APP_INSTANCE_ID - ) - ))))) { + )))))) -> value v_response { 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); - } + 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 + + // Postamble + f_delete_grant_request(v_grant.id); + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEO_GRANT_005_OK /** @@ -422,6 +478,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Local variables var Headers v_headers; var HttpMessage v_response; + var Grant v_grant; // Test control if (not(PICS_GRANTS_MANAGEMENT)) { @@ -434,11 +491,12 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_cf_01_http_up(); // Preamble + f_create_grant_request(v_grant); 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")), + PICS_ROOT_API & PX_MEO_GRANT_URI & oct2char(unichar2oct(v_grant.id, "UTF-8")), v_headers ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -446,12 +504,19 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // 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( + v_grant.id, PX_APP_INSTANCE_ID )))))) { tc_ac.stop; @@ -469,6 +534,10 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement + + // Postamble + f_delete_grant_request(v_grant.id); + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEO_GRANT_006_OK /** diff --git a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Functions.ttcn b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Functions.ttcn index ba95c97..8e53403 100644 --- a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Functions.ttcn +++ b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Functions.ttcn @@ -1,3 +1,116 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Functions { + // JSON + import from Json all; + + // Libcommon + import from LibCommon_Sync all; + + // LibHttp + import from LibHttp_TypesAndValues all; + import from LibHttp_Functions all; + import from LibHttp_Templates all; + import from LibHttp_JsonTemplates all; + import from LibHttp_TestSystem all; + + // LibMec_ApplicationPackageLifecycleAndOperationGrantingAPI + import from ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues all; + 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; + + function f_create_grant_request( + out Grant p_grant + ) runs on HttpComponent { + // Local variables + 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_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(PX_APP_LCM_OP_OCC_ID_URI), + m_link_type(PX_APP_INSTANCE_ID_URI) + ), + { + m_resource_definition( + "", // TODO + -, + { "" }, // TODO + m_resource_definition_resource( + m_vim_connection_info( + "", // TODO + "" // TODO + ), + "" // TODO + )) + } + )))))); + + 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; + p_grant := v_response.response.body.json_body.grantResponse; + log("f_create_grant_request: INFO: IUT successfully responds to the GrantRequest: ", p_grant); + } + [] tc_ac.timeout { + log("f_create_grant_request: Expected message not received"); + } + } // End of 'alt' statement + + } // End of function f_create_grant_request + + function f_delete_grant_request( + out Json.String p_grant_id + ) runs on HttpComponent { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & PX_MEO_GRANT_URI & oct2char(unichar2oct(p_grant_id)), + v_headers + ))); + + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_204_no_content + )) -> value v_response { + tc_ac.stop; + } + [] tc_ac.timeout { + log("f_delete_grant_request: Expected message not received"); + } + } // End of 'alt' statement + + } // End of function f_delete_grant_request + } // End of ApplicationPackageLifecycleAndOperationGrantingAPI_Functions diff --git a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Pixits.ttcn b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Pixits.ttcn index fbceab5..748e276 100644 --- a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Pixits.ttcn +++ b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Pixits.ttcn @@ -12,12 +12,16 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Pixits { modulepar Json.String PX_APP_ID := "5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1c"; - modulepar OperationType PX_APP_OPERATION := INSTANTIATE; + modulepar OperationType PX_APP_OPERATION := OPERATE; modulepar OperationType PX_APP_OPERATION_ERROR := INSTANTIATE; modulepar Json.String PX_APP_LCM_OP_OCC_ID := "5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1c" + modulepar Json.AnyURI PX_APP_LCM_OP_OCC_ID_URI := ""; + + modulepar Json.AnyURI PX_APP_INSTANCE_ID_URI := ""; + 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/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Templates.ttcn b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Templates.ttcn index 66ac297..2d2310e 100644 --- a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Templates.ttcn +++ b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Templates.ttcn @@ -15,18 +15,19 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Templates { 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 - ) := { + template (omit) 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, + in template (omit) ResourceDefinitions p_addResources := omit + ) := { appInstanceId := p_app_instance_id, appLcmOpOccId := p_appLcmOpOccId, appDId := p_appDId, operation := p_operation, - addResources := omit, + addResources := p_addResources, tempResources := omit, updateResources := omit, additionalParams := omit, @@ -54,7 +55,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Templates { 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) String p_appLcmOpOccId := PX_APP_LCM_OP_OCC_ID, template (present) Grant_Link p_links := ? ) := { id := p_id, @@ -100,7 +101,83 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Templates { ) := { href := p_href } // End of template mw_link_type - + + template (omit) ResourceDefinition m_resource_definition( + in Json.String p_id, + in ResourceDefinition_Type p_type_ := OSCONTAINER, + in template (value) ResourceTemplateId p_resourceTemplateId, + in template (value) ResourceDefinition_Resource p_resource, + in template (omit) Json.String p_vduId := omit + ) := { + id := p_id, + type_ := p_type_, + vduId := p_vduId, + resourceTemplateId := p_resourceTemplateId, + resource := p_resource + } // End of template m_resource_definition + + template (present) ResourceDefinition mw_resource_definition( + template (present) Json.String p_id := ?, + template (present) ResourceDefinition_Type p_type_ := ?, + template (present) ResourceTemplateId p_resourceTemplateId := ?, + template (present) ResourceDefinition_Resource p_resource := ?, + template Json.String p_vduId := * + ) := { + id := p_id, + type_ := p_type_, + vduId := p_vduId, + resourceTemplateId := p_resourceTemplateId, + resource := p_resource + } // End of template mw_resource_definition + + template (value) ResourceDefinition_Resource m_resource_definition_resource( + in template (value) VimConnectionInfo p_vimConnectionInfo, + in Json.String p_resourceId + ) := { + vimConnectionInfo := p_vimConnectionInfo, + resourceId := p_resourceId + } // End of template m_resource_definition_resource + + template (present) ResourceDefinition_Resource mw_resource_definition_resource( + template (present) VimConnectionInfo p_vimConnectionInfo := ?, + template (present) Json.String p_resourceId := ? + ) := { + vimConnectionInfo := p_vimConnectionInfo, + resourceId := p_resourceId + } // End of template mw_resource_definition_resource + + template (omit) VimConnectionInfo m_vim_connection_info( + in Json.String p_id, + in Json.String p_vimType, + in template (omit) Json.String p_vimId := omit, + in template (omit) ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.KeyValuePairs p_interfaceInfo := omit, + in template (omit) ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.KeyValuePairs p_accessInfo := omit, + in template (omit) ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.KeyValuePairs p_extra := omit + ) := { + id := p_id, + vimId := p_vimId, + vimType := p_vimType, + interfaceInfo := p_interfaceInfo, + accessInfo := p_accessInfo, + extra := p_extra + } // End of template m_vim_connection_info + + template (present) VimConnectionInfo mw_vim_connection_info( + template (present) Json.String p_id := ?, + template (present) Json.String p_vimType := ?, + template Json.String p_vimId := *, + template ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.KeyValuePairs p_interfaceInfo := *, + template ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.KeyValuePairs p_accessInfo := *, + template ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.KeyValuePairs p_extra := * + ) := { + id := p_id, + vimId := p_vimId, + vimType := p_vimType, + interfaceInfo := p_interfaceInfo, + accessInfo := p_accessInfo, + extra := p_extra + } // End of template mw_vim_connection_info + } // End of group granting group pkgmgt { -- GitLab From 3fb4fb9c393ac90170c2d3c2fc5e70fc4acbcfce Mon Sep 17 00:00:00 2001 From: garciay Date: Thu, 9 Nov 2023 10:19:40 +0100 Subject: [PATCH 50/99] TTF T027: Review MEC 010-2/MEO/Pkgm --- ...ycleAndOperationGrantingAPI_TestCases.ttcn | 294 +++++++++++++----- ...leAndOperationGrantingAPI_TestControl.ttcn | 49 ++- ...ycleAndOperationGrantingAPI_Functions.ttcn | 151 ++++++++- ...ycleAndOperationGrantingAPI_Templates.ttcn | 46 ++- ...ndOperationGrantingAPI_TypesAndValues.ttcn | 5 +- 5 files changed, 469 insertions(+), 76 deletions(-) diff --git a/ttcn/AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases.ttcn b/ttcn/AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases.ttcn index dbd6084..18617bd 100644 --- a/ttcn/AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases.ttcn +++ b/ttcn/AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases.ttcn @@ -584,6 +584,9 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEO_GRANT_006_NF } // End of group granting @@ -618,12 +621,11 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { m_http_message_body_json( m_body_json_create_package_management( m_create_package_management( - "appPkgName", + PX_APP_PKG_NAME, PX_APP_PKG_VERSION, m_checksum(-, PX_CHECKSUM), PX_APP_PKG_PATH )))))); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -634,19 +636,15 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { 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 { + mw_app_pkg_info( + -, -, + PX_APP_PKG_NAME, + PX_APP_PKG_VERSION, + -, + mw_checksum + )))))) -> 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); } @@ -655,11 +653,13 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + + // Postamble + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_001_OK /** - * @desc Check that MEO creates a new App Package when requested + * @desc Check that MEO responds with an error when it receives a malformed request for creating a new App Package */ testcase TC_MEC_MEC010p2_MEO_PKGM_001_BR() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -690,7 +690,6 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { m_checksum(-, PX_CHECKSUM), PX_APP_PKG_PATH )))))); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -710,7 +709,9 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + + // Postamble + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_001_BR /** @@ -720,6 +721,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Local variables var Headers v_headers; var HttpMessage v_response; + var AppPkgInfo v_app_pkg_info; // Test control if (not(PICS_APP_PACKAGE_MANAGEMENT)) { @@ -732,6 +734,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_cf_01_http_up(); // Preamble + f_create_package_management(v_app_pkg_info); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( @@ -739,7 +742,6 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { PICS_ROOT_API & PX_MEO_PKGM_URI, v_headers ))); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -749,8 +751,19 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { mw_http_response( mw_http_response_ok( mw_http_message_body_json( - mw_body_json_app_pkg_info_list - )))) -> value v_response { + mw_body_json_app_pkg_info_list( + { + *, + mw_app_pkg_info( + -, -, + PX_APP_PKG_NAME, + PX_APP_PKG_VERSION, + -, + mw_checksum + ), + * + } + ))))) -> value v_response { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with an App Package list ***"); @@ -761,16 +774,20 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + + // Postamble + f_delete_package_management(v_app_pkg_info.id); + f_cf_01_http_down(); } // 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 + * @desc Check that MEO returns the list of on-boarded 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; + var AppPkgInfo v_app_pkg_info; // Test control if (not(PICS_APP_PACKAGE_MANAGEMENT)) { @@ -783,6 +800,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_cf_01_http_up(); // Preamble + f_create_package_management(v_app_pkg_info, true); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( @@ -800,8 +818,19 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { mw_http_response( mw_http_response_ok( mw_http_message_body_json( - mw_body_json_app_pkg_info_list - )))) -> value v_response { + mw_body_json_app_pkg_info_list( + { + *, + mw_app_pkg_info( + -, -, + PX_APP_PKG_NAME, + PX_APP_PKG_VERSION, + -, + mw_checksum + ), + * + } + ))))) -> value v_response { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with an App Package list ***"); @@ -813,11 +842,13 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { } } // End of 'alt' statement + // Postamble + f_delete_package_management(v_app_pkg_info.id); + f_cf_01_http_down(); } // 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 + * @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 @@ -862,6 +893,8 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { } } // End of 'alt' statement + // Postamble + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_002_BR /** @@ -871,6 +904,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Local variables var Headers v_headers; var HttpMessage v_response; + var AppPkgInfo v_app_pkg_info; // Test control if (not(PICS_APP_PACKAGE_MANAGEMENT)) { @@ -883,11 +917,12 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_cf_01_http_up(); // Preamble + f_create_package_management(v_app_pkg_info); 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")), + PICS_ROOT_API & PX_MEO_PKGM_URI & "/" & oct2char(unichar2oct(v_app_pkg_info.id, "UTF-8")), v_headers ))); @@ -902,7 +937,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { mw_http_message_body_json( mw_body_json_app_pkg_info( mw_app_pkg_info( - PX_APP_PKG_ID + v_app_pkg_info.id )))))) -> value v_response { tc_ac.stop; @@ -915,6 +950,9 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { } } // End of 'alt' statement + // Postamble + f_delete_package_management(v_app_pkg_info.id); + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_003_01_OK /** @@ -924,6 +962,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Local variables var Headers v_headers; var HttpMessage v_response; + var AppPkgInfo v_app_pkg_info; // Test control if (not(PICS_APP_PACKAGE_MANAGEMENT)) { @@ -936,11 +975,12 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_cf_01_http_up(); // Preamble + f_create_package_management(v_app_pkg_info, true); 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")), + PICS_ROOT_API & PX_MEO_PKGM_URI_ONBOARDED & "/" & oct2char(unichar2oct(v_app_pkg_info.id, "UTF-8")), v_headers ))); @@ -968,11 +1008,13 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { } } // End of 'alt' statement + // Postamble + f_delete_package_management(v_app_pkg_info.id); + f_cf_01_http_down(); } // 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 + * @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 @@ -994,7 +1036,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { 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")), + PICS_ROOT_API & PX_MEO_PKGM_URI_ONBOARDED & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_APP_PKG_ID, "UTF-8")), v_headers ))); @@ -1018,6 +1060,8 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { } } // End of 'alt' statement + // Postamble + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_003_NF /** @@ -1027,6 +1071,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Local variables var Headers v_headers; var HttpMessage v_response; + var AppPkgInfo v_app_pkg_info; // Test control if (not(PICS_APP_PACKAGE_MANAGEMENT)) { @@ -1039,11 +1084,12 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_cf_01_http_up(); // Preamble + f_create_package_management(v_app_pkg_info); 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")), + PICS_ROOT_API & PX_MEO_PKGM_URI & "/" & oct2char(unichar2oct(v_app_pkg_info.id, "UTF-8")), v_headers ))); @@ -1067,6 +1113,9 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { } } // End of 'alt' statement + // Postamble + f_delete_package_management(v_app_pkg_info.id); + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_004_OK /** @@ -1093,7 +1142,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { 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")), + PICS_ROOT_API & PX_MEO_PKGM_URI_ONBOARDED & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_APP_PKG_ID, "UTF-8")), v_headers ))); @@ -1117,6 +1166,8 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { } } // End of 'alt' statement + // Postamble + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_004_NF /** @@ -1126,6 +1177,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Local variables var Headers v_headers; var HttpMessage v_response; + var AppPkgInfo v_app_pkg_info; // Test control if (not(PICS_APP_PACKAGE_MANAGEMENT)) { @@ -1138,18 +1190,18 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_cf_01_http_up(); // Preamble + f_create_package_management(v_app_pkg_info); 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")), + PICS_ROOT_API & PX_MEO_PKGM_URI & "/" & oct2char(unichar2oct(v_app_pkg_info.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 @@ -1161,7 +1213,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { mw_http_message_body_json( mw_body_json_app_pkg_info_modification( mw_app_pkg_info_modification( - DISABLED + DISABLED )))))) -> value v_response { tc_ac.stop; @@ -1174,11 +1226,13 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { } } // End of 'alt' statement + // Postamble + f_delete_package_management(v_app_pkg_info.id); + f_cf_01_http_down(); } // 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 + * @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 @@ -1205,9 +1259,8 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { m_http_message_body_json( m_body_json_app_pkg_info_modification( m_app_pkg_info_modification( - DISABLED + ERROR_BAD_REQUEST // Should be DISABLED )))))); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -1228,6 +1281,8 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { } } // End of 'alt' statement + // Postamble + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_005_BR /** @@ -1282,6 +1337,8 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { } } // End of 'alt' statement + // Postamble + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_005_NF /** @@ -1314,7 +1371,6 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { m_app_pkg_info_subscription( PX_CALLBACK_URI )))))); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -1341,11 +1397,13 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { } } // End of 'alt' statement + // Postamble + f_delete_app_pkg_subscription(v_response.response.body.json_body.appPkgSubscriptionInfo.id); + f_cf_01_http_down(); } // 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 + * @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 @@ -1375,7 +1433,6 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { PX_CALLBACK_URI, "Invalid_field" )))))); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -1396,15 +1453,18 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { } } // End of 'alt' statement + // Postamble + f_cf_01_http_down(); } // 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 { + testcase TC_MEC_MEC010p2_MEO_PKGM_007_OK_01() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; + var AppPkgSubscriptionInfo v_app_pkg_subscription_info; // Test control if (not(PICS_APP_PACKAGE_MANAGEMENT)) { @@ -1417,6 +1477,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_cf_01_http_up(); // Preamble + f_create_app_pkg_subscription(v_app_pkg_subscription_info); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( @@ -1424,7 +1485,67 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { 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( + mw_app_pkg_ubscription_link_list( + mw_app_pkg_subscription_link_list_link( + -, + { + *, + mw_app_pkg_subscription_link_list_link_subscription(v_app_pkg_subscription_info.links.self_.href) , + * + } + ))))))) -> 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 + + // Postamble + f_delete_app_pkg_subscription(v_app_pkg_subscription_info.id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_007_OK_01 + + /** + * @desc Check that MEO service returns an empty list of Application Package Subscriptions when requested + */ + testcase TC_MEC_MEC010p2_MEO_PKGM_007_OK_02() 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 @@ -1434,8 +1555,12 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { mw_http_response( mw_http_response_ok( mw_http_message_body_json( - mw_body_json_pkgm_subscription_link_list // TODO - )))) -> value v_response { + mw_body_json_pkgm_subscription_link_list( + mw_app_pkg_ubscription_link_list( + mw_app_pkg_subscription_link_list_link( + -, + omit + ))))))) -> value v_response { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a sucbsrciption info list ***"); @@ -1446,8 +1571,10 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - - } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_007_OK + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_007_OK_02 /** * @desc Check that MEO service returns an Application Package Subscription when requested @@ -1456,6 +1583,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Local variables var Headers v_headers; var HttpMessage v_response; + var AppPkgSubscriptionInfo v_app_pkg_subscription_info; // Test control if (not(PICS_APP_PACKAGE_MANAGEMENT)) { @@ -1468,14 +1596,14 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_cf_01_http_up(); // Preamble + f_create_app_pkg_subscription(v_app_pkg_subscription_info); 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")), + PICS_ROOT_API & PX_MEO_PKGM_SUBS & "/" & oct2char(unichar2oct(v_app_pkg_subscription_info.id, "UTF-8")), v_headers ))); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -1502,7 +1630,10 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + + // Postamble + f_delete_app_pkg_subscription(v_app_pkg_subscription_info.id); + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_008_OK /** @@ -1531,7 +1662,6 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { 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 @@ -1551,7 +1681,9 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + + // Postamble + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_008_NF /** @@ -1561,6 +1693,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Local variables var Headers v_headers; var HttpMessage v_response; + var AppPkgSubscriptionInfo v_app_pkg_subscription_info; // Test control if (not(PICS_APP_PACKAGE_MANAGEMENT)) { @@ -1573,14 +1706,14 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_cf_01_http_up(); // Preamble + f_create_app_pkg_subscription(v_app_pkg_subscription_info); 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")), + PICS_ROOT_API & PX_MEO_PKGM_SUBS & "/" & oct2char(unichar2oct(v_app_pkg_subscription_info.id, "UTF-8")), v_headers ))); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -1600,7 +1733,9 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + + // Postamble + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_009_OK /** @@ -1630,7 +1765,6 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { 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 @@ -1650,7 +1784,9 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + + // Postamble + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_009_NF /** @@ -1661,10 +1797,11 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Local variables var Headers v_headers; var HttpMessage v_response; + var AppPkgSubscriptionInfo v_app_pkg_subscription_info; // Test control - if (not(PICS_APP_PACKAGE_MANAGEMENT)) { - log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); + if (not(PICS_APP_PACKAGE_NOTIFICATIONS)) { + log("*** " & testcasename() & ": PICS_APP_PACKAGE_NOTIFICATIONS required for executing the TC ***"); setverdict(inconc); stop; } @@ -1673,7 +1810,9 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_cf_01_http_up(); // Preamble + f_create_app_pkg_subscription(v_app_pkg_subscription_info); f_init_default_headers_list(-, -, v_headers); + action("Trigger application package notification"); // TODO To be reviewed f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -1682,7 +1821,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { [] 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 + PICS_ROOT_API & PX_MEO_PKGM_SUBS & "/" & oct2char(unichar2oct(v_app_pkg_subscription_info.id, "UTF-8")), // TODO To be changed v_headers, mw_http_message_body_json( mw_body_json_app_package_notification( @@ -1698,7 +1837,10 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + + // Postamble + f_delete_app_pkg_subscription(v_app_pkg_subscription_info.id); + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_010_OK /** @@ -1749,7 +1891,9 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + + // Postamble + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_011_OK /** @@ -1799,7 +1943,9 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + + // Postamble + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_011_NF /** @@ -1850,7 +1996,9 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + + // Postamble + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_012_01_OK /** @@ -1901,7 +2049,9 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + + // Postamble + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_012_02_OK /** @@ -1950,7 +2100,9 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + + // Postamble + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_012_01_NG /** @@ -1999,7 +2151,9 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + + // Postamble + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_012_02_NG } // End of group meo_pkgmgt diff --git a/ttcn/AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestControl.ttcn b/ttcn/AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestControl.ttcn index bb58ede..fc89480 100644 --- a/ttcn/AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestControl.ttcn +++ b/ttcn/AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestControl.ttcn @@ -11,7 +11,54 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestControl { control { - if (PICS_MEC_PLAT and PICS_SERVICES) { + if (PICS_MEC_PLAT) { + if (PICS_APP_PACKAGE_MANAGEMENT) { + if (PICS_GRANTS_MANAGEMENT) { + execute(TC_MEC_MEC010p2_MEO_GRANT_001_OK()); + execute(TC_MEC_MEC010p2_MEO_GRANT_001_BR()); + execute(TC_MEC_MEC010p2_MEO_GRANT_002_OK()); + execute(TC_MEC_MEC010p2_MEO_GRANT_003_OK()); + execute(TC_MEC_MEC010p2_MEO_GRANT_004_OK()); + execute(TC_MEC_MEC010p2_MEO_GRANT_005_OK()); + execute(TC_MEC_MEC010p2_MEO_GRANT_006_OK()); + execute(TC_MEC_MEC010p2_MEO_GRANT_006_NF()); + } + + if (PICS_APP_PACKAGE_MANAGEMENT) { + execute(TC_MEC_MEC010p2_MEO_PKGM_001_OK()); + execute(TC_MEC_MEC010p2_MEO_PKGM_001_BR()); + execute(TC_MEC_MEC010p2_MEO_PKGM_002_01_OK()); + execute(TC_MEC_MEC010p2_MEO_PKGM_002_02_OK()); + execute(TC_MEC_MEC010p2_MEO_PKGM_002_BR()); + execute(TC_MEC_MEC010p2_MEO_PKGM_003_01_OK()); + execute(TC_MEC_MEC010p2_MEO_PKGM_003_02_OK()); + execute(TC_MEC_MEC010p2_MEO_PKGM_003_NF()); + execute(TC_MEC_MEC010p2_MEO_PKGM_004_OK()); + execute(TC_MEC_MEC010p2_MEO_PKGM_004_NF()); + execute(TC_MEC_MEC010p2_MEO_PKGM_005_OK()); + execute(TC_MEC_MEC010p2_MEO_PKGM_005_BR()); + execute(TC_MEC_MEC010p2_MEO_PKGM_005_NF()); + execute(TC_MEC_MEC010p2_MEO_PKGM_006_OK()); + execute(TC_MEC_MEC010p2_MEO_PKGM_006_BR()); + execute(TC_MEC_MEC010p2_MEO_PKGM_007_OK_01()); + execute(TC_MEC_MEC010p2_MEO_PKGM_007_OK_02()); + execute(TC_MEC_MEC010p2_MEO_PKGM_008_OK()); + execute(TC_MEC_MEC010p2_MEO_PKGM_008_NF()); + execute(TC_MEC_MEC010p2_MEO_PKGM_009_OK()); + execute(TC_MEC_MEC010p2_MEO_PKGM_009_NF()); + + execute(TC_MEC_MEC010p2_MEO_PKGM_011_OK()); + execute(TC_MEC_MEC010p2_MEO_PKGM_011_NF()); + execute(TC_MEC_MEC010p2_MEO_PKGM_012_01_OK()); + execute(TC_MEC_MEC010p2_MEO_PKGM_012_02_OK()); + execute(TC_MEC_MEC010p2_MEO_PKGM_012_01_NF()); + execute(TC_MEC_MEC010p2_MEO_PKGM_012_02_NF()); + } + + if (PICS_APP_PACKAGE_NOTIFICATIONS) { + execute(TC_MEC_MEC010p2_MEO_PKGM_010_OK()); + } + } } } // End of 'control' statement diff --git a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Functions.ttcn b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Functions.ttcn index 8e53403..506cc44 100644 --- a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Functions.ttcn +++ b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Functions.ttcn @@ -88,7 +88,6 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Functions { ) runs on HttpComponent { // Local variables var Headers v_headers; - var HttpMessage v_response; f_init_default_headers_list(-, -, v_headers); httpPort.send( @@ -103,7 +102,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Functions { [] httpPort.receive( mw_http_response( mw_http_response_204_no_content - )) -> value v_response { + )) { tc_ac.stop; } [] tc_ac.timeout { @@ -113,4 +112,152 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Functions { } // End of function f_delete_grant_request + function f_create_package_management( + out AppPkgInfo p_app_pkg_info, + in boolean p_onboarded := false + ) runs on HttpComponent { + // Local variables + 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_MEO_PKGM_URI, + v_headers, + m_http_message_body_json( + m_body_json_create_package_management( + m_create_package_management( + PX_APP_PKG_NAME, + PX_APP_PKG_VERSION, + m_checksum(-, PX_CHECKSUM), + PX_APP_PKG_PATH + )))))); + + 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 + )))))) -> value v_response { + tc_ac.stop; + + p_app_pkg_info := v_response.response.body.json_body.appPkgInfo; + log("f_create_package_management: INFO: IUT successfully responds to the CreateAppPkg: ", p_app_pkg_info); + } + [] tc_ac.timeout { + log("f_create_package_management: INCONC: Expected message not received"); + } + } // End of 'alt' statement + } // End of function f_create_package_management + + function f_delete_package_management( + in Json.String p_pkg_info_id + ) runs on HttpComponent { + // Local variables + var Headers v_headers; + + 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(p_pkg_info_id)), + 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_package_management: INCONC: Expected message not received"); + } + } // End of 'alt' statement + } // End of function f_delete_package_management + + function f_create_app_pkg_subscription( + out AppPkgSubscriptionInfo p_app_pkg_subscription_info + ) runs on HttpComponent { + // Local variables + 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_MEO_PKGM_SUBS, + v_headers, + m_http_message_body_json( + m_body_json_pkgm_subscription( + m_app_pkg_info_subscription( + PX_CALLBACK_URI + )))))); + + 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; + p_app_pkg_subscription_info := v_response.response.body.json_body.appPkgSubscriptionInfo; + log("f_create_app_pkg_subscription: INFO: IUT responds to the AppPkgSubscriptionInfo: ", p_app_pkg_subscription_info); + } + [] tc_ac.timeout { + log("f_create_app_pkg_subscription: INCONC: Expected message not received ***"); + } + } // End of 'alt' statement + + } // End of function f_create_app_pkg_subscription + + function f_delete_app_pkg_subscription( + in Json.String p_id + ) runs on HttpComponent { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + 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(p_id)), + v_headers + ))); + + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_204_no_content + )) -> value v_response { + tc_ac.stop; + } + [] tc_ac.timeout { + log("f_delete_app_pkg_subscription: INCONC: Expected message not received ***"); + } + } // End of 'alt' statement + + } // End of function f_delete_app_pkg_subscription + } // End of ApplicationPackageLifecycleAndOperationGrantingAPI_Functions diff --git a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Templates.ttcn b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Templates.ttcn index 2d2310e..d5c1efc 100644 --- a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Templates.ttcn +++ b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Templates.ttcn @@ -336,7 +336,51 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Templates { ) := { self_ := { href := p_href } } // End of template mw_app_pkg_link - + + template (value) AppPkgSubscriptionLinkList m_app_pkg_ubscription_link_list( + in template (value) AppPkgSubscriptionLinkList_Link p_links + ) := { + links := p_links + } // End of template m_app_pkg_ubscription_link_list + + template (present) AppPkgSubscriptionLinkList mw_app_pkg_ubscription_link_list( + template (present) AppPkgSubscriptionLinkList_Link p_links := ? + ) := { + links := p_links + } // End of template mw_app_pkg_ubscription_link_list + + template (omit) AppPkgSubscriptionLinkList_Link m_app_pkg_subscription_link_list_link( + in template (value) ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.LinkType p_self_, + in template (omit) AppPkgSubscriptionLinkList_Link_Subscriptions p_subscriptions := omit + ) := { + self_ := p_self_, + subscriptions := p_subscriptions + } // End of template m_app_pkg_subscription_link_list_link + + template (present) AppPkgSubscriptionLinkList_Link mw_app_pkg_subscription_link_list_link( + template (present) ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.LinkType p_self_ := ?, + template AppPkgSubscriptionLinkList_Link_Subscriptions p_subscriptions := * + ) := { + self_ := p_self_, + subscriptions := p_subscriptions + } // End of template mw_app_pkg_subscription_link_list_link + + template (value) AppPkgSubscriptionLinkList_Link_Subscription m_app_pkg_subscription_link_list_link_subscription( + in Json.AnyURI p_href, + in AppPkgSubscriptionType p_subscriptionType + ) := { + href := p_href, + subscriptionType := p_subscriptionType + } // End of template m_app_pkg_subscription_link_list_link_subscription + + template (present) AppPkgSubscriptionLinkList_Link_Subscription mw_app_pkg_subscription_link_list_link_subscription( + template (present) Json.AnyURI p_href := ?, + template (present) AppPkgSubscriptionType p_subscriptionType := ? + ) := { + href := p_href, + subscriptionType := p_subscriptionType + } // End of template mw_app_pkg_subscription_link_list_link_subscription + } // End of group pkgmgt group mepm_lifcyclemgt { diff --git a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.ttcn b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.ttcn index d89f785..1bb202a 100644 --- a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.ttcn @@ -1384,8 +1384,9 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { } type enumerated AppPkgInfo_OperationalState { - ENABLED (0), - DISABLED (1) + ENABLED (0), + DISABLED (1), + ERROR_BAD_REQUEST (2) } type enumerated UsageState { -- GitLab From 67e4737e27362341cde0eb0d6e5894b0c4940430 Mon Sep 17 00:00:00 2001 From: garciay Date: Mon, 13 Nov 2023 09:24:01 +0100 Subject: [PATCH 51/99] TTF T027: Review MEC 010-2/MEPM/Pkgm --- ...ycleAndOperationGrantingAPI_TestCases.ttcn | 620 +++++++++++++++--- ...leAndOperationGrantingAPI_TestControl.ttcn | 143 ++-- ...ycleAndOperationGrantingAPI_Functions.ttcn | 8 +- ...LifecycleAndOperationGrantingAPI_Pics.ttcn | 4 + ...ycleAndOperationGrantingAPI_Templates.ttcn | 56 +- 5 files changed, 683 insertions(+), 148 deletions(-) diff --git a/ttcn/AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases.ttcn b/ttcn/AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases.ttcn index 18617bd..c5e1092 100644 --- a/ttcn/AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases.ttcn +++ b/ttcn/AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases.ttcn @@ -1790,8 +1790,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { } // 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 + * @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 @@ -1807,7 +1806,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { } // Test component configuration - f_cf_01_http_up(); + f_cf_01_http_notif_up(); // Preamble f_create_app_pkg_subscription(v_app_pkg_subscription_info); @@ -1840,7 +1839,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Postamble f_delete_app_pkg_subscription(v_app_pkg_subscription_info.id); - f_cf_01_http_down(); + f_cf_01_http_notif_down(); } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_010_OK /** @@ -2166,7 +2165,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { testcase TC_MEC_MEC010p2_MEPM_PKGM_001_01_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; - var HttpMessage v_response; + var AppPkgInfo v_app_pkg_info; // Test control if (not(PICS_APP_PACKAGE_MANAGEMENT)) { @@ -2179,6 +2178,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_cf_01_http_up(); // Preamble + f_create_package_management(v_app_pkg_info); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( @@ -2186,7 +2186,6 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { PICS_ROOT_API & PX_MEPM_PKGM_URI, v_headers ))); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -2196,8 +2195,17 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { mw_http_response( mw_http_response_ok( mw_http_message_body_json( - mw_body_json_app_pkg_info_list - )))) -> value v_response { + mw_body_json_app_pkg_info_list( + { + *, + mw_app_pkg_info( + v_app_pkg_info.id, + v_app_pkg_info.appDId + ) + , + * + } + ))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with an App Package list ***"); @@ -2208,7 +2216,10 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + + // Postamble + f_delete_package_management(v_app_pkg_info.id); + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_001_01_OK /** @@ -2217,7 +2228,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { testcase TC_MEC_MEC010p2_MEPM_PKGM_001_02_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; - var HttpMessage v_response; + var AppPkgInfo v_app_pkg_info; // Test control if (not(PICS_APP_PACKAGE_MANAGEMENT)) { @@ -2230,6 +2241,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_cf_01_http_up(); // Preamble + f_create_package_management(v_app_pkg_info, true); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( @@ -2237,7 +2249,6 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { 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 @@ -2247,8 +2258,19 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { mw_http_response( mw_http_response_ok( mw_http_message_body_json( - mw_body_json_app_pkg_info_list - )))) -> value v_response { + mw_body_json_app_pkg_info_list( + { + *, + mw_app_pkg_info( + v_app_pkg_info.id, + v_app_pkg_info.appDId, + -, -, -, -, -, + ONBOARDED + ) + , + * + } + ))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with an App Package list ***"); @@ -2259,12 +2281,14 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + + // Postamble + f_delete_package_management(v_app_pkg_info.id); + f_cf_01_http_down(); } // 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 + * @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 @@ -2288,7 +2312,6 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { PICS_ROOT_API & PX_MEPM_PKGM_URI & "?filter()", v_headers ))); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -2308,7 +2331,9 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + + // Postamble + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_001_BR /** @@ -2317,7 +2342,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { testcase TC_MEC_MEC010p2_MEPM_PKGM_002_01_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; - var HttpMessage v_response; + var AppPkgInfo v_app_pkg_info; // Test control if (not(PICS_APP_PACKAGE_MANAGEMENT)) { @@ -2330,14 +2355,14 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_cf_01_http_up(); // Preamble + f_create_package_management(v_app_pkg_info); 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")), + PICS_ROOT_API & PX_MEPM_PKGM_URI & "/" & oct2char(unichar2oct(v_app_pkg_info.id, "UTF-8")), v_headers ))); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -2349,8 +2374,9 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { mw_http_message_body_json( mw_body_json_app_pkg_info( mw_app_pkg_info( - PX_APP_PKG_ID - )))))) -> value v_response { + v_app_pkg_info.id, + v_app_pkg_info.appDId + )))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with an App Package ***"); @@ -2361,7 +2387,10 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + + // Postamble + f_delete_package_management(v_app_pkg_info.id); + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_002_01_OK /** @@ -2370,7 +2399,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { testcase TC_MEC_MEC010p2_MEPM_PKGM_002_02_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; - var HttpMessage v_response; + var AppPkgInfo v_app_pkg_info; // Test control if (not(PICS_APP_PACKAGE_MANAGEMENT)) { @@ -2383,14 +2412,14 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_cf_01_http_up(); // Preamble + f_create_package_management(v_app_pkg_info, true); 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")), + PICS_ROOT_API & PX_MEO_PKGM_URI_ONBOARDED & "/" & oct2char(unichar2oct(v_app_pkg_info.id, "UTF-8")), v_headers ))); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -2402,8 +2431,11 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { mw_http_message_body_json( mw_body_json_app_pkg_info( mw_app_pkg_info( - PX_APP_PKG_ID - )))))) -> value v_response { + v_app_pkg_info.id, + v_app_pkg_info.appDId, + -, -, -, -, -, + ONBOARDED + )))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with an App Package ***"); @@ -2414,17 +2446,18 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + + // Postamble + f_delete_package_management(v_app_pkg_info.id); + f_cf_01_http_down(); } // 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 + * @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)) { @@ -2441,10 +2474,9 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { 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")), + PICS_ROOT_API & PX_MEO_PKGM_URI_ONBOARDED & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_APP_PKG_ID, "UTF-8")), v_headers ))); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -2453,7 +2485,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_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 a correct error code ***"); @@ -2464,7 +2496,9 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + + // Postamble + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_002_NF /** @@ -2497,7 +2531,6 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { m_app_pkg_info_subscription( PX_CALLBACK_URI )))))); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -2523,17 +2556,18 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + + // Postamble + f_delete_app_pkg_subscription(v_response.response.body.json_body.appPkgSubscriptionInfo.id); + f_cf_01_http_down(); } // 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 + * @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)) { @@ -2558,7 +2592,6 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { PX_CALLBACK_URI, "Invalid_field" )))))); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -2567,7 +2600,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { [] 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 ***"); @@ -2578,7 +2611,9 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + + // Postamble + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_003_BR /** @@ -2587,7 +2622,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { testcase TC_MEC_MEC010p2_MEPM_PKGM_004_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; - var HttpMessage v_response; + var AppPkgSubscriptionInfo v_app_pkg_subscription_info; // Test control if (not(PICS_APP_PACKAGE_MANAGEMENT)) { @@ -2600,6 +2635,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_cf_01_http_up(); // Preamble + f_create_app_pkg_subscription(v_app_pkg_subscription_info, PX_MEPM_PKGM_SUBS); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( @@ -2607,7 +2643,6 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { PICS_ROOT_API & PX_MEPM_PKGM_SUBS, v_headers ))); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -2617,8 +2652,16 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { mw_http_response( mw_http_response_ok( mw_http_message_body_json( - mw_body_json_pkgm_subscription_link_list // TODO - )))) -> value v_response { + mw_body_json_pkgm_subscription_link_list( + mw_app_pkg_ubscription_link_list( + mw_app_pkg_subscription_link_list_link( + -, + { + *, + mw_app_pkg_subscription_link_list_link_subscription(v_app_pkg_subscription_info.links.self_.href) , + * + } + ))))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a sucbsrciption info list ***"); @@ -2629,7 +2672,10 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + + // Postamble + f_delete_app_pkg_subscription(v_app_pkg_subscription_info.id); + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_004_OK /** @@ -2638,7 +2684,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { testcase TC_MEC_MEC010p2_MEPM_PKGM_005_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; - var HttpMessage v_response; + var AppPkgSubscriptionInfo v_app_pkg_subscription_info; // Test control if (not(PICS_APP_PACKAGE_MANAGEMENT)) { @@ -2651,11 +2697,12 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_cf_01_http_up(); // Preamble + f_create_app_pkg_subscription(v_app_pkg_subscription_info, PX_MEPM_PKGM_SUBS); 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")), + PICS_ROOT_API & PX_MEO_PKGM_SUBS & "/" & oct2char(unichar2oct(v_app_pkg_subscription_info.id, "UTF-8")), v_headers ))); @@ -2670,11 +2717,11 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { mw_http_message_body_json( mw_body_json_pkgm_subscription_info( mw_app_pkg_subscription_info( - PX_APP_PKG_ID, + v_app_pkg_subscription_info.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 ***"); @@ -2685,16 +2732,18 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + + // Postamble + f_delete_app_pkg_subscription(v_app_pkg_subscription_info.id); + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_005_OK /** - * @desc Check that MEPM service returns an Application Package Subscription when requested + * @desc Check that MEPM service sends an error when it receives a query for a subscription on AppPackages with a wrong identifier */ 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)) { @@ -2723,7 +2772,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_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 a correct error code ***"); @@ -2734,7 +2783,9 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + + // Postamble + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_005_NF /** @@ -2743,7 +2794,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { testcase TC_MEC_MEC010p2_MEPM_PKGM_006_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; - var HttpMessage v_response; + var AppPkgSubscriptionInfo v_app_pkg_subscription_info; // Test control if (not(PICS_APP_PACKAGE_MANAGEMENT)) { @@ -2756,6 +2807,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_cf_01_http_up(); // Preamble + f_create_app_pkg_subscription(v_app_pkg_subscription_info, PX_MEPM_PKGM_SUBS); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( @@ -2763,7 +2815,6 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { PICS_ROOT_API & PX_MEO_PKGM_SUBS & "/" & oct2char(unichar2oct(PX_SUBSCRIPTION_ID, "UTF-8")), v_headers ))); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -2772,7 +2823,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_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 a sucbsrciption info ***"); @@ -2783,17 +2834,17 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + + // Postamble + f_cf_01_http_down(); } // 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 + * @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)) { @@ -2813,7 +2864,6 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { 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 @@ -2822,7 +2872,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_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 a correct error code ***"); @@ -2833,17 +2883,18 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + + // Postamble + f_cf_01_http_down(); } // 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 + * @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; + var AppPkgSubscriptionInfo v_app_pkg_subscription_info; // Test control if (not(PICS_APP_PACKAGE_MANAGEMENT)) { @@ -2853,24 +2904,31 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { } // Test component configuration - f_cf_01_http_up(); + f_cf_01_http_notif_up(); // Preamble - f_init_default_headers_list(-, -, v_headers); + f_create_app_pkg_subscription(v_app_pkg_subscription_info); + 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_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 { + [] httpPort_notif.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 + ))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully sends notification info ***"); @@ -2881,16 +2939,19 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + + // Postamble + f_delete_app_pkg_subscription(v_app_pkg_subscription_info.id); + f_cf_01_http_notif_down(); } // 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 { + testcase TC_MEC_MEC010p2_MEPM_PKGM_008_NA() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; - var HttpMessage v_response; + var AppPkgInfo v_app_pkg_info; // Test control if (not(PICS_APP_PACKAGE_MANAGEMENT)) { @@ -2903,12 +2964,66 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_cf_01_http_up(); // Preamble + f_create_package_management(v_app_pkg_info, true); 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", + PICS_ROOT_API & PX_MEPM_PKGM_URI & "/" & oct2char(unichar2oct(v_app_pkg_info.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_405_not_applicable + )) { + 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 + + // Postamble + f_delete_package_management(v_app_pkg_info.id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_008_NA + + /** + * @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 AppPkgInfo v_app_pkg_info; + + // 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_create_package_management(v_app_pkg_info, true); + 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(v_app_pkg_info.id, "UTF-8")) & "/appd", v_headers ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -2920,7 +3035,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { mw_http_response( mw_http_response_ok( ? // TODO To be refined - ))) -> value v_response { + ))) { tc_ac.stop; // TODO Check HTTP message body @@ -2932,7 +3047,10 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + + // Postamble + f_delete_package_management(v_app_pkg_info.id); + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_009_OK /** @@ -2941,7 +3059,6 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { 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)) { @@ -2959,7 +3076,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { 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", + PICS_ROOT_API & PX_MEPM_PKGM_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_APP_PKG_ID, "UTF-8")) & "/appd", v_headers ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -2970,7 +3087,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { [] httpPort.receive( mw_http_response( mw_http_response_404_not_found - )) -> value v_response { + )) { tc_ac.stop; // TODO Check HTTP message body @@ -2982,9 +3099,326 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + + // Postamble + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_009_NF + /** + * @desc Check that MEPM responds with an error when it receives a PUT request referring an application descriptor AppD + */ + testcase TC_MEC_MEC010p2_MEPM_PKGM_010_FO() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var AppPkgInfo v_app_pkg_info; + + // 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_create_package_management(v_app_pkg_info, true); + f_init_default_headers_list(-, -, v_headers); + // TODO Set accept filed to application/zip... + httpPort.send( + m_http_request( + m_http_request_put( + PICS_ROOT_API & PX_MEPM_PKGM_URI & "/" & oct2char(unichar2oct(v_app_pkg_info.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_403_forbidden + )) { + 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 + + // Postamble + f_delete_package_management(v_app_pkg_info.id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_010_FO + + /** + * @desc Check that MEPM responds with an error when it receives a DELETE request referring an application descriptor AppD + */ + testcase TC_MEC_MEC010p2_MEPM_PKGM_011_NA() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var AppPkgInfo v_app_pkg_info; + + // 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_create_package_management(v_app_pkg_info, true); + 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(v_app_pkg_info.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_405_not_applicable + )) { + 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 + + // Postamble + f_delete_package_management(v_app_pkg_info.id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_011_NA + + /** + * @desc Check that MEPM fetches the on-boarded application package content identified by appPkgId when requested + */ + testcase TC_MEC_MEC010p2_MEPM_PKGM_012_01_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var AppPkgInfo v_app_pkg_info; + + // 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_create_package_management(v_app_pkg_info, true); + 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(v_app_pkg_info.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 + ))) { + 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 + + // Postamble + f_delete_package_management(v_app_pkg_info.id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_012_01_OK + + /** + * @desc Check that MEPM fetches the on-boarded application package content identified by appDId when requested + */ + testcase TC_MEC_MEC010p2_MEPM_PKGM_012_02_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var AppPkgInfo v_app_pkg_info; + + // 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_create_package_management(v_app_pkg_info, true); + 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_MEO_PKGM_URI_ONBOARDED & "/" & oct2char(unichar2oct(v_app_pkg_info.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 + ))) { + 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 + + // Postamble + f_delete_package_management(v_app_pkg_info.id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_012_02_OK + + /** + * @desc Check that MEPM fetches the on-boarded application package content identified by appPkgId when requested + */ + testcase TC_MEC_MEC010p2_MEPM_PKGM_012_01_NF() 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); // 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_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 + )) { + 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 + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_012_01_NF + + /** + * @desc Check that MEPM service sends an error when it receives a query with an application package with a wrong identifier + */ + testcase TC_MEC_MEC010p2_MEPM_PKGM_012_02_NF() 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); // 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_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 + )) { + 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 + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_012_02_NF + } // End of group mepm_pkgmgt group mepm_lifcyclemgt { diff --git a/ttcn/AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestControl.ttcn b/ttcn/AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestControl.ttcn index fc89480..3f788e3 100644 --- a/ttcn/AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestControl.ttcn +++ b/ttcn/AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestControl.ttcn @@ -13,50 +13,111 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestControl { if (PICS_MEC_PLAT) { if (PICS_APP_PACKAGE_MANAGEMENT) { - if (PICS_GRANTS_MANAGEMENT) { - execute(TC_MEC_MEC010p2_MEO_GRANT_001_OK()); - execute(TC_MEC_MEC010p2_MEO_GRANT_001_BR()); - execute(TC_MEC_MEC010p2_MEO_GRANT_002_OK()); - execute(TC_MEC_MEC010p2_MEO_GRANT_003_OK()); - execute(TC_MEC_MEC010p2_MEO_GRANT_004_OK()); - execute(TC_MEC_MEC010p2_MEO_GRANT_005_OK()); - execute(TC_MEC_MEC010p2_MEO_GRANT_006_OK()); - execute(TC_MEC_MEC010p2_MEO_GRANT_006_NF()); - } - - if (PICS_APP_PACKAGE_MANAGEMENT) { - execute(TC_MEC_MEC010p2_MEO_PKGM_001_OK()); - execute(TC_MEC_MEC010p2_MEO_PKGM_001_BR()); - execute(TC_MEC_MEC010p2_MEO_PKGM_002_01_OK()); - execute(TC_MEC_MEC010p2_MEO_PKGM_002_02_OK()); - execute(TC_MEC_MEC010p2_MEO_PKGM_002_BR()); - execute(TC_MEC_MEC010p2_MEO_PKGM_003_01_OK()); - execute(TC_MEC_MEC010p2_MEO_PKGM_003_02_OK()); - execute(TC_MEC_MEC010p2_MEO_PKGM_003_NF()); - execute(TC_MEC_MEC010p2_MEO_PKGM_004_OK()); - execute(TC_MEC_MEC010p2_MEO_PKGM_004_NF()); - execute(TC_MEC_MEC010p2_MEO_PKGM_005_OK()); - execute(TC_MEC_MEC010p2_MEO_PKGM_005_BR()); - execute(TC_MEC_MEC010p2_MEO_PKGM_005_NF()); - execute(TC_MEC_MEC010p2_MEO_PKGM_006_OK()); - execute(TC_MEC_MEC010p2_MEO_PKGM_006_BR()); - execute(TC_MEC_MEC010p2_MEO_PKGM_007_OK_01()); - execute(TC_MEC_MEC010p2_MEO_PKGM_007_OK_02()); - execute(TC_MEC_MEC010p2_MEO_PKGM_008_OK()); - execute(TC_MEC_MEC010p2_MEO_PKGM_008_NF()); - execute(TC_MEC_MEC010p2_MEO_PKGM_009_OK()); - execute(TC_MEC_MEC010p2_MEO_PKGM_009_NF()); - execute(TC_MEC_MEC010p2_MEO_PKGM_011_OK()); - execute(TC_MEC_MEC010p2_MEO_PKGM_011_NF()); - execute(TC_MEC_MEC010p2_MEO_PKGM_012_01_OK()); - execute(TC_MEC_MEC010p2_MEO_PKGM_012_02_OK()); - execute(TC_MEC_MEC010p2_MEO_PKGM_012_01_NF()); - execute(TC_MEC_MEC010p2_MEO_PKGM_012_02_NF()); + if (PICS_IUT_MEO) { + if (PICS_GRANTS_MANAGEMENT) { + execute(TC_MEC_MEC010p2_MEO_GRANT_001_OK()); + execute(TC_MEC_MEC010p2_MEO_GRANT_001_BR()); + execute(TC_MEC_MEC010p2_MEO_GRANT_002_OK()); + execute(TC_MEC_MEC010p2_MEO_GRANT_003_OK()); + execute(TC_MEC_MEC010p2_MEO_GRANT_004_OK()); + execute(TC_MEC_MEC010p2_MEO_GRANT_005_OK()); + execute(TC_MEC_MEC010p2_MEO_GRANT_006_OK()); + execute(TC_MEC_MEC010p2_MEO_GRANT_006_NF()); + } + + if (PICS_APP_PACKAGE_MANAGEMENT) { + execute(TC_MEC_MEC010p2_MEO_PKGM_001_OK()); + execute(TC_MEC_MEC010p2_MEO_PKGM_001_BR()); + execute(TC_MEC_MEC010p2_MEO_PKGM_002_01_OK()); + execute(TC_MEC_MEC010p2_MEO_PKGM_002_02_OK()); + execute(TC_MEC_MEC010p2_MEO_PKGM_002_BR()); + execute(TC_MEC_MEC010p2_MEO_PKGM_003_01_OK()); + execute(TC_MEC_MEC010p2_MEO_PKGM_003_02_OK()); + execute(TC_MEC_MEC010p2_MEO_PKGM_003_NF()); + execute(TC_MEC_MEC010p2_MEO_PKGM_004_OK()); + execute(TC_MEC_MEC010p2_MEO_PKGM_004_NF()); + execute(TC_MEC_MEC010p2_MEO_PKGM_005_OK()); + execute(TC_MEC_MEC010p2_MEO_PKGM_005_BR()); + execute(TC_MEC_MEC010p2_MEO_PKGM_005_NF()); + execute(TC_MEC_MEC010p2_MEO_PKGM_006_OK()); + execute(TC_MEC_MEC010p2_MEO_PKGM_006_BR()); + execute(TC_MEC_MEC010p2_MEO_PKGM_007_OK_01()); + execute(TC_MEC_MEC010p2_MEO_PKGM_007_OK_02()); + execute(TC_MEC_MEC010p2_MEO_PKGM_008_OK()); + execute(TC_MEC_MEC010p2_MEO_PKGM_008_NF()); + execute(TC_MEC_MEC010p2_MEO_PKGM_009_OK()); + execute(TC_MEC_MEC010p2_MEO_PKGM_009_NF()); + + execute(TC_MEC_MEC010p2_MEO_PKGM_011_OK()); + execute(TC_MEC_MEC010p2_MEO_PKGM_011_NF()); + execute(TC_MEC_MEC010p2_MEO_PKGM_012_01_OK()); + execute(TC_MEC_MEC010p2_MEO_PKGM_012_02_OK()); + execute(TC_MEC_MEC010p2_MEO_PKGM_012_01_NF()); + execute(TC_MEC_MEC010p2_MEO_PKGM_012_02_NF()); + } + + if (PICS_APP_PACKAGE_NOTIFICATIONS) { + execute(TC_MEC_MEC010p2_MEO_PKGM_010_OK()); + } } - if (PICS_APP_PACKAGE_NOTIFICATIONS) { - execute(TC_MEC_MEC010p2_MEO_PKGM_010_OK()); + if (PICS_IUT_MEPM) { + if (PICS_APP_PACKAGE_MANAGEMENT) { + execute(TC_MEC_MEC010p2_MEO_PKGM_001_OK()); + execute(TC_MEC_MEC010p2_MEO_PKGM_001_BR()); + execute(TC_MEC_MEC010p2_MEO_PKGM_002_01_OK()); + execute(TC_MEC_MEC010p2_MEO_PKGM_002_02_OK()); + execute(TC_MEC_MEC010p2_MEO_PKGM_002_BR()); + execute(TC_MEC_MEC010p2_MEO_PKGM_003_01_OK()); + execute(TC_MEC_MEC010p2_MEO_PKGM_003_02_OK()); + execute(TC_MEC_MEC010p2_MEO_PKGM_003_NF()); + execute(TC_MEC_MEC010p2_MEO_PKGM_004_OK()); + execute(TC_MEC_MEC010p2_MEO_PKGM_004_NF()); + execute(TC_MEC_MEC010p2_MEO_PKGM_005_OK()); + execute(TC_MEC_MEC010p2_MEO_PKGM_005_BR()); + execute(TC_MEC_MEC010p2_MEO_PKGM_005_NF()); + execute(TC_MEC_MEC010p2_MEO_PKGM_006_OK()); + execute(TC_MEC_MEC010p2_MEO_PKGM_006_BR()); + execute(TC_MEC_MEC010p2_MEO_PKGM_007_OK_01()); + execute(TC_MEC_MEC010p2_MEO_PKGM_007_OK_02()); + execute(TC_MEC_MEC010p2_MEO_PKGM_008_OK()); + execute(TC_MEC_MEC010p2_MEO_PKGM_008_NF()); + execute(TC_MEC_MEC010p2_MEO_PKGM_009_OK()); + execute(TC_MEC_MEC010p2_MEO_PKGM_009_NF()); + + execute(TC_MEC_MEC010p2_MEO_PKGM_011_OK()); + execute(TC_MEC_MEC010p2_MEO_PKGM_011_NF()); + execute(TC_MEC_MEC010p2_MEO_PKGM_012_01_OK()); + execute(TC_MEC_MEC010p2_MEO_PKGM_012_02_OK()); + execute(TC_MEC_MEC010p2_MEO_PKGM_012_01_NF()); + execute(TC_MEC_MEC010p2_MEO_PKGM_012_02_NF()); + execute(TC_MEC_MEC010p2_MEPM_PKGM_001_01_OK()); + execute(TC_MEC_MEC010p2_MEPM_PKGM_001_02_OK()); + execute(TC_MEC_MEC010p2_MEPM_PKGM_001_BR()); + execute(TC_MEC_MEC010p2_MEPM_PKGM_002_01_OK()); + execute(TC_MEC_MEC010p2_MEPM_PKGM_002_02_OK()); + execute(TC_MEC_MEC010p2_MEPM_PKGM_002_NF()); + execute(TC_MEC_MEC010p2_MEPM_PKGM_003_OK()); + execute(TC_MEC_MEC010p2_MEPM_PKGM_003_BR()); + execute(TC_MEC_MEC010p2_MEPM_PKGM_004_OK()); + execute(TC_MEC_MEC010p2_MEPM_PKGM_005_OK()); + execute(TC_MEC_MEC010p2_MEPM_PKGM_006_OK()); + execute(TC_MEC_MEC010p2_MEPM_PKGM_006_NF()); + execute(TC_MEC_MEC007p2_MEPM_PKGM_007_OK()); + execute(TC_MEC_MEC010p2_MEPM_PKGM_008_NA()); + execute(TC_MEC_MEC010p2_MEPM_PKGM_011_NA()); + execute(TC_MEC_MEC010p2_MEPM_PKGM_012_01_OK()); + execute(TC_MEC_MEC010p2_MEPM_PKGM_012_02_OK()); + execute(TC_MEC_MEC010p2_MEPM_PKGM_012_01_NF()); + execute(TC_MEC_MEC010p2_MEPM_PKGM_012_02_NF()); + + if (PICS_APP_PACKAGE_NOTIFICATIONS) { + execute(TC_MEC_MEC010p2_MEPM_PKGM_009_OK()); + execute(TC_MEC_MEC010p2_MEPM_PKGM_009_NF()); + execute(TC_MEC_MEC010p2_MEPM_PKGM_010_FO()); + } + } } } } diff --git a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Functions.ttcn b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Functions.ttcn index 506cc44..498bdb7 100644 --- a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Functions.ttcn +++ b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Functions.ttcn @@ -189,7 +189,9 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Functions { } // End of function f_delete_package_management function f_create_app_pkg_subscription( - out AppPkgSubscriptionInfo p_app_pkg_subscription_info + out AppPkgSubscriptionInfo p_app_pkg_subscription_info, + in charstring p_uri := PX_MEO_PKGM_SUBS, + in Json.AnyURI p_callback_uri := PX_CALLBACK_URI ) runs on HttpComponent { // Local variables var Headers v_headers; @@ -199,12 +201,12 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Functions { httpPort.send( m_http_request( m_http_request_post( - PICS_ROOT_API & PX_MEO_PKGM_SUBS, + PICS_ROOT_API & p_uri, v_headers, m_http_message_body_json( m_body_json_pkgm_subscription( m_app_pkg_info_subscription( - PX_CALLBACK_URI + p_callback_uri )))))); tc_ac.start; diff --git a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Pics.ttcn b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Pics.ttcn index 6ca4b50..807f5dc 100644 --- a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Pics.ttcn +++ b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Pics.ttcn @@ -1,5 +1,9 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Pics { + modulepar boolean PICS_IUT_MEO := true; + + modulepar boolean PICS_IUT_MEPM := false; + /** * @desc Does the IUT support GRANT? */ diff --git a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Templates.ttcn b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Templates.ttcn index d5c1efc..850db51 100644 --- a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Templates.ttcn +++ b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Templates.ttcn @@ -210,18 +210,52 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Templates { appPkgPath := p_appPkgPath } // End of template mw_create_package_management + template (omit) AppPkgInfo m_app_pkg_info( + in template (value) Json.String p_id, + in template (value) Json.String p_appDId, + in template (value) Json.String p_appName, + in template (value) Json.String p_appSoftwareVersion, + in template (value) Json.String p_appDVersion, + in template (value) Checksum p_checksum, + in template (value) AppPkgSWImageInfo p_softwareImages, + in template (value) OnboardingState p_onboardingState, + in template (value) AppPkgInfo_OperationalState p_operationalState, + in template (value) UsageState p_usageState, + in template (value) AppPkgInfo_MecInfo p_mecInfo, + in template (value) AppPkgInfo_Links p_links, + in template (omit) Json.String p_appProvider := omit + ) := { + id := p_id, + appDId := p_appDId, + appProvider := p_appProvider, + appName := p_appName, + appSoftwareVersion := p_appSoftwareVersion, + appDVersion := p_appDVersion, + checksum := p_checksum, + signingCertificate := omit, + softwareImages := p_softwareImages, + additionalArtifacts := omit, + onboardingState := p_onboardingState, + operationalState := p_operationalState, + usageState := p_usageState, + mecInfo := p_mecInfo, + userDefinedData := omit, + onboardingFailureDetails := omit, + links := p_links + } // End of template m_app_pkg_info + 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) 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, -- GitLab From fb21ff14f44e2ece9c570c713ce29c1bb98a66ca Mon Sep 17 00:00:00 2001 From: garciay Date: Mon, 13 Nov 2023 09:40:40 +0100 Subject: [PATCH 52/99] TTF T027: Review MEC 010-2/MEPM/LCM --- ...ycleAndOperationGrantingAPI_TestCases.ttcn | 27 ++++++++++--------- ...leAndOperationGrantingAPI_TestControl.ttcn | 4 ++- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/ttcn/AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases.ttcn b/ttcn/AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases.ttcn index c5e1092..5f92583 100644 --- a/ttcn/AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases.ttcn +++ b/ttcn/AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases.ttcn @@ -3429,7 +3429,6 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { 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)) { @@ -3466,7 +3465,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { [] 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); @@ -3476,17 +3475,17 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + + // Postamble + f_cf_01_http_down(); } // 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 + * @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)) { @@ -3523,7 +3522,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { [] 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); @@ -3533,17 +3532,17 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + + // Postamble + f_cf_01_http_down(); } // 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 + * @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)) { @@ -3580,7 +3579,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_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 a correct error code ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); @@ -3590,7 +3589,9 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + + // Postamble + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEPM_LCM_01_NF } // End of group mepm_lifcyclemgt diff --git a/ttcn/AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestControl.ttcn b/ttcn/AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestControl.ttcn index 3f788e3..6808dfd 100644 --- a/ttcn/AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestControl.ttcn +++ b/ttcn/AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestControl.ttcn @@ -111,7 +111,9 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestControl { execute(TC_MEC_MEC010p2_MEPM_PKGM_012_02_OK()); execute(TC_MEC_MEC010p2_MEPM_PKGM_012_01_NF()); execute(TC_MEC_MEC010p2_MEPM_PKGM_012_02_NF()); - + execute(TC_MEC_MEC010p2_MEPM_LCM_01_OK()); + execute(TC_MEC_MEC010p2_MEPM_LCM_01_BR()); + if (PICS_APP_PACKAGE_NOTIFICATIONS) { execute(TC_MEC_MEC010p2_MEPM_PKGM_009_OK()); execute(TC_MEC_MEC010p2_MEPM_PKGM_009_NF()); -- GitLab From 0b7b85fac647799545fde5e58c7fd5ce6bf851a7 Mon Sep 17 00:00:00 2001 From: garciay Date: Mon, 13 Nov 2023 15:22:49 +0100 Subject: [PATCH 53/99] TTF T027: Review MEC 010-2/MEX/LCM - Step1 --- ...ycleAndOperationGrantingAPI_TestCases.ttcn | 1000 ++++++++++++++++- ...leAndOperationGrantingAPI_TestControl.ttcn | 21 + ...ycleAndOperationGrantingAPI_Functions.ttcn | 174 ++- ...LifecycleAndOperationGrantingAPI_Pics.ttcn | 2 + ...fecycleAndOperationGrantingAPI_Pixits.ttcn | 6 +- ...ycleAndOperationGrantingAPI_Templates.ttcn | 96 +- ...ndOperationGrantingAPI_TypesAndValues.ttcn | 5 +- ttcn/LibMec/ttcn/LibMec_Pics.ttcn | 4 +- ttcn/LibMec/ttcn/LibMec_Pixits.ttcn | 4 +- .../ttcn/LibHttp_JsonMessageBodyTypes.ttcn | 6 +- .../ttcn/LibHttp_JsonTemplates.ttcn | 77 +- 11 files changed, 1333 insertions(+), 62 deletions(-) diff --git a/ttcn/AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases.ttcn b/ttcn/AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases.ttcn index 5f92583..181ddf7 100644 --- a/ttcn/AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases.ttcn +++ b/ttcn/AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases.ttcn @@ -3595,7 +3595,953 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { } // End of testcase TC_MEC_MEC010p2_MEPM_LCM_01_NF } // End of group mepm_lifcyclemgt - + + group mex_app_instance_mgt { + + /** + * @desc Check that MEC API provider creates a new App Package when requested + */ + testcase TC_MEC_MEC010p2_MEX_LCM_001_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var AppPkgInfo v_app_pkg_info; + + // 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_create_package_management(v_app_pkg_info); + 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( + v_app_pkg_info.appDId, + v_app_pkg_info.appName & "_1" + )))))); + 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( + -, + v_app_pkg_info.appDId + )))))) -> 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 + + // Postamble + f_delete_app_instance(v_app_pkg_info.id, v_response.response.body.json_body.appInstanceInfo.id); + f_cf_01_http_down(); + } // 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 + */ + testcase TC_MEC_MEC010p2_MEX_LCM_001_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var AppPkgInfo v_app_pkg_info; + + // 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_APP_LCM_URI, + v_headers, + m_http_message_body_json( + m_body_json_create_app_instance_request( + m_create_app_instance_request( + PX_NON_EXISTENT_APP_PKG_ID, + "PX_NON_EXISTENT_APP_PKG_ID_1" + )))))); + 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 an error cocde ***"); + 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_MEC010p2_MEX_LCM_001_BR + + /** + * @desc Check that MEC API provider retrieves the list of App instances when requested + */ + testcase TC_MEC_MEC010p2_MEX_LCM_002_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var AppPkgInfo v_app_pkg_info; + var AppInstanceInfo v_app_instanceInfo; + + // 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_create_app_instance(v_app_pkg_info, v_app_instanceInfo); + 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( + v_app_instanceInfo.id, + v_app_instanceInfo.appDId, + v_app_instanceInfo.appProvider + ), + * + } + ))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of app instance ***"); + 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_app_instance(v_app_pkg_info.id, v_app_instanceInfo.id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC010p2_MEX_LCM_002_OK + + /** + * @desc Check that MEC API provider retrieves an App Package when requested + */ + testcase TC_MEC_MEC010p2_MEX_LCM_003_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var AppPkgInfo v_app_pkg_info; + var AppInstanceInfo v_app_instanceInfo; + + // 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_create_app_instance(v_app_pkg_info, v_app_instanceInfo); + 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(v_app_instanceInfo.id)), + 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( + v_app_instanceInfo.id, + v_app_instanceInfo.appDId, + v_app_instanceInfo.appProvider + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct app instance ***"); + 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_app_instance(v_app_pkg_info.id, v_app_instanceInfo.id); + f_cf_01_http_down(); + } // 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 + */ + testcase TC_MEC_MEC010p2_MEX_LCM_003_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // 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_APP_LCM_URI & oct2char(unichar2oct(PX_NON_EXISTING_APP_INSTANCE_ID)), + 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_MEC010p2_MEX_LCM_003_NF + + /** + * @desc Check that MEC API provider service deletes an App Instance when requested + */ + testcase TC_MEC_MEC010p2_MEX_LCM_004_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var AppPkgInfo v_app_pkg_info; + var AppInstanceInfo v_app_instanceInfo; + + // 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_create_app_instance(v_app_pkg_info, v_app_instanceInfo); + 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(v_app_instanceInfo.id)), + 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 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 + + // Postamble + f_delete_package_management(v_app_pkg_info.id); + f_cf_01_http_down(); + } // 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 + */ + testcase TC_MEC_MEC010p2_MEX_LCM_004_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // 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_APP_LCM_URI & oct2char(unichar2oct(PX_NON_EXISTING_APP_INSTANCE_ID)), + 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_MEC010p2_MEX_LCM_004_NF + + /** + * @desc Check that MEC API provider service instantiates an App Instance when requested + */ + testcase TC_MEC_MEC010p2_MEX_LCM_005_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var AppPkgInfo v_app_pkg_info; + var AppInstanceInfo v_app_instanceInfo; + + // 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_create_app_instance(v_app_pkg_info, v_app_instanceInfo); + 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(v_app_instanceInfo.id)) & "instantiate", + v_headers, + m_http_message_body_json( + m_body_json_instantiate_app_request( + m_instantiate_app_request( + m_selected_mec_host_info( + { + { key_name := PX_ONBOARD_HOSTID_NAME, key_value := { universal charstring := PX_ONBOARD_HOSTID_VALUE } } + } + ))))))); + 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) == false) { + log("*** " & testcasename() & ": PASS: FAIL successfully responds with the correct app instance ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_error); + } else { + var charstring_list v_header_value; + f_get_header(v_response.response.header, "Location", v_header_value); + var charstring v_app_lcm_op_occ_id := regexp( + v_header_value[0], + PX_MEX_LCM_OP_OCC_URI & "/(?*)", + 0 + ); + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct header Location ", v_app_lcm_op_occ_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 + + // Postamble + f_delete_app_instance(v_app_pkg_info.id, v_app_instanceInfo.id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC010p2_MEX_LCM_005_OK + + /** + * @desc Check that MEC API provider service fails to instantiate an App Instance when it receives a malformed request + */ + testcase TC_MEC_MEC010p2_MEX_LCM_005_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var AppPkgInfo v_app_pkg_info; + var AppInstanceInfo v_app_instanceInfo; + + // 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_create_app_instance(v_app_pkg_info, v_app_instanceInfo); + 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(v_app_instanceInfo.id)) & "instantiate", + v_headers, + m_http_message_body_json( + m_body_json_instantiate_app_request( + m_instantiate_app_request( + m_selected_mec_host_info( + { + { key_name := "", key_value := { universal charstring := PX_ONBOARD_HOSTID_VALUE } } + } + ))))))); + 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_delete_app_instance(v_app_pkg_info.id, v_app_instanceInfo.id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC010p2_MEX_LCM_005_BR + + /** + * @desc Check that MEC API provider service fails to instantiate an App Instance when it receives a request related to a not existing App Instance + */ + testcase TC_MEC_MEC010p2_MEX_LCM_005_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var AppPkgInfo v_app_pkg_info; + var AppInstanceInfo v_app_instanceInfo; + + // 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_create_app_instance(v_app_pkg_info, v_app_instanceInfo); + 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)) & "instantiate", + v_headers, + m_http_message_body_json( + m_body_json_instantiate_app_request( + m_instantiate_app_request( + m_selected_mec_host_info( + { + { key_name := "", key_value := { universal charstring := PX_ONBOARD_HOSTID_VALUE } } + } + ))))))); + 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_app_instance(v_app_pkg_info.id, v_app_instanceInfo.id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC010p2_MEX_LCM_005_NF + + /** + * @desc Check that MEC API provider service terminates an App Instance when requested + */ + testcase TC_MEC_MEC010p2_MEX_LCM_006_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var AppPkgInfo v_app_pkg_info; + var AppInstanceInfo v_app_instanceInfo; + var charstring v_app_lcm_op_occ_id; + + // 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_instanciate_app_instance(v_app_pkg_info, v_app_instanceInfo, v_app_lcm_op_occ_id); + 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(v_app_instanceInfo.id)) & "terminate", + v_headers, + m_http_message_body_json( + m_body_json_terminate_app_request( + m_terminate_app_request + ))))); + 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) == false) { + log("*** " & testcasename() & ": PASS: FAIL does not respond with the correct app instance ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_error); + } else { + var charstring_list v_header_value; + f_get_header(v_response.response.header, "Location", v_header_value); + var charstring v_retrived_app_lcm_op_occ_id := regexp( + v_header_value[0], + PX_MEX_LCM_OP_OCC_URI & "/(?*)", + 0 + ); + if (not(match(v_retrived_app_lcm_op_occ_id, v_app_lcm_op_occ_id))) { + log("*** " & testcasename() & ": PASS: FAIL APP_LCM_OP_OCC_ID mismatched ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_error); + } else { + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct header Location", v_response.response.header, " ***"); + 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_app_instance(v_app_pkg_info.id, v_app_instanceInfo.id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC010p2_MEX_LCM_006_OK + + /** + * @desc Check that MEC API provider service fails to terminate an App Instance when it receives a malformed request + */ + testcase TC_MEC_MEC010p2_MEX_LCM_006_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var AppPkgInfo v_app_pkg_info; + var AppInstanceInfo v_app_instanceInfo; + var charstring v_app_lcm_op_occ_id; + + // 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_instanciate_app_instance(v_app_pkg_info, v_app_instanceInfo, v_app_lcm_op_occ_id); + 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(v_app_instanceInfo.id)) & "instanicate", // Worng URL + v_headers, + m_http_message_body_json( + m_body_json_terminate_app_request( + m_terminate_app_request + ))))); + 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_terminate_app_instance(v_app_pkg_info.id, v_app_instanceInfo.id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC010p2_MEX_LCM_006_BR + + /** + * @desc Check that MEC API provider service fails to terminate an App Instance when it receives a request related to a not existing App Instance + */ + testcase TC_MEC_MEC010p2_MEX_LCM_006_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var AppPkgInfo v_app_pkg_info; + var AppInstanceInfo v_app_instanceInfo; + var charstring v_app_lcm_op_occ_id; + + // 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_APP_LCM_URI & oct2char(unichar2oct(PX_NON_EXISTING_APP_INSTANCE_ID)) & "terminate", + v_headers, + m_http_message_body_json( + m_body_json_terminate_app_request( + m_terminate_app_request + ))))); + 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_MEC010p2_MEX_LCM_006_NF + + /** + * @desc Check that MEC API provider service changes the status of an App Instance + */ + testcase TC_MEC_MEC010p2_MEX_LCM_007_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var AppPkgInfo v_app_pkg_info; + var AppInstanceInfo v_app_instanceInfo; + var charstring v_app_lcm_op_occ_id; + + // 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_instanciate_app_instance(v_app_pkg_info, v_app_instanceInfo, v_app_lcm_op_occ_id); + 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(v_app_instanceInfo.id)) & "operate", + v_headers, + m_http_message_body_json( + m_body_json_operate_app_request( + m_operate_app_request + ))))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_202_accepted( + mw_http_message_body_json( + mw_body_json_operate_app_request( + mw_operate_app_request + + ))))) { + 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 + + // Postamble + f_terminate_app_instance(v_app_pkg_info.id, v_app_instanceInfo.id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC010p2_MEX_LCM_007_OK + + /** + * @desc Check that MEC API provider service fails to operate on an App Instance when it receives a malformed request + */ + testcase TC_MEC_MEC010p2_MEX_LCM_007_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var AppPkgInfo v_app_pkg_info; + var AppInstanceInfo v_app_instanceInfo; + var charstring v_app_lcm_op_occ_id; + + // 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_instanciate_app_instance(v_app_pkg_info, v_app_instanceInfo, v_app_lcm_op_occ_id); + 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(v_app_instanceInfo.id)) & "operated", // Wrong URL + v_headers, + m_http_message_body_json( + m_body_json_operate_app_request( + m_operate_app_request + ))))); + 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_terminate_app_instance(v_app_pkg_info.id, v_app_instanceInfo.id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC010p2_MEX_LCM_007_BR + + /** + * @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 + */ + testcase TC_MEC_MEC010p2_MEX_LCM_007_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // 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_APP_LCM_URI & oct2char(unichar2oct(PX_NON_EXISTING_APP_INSTANCE_ID)) & "operate", + v_headers, + m_http_message_body_json( + m_body_json_operate_app_request( + m_operate_app_request + ))))); + 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_MEC010p2_MEX_LCM_007_NF + + } // End of group mex_app_instance_mgt + group mex_lifcyclemgt { /** @@ -3604,7 +4550,6 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { 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)) { @@ -3641,7 +4586,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { 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); @@ -3651,17 +4596,17 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + + // Postamble + f_cf_01_http_down(); } // 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 + * @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)) { @@ -3693,7 +4638,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { [] 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); @@ -3703,7 +4648,9 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + + // Postamble + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEX_LCM_01_OK /** @@ -3712,7 +4659,6 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { 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)) { @@ -3744,7 +4690,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { 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); @@ -3754,7 +4700,9 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + + // Postamble + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEX_LCM_02_OK /** @@ -3763,7 +4711,6 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { 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)) { @@ -3800,7 +4747,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { 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); @@ -3810,7 +4757,9 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + + // Postamble + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEX_LCM_03_OK /** @@ -3819,7 +4768,6 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { 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)) { @@ -3847,7 +4795,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_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 the correct code ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); @@ -3857,7 +4805,9 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + + // Postamble + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEX_LCM_03_NF /** @@ -3866,7 +4816,6 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { 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)) { @@ -3894,7 +4843,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_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 the correct code ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); @@ -3904,7 +4853,9 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + + // Postamble + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEX_LCM_04_OK /** @@ -3913,7 +4864,6 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { 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)) { @@ -3941,7 +4891,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_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 the correct code ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); @@ -3951,7 +4901,9 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + + // Postamble + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEX_LCM_04_NF } // End of group mex_lifcyclemgt diff --git a/ttcn/AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestControl.ttcn b/ttcn/AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestControl.ttcn index 6808dfd..314d555 100644 --- a/ttcn/AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestControl.ttcn +++ b/ttcn/AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestControl.ttcn @@ -121,6 +121,27 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestControl { } } } + + if (PICS_IUT_MEX) { + if (PIC_APP_LCM_MANAGEMENT) { + execute(TC_MEC_MEC010p2_MEX_LCM_001_OK()); + execute(TC_MEC_MEC010p2_MEX_LCM_001_BR()); + execute(TC_MEC_MEC010p2_MEX_LCM_002_OK()); + execute(TC_MEC_MEC010p2_MEX_LCM_003_OK()); + execute(TC_MEC_MEC010p2_MEX_LCM_003_NF()); + execute(TC_MEC_MEC010p2_MEX_LCM_004_OK()); + execute(TC_MEC_MEC010p2_MEX_LCM_004_NF()); + execute(TC_MEC_MEC010p2_MEX_LCM_005_OK()); + execute(TC_MEC_MEC010p2_MEX_LCM_005_BR()); + execute(TC_MEC_MEC010p2_MEX_LCM_005_NF()); + execute(TC_MEC_MEC010p2_MEX_LCM_006_OK()); + execute(TC_MEC_MEC010p2_MEX_LCM_006_BR()); + execute(TC_MEC_MEC010p2_MEX_LCM_006_NF()); + execute(TC_MEC_MEC010p2_MEX_LCM_007_OK()); + execute(TC_MEC_MEC010p2_MEX_LCM_007_BR()); + execute(TC_MEC_MEC010p2_MEX_LCM_007_NF()); + } + } } } } // End of 'control' statement diff --git a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Functions.ttcn b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Functions.ttcn index 498bdb7..6d299b1 100644 --- a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Functions.ttcn +++ b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Functions.ttcn @@ -237,7 +237,6 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Functions { ) runs on HttpComponent { // Local variables var Headers v_headers; - var HttpMessage v_response; f_init_default_headers_list(-, -, v_headers); httpPort.send( @@ -252,7 +251,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Functions { [] httpPort.receive( mw_http_response( mw_http_response_204_no_content - )) -> value v_response { + )) { tc_ac.stop; } [] tc_ac.timeout { @@ -262,4 +261,175 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Functions { } // End of function f_delete_app_pkg_subscription + function f_create_app_instance( + out AppPkgInfo p_app_pkg_info, + out AppInstanceInfo p_app_instanceInfo + ) runs on HttpComponent { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + f_create_package_management(p_app_pkg_info); + if (not(isbound(p_app_pkg_info))) { + log("f_create_app_instance: Failed to create pkg"); + return; + } + + 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( + p_app_pkg_info.appDId, + p_app_pkg_info.appName & "_1" + )))))); + + // 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( + -, + p_app_pkg_info.appDId + )))))) -> value v_response { + tc_ac.stop; + p_app_instanceInfo := v_response.response.body.json_body.appInstanceInfo; + log("f_create_app_pkg_subscription: INFO: IUT responds to the AppInstanceInfo: ", p_app_instanceInfo); + } + [] tc_ac.timeout { + log("f_create_app_pkg_subscription: : INCONC: Expected message not received ***"); + } + } // End of 'alt' statement + + } // End of function f_create_app_instance + + function f_delete_app_instance( + in Json.String p_app_pkg_info_id, + in Json.String p_app_instance_info_id + ) runs on HttpComponent { + // Local variables + var Headers v_headers; + + 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(p_app_instance_info_id)), + v_headers + ))); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_204_no_content + )) { + tc_ac.stop; + } + [] tc_ac.timeout { + log("f_delete_app_instance: : INCONC: Expected message not received ***"); + } + } // End of 'alt' statement + + f_delete_package_management(p_app_pkg_info_id); + } // End of function f_delete_app_instance + + function f_instanciate_app_instance( + out AppPkgInfo p_app_pkg_info, + out AppInstanceInfo p_app_instanceInfo, + out charstring p_app_lcm_op_occ_id + ) runs on HttpComponent { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var AppPkgInfo v_app_pkg_info; + var AppInstanceInfo v_app_instanceInfo; + + f_create_app_instance(v_app_pkg_info, v_app_instanceInfo); + 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(v_app_instanceInfo.id)) & "instantiate", + v_headers, + m_http_message_body_json( + m_body_json_instantiate_app_request( + m_instantiate_app_request( + m_selected_mec_host_info( + { + { key_name := PX_ONBOARD_HOSTID_NAME, key_value := { universal charstring := PX_ONBOARD_HOSTID_VALUE } } + } + ))))))); + + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_202_accepted + )) -> value v_response { + tc_ac.stop; + + var charstring_list v_header_value; + if (f_check_headers(v_response.response.header)) { + f_get_header(v_response.response.header, "Location", v_header_value); + p_app_lcm_op_occ_id := regexp( + v_header_value[0], + PX_MEX_LCM_OP_OCC_URI & "/(?*)", + 0 + ); + log("f_instanciate_app_instance: IUT successfully responds with the correct header Location ", p_app_lcm_op_occ_id); + } + } + [] tc_ac.timeout { + log("f_instanciate_app_instance: INCONC: Expected message not received ***"); + } + } // End of 'alt' statement + + } // End of function f_instanciate_app_instance + + function f_terminate_app_instance( + in Json.String p_app_pkg_info_id, + in Json.String p_app_instance_info_id + ) runs on HttpComponent { + // Local variables + var Headers v_headers; + var AppPkgInfo v_app_pkg_info; + var AppInstanceInfo v_app_instanceInfo; + + 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(v_app_instanceInfo.id)) & "instantiate", + v_headers, + m_http_message_body_json( + m_body_json_terminate_app_request( + m_terminate_app_request + ))))); + + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_202_accepted + )) { + tc_ac.stop; + } + [] tc_ac.timeout { + log("f_terminate_app_instance: INCONC: Expected message not received ***"); + } + } // End of 'alt' statement + + f_delete_app_instance(p_app_pkg_info_id, p_app_instance_info_id); + } // End of function f_terminate_app_instance + } // End of ApplicationPackageLifecycleAndOperationGrantingAPI_Functions diff --git a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Pics.ttcn b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Pics.ttcn index 807f5dc..813a098 100644 --- a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Pics.ttcn +++ b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Pics.ttcn @@ -4,6 +4,8 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Pics { modulepar boolean PICS_IUT_MEPM := false; + modulepar boolean PICS_IUT_MEX := false; + /** * @desc Does the IUT support GRANT? */ diff --git a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Pixits.ttcn b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Pixits.ttcn index 748e276..e380c94 100644 --- a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Pixits.ttcn +++ b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Pixits.ttcn @@ -71,5 +71,9 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Pixits { modulepar Json.String PX_NON_EXISTENT_SUBSCRIPTION_ID := "NON_EXISTENT_SUBSCRIPTION_ID" modulepar Json.AnyURI PX_APP_PKG_HREF := ""; - + + modulepar Json.String PX_ONBOARD_HOSTID_NAME := ""; + + modulepar Json.String PX_ONBOARD_HOSTID_VALUE := ""; + } // End of module ApplicationPackageLifecycleAndOperationGrantingAPI_Pixits diff --git a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Templates.ttcn b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Templates.ttcn index 850db51..4bf26f4 100644 --- a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Templates.ttcn +++ b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Templates.ttcn @@ -702,9 +702,9 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Templates { 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 + 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, @@ -726,7 +726,95 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Templates { operate := p_operate, configure_platform_for_app := p_configure_platform_for_app } // End of template mw_link - + + template (omit) InstantiateAppRequest m_instantiate_app_request( + in template (value) ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.MECHostInformation p_selectedMECHostInfo, + in template (omit) VirtualComputeDescriptor p_virtualComputeDescriptor := omit, + in template (omit) OsContainerDescriptors p_osContainerDescriptor := omit, + in template (omit) VirtualStorageDescriptor p_virtualStorageDescriptor := omit, + in template (omit) LocationConstraints p_locationConstraints := omit, + in template (omit) VimConnectionInfos p_vimConnectionInfo := omit, + in template (omit) AppTermCandsForCoord p_appTermCandsForCoord := omit + ) :={ + virtualComputeDescriptor := p_virtualComputeDescriptor, + osContainerDescriptor := p_osContainerDescriptor, + virtualStorageDescriptor := p_virtualStorageDescriptor, + selectedMECHostInfo := p_selectedMECHostInfo, + locationConstraints := p_locationConstraints, + vimConnectionInfo := p_vimConnectionInfo, + appTermCandsForCoord := p_appTermCandsForCoord + } // End of template m_instantiate_app_request + + template (present) InstantiateAppRequest mw_instantiate_app_request( + template (present) ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.MECHostInformation p_selectedMECHostInfo := ?, + template VirtualComputeDescriptor p_virtualComputeDescriptor := *, + template OsContainerDescriptors p_osContainerDescriptor := *, + template VirtualStorageDescriptor p_virtualStorageDescriptor := *, + template LocationConstraints p_locationConstraints := *, + template VimConnectionInfos p_vimConnectionInfo := *, + template AppTermCandsForCoord p_appTermCandsForCoord := * + ) :={ + virtualComputeDescriptor := p_virtualComputeDescriptor, + osContainerDescriptor := p_osContainerDescriptor, + virtualStorageDescriptor := p_virtualStorageDescriptor, + selectedMECHostInfo := p_selectedMECHostInfo, + locationConstraints := p_locationConstraints, + vimConnectionInfo := p_vimConnectionInfo, + appTermCandsForCoord := p_appTermCandsForCoord + } // End of template mw_instantiate_app_request + + template (omit) ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.MECHostInformation m_selected_mec_host_info( + in template (value) ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.KeyValuePairs p_hostId, + in template (omit) Json.String p_hostName := omit + ) := { + hostName := p_hostName, + hostId := p_hostId + } // End of template m_selected_mec_host_info + + template (present) ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.MECHostInformation mw_selected_mec_host_info( + template (present) ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.KeyValuePairs p_hostId := ?, + template Json.String p_hostName := * + ) := { + hostName := p_hostName, + hostId := p_hostId + } // End of template mw_selected_mec_host_info + + template (omit) TerminateAppRequest m_terminate_app_request( + in TerminationType p_termination_type := GRACEFUL, + in template (omit) Json.UInteger p_graceful_termination_timeout := omit + ) := { + terminationType := p_termination_type, + gracefulTerminationTimeout := p_graceful_termination_timeout + } // End of template m_terminate_app_request + + template (present) TerminateAppRequest mw_terminate_app_request( + template (present) TerminationType p_termination_type := ?, + template Json.UInteger p_graceful_termination_timeout := * + ) := { + terminationType := p_termination_type, + gracefulTerminationTimeout := p_graceful_termination_timeout + } // End of template mw_terminate_app_request + + template (omit) OperateAppRequest m_operate_app_request( + in OperationalState p_change_state_to := STOPPED, + in template (omit) StopType p_stop_type := omit, + in template (omit) Json.UInteger p_graceful_stop_timeout := omit + ) := { + changeStateTo := p_change_state_to, + stopType := p_stop_type, + gracefulStopTimeout := p_graceful_stop_timeout + } // End of template m_operate_app_request + + template (present) OperateAppRequest mw_operate_app_request( + template (present) OperationalState p_change_state_to := STOPPED, + template StopType p_stop_type := *, + template Json.UInteger p_graceful_stop_timeout := * + ) := { + changeStateTo := p_change_state_to, + stopType := p_stop_type, + gracefulStopTimeout := p_graceful_stop_timeout + } // End of template mw_operate_app_request + } // 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 index 1bb202a..8971e22 100644 --- a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.ttcn @@ -1897,10 +1897,11 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @member * @see ETSI GS MEC 010-2 Clause 6.2.5.3 Type: KeyValuePairs */ - type record KeyValuePairs { + type record KeyValuePair { Json.String key_name, - anytype key_value // FIXME To be refined + anytype key_value } + type set of KeyValuePair KeyValuePairs; /** * @desc This data type represents the time stamp as Unix-time since January 1, 1970, 00:00:00 UTC diff --git a/ttcn/LibMec/ttcn/LibMec_Pics.ttcn b/ttcn/LibMec/ttcn/LibMec_Pics.ttcn index 3d77f14..f488964 100644 --- a/ttcn/LibMec/ttcn/LibMec_Pics.ttcn +++ b/ttcn/LibMec/ttcn/LibMec_Pics.ttcn @@ -36,8 +36,10 @@ module LibMec_Pics { modulepar boolean PICS_APP_PACKAGE_NOTIFICATIONS := true; - modulepar charstring PICS_ROOT_API := "/"; + modulepar boolean PIC_APP_LCM_MANAGEMENT := true; modulepar boolean PIC_APP_LCM_NOTIFICATIONS := true; + modulepar charstring PICS_ROOT_API := "/"; + } // End of module LibMec_Pics diff --git a/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn b/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn index 385e889..24b035c 100644 --- a/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn +++ b/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn @@ -56,9 +56,9 @@ module LibMec_Pixits { modulepar charstring PX_APP_LCM_URI := "/app_lcm/v1/app_instances" - modulepar charstring PX_MEX_LCM_SUBS := "/alcmi/v1/subscriptions"; + modulepar charstring PX_MEX_LCM_SUBS := "/app_lcm/v1/subscriptions"; - modulepar charstring PX_MEX_LCM_OP_OCC_URI := "/alcmi/v1/app_lcm_op_occs"; + modulepar charstring PX_MEX_LCM_OP_OCC_URI := "/app_lcm/v1/app_lcm_op_occs"; modulepar charstring PX_UE_APP_CTX_URI := "/mx2/v1/app_contexts"; diff --git a/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn b/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn index c1d811b..efde2f5 100644 --- a/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn +++ b/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn @@ -104,12 +104,12 @@ module LibHttp_JsonMessageBodyTypes { CreateAppInstanceRequest createAppInstanceRequest, AppInstanceInfo appInstanceInfo, AppInstanceInfoList appInstanceInfoList, + InstantiateAppRequest appInstanceInstantiate, + TerminateAppRequest terminateAppRequest, + OperateAppRequest changeStateTo, /* 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, */ diff --git a/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn b/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn index 52126d5..1aa123e 100644 --- a/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn +++ b/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn @@ -177,30 +177,72 @@ module LibHttp_JsonTemplates { group mex_lifcyclemgt { - template (value) JsonBody m_body_json_create_app_instance_request ( - in template (value) CreateAppInstanceRequest p_create_app_instance_request - ) := { + 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 - ) := { + 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 := ? - ) := { + 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 := ? - ) := { + template (value) JsonBody m_body_json_app_instance_info_list( + in template (value) AppInstanceInfoList p_app_instance_info_list + ) := { + appInstanceInfoList := p_app_instance_info_list + } // End of template m_body_json_app_instance_info_list + + 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 (value) JsonBody m_body_json_instantiate_app_request( + in template (value) InstantiateAppRequest p_instantiate_app_request + ) := { + appInstanceInstantiate := p_instantiate_app_request + } // End of template m_body_json_instantiate_app_request + + template (present) JsonBody mw_body_json_instantiate_app_request( + template (present) InstantiateAppRequest p_instantiate_app_request := ? + ) := { + appInstanceInstantiate := p_instantiate_app_request + } // End of template mw_body_json_instantiate_app_request + + template (value) JsonBody m_body_json_terminate_app_request( + in template (value) TerminateAppRequest p_terminate_app_request + ) := { + terminateAppRequest := p_terminate_app_request + } // End of template m_body_json_terminate_app_request + + template (present) JsonBody mw_body_json_terminate_app_request( + template (present) TerminateAppRequest p_terminate_app_request := ? + ) := { + terminateAppRequest := p_terminate_app_request + } // End of template mw_body_json_terminate_app_request + + template (value) JsonBody m_body_json_operate_app_request( + in template (value) OperateAppRequest p_operate_app_request + ) := { + changeStateTo := p_operate_app_request + } // End of template m_body_json_operate_app_request + + template (present) JsonBody mw_body_json_operate_app_request( + template (present) OperateAppRequest p_operate_app_request := ? + ) := { + changeStateTo := p_operate_app_request + } // End of template mw_body_json_operate_app_request + /*template (present) JsonBody mw_body_json_mex_lcm_instance_info_list ( in template (present) AppInstanceInfoList p_app_instance_info_list ) := { @@ -236,17 +278,6 @@ module LibHttp_JsonTemplates { - template (present) JsonBody m_body_json_lifecycle_management_operate ( - in template (present) OperateAppRequest p_app_instance_operate - ) := { - changeStateTo := p_app_instance_operate - } - - template (present) JsonBody m_body_json_lifecycle_management_operate_with_error ( - in template (present) OperateAppRequestWithError p_app_instance_operate_with_error - ) := { - changeStateToWithError := p_app_instance_operate_with_error - } template (present) JsonBody mw_body_json_lifecycle_op_occ_list ( -- GitLab From 9f9d954c9723857f1e7e24263cc762459cf73b79 Mon Sep 17 00:00:00 2001 From: garciay Date: Tue, 14 Nov 2023 10:34:58 +0100 Subject: [PATCH 54/99] TTF T027: Review MEC 010-2/MEX/LCM - Step2 --- ...ycleAndOperationGrantingAPI_TestCases.ttcn | 605 ++++++++++++------ ...leAndOperationGrantingAPI_TestControl.ttcn | 10 + ...ycleAndOperationGrantingAPI_Functions.ttcn | 75 +++ ...fecycleAndOperationGrantingAPI_Pixits.ttcn | 35 +- ...ycleAndOperationGrantingAPI_Templates.ttcn | 144 +++++ ...ndOperationGrantingAPI_TypesAndValues.ttcn | 20 +- .../ttcn/LibHttp_JsonMessageBodyTypes.ttcn | 9 +- .../ttcn/LibHttp_JsonTemplates.ttcn | 97 ++- 8 files changed, 753 insertions(+), 242 deletions(-) diff --git a/ttcn/AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases.ttcn b/ttcn/AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases.ttcn index 181ddf7..0c493af 100644 --- a/ttcn/AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases.ttcn +++ b/ttcn/AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases.ttcn @@ -37,7 +37,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { import from LibMec_Pixits all; group granting { - + /** * @desc Check that MEO sends a synchronous grant response when a grant request is requested - INSTANTIATE */ @@ -101,7 +101,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { 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); @@ -167,7 +167,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { 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); } @@ -230,7 +230,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { 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); @@ -312,7 +312,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { 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); @@ -394,7 +394,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { mw_grant ))))) -> value v_response { tc_ac.stop; - + if (f_check_headers(valueof(v_response.response.header), -, PX_MEO_GRANT_URI & "/" & oct2char(unichar2oct(v_response.response.body.json_body.grantResponse.id))) == false) { log("*** " & testcasename() & ": FAIL: Header 'Location' was not present in the response headers ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); @@ -592,7 +592,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { } // End of group granting group meo_pkgmgt { - + /** * @desc Check that MEO creates a new App Package when requested */ @@ -657,7 +657,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Postamble f_cf_01_http_down(); } // 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 */ @@ -713,7 +713,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Postamble f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_001_BR - + /** * @desc Check that MEO returns the list of App Packages when requested - Note 3 */ @@ -779,7 +779,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_delete_package_management(v_app_pkg_info.id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_002_01_OK - + /** * @desc Check that MEO returns the list of on-boarded packages when requested - Note 3 */ @@ -841,12 +841,12 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + // Postamble f_delete_package_management(v_app_pkg_info.id); f_cf_01_http_down(); } // 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 */ @@ -892,11 +892,11 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + // Postamble f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_002_BR - + /** * @desc Check that MEO returns the an App Package when requested - Note 3 */ @@ -949,12 +949,12 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + // Postamble f_delete_package_management(v_app_pkg_info.id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_003_01_OK - + /** * @desc Check that MEO returns the an App Package when requested - Note 3 */ @@ -1007,12 +1007,12 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + // Postamble f_delete_package_management(v_app_pkg_info.id); f_cf_01_http_down(); } // 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 */ @@ -1059,11 +1059,11 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + // Postamble f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_003_NF - + /** * @desc Check that MEO deletes an App Package when requested */ @@ -1112,12 +1112,12 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + // Postamble f_delete_package_management(v_app_pkg_info.id); f_cf_01_http_down(); } // 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 @@ -1165,11 +1165,11 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + // Postamble f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_004_NF - + /** * @desc Check that MEO updates the operational state of an individual application package resource */ @@ -1225,12 +1225,12 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + // Postamble f_delete_package_management(v_app_pkg_info.id); f_cf_01_http_down(); } // 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 */ @@ -1280,11 +1280,11 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + // Postamble f_cf_01_http_down(); } // 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 @@ -1336,11 +1336,11 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + // Postamble f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_005_NF - + /** * @desc Check that MEO service returns an application package subscription when requested */ @@ -1396,12 +1396,12 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + // Postamble f_delete_app_pkg_subscription(v_response.response.body.json_body.appPkgSubscriptionInfo.id); f_cf_01_http_down(); } // 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 */ @@ -1452,11 +1452,11 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + // Postamble f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_006_BR - + /** * @desc Check that MEO service returns the list of Application Package Subscriptions when requested */ @@ -1519,7 +1519,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_delete_app_pkg_subscription(v_app_pkg_subscription_info.id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_007_OK_01 - + /** * @desc Check that MEO service returns an empty list of Application Package Subscriptions when requested */ @@ -1575,7 +1575,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Postamble f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_007_OK_02 - + /** * @desc Check that MEO service returns an Application Package Subscription when requested */ @@ -1635,7 +1635,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_delete_app_pkg_subscription(v_app_pkg_subscription_info.id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_008_OK - + /** * @desc Check that MEO service returns an Application Package Subscription when requested */ @@ -1685,7 +1685,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Postamble f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_008_NF - + /** * @desc Check that MEO service deletes an Application Package Subscription when requested */ @@ -1737,7 +1737,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Postamble f_cf_01_http_down(); } // 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 @@ -1788,7 +1788,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Postamble f_cf_01_http_down(); } // 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 */ @@ -1841,7 +1841,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_delete_app_pkg_subscription(v_app_pkg_subscription_info.id); f_cf_01_http_notif_down(); } // 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 */ @@ -1894,7 +1894,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Postamble f_cf_01_http_down(); } // 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 */ @@ -1946,7 +1946,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Postamble f_cf_01_http_down(); } // 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 */ @@ -1999,7 +1999,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Postamble f_cf_01_http_down(); } // 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 */ @@ -2052,7 +2052,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Postamble f_cf_01_http_down(); } // 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 */ @@ -2103,7 +2103,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Postamble f_cf_01_http_down(); } // 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 */ @@ -2154,11 +2154,11 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Postamble f_cf_01_http_down(); } // 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 */ @@ -2221,7 +2221,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_delete_package_management(v_app_pkg_info.id); f_cf_01_http_down(); } // 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 */ @@ -2286,7 +2286,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_delete_package_management(v_app_pkg_info.id); f_cf_01_http_down(); } // 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 */ @@ -2335,7 +2335,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Postamble f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_001_BR - + /** * @desc Check that MEPM returns the an App Package when requested - Note 3 */ @@ -2392,7 +2392,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_delete_package_management(v_app_pkg_info.id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_002_01_OK - + /** * @desc Check that MEPM returns the an App Package when requested - Note 3 */ @@ -2451,7 +2451,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_delete_package_management(v_app_pkg_info.id); f_cf_01_http_down(); } // 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 */ @@ -2500,7 +2500,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Postamble f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_002_NF - + /** * @desc Check that MEPM service returns an application package subscription when requested */ @@ -2561,7 +2561,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_delete_app_pkg_subscription(v_response.response.body.json_body.appPkgSubscriptionInfo.id); f_cf_01_http_down(); } // 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 */ @@ -2615,7 +2615,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Postamble f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_003_BR - + /** * @desc Check that MEPM service returns the list of Application Package Subscriptions when requested */ @@ -2677,7 +2677,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_delete_app_pkg_subscription(v_app_pkg_subscription_info.id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_004_OK - + /** * @desc Check that MEPM service returns an Application Package Subscription when requested */ @@ -2737,7 +2737,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_delete_app_pkg_subscription(v_app_pkg_subscription_info.id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_005_OK - + /** * @desc Check that MEPM service sends an error when it receives a query for a subscription on AppPackages with a wrong identifier */ @@ -2787,7 +2787,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Postamble f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_005_NF - + /** * @desc Check that MEPM service deletes an Application Package Subscription when requested */ @@ -2838,7 +2838,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Postamble f_cf_01_http_down(); } // 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 */ @@ -2887,7 +2887,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Postamble f_cf_01_http_down(); } // 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 */ @@ -2944,7 +2944,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_delete_app_pkg_subscription(v_app_pkg_subscription_info.id); f_cf_01_http_notif_down(); } // 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 */ @@ -2998,7 +2998,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_delete_package_management(v_app_pkg_info.id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_008_NA - + /** * @desc Check that MEPM reads the content of the AppD of on-boarded individual application package resources when requested */ @@ -3052,7 +3052,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_delete_package_management(v_app_pkg_info.id); f_cf_01_http_down(); } // 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 */ @@ -3103,7 +3103,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Postamble f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_009_NF - + /** * @desc Check that MEPM responds with an error when it receives a PUT request referring an application descriptor AppD */ @@ -3157,7 +3157,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_delete_package_management(v_app_pkg_info.id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_010_FO - + /** * @desc Check that MEPM responds with an error when it receives a DELETE request referring an application descriptor AppD */ @@ -3210,7 +3210,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_delete_package_management(v_app_pkg_info.id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_011_NA - + /** * @desc Check that MEPM fetches the on-boarded application package content identified by appPkgId when requested */ @@ -3264,7 +3264,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_delete_package_management(v_app_pkg_info.id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_012_01_OK - + /** * @desc Check that MEPM fetches the on-boarded application package content identified by appDId when requested */ @@ -3318,7 +3318,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_delete_package_management(v_app_pkg_info.id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_012_02_OK - + /** * @desc Check that MEPM fetches the on-boarded application package content identified by appPkgId when requested */ @@ -3368,7 +3368,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Postamble f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_012_01_NF - + /** * @desc Check that MEPM service sends an error when it receives a query with an application package with a wrong identifier */ @@ -3418,11 +3418,11 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Postamble f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_012_02_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 */ @@ -3479,7 +3479,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Postamble f_cf_01_http_down(); } // 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 */ @@ -3536,7 +3536,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Postamble f_cf_01_http_down(); } // 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 */ @@ -3593,7 +3593,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Postamble f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEPM_LCM_01_NF - + } // End of group mepm_lifcyclemgt group mex_app_instance_mgt { @@ -3660,7 +3660,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_delete_app_instance(v_app_pkg_info.id, v_response.response.body.json_body.appInstanceInfo.id); f_cf_01_http_down(); } // 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 */ @@ -3715,7 +3715,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Postamble f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEX_LCM_001_BR - + /** * @desc Check that MEC API provider retrieves the list of App instances when requested */ @@ -3779,7 +3779,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_delete_app_instance(v_app_pkg_info.id, v_app_instanceInfo.id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEX_LCM_002_OK - + /** * @desc Check that MEC API provider retrieves an App Package when requested */ @@ -3838,7 +3838,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_delete_app_instance(v_app_pkg_info.id, v_app_instanceInfo.id); f_cf_01_http_down(); } // 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 */ @@ -3887,7 +3887,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Postamble f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEX_LCM_003_NF - + /** * @desc Check that MEC API provider service deletes an App Instance when requested */ @@ -3940,7 +3940,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_delete_package_management(v_app_pkg_info.id); f_cf_01_http_down(); } // 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 */ @@ -3989,7 +3989,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Postamble f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEX_LCM_004_NF - + /** * @desc Check that MEC API provider service instantiates an App Instance when requested */ @@ -4062,7 +4062,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_delete_app_instance(v_app_pkg_info.id, v_app_instanceInfo.id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEX_LCM_005_OK - + /** * @desc Check that MEC API provider service fails to instantiate an App Instance when it receives a malformed request */ @@ -4122,7 +4122,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_delete_app_instance(v_app_pkg_info.id, v_app_instanceInfo.id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEX_LCM_005_BR - + /** * @desc Check that MEC API provider service fails to instantiate an App Instance when it receives a request related to a not existing App Instance */ @@ -4182,7 +4182,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_delete_app_instance(v_app_pkg_info.id, v_app_instanceInfo.id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEX_LCM_005_NF - + /** * @desc Check that MEC API provider service terminates an App Instance when requested */ @@ -4257,7 +4257,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_delete_app_instance(v_app_pkg_info.id, v_app_instanceInfo.id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEX_LCM_006_OK - + /** * @desc Check that MEC API provider service fails to terminate an App Instance when it receives a malformed request */ @@ -4314,7 +4314,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_terminate_app_instance(v_app_pkg_info.id, v_app_instanceInfo.id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEX_LCM_006_BR - + /** * @desc Check that MEC API provider service fails to terminate an App Instance when it receives a request related to a not existing App Instance */ @@ -4369,7 +4369,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Postamble f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEX_LCM_006_NF - + /** * @desc Check that MEC API provider service changes the status of an App Instance */ @@ -4413,7 +4413,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { mw_http_message_body_json( mw_body_json_operate_app_request( mw_operate_app_request - + ))))) { tc_ac.stop; @@ -4430,7 +4430,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_terminate_app_instance(v_app_pkg_info.id, v_app_instanceInfo.id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEX_LCM_007_OK - + /** * @desc Check that MEC API provider service fails to operate on an App Instance when it receives a malformed request */ @@ -4487,7 +4487,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_terminate_app_instance(v_app_pkg_info.id, v_app_instanceInfo.id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEX_LCM_007_BR - + /** * @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 */ @@ -4539,40 +4539,220 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Postamble f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEX_LCM_007_NF - + } // End of group mex_app_instance_mgt group mex_lifcyclemgt { - + /** - * @desc Check that MEC API provider retrieves the list of App instances when requested + * @desc Check that MEC API provider service retrieves info about LCM Operation Occurrence on App Instances when requested */ - testcase TC_MEC_MEC010p2_MEX_LCM_01_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEX_LCM_008_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; + var AppPkgInfo v_app_pkg_info; + var AppInstanceInfo v_app_instanceInfo; + var charstring v_app_lcm_op_occ_id; // Test control - if (not(PICS_APP_PACKAGE_MANAGEMENT)) { - log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; + 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_instanciate_app_instance(v_app_pkg_info, v_app_instanceInfo, v_app_lcm_op_occ_id); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( m_http_request_post( - PICS_ROOT_API & PX_APP_LCM_URI, + 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_app_lcm_op_occ_list( + { + *, + mw_app_lcm_op_occ( + v_app_lcm_op_occ_id + ), + * + } + ))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with the list of AppLcmOpOcc ***"); + 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_terminate_app_instance(v_app_pkg_info.id, v_app_instanceInfo.id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC010p2_MEX_LCM_008_OK + + /** + * @desc Check that MEC API provider service retrieves info about LCM Operation Occurrence on an App Instance when requested + */ + testcase TC_MEC_MEC010p2_MEX_LCM_009_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var AppPkgInfo v_app_pkg_info; + var AppInstanceInfo v_app_instanceInfo; + var charstring v_app_lcm_op_occ_id; + + // 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_instanciate_app_instance(v_app_pkg_info, v_app_instanceInfo, v_app_lcm_op_occ_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_MEX_LCM_OP_OCC_URI & oct2char(unichar2oct(v_app_lcm_op_occ_id)), + 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_lcm_op_occ( + mw_app_lcm_op_occ( + v_app_lcm_op_occ_id, + -, -, -, -, + mw_app_lcm_op_occ_link( + PX_MEX_LCM_OP_OCC_URI & oct2char(unichar2oct(v_app_lcm_op_occ_id)) + ))))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a AppLcmOpOcc ***"); + 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_terminate_app_instance(v_app_pkg_info.id, v_app_instanceInfo.id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC010p2_MEX_LCM_009_OK + + /** + * @desc Check that MEC API provider service retrieves info about LCM Operation Occurrence on an App Instance when requested + */ + testcase TC_MEC_MEC010p2_MEX_LCM_009_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // 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_OP_OCC_URI & oct2char(unichar2oct(PX_APP_NON_EXISTANT_LCM_OP_OCC_ID)), + 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_MEC010p2_MEX_LCM_009_NF + + /** + * @desc Check that MEC API provider service creates a LCM Subscription when requested, where the subscription request can + * have SUBSCRIPTION_TYPE AppInstanceStateChangeSubscription or AppLcmOpOccStateChangeSubscription + */ + testcase TC_MEC_MEC010p2_MEX_LCM_010_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var AppPkgInfo v_app_pkg_info; + var AppInstanceInfo v_app_instanceInfo; + var charstring v_app_lcm_op_occ_id; + + // 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_instanciate_app_instance(v_app_pkg_info, v_app_instanceInfo, v_app_lcm_op_occ_id); + 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_create_app_instance_request( - m_create_app_instance_request( - PX_APP_ID - )))))); + m_body_json_app_inst_subscription_request( + m_app_inst_subscription_request( + PX_APP_INST_SUBSCRIPTION_REQUEST, + PX_CALLBACK_URI + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -4580,15 +4760,17 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { 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 - )))))) { + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_app_inst_subscription_info( + mw_app_inst_subscription_info( + -, + PX_APP_INST_SUBSCRIPTION_REQUEST, + PX_CALLBACK_URI + )))))) -> value v_response { tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct code ***"); + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a AppLcmOpOcc ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -4598,21 +4780,24 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { } // End of 'alt' statement // Postamble + f_delete_app_instance_subscription(v_response.response.body.json_body.appInstSubscriptionInfo.id); + f_terminate_app_instance(v_app_pkg_info.id, v_app_instanceInfo.id); f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC010p2_MEX_LCM_01_OK - + } // End of testcase TC_MEC_MEC010p2_MEX_LCM_010_OK + /** - * @desc Check that MEC API provider sends an error when it receives a malformed request for the creation of a new App Instance + * @desc Check that MEC API provider service creates a LCM Subscription when requested, where the subscription request can + * have SUBSCRIPTION_TYPE AppInstanceStateChangeSubscription or AppLcmOpOccStateChangeSubscription */ - testcase TC_MEC_MEC010p2_MEX_LCM_01_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEX_LCM_010_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; + if (not(PIC_APP_LCM_MANAGEMENT)) { + log("*** " & testcasename() & ": PIC_APP_LCM_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; } // Test component configuration @@ -4623,13 +4808,14 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { httpPort.send( m_http_request( m_http_request_post( - PICS_ROOT_API & PX_APP_LCM_URI, + PICS_ROOT_API & PX_MEX_LCM_SUBS, v_headers, m_http_message_body_json( - m_body_json_create_app_instance_request( - m_create_app_instance_request( - "" - )))))); + m_body_json_app_inst_subscription_request( + m_app_inst_subscription_request( + "PX_APP_INST_SUBSCRIPTION_REQUEST", // Wrong subscription request + PX_CALLBACK_URI + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -4640,7 +4826,8 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { mw_http_response_400_bad_request )) { tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct code ***"); + + log("*** " & testcasename() & ": PASS: IUT successfully responds with orrect error code ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -4651,33 +4838,39 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC010p2_MEX_LCM_01_OK - + } // End of testcase TC_MEC_MEC010p2_MEX_LCM_010_BR + /** - * @desc Check that MEC API provider retrieves the list of App instances when requested + * @desc Check that MEC API provider service sends the list of LCM Subscriptions when requested */ - testcase TC_MEC_MEC010p2_MEX_LCM_02_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEX_LCM_011_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; + var AppPkgInfo v_app_pkg_info; + var AppInstanceInfo v_app_instanceInfo; + var charstring v_app_lcm_op_occ_id; + var AppInstSubscriptionInfo v_app_inst_subscription_info; // Test control - if (not(PICS_APP_PACKAGE_MANAGEMENT)) { - log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; + 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_instanciate_app_instance(v_app_pkg_info, v_app_instanceInfo, v_app_lcm_op_occ_id); + f_create_app_instance_subscription(v_app_inst_subscription_info); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( m_http_request_get( - PICS_ROOT_API & PX_APP_LCM_URI, + PICS_ROOT_API & PX_MEX_LCM_SUBS, v_headers - ))); + ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -4687,12 +4880,12 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { 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), *) -*/ - )))) { + mw_body_json_app_instance_subscription_link_list( + mw_app_instance_subscription_link_list + ))))) { tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct code ***"); + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a AppLcmOpOcc ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -4702,34 +4895,42 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { } // End of 'alt' statement // Postamble + f_delete_app_instance_subscription(v_app_inst_subscription_info.id); + f_terminate_app_instance(v_app_pkg_info.id, v_app_instanceInfo.id); f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC010p2_MEX_LCM_02_OK - + } // End of testcase TC_MEC_MEC010p2_MEX_LCM_011_OK + /** - * @desc Check that MEC API provider retrieves an App Package when requested + * @desc Check that MEC API provider service sends the information about an existing LCM subscription when requested */ - testcase TC_MEC_MEC010p2_MEX_LCM_03_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEX_LCM_012_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; + var AppPkgInfo v_app_pkg_info; + var AppInstanceInfo v_app_instanceInfo; + var charstring v_app_lcm_op_occ_id; + var AppInstSubscriptionInfo v_app_inst_subscription_info; // Test control - if (not(PICS_APP_PACKAGE_MANAGEMENT)) { - log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; + 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_instanciate_app_instance(v_app_pkg_info, v_app_instanceInfo, v_app_lcm_op_occ_id); + f_create_app_instance_subscription(v_app_inst_subscription_info); 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")), + PICS_ROOT_API & PX_MEX_LCM_SUBS & oct2char(unichar2oct(v_app_inst_subscription_info.id)), v_headers - ))); + ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -4739,17 +4940,15 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { 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"))) - ))))))) { + mw_body_json_app_inst_subscription_info( + mw_app_inst_subscription_info( + v_app_inst_subscription_info.id, + PX_APP_INST_SUBSCRIPTION_REQUEST, + PX_CALLBACK_URI + )))))) { tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct code ***"); + + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct AppInstSubscriptionInfo ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -4759,21 +4958,23 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { } // End of 'alt' statement // Postamble + f_delete_app_instance_subscription(v_app_inst_subscription_info.id); + f_terminate_app_instance(v_app_pkg_info.id, v_app_instanceInfo.id); f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC010p2_MEX_LCM_03_OK - + } // End of testcase TC_MEC_MEC010p2_MEX_LCM_012_OK + /** - * @desc Check that MEC API provider fails on retrieving an App Instance when requested using wrong appInstanceId + * @desc Check that MEC API provider service sends an error when it receives a query for a not existing LCM Subscription */ - testcase TC_MEC_MEC010p2_MEX_LCM_03_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEX_LCM_012_NF() 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; + if (not(PIC_APP_LCM_MANAGEMENT)) { + log("*** " & testcasename() & ": PIC_APP_LCM_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; } // Test component configuration @@ -4784,9 +4985,9 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { 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")), + PICS_ROOT_API & PX_MEX_LCM_SUBS & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_ID)), v_headers - ))); + ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -4797,7 +4998,8 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { mw_http_response_404_not_found )) { tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct code ***"); + + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct error code ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -4808,33 +5010,39 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC010p2_MEX_LCM_03_NF - + } // End of testcase TC_MEC_MEC010p2_MEX_LCM_012_NF + /** - * @desc Check that MEC API provider service deletes an App Instance when requested + * @desc Check that MEC API provider service delete an existing LCM Subscription when requested */ - testcase TC_MEC_MEC010p2_MEX_LCM_04_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEX_LCM_013_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; + var AppPkgInfo v_app_pkg_info; + var AppInstanceInfo v_app_instanceInfo; + var charstring v_app_lcm_op_occ_id; + var AppInstSubscriptionInfo v_app_inst_subscription_info; // Test control - if (not(PICS_APP_PACKAGE_MANAGEMENT)) { - log("*** " & testcasename() & ": PICS_APP_PACKAGE_MANAGEMENT required for executing the TC ***"); - setverdict(inconc); - stop; + 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_instanciate_app_instance(v_app_pkg_info, v_app_instanceInfo, v_app_lcm_op_occ_id); + f_create_app_instance_subscription(v_app_inst_subscription_info); 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")), + PICS_ROOT_API & PX_MEX_LCM_SUBS & oct2char(unichar2oct(v_app_inst_subscription_info.id)), v_headers - ))); + ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -4845,6 +5053,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { mw_http_response_204_no_content )) { tc_ac.stop; + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct code ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } @@ -4855,21 +5064,22 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { } // End of 'alt' statement // Postamble + f_terminate_app_instance(v_app_pkg_info.id, v_app_instanceInfo.id); f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC010p2_MEX_LCM_04_OK - + } // End of testcase TC_MEC_MEC010p2_MEX_LCM_013_OK + /** - * @desc Check that MEC API provider fails on deletion of an App Instance when requested using wrong appInstanceId + * @desc Check that MEC API provider service sends an error when it receives a deletion request for a not existing LCM Subscription */ - testcase TC_MEC_MEC010p2_MEX_LCM_04_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEX_LCM_013_NF() 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; + if (not(PIC_APP_LCM_MANAGEMENT)) { + log("*** " & testcasename() & ": PIC_APP_LCM_MANAGEMENT required for executing the TC ***"); + setverdict(inconc); + stop; } // Test component configuration @@ -4880,9 +5090,9 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { 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")), + PICS_ROOT_API & PX_MEX_LCM_SUBS & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_ID)), v_headers - ))); + ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -4893,6 +5103,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { mw_http_response_404_not_found )) { tc_ac.stop; + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct code ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } @@ -4904,8 +5115,8 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC010p2_MEX_LCM_04_NF - + } // End of testcase TC_MEC_MEC010p2_MEX_LCM_013_NF + } // End of group mex_lifcyclemgt - + } // End of module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases diff --git a/ttcn/AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestControl.ttcn b/ttcn/AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestControl.ttcn index 314d555..3a67ba8 100644 --- a/ttcn/AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestControl.ttcn +++ b/ttcn/AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestControl.ttcn @@ -140,6 +140,16 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestControl { execute(TC_MEC_MEC010p2_MEX_LCM_007_OK()); execute(TC_MEC_MEC010p2_MEX_LCM_007_BR()); execute(TC_MEC_MEC010p2_MEX_LCM_007_NF()); + execute(TC_MEC_MEC010p2_MEX_LCM_008_OK()); + execute(TC_MEC_MEC010p2_MEX_LCM_009_OK()); + execute(TC_MEC_MEC010p2_MEX_LCM_009_NF()); + execute(TC_MEC_MEC010p2_MEX_LCM_010_OK()); + execute(TC_MEC_MEC010p2_MEX_LCM_010_BR()); + execute(TC_MEC_MEC010p2_MEX_LCM_011_OK()); + execute(TC_MEC_MEC010p2_MEX_LCM_012_OK()); + execute(TC_MEC_MEC010p2_MEX_LCM_012_NF()); + execute(TC_MEC_MEC010p2_MEX_LCM_013_OK()); + execute(TC_MEC_MEC010p2_MEX_LCM_013_NF()); } } } diff --git a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Functions.ttcn b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Functions.ttcn index 6d299b1..61be897 100644 --- a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Functions.ttcn +++ b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Functions.ttcn @@ -432,4 +432,79 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Functions { f_delete_app_instance(p_app_pkg_info_id, p_app_instance_info_id); } // End of function f_terminate_app_instance + function f_create_app_instance_subscription( + out AppInstSubscriptionInfo p_app_inst_subscription_info + ) runs on HttpComponent { + // Local variables + 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_MEX_LCM_SUBS, + v_headers, + m_http_message_body_json( + m_body_json_app_inst_subscription_request( + m_app_inst_subscription_request( + PX_APP_INST_SUBSCRIPTION_REQUEST, // Wrong subscription request + PX_CALLBACK_URI + )))))); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_app_inst_subscription_info( + mw_app_inst_subscription_info( + -, + PX_APP_INST_SUBSCRIPTION_REQUEST, + PX_CALLBACK_URI + )))))) -> value v_response { + tc_ac.stop; + + p_app_inst_subscription_info := v_response.response.body.json_body.appInstSubscriptionInfo; + log("f_create_app_pkg_subscription: IUT responds to the AppInstSubscriptionInfo: ", p_app_inst_subscription_info); + } + [] tc_ac.timeout { + log("f_create_app_pkg_subscription: Expected message not received ***"); + } + } // End of 'alt' statement + + } // End of function f_create_app_instance_subscription + + function f_delete_app_instance_subscription( + in Json.String p_id + ) runs on HttpComponent { + // Local variables + var Headers v_headers; + + 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(p_id)), + v_headers + ))); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + ))) { + tc_ac.stop; + } + [] tc_ac.timeout { + log("f_create_app_pkg_subscription: Expected message not received ***"); + } + } // End of 'alt' statement + + } // End of function f_delete_app_instance_subscription + } // End of ApplicationPackageLifecycleAndOperationGrantingAPI_Functions diff --git a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Pixits.ttcn b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Pixits.ttcn index e380c94..027b5cc 100644 --- a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Pixits.ttcn +++ b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Pixits.ttcn @@ -18,7 +18,9 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Pixits { modulepar Json.String PX_APP_LCM_OP_OCC_ID := "5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1c" - modulepar Json.AnyURI PX_APP_LCM_OP_OCC_ID_URI := ""; + modulepar Json.String PX_APP_NON_EXISTANT_LCM_OP_OCC_ID := "5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1c" + + modulepar Json.AnyURI PX_APP_LCM_OP_OCC_ID_URI := "/app_lcm/v1/app_lcm_op_occs/5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1c"; modulepar Json.AnyURI PX_APP_INSTANCE_ID_URI := ""; @@ -44,31 +46,36 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Pixits { modulepar Json.String PX_TRAFFIC_FILTER_PROTOCOL := ""; - modulepar Json.String PX_APP_PKG_NAME := "APP_PKG_NAME" + modulepar Json.String PX_APP_PKG_NAME := "APP_PKG_NAME"; - modulepar Json.String PX_APP_PKG_VERSION := "APP_PKG_VERSION" + modulepar Json.String PX_APP_PKG_VERSION := "APP_PKG_VERSION"; - modulepar Json.String PX_CHECKSUM := "CHECKSUM" + modulepar Json.String PX_CHECKSUM := "CHECKSUM"; - modulepar Json.String PX_APP_PKG_PATH := "APP_PKG_PATH" + modulepar Json.String PX_APP_PKG_PATH := "APP_PKG_PATH"; - modulepar OperationalState PX_OPERATIONAL_STATE := STARTED + modulepar OperationalState PX_OPERATIONAL_STATE := STARTED; - modulepar UsageState PX_USAGE_STATE := NOT_IN_USE + modulepar UsageState PX_USAGE_STATE := NOT_IN_USE; - modulepar Json.String PX_APP_PKG_ID := "5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f" + 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_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_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.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.AnyURI PX_CALLBACK_URI := "http://127.0.0.1/callback"; + + modulepar Json.String PX_APP_INST_SUBSCRIPTION_REQUEST := "AppInstSubscriptionRequest"; + // AppLcmOpOccSubscriptionRequest + // AppInstIdCreationSubscriptionRequest + // AppInstIdDeletionSubscriptionRequest - modulepar Json.String PX_SUBSCRIPTION_ID := "e0deee2b-6e50-4f33-ab09-8bf0585025d3" + 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.String PX_NON_EXISTENT_SUBSCRIPTION_ID := "NON_EXISTENT_SUBSCRIPTION_ID"; modulepar Json.AnyURI PX_APP_PKG_HREF := ""; diff --git a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Templates.ttcn b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Templates.ttcn index 4bf26f4..6a87a81 100644 --- a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Templates.ttcn +++ b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Templates.ttcn @@ -815,6 +815,150 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Templates { gracefulStopTimeout := p_graceful_stop_timeout } // End of template mw_operate_app_request + template (omit) AppLcmOpOcc m_app_lcm_op_occ( + in Json.String p_id, + in OperationState p_operationState, + in template (value) ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.TimeStamp p_stateEnteredTime, + in template (value) ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.TimeStamp p_startTime, + in OperationType p_lcmOperation, + in template (value) AppLcmOpOcc_Link p_links, + in template (omit) OperationParams p_operationParams := omit, + in template (omit) Json.Bool p_isCancelPending := omit, + in template (omit) CancelMode p_cancelMode := omit + ) := { + id := p_id, + operationState := p_operationState, + stateEnteredTime := p_stateEnteredTime, + startTime := p_startTime, + lcmOperation := p_lcmOperation, + operationParams := p_operationParams, + isCancelPending := p_isCancelPending, + cancelMode := p_cancelMode, + links := p_links + } // End of template m_app_lcm_op_occ + + template (present) AppLcmOpOcc mw_app_lcm_op_occ( + template (present) Json.String p_id := ?, + template (present) OperationState p_operationState := ?, + template (present) ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.TimeStamp p_stateEnteredTime := ?, + template (present) ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.TimeStamp p_startTime := ?, + template (present) OperationType p_lcmOperation := ?, + template (present) AppLcmOpOcc_Link p_links := ?, + template OperationParams p_operationParams := *, + template Json.Bool p_isCancelPending := *, + template CancelMode p_cancelMode := * + ) := { + id := p_id, + operationState := p_operationState, + stateEnteredTime := p_stateEnteredTime, + startTime := p_startTime, + lcmOperation := p_lcmOperation, + operationParams := p_operationParams, + isCancelPending := p_isCancelPending, + cancelMode := p_cancelMode, + links := p_links + } // End of template mw_app_lcm_op_occ + + template (value) AppLcmOpOcc_Link m_app_lcm_op_occ_link( + in Json.AnyURI p_href, + in Json.AnyURI p_app_instance + ) := { + self_ := { href := p_href }, + appInstance := { href := p_app_instance } + } // End of template m_app_lcm_op_occ_link + + template (present) AppLcmOpOcc_Link mw_app_lcm_op_occ_link( + template (present) Json.AnyURI p_href := ?, + template (present) Json.AnyURI p_app_instance := ? + ) := { + self_ := { href := p_href }, + appInstance := { href := p_app_instance } + } // End of template mw_app_lcm_op_occ_link + + template (omit) AppInstSubscriptionRequest m_app_inst_subscription_request( + in Json.String p_subscriptionType, + in Json.AnyURI p_callbackUri, + in template (omit) AppInstanceState p_appInstanceState := omit, + in template (omit) AppInstanceSubscriptionFilter p_appInstanceSubscriptionFilter := omit + ) := { + subscriptionType := p_subscriptionType, + callbackUri := p_callbackUri, + appInstanceState := p_appInstanceState, + appInstanceSubscriptionFilter := p_appInstanceSubscriptionFilter + } // End of template m_app_inst_subscription_request + + template (present) AppInstSubscriptionRequest mw_app_inst_subscription_request( + template (present) Json.String p_subscriptionType := ?, + template (present) Json.AnyURI p_callbackUri := ?, + template AppInstanceState p_appInstanceState := *, + template AppInstanceSubscriptionFilter p_appInstanceSubscriptionFilter := * + ) := { + subscriptionType := p_subscriptionType, + callbackUri := p_callbackUri, + appInstanceState := p_appInstanceState, + appInstanceSubscriptionFilter := p_appInstanceSubscriptionFilter + } // End of template mw_app_inst_subscription_request + + template (omit) AppInstSubscriptionInfo m_app_inst_subscription_info( + in Json.String p_id, + in Json.String p_subscriptionType, + in Json.AnyURI p_callbackUri, + in template (value) AppInstSubscriptionInfo_Link p_links, + in template (omit) AppInstanceState p_appInstanceState := omit, + in template (omit) AppInstanceSubscriptionFilter p_appInstanceSubscriptionFilter := omit + ) := { + id := p_id, + subscriptionType := p_subscriptionType, + appInstanceState := p_appInstanceState, + appInstanceSubscriptionFilter := p_appInstanceSubscriptionFilter, + callbackUri := p_callbackUri, + links := p_links + } // End of template m_app_inst_subscription_info + + template (present) AppInstSubscriptionInfo mw_app_inst_subscription_info( + template (present) Json.String p_id := ?, + template (present) Json.String p_subscriptionType := ?, + template (present) Json.AnyURI p_callbackUri := ?, + template (present) AppInstSubscriptionInfo_Link p_links := ?, + template AppInstanceState p_appInstanceState := *, + template AppInstanceSubscriptionFilter p_appInstanceSubscriptionFilter := * + ) := { + id := p_id, + subscriptionType := p_subscriptionType, + appInstanceState := p_appInstanceState, + appInstanceSubscriptionFilter := p_appInstanceSubscriptionFilter, + callbackUri := p_callbackUri, + links := p_links + } // End of template mw_app_inst_subscription_info + + template (value) AppInstanceSubscriptionLinkList m_app_instance_subscription_link_list( + in template (value) AppInstanceSubscriptionLinkList_Link p_links + ) := { + links := p_links + } // End of template m_app_instance_subscription_link_list + + template (present) AppInstanceSubscriptionLinkList mw_app_instance_subscription_link_list( + template (present) AppInstanceSubscriptionLinkList_Link p_links := ? + ) := { + links := p_links + } // End of template mw_app_instance_subscription_link_list + + template (omit) AppInstanceSubscriptionLinkList_Link m_app_instance_subscription_link_list_link( + in Json.AnyURI p_href, + in template (omit) AppInstanceSubscriptionLinkList_Link_Subscriptions p_subscriptions := omit + ) := { + self_ := { href := p_href }, + subscriptions := p_subscriptions + } // End of template m_app_instance_subscription_link_list_link + + template (present) AppInstanceSubscriptionLinkList_Link mw_app_instance_subscription_link_list_link( + template (present) Json.AnyURI p_href := ?, + template AppInstanceSubscriptionLinkList_Link_Subscriptions p_subscriptions := * + ) := { + self_ := { href := p_href }, + subscriptions := p_subscriptions + } // End of template mw_app_instance_subscription_link_list_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 index 8971e22..2f80948 100644 --- a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.ttcn @@ -866,6 +866,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { AppInstanceState appInstanceState optional, AppInstanceSubscriptionFilter appInstanceSubscriptionFilter optional } + type record of AppInstSubscriptionRequest AppInstSubscriptionRequestList; /** * @desc This data type represents an application lifecycle management operation occurrence @@ -893,6 +894,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { } with { variant (links) "name as '_links'"; } + type record of AppLcmOpOcc AppLcmOpOccList; /** * @desc Input parameters of the LCM operation @@ -1038,8 +1040,8 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @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 + type record AppInstanceSubscriptionLinkList { + AppInstanceSubscriptionLinkList_Link links } with { variant (links) "name as '_links'"; } @@ -1050,9 +1052,9 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @member subscriptions A link list to the subscriptions * @see ETSI GS MEC 010-2 Clause 6.2.2.19 Type: AppInstanceSubscriptionLinkList */ - type record SubscriptionLinkList_Link { - LinkType self_, - SubscriptionLinkList_Link_Subscriptions subscriptions optional + type record AppInstanceSubscriptionLinkList_Link { + LinkType self_, + AppInstanceSubscriptionLinkList_Link_Subscriptions subscriptions optional } with { variant (self_) "name as 'self'"; } @@ -1063,19 +1065,19 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @member subscriptionType Type of the subscription * @see ETSI GS MEC 010-2 Clause 6.2.2.19 Type: AppInstanceSubscriptionLinkList */ - type record SubscriptionLinkList_Link_Subscription { + type record AppInstanceSubscriptionLinkList_Link_Subscription { Json.AnyURI href, AppInstanceSubscriptionType subscriptionType } - type record length(1..infinity) of SubscriptionLinkList_Link_Subscription SubscriptionLinkList_Link_Subscriptions; + type record length(1..infinity) of AppInstanceSubscriptionLinkList_Link_Subscription AppInstanceSubscriptionLinkList_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 @@ -1999,7 +2001,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { * @desc Reference of the catalogue. */ type Json.String CategoryRef_Href; - + /** * @desc Unique identifier of the category. */ diff --git a/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn b/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn index efde2f5..a70f3da 100644 --- a/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn +++ b/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn @@ -107,15 +107,16 @@ module LibHttp_JsonMessageBodyTypes { InstantiateAppRequest appInstanceInstantiate, TerminateAppRequest terminateAppRequest, OperateAppRequest changeStateTo, + AppLcmOpOccList appLcmOpOccList, + AppLcmOpOcc appLcmOpOcc, + AppInstSubscriptionRequest appInstSubscriptionRequest, + AppInstSubscriptionInfo appInstSubscriptionInfo, + AppInstanceSubscriptionLinkList appInstSubscriptionLinkList, /* AppLCM_TypesAndValues.CreateAppInstanceRequestWithError createAppInstanceRequestWithError, */ /* AppLCM_TypesAndValues.InstantiateAppRequestWithError appInstanceInstantiateWithError, */ /* AppLCM_TypesAndValues.TerminateAppRequestWithError terminateTypeWithError, */ /* 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, diff --git a/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn b/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn index 1aa123e..480f824 100644 --- a/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn +++ b/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn @@ -243,6 +243,85 @@ module LibHttp_JsonTemplates { changeStateTo := p_operate_app_request } // End of template mw_body_json_operate_app_request + template (value) JsonBody m_body_json_app_lcm_op_occ_list( + in template (value) AppLcmOpOccList p_app_op_occ_list + ) := { + appLcmOpOccList := p_app_op_occ_list + } // End of template m_body_json_app_lcm_op_occ_list + + template (present) JsonBody mw_body_json_app_lcm_op_occ_list( + template (present) AppLcmOpOccList p_app_op_occ_list := ? + ) := { + appLcmOpOccList := p_app_op_occ_list + } // End of template mw_body_json_app_lcm_op_occ_list + + template (value) JsonBody m_body_json_app_lcm_op_occ( + in template (value) AppLcmOpOcc p_app_op_occ + ) := { + appLcmOpOcc := p_app_op_occ + } // End of template m_body_json_lifecycle_op_occ + + template (present) JsonBody mw_body_json_app_lcm_op_occ( + template (present) AppLcmOpOcc p_app_op_occ := ? + ) := { + appLcmOpOcc := p_app_op_occ + } // End of template mw_body_json_lifecycle_op_occ + + template (value) JsonBody m_body_json_app_inst_subscription_request( + in template (value) AppInstSubscriptionRequest p_app_inst_subscription_request + ) := { + appInstSubscriptionRequest := p_app_inst_subscription_request + } // End of template m_body_json_app_inst_subscription_request + + template (present) JsonBody mw_body_json_app_inst_subscription_request( + template (present) AppInstSubscriptionRequest p_app_inst_subscription_request := ? + ) := { + appInstSubscriptionRequest := p_app_inst_subscription_request + } // End of template mw_body_json_app_inst_subscription_request + + template (value) JsonBody m_body_json_app_inst_subscription_info( + in template (value) AppInstSubscriptionInfo p_app_inst_subscription_info + ) := { + appInstSubscriptionInfo := p_app_inst_subscription_info + } // End of template m_body_json_app_inst_subscription_info + + template (present) JsonBody mw_body_json_app_inst_subscription_info( + template (present) AppInstSubscriptionInfo p_app_inst_subscription_info := ? + ) := { + appInstSubscriptionInfo := p_app_inst_subscription_info + } // End of template mw_body_json_app_inst_subscription_info + + template (value) JsonBody m_body_json_app_instance_subscription_link_list( + in template (value) AppInstanceSubscriptionLinkList p_app_instance_subscription_link_list + ) := { + appInstSubscriptionLinkList := p_app_instance_subscription_link_list + } // End of template m_body_json_app_instance_subscription_link_list + + template (present) JsonBody mw_body_json_app_instance_subscription_link_list( + template (present) AppInstanceSubscriptionLinkList p_app_instance_subscription_link_list := ? + ) := { + appInstSubscriptionLinkList := p_app_instance_subscription_link_list + } // End of template mw_body_json_app_instance_subscription_link_list + + + // template (value) JsonBody m_body_json_app_inst_subscription_request_list( + // in template (value) AppInstSubscriptionRequestList p_app_inst_subscription_request_list + // ) := { + // appInstSubscriptionRequestList := p_app_inst_subscription_request_list + // } // End of template m_body_json_app_inst_subscription_request_list + + // template (present) JsonBody mw_body_json_app_inst_subscription_request_list( + // template (present) AppInstSubscriptionRequestList p_app_inst_subscription_request_list := ? + // ) := { + // appInstSubscriptionRequestList := p_app_inst_subscription_request_list + // } // End of template mw_body_json_app_inst_subscription_request_list + + + + + + + /*template (present) JsonBody mw_body_json_mex_lcm_instance_info_list ( in template (present) AppInstanceInfoList p_app_instance_info_list ) := { @@ -280,24 +359,6 @@ module LibHttp_JsonTemplates { - template (present) JsonBody mw_body_json_lifecycle_op_occ_list ( - in template (present) AppInstanceLcmOpOccList p_app_instance_op_occ_list - ) := { - appInstanceLcmOpOccList := p_app_instance_op_occ_list - } - - template (present) JsonBody mw_body_json_lifecycle_op_occ ( - in template (present) AppInstanceLcmOpOcc p_app_instance_op_occ - ) := { - appInstanceLcmOpOcc := p_app_instance_op_occ - } - - template (present) JsonBody m_body_json_lcm_subscribe( - in template (present) SubscriptionRequest p_app_lcm_request - ) := { - subscriptionRequest := p_app_lcm_request - } - template (present) JsonBody m_body_json_lcm_subscribe_with_error( in template (present) SubscriptionRequestWithError p_app_lcm_request_with_error ) := { -- GitLab From ee14df8c0fa14409777ea7b9eda46e45bbbac070 Mon Sep 17 00:00:00 2001 From: garciay Date: Tue, 14 Nov 2023 14:50:40 +0100 Subject: [PATCH 55/99] TTF T027: Finalyze MEC 010-2/MEX/LCM --- ...ycleAndOperationGrantingAPI_TestCases.ttcn | 393 ++++++++++++++---- ...leAndOperationGrantingAPI_TestControl.ttcn | 4 + ...ycleAndOperationGrantingAPI_Functions.ttcn | 18 +- ...ycleAndOperationGrantingAPI_Templates.ttcn | 54 ++- ...ndOperationGrantingAPI_TypesAndValues.ttcn | 3 +- ttcn/LibMec/ttcn/LibMec_Pixits.ttcn | 4 +- .../ttcn/LibHttp_JsonMessageBodyTypes.ttcn | 19 +- .../ttcn/LibHttp_JsonTemplates.ttcn | 98 +---- 8 files changed, 412 insertions(+), 181 deletions(-) diff --git a/ttcn/AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases.ttcn b/ttcn/AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases.ttcn index 0c493af..12ea8f6 100644 --- a/ttcn/AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases.ttcn +++ b/ttcn/AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases.ttcn @@ -1817,20 +1817,30 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Test Body tc_ac.start; alt { - [] httpPort.receive( - mw_http_request( - mw_http_request_post( - PICS_ROOT_API & PX_MEO_PKGM_SUBS & "/" & oct2char(unichar2oct(v_app_pkg_subscription_info.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 { + [] httpPort_notif.receive( + mw_http_request( + mw_http_request_post( + PICS_ROOT_API & PX_MEO_PKGM_SUBS & "/" & oct2char(unichar2oct(v_app_pkg_subscription_info.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 + ))))) { tc_ac.stop; + httpPort_notif.send(m_http_response(m_http_response_ok_no_body(v_headers))); + log("*** " & testcasename() & ": PASS: IUT successfully sends notification info ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } + [] httpPort_notif.receive { + tc_ac.stop; + + httpPort_notif.send(m_http_response(m_http_response_500_internal_error(v_headers))); + + log("*** " & testcasename() & ": FAIL: Expected message received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_error); + } [] tc_ac.timeout { log("*** " & testcasename() & ": INCONC: Expected message not received ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); @@ -3723,7 +3733,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Local variables var Headers v_headers; var AppPkgInfo v_app_pkg_info; - var AppInstanceInfo v_app_instanceInfo; + var AppInstanceInfo v_app_instance_info; // Test control if (not(PIC_APP_LCM_MANAGEMENT)) { @@ -3736,7 +3746,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_cf_01_http_up(); // Preamble - f_create_app_instance(v_app_pkg_info, v_app_instanceInfo); + f_create_app_instance(v_app_pkg_info, v_app_instance_info); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( @@ -3757,9 +3767,9 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { { *, mw_app_instance_info( - v_app_instanceInfo.id, - v_app_instanceInfo.appDId, - v_app_instanceInfo.appProvider + v_app_instance_info.id, + v_app_instance_info.appDId, + v_app_instance_info.appProvider ), * } @@ -3776,7 +3786,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { } // End of 'alt' statement // Postamble - f_delete_app_instance(v_app_pkg_info.id, v_app_instanceInfo.id); + f_delete_app_instance(v_app_pkg_info.id, v_app_instance_info.id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEX_LCM_002_OK @@ -3787,7 +3797,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Local variables var Headers v_headers; var AppPkgInfo v_app_pkg_info; - var AppInstanceInfo v_app_instanceInfo; + var AppInstanceInfo v_app_instance_info; // Test control if (not(PIC_APP_LCM_MANAGEMENT)) { @@ -3800,12 +3810,12 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_cf_01_http_up(); // Preamble - f_create_app_instance(v_app_pkg_info, v_app_instanceInfo); + f_create_app_instance(v_app_pkg_info, v_app_instance_info); 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(v_app_instanceInfo.id)), + PICS_ROOT_API & PX_APP_LCM_URI & oct2char(unichar2oct(v_app_instance_info.id)), v_headers ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -3819,9 +3829,9 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { mw_http_message_body_json( mw_body_json_app_instance_info( mw_app_instance_info( - v_app_instanceInfo.id, - v_app_instanceInfo.appDId, - v_app_instanceInfo.appProvider + v_app_instance_info.id, + v_app_instance_info.appDId, + v_app_instance_info.appProvider )))))) { tc_ac.stop; @@ -3835,7 +3845,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { } // End of 'alt' statement // Postamble - f_delete_app_instance(v_app_pkg_info.id, v_app_instanceInfo.id); + f_delete_app_instance(v_app_pkg_info.id, v_app_instance_info.id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEX_LCM_003_OK @@ -3895,7 +3905,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Local variables var Headers v_headers; var AppPkgInfo v_app_pkg_info; - var AppInstanceInfo v_app_instanceInfo; + var AppInstanceInfo v_app_instance_info; // Test control if (not(PIC_APP_LCM_MANAGEMENT)) { @@ -3908,12 +3918,12 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_cf_01_http_up(); // Preamble - f_create_app_instance(v_app_pkg_info, v_app_instanceInfo); + f_create_app_instance(v_app_pkg_info, v_app_instance_info); 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(v_app_instanceInfo.id)), + PICS_ROOT_API & PX_APP_LCM_URI & oct2char(unichar2oct(v_app_instance_info.id)), v_headers ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -3998,7 +4008,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var Headers v_headers; var HttpMessage v_response; var AppPkgInfo v_app_pkg_info; - var AppInstanceInfo v_app_instanceInfo; + var AppInstanceInfo v_app_instance_info; // Test control if (not(PIC_APP_LCM_MANAGEMENT)) { @@ -4011,12 +4021,12 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_cf_01_http_up(); // Preamble - f_create_app_instance(v_app_pkg_info, v_app_instanceInfo); + f_create_app_instance(v_app_pkg_info, v_app_instance_info); 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(v_app_instanceInfo.id)) & "instantiate", + PICS_ROOT_API & PX_APP_LCM_URI & oct2char(unichar2oct(v_app_instance_info.id)) & "instantiate", v_headers, m_http_message_body_json( m_body_json_instantiate_app_request( @@ -4059,7 +4069,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { } // End of 'alt' statement // Postamble - f_delete_app_instance(v_app_pkg_info.id, v_app_instanceInfo.id); + f_delete_app_instance(v_app_pkg_info.id, v_app_instance_info.id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEX_LCM_005_OK @@ -4070,7 +4080,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Local variables var Headers v_headers; var AppPkgInfo v_app_pkg_info; - var AppInstanceInfo v_app_instanceInfo; + var AppInstanceInfo v_app_instance_info; // Test control if (not(PIC_APP_LCM_MANAGEMENT)) { @@ -4083,12 +4093,12 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_cf_01_http_up(); // Preamble - f_create_app_instance(v_app_pkg_info, v_app_instanceInfo); + f_create_app_instance(v_app_pkg_info, v_app_instance_info); 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(v_app_instanceInfo.id)) & "instantiate", + PICS_ROOT_API & PX_APP_LCM_URI & oct2char(unichar2oct(v_app_instance_info.id)) & "instantiate", v_headers, m_http_message_body_json( m_body_json_instantiate_app_request( @@ -4119,7 +4129,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { } // End of 'alt' statement // Postamble - f_delete_app_instance(v_app_pkg_info.id, v_app_instanceInfo.id); + f_delete_app_instance(v_app_pkg_info.id, v_app_instance_info.id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEX_LCM_005_BR @@ -4130,7 +4140,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Local variables var Headers v_headers; var AppPkgInfo v_app_pkg_info; - var AppInstanceInfo v_app_instanceInfo; + var AppInstanceInfo v_app_instance_info; // Test control if (not(PIC_APP_LCM_MANAGEMENT)) { @@ -4143,7 +4153,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_cf_01_http_up(); // Preamble - f_create_app_instance(v_app_pkg_info, v_app_instanceInfo); + f_create_app_instance(v_app_pkg_info, v_app_instance_info); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( @@ -4179,7 +4189,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { } // End of 'alt' statement // Postamble - f_delete_app_instance(v_app_pkg_info.id, v_app_instanceInfo.id); + f_delete_app_instance(v_app_pkg_info.id, v_app_instance_info.id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEX_LCM_005_NF @@ -4191,7 +4201,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var Headers v_headers; var HttpMessage v_response; var AppPkgInfo v_app_pkg_info; - var AppInstanceInfo v_app_instanceInfo; + var AppInstanceInfo v_app_instance_info; var charstring v_app_lcm_op_occ_id; // Test control @@ -4205,12 +4215,12 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_cf_01_http_up(); // Preamble - f_instanciate_app_instance(v_app_pkg_info, v_app_instanceInfo, v_app_lcm_op_occ_id); + f_instanciate_app_instance(v_app_pkg_info, v_app_instance_info, v_app_lcm_op_occ_id); 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(v_app_instanceInfo.id)) & "terminate", + PICS_ROOT_API & PX_APP_LCM_URI & oct2char(unichar2oct(v_app_instance_info.id)) & "terminate", v_headers, m_http_message_body_json( m_body_json_terminate_app_request( @@ -4254,7 +4264,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { } // End of 'alt' statement // Postamble - f_delete_app_instance(v_app_pkg_info.id, v_app_instanceInfo.id); + f_delete_app_instance(v_app_pkg_info.id, v_app_instance_info.id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEX_LCM_006_OK @@ -4265,7 +4275,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Local variables var Headers v_headers; var AppPkgInfo v_app_pkg_info; - var AppInstanceInfo v_app_instanceInfo; + var AppInstanceInfo v_app_instance_info; var charstring v_app_lcm_op_occ_id; // Test control @@ -4279,12 +4289,12 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_cf_01_http_up(); // Preamble - f_instanciate_app_instance(v_app_pkg_info, v_app_instanceInfo, v_app_lcm_op_occ_id); + f_instanciate_app_instance(v_app_pkg_info, v_app_instance_info, v_app_lcm_op_occ_id); 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(v_app_instanceInfo.id)) & "instanicate", // Worng URL + PICS_ROOT_API & PX_APP_LCM_URI & oct2char(unichar2oct(v_app_instance_info.id)) & "instanicate", // Worng URL v_headers, m_http_message_body_json( m_body_json_terminate_app_request( @@ -4311,7 +4321,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { } // End of 'alt' statement // Postamble - f_terminate_app_instance(v_app_pkg_info.id, v_app_instanceInfo.id); + f_terminate_app_instance(v_app_pkg_info.id, v_app_instance_info.id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEX_LCM_006_BR @@ -4322,7 +4332,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Local variables var Headers v_headers; var AppPkgInfo v_app_pkg_info; - var AppInstanceInfo v_app_instanceInfo; + var AppInstanceInfo v_app_instance_info; var charstring v_app_lcm_op_occ_id; // Test control @@ -4377,7 +4387,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Local variables var Headers v_headers; var AppPkgInfo v_app_pkg_info; - var AppInstanceInfo v_app_instanceInfo; + var AppInstanceInfo v_app_instance_info; var charstring v_app_lcm_op_occ_id; // Test control @@ -4391,12 +4401,12 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_cf_01_http_up(); // Preamble - f_instanciate_app_instance(v_app_pkg_info, v_app_instanceInfo, v_app_lcm_op_occ_id); + f_instanciate_app_instance(v_app_pkg_info, v_app_instance_info, v_app_lcm_op_occ_id); 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(v_app_instanceInfo.id)) & "operate", + PICS_ROOT_API & PX_APP_LCM_URI & oct2char(unichar2oct(v_app_instance_info.id)) & "operate", v_headers, m_http_message_body_json( m_body_json_operate_app_request( @@ -4427,7 +4437,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { } // End of 'alt' statement // Postamble - f_terminate_app_instance(v_app_pkg_info.id, v_app_instanceInfo.id); + f_terminate_app_instance(v_app_pkg_info.id, v_app_instance_info.id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEX_LCM_007_OK @@ -4438,7 +4448,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Local variables var Headers v_headers; var AppPkgInfo v_app_pkg_info; - var AppInstanceInfo v_app_instanceInfo; + var AppInstanceInfo v_app_instance_info; var charstring v_app_lcm_op_occ_id; // Test control @@ -4452,12 +4462,12 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_cf_01_http_up(); // Preamble - f_instanciate_app_instance(v_app_pkg_info, v_app_instanceInfo, v_app_lcm_op_occ_id); + f_instanciate_app_instance(v_app_pkg_info, v_app_instance_info, v_app_lcm_op_occ_id); 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(v_app_instanceInfo.id)) & "operated", // Wrong URL + PICS_ROOT_API & PX_APP_LCM_URI & oct2char(unichar2oct(v_app_instance_info.id)) & "operated", // Wrong URL v_headers, m_http_message_body_json( m_body_json_operate_app_request( @@ -4484,7 +4494,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { } // End of 'alt' statement // Postamble - f_terminate_app_instance(v_app_pkg_info.id, v_app_instanceInfo.id); + f_terminate_app_instance(v_app_pkg_info.id, v_app_instance_info.id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEX_LCM_007_BR @@ -4551,7 +4561,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Local variables var Headers v_headers; var AppPkgInfo v_app_pkg_info; - var AppInstanceInfo v_app_instanceInfo; + var AppInstanceInfo v_app_instance_info; var charstring v_app_lcm_op_occ_id; // Test control @@ -4565,7 +4575,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_cf_01_http_up(); // Preamble - f_instanciate_app_instance(v_app_pkg_info, v_app_instanceInfo, v_app_lcm_op_occ_id); + f_instanciate_app_instance(v_app_pkg_info, v_app_instance_info, v_app_lcm_op_occ_id); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( @@ -4603,7 +4613,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { } // End of 'alt' statement // Postamble - f_terminate_app_instance(v_app_pkg_info.id, v_app_instanceInfo.id); + f_terminate_app_instance(v_app_pkg_info.id, v_app_instance_info.id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEX_LCM_008_OK @@ -4614,7 +4624,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Local variables var Headers v_headers; var AppPkgInfo v_app_pkg_info; - var AppInstanceInfo v_app_instanceInfo; + var AppInstanceInfo v_app_instance_info; var charstring v_app_lcm_op_occ_id; // Test control @@ -4628,7 +4638,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_cf_01_http_up(); // Preamble - f_instanciate_app_instance(v_app_pkg_info, v_app_instanceInfo, v_app_lcm_op_occ_id); + f_instanciate_app_instance(v_app_pkg_info, v_app_instance_info, v_app_lcm_op_occ_id); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( @@ -4664,7 +4674,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { } // End of 'alt' statement // Postamble - f_terminate_app_instance(v_app_pkg_info.id, v_app_instanceInfo.id); + f_terminate_app_instance(v_app_pkg_info.id, v_app_instance_info.id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEX_LCM_009_OK @@ -4726,7 +4736,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { var Headers v_headers; var HttpMessage v_response; var AppPkgInfo v_app_pkg_info; - var AppInstanceInfo v_app_instanceInfo; + var AppInstanceInfo v_app_instance_info; var charstring v_app_lcm_op_occ_id; // Test control @@ -4740,7 +4750,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_cf_01_http_up(); // Preamble - f_instanciate_app_instance(v_app_pkg_info, v_app_instanceInfo, v_app_lcm_op_occ_id); + f_instanciate_app_instance(v_app_pkg_info, v_app_instance_info, v_app_lcm_op_occ_id); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( @@ -4781,7 +4791,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Postamble f_delete_app_instance_subscription(v_response.response.body.json_body.appInstSubscriptionInfo.id); - f_terminate_app_instance(v_app_pkg_info.id, v_app_instanceInfo.id); + f_terminate_app_instance(v_app_pkg_info.id, v_app_instance_info.id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEX_LCM_010_OK @@ -4847,7 +4857,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Local variables var Headers v_headers; var AppPkgInfo v_app_pkg_info; - var AppInstanceInfo v_app_instanceInfo; + var AppInstanceInfo v_app_instance_info; var charstring v_app_lcm_op_occ_id; var AppInstSubscriptionInfo v_app_inst_subscription_info; @@ -4862,7 +4872,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_cf_01_http_up(); // Preamble - f_instanciate_app_instance(v_app_pkg_info, v_app_instanceInfo, v_app_lcm_op_occ_id); + f_instanciate_app_instance(v_app_pkg_info, v_app_instance_info, v_app_lcm_op_occ_id); f_create_app_instance_subscription(v_app_inst_subscription_info); f_init_default_headers_list(-, -, v_headers); httpPort.send( @@ -4896,7 +4906,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Postamble f_delete_app_instance_subscription(v_app_inst_subscription_info.id); - f_terminate_app_instance(v_app_pkg_info.id, v_app_instanceInfo.id); + f_terminate_app_instance(v_app_pkg_info.id, v_app_instance_info.id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEX_LCM_011_OK @@ -4907,7 +4917,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Local variables var Headers v_headers; var AppPkgInfo v_app_pkg_info; - var AppInstanceInfo v_app_instanceInfo; + var AppInstanceInfo v_app_instance_info; var charstring v_app_lcm_op_occ_id; var AppInstSubscriptionInfo v_app_inst_subscription_info; @@ -4922,7 +4932,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_cf_01_http_up(); // Preamble - f_instanciate_app_instance(v_app_pkg_info, v_app_instanceInfo, v_app_lcm_op_occ_id); + f_instanciate_app_instance(v_app_pkg_info, v_app_instance_info, v_app_lcm_op_occ_id); f_create_app_instance_subscription(v_app_inst_subscription_info); f_init_default_headers_list(-, -, v_headers); httpPort.send( @@ -4959,7 +4969,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Postamble f_delete_app_instance_subscription(v_app_inst_subscription_info.id); - f_terminate_app_instance(v_app_pkg_info.id, v_app_instanceInfo.id); + f_terminate_app_instance(v_app_pkg_info.id, v_app_instance_info.id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEX_LCM_012_OK @@ -5019,7 +5029,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { // Local variables var Headers v_headers; var AppPkgInfo v_app_pkg_info; - var AppInstanceInfo v_app_instanceInfo; + var AppInstanceInfo v_app_instance_info; var charstring v_app_lcm_op_occ_id; var AppInstSubscriptionInfo v_app_inst_subscription_info; @@ -5034,7 +5044,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_cf_01_http_up(); // Preamble - f_instanciate_app_instance(v_app_pkg_info, v_app_instanceInfo, v_app_lcm_op_occ_id); + f_instanciate_app_instance(v_app_pkg_info, v_app_instance_info, v_app_lcm_op_occ_id); f_create_app_instance_subscription(v_app_inst_subscription_info); f_init_default_headers_list(-, -, v_headers); httpPort.send( @@ -5064,7 +5074,7 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { } // End of 'alt' statement // Postamble - f_terminate_app_instance(v_app_pkg_info.id, v_app_instanceInfo.id); + f_terminate_app_instance(v_app_pkg_info.id, v_app_instance_info.id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEX_LCM_013_OK @@ -5117,6 +5127,247 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases { f_cf_01_http_down(); } // End of testcase TC_MEC_MEC010p2_MEX_LCM_013_NF + /** + * @desc Check that MEC API provider service cancels an on going LCM Operation + */ + testcase TC_MEC_MEC010p2_MEX_LCM_014_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var AppPkgInfo v_app_pkg_info; + var AppInstanceInfo v_app_instance_info; + var charstring v_app_lcm_op_occ_id; + + // 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_instanciate_app_instance(v_app_pkg_info, v_app_instance_info, v_app_lcm_op_occ_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_MEX_LCM_OP_OCC_URI & oct2char(unichar2oct(v_app_lcm_op_occ_id)) & "/cancel", + v_headers, + m_http_message_body_json( + m_body_json_cancel_mode( + FORCEFUL + ))))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_202_accepted + )) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a AppLcmOpOcc ***"); + 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_app_instance(v_app_pkg_info.id, v_app_instance_info.id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC010p2_MEX_LCM_014_OK + + /** + * @desc Check that MEC API provider service fails to cancel an on going LCM Operation when it receives a malformed request + */ + testcase TC_MEC_MEC010p2_MEX_LCM_014_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var AppPkgInfo v_app_pkg_info; + var AppInstanceInfo v_app_instance_info; + var charstring v_app_lcm_op_occ_id; + + // 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_instanciate_app_instance(v_app_pkg_info, v_app_instance_info, v_app_lcm_op_occ_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_MEX_LCM_OP_OCC_URI & oct2char(unichar2oct(v_app_lcm_op_occ_id)) & "/cancel", + v_headers, + m_http_message_body_json( + m_body_json_cancel_mode( + ERROR_CASE + ))))); + 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 AppLcmOpOcc ***"); + 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_app_instance(v_app_pkg_info.id, v_app_instance_info.id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC010p2_MEX_LCM_014_BR + + /** + * @desc Check that MEC API provider service fails to cancel an on going LCM Operation when it receives a request related to a not existing application LCM Operation + */ + testcase TC_MEC_MEC010p2_MEX_LCM_014_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var AppPkgInfo v_app_pkg_info; + var AppInstanceInfo v_app_instance_info; + var charstring v_app_lcm_op_occ_id; + + // 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_instanciate_app_instance(v_app_pkg_info, v_app_instance_info, v_app_lcm_op_occ_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_MEX_LCM_OP_OCC_URI & oct2char(unichar2oct(PX_APP_NON_EXISTANT_LCM_OP_OCC_ID)) & "/cancel", + v_headers, + m_http_message_body_json( + m_body_json_cancel_mode( + ERROR_CASE + ))))); + 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 AppLcmOpOcc ***"); + 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_app_instance(v_app_pkg_info.id, v_app_instance_info.id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC010p2_MEX_LCM_014_NF + + // TODO 15 & 16, how to achieve operationStates indicating value FAILED_TEMP + + /** + * @desc Check that MEC API provider service sends the information about an existing LCM subscription when requested + */ + testcase TC_MEC_MEC010p2_MEX_LCM_017_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var AppPkgInfo v_app_pkg_info; + var AppInstanceInfo v_app_instance_info; + var charstring v_app_lcm_op_occ_id; + var AppInstSubscriptionInfo v_app_inst_subscription_info; + + // 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_notif_up(); + + // Preamble + f_instanciate_app_instance(v_app_pkg_info, v_app_instance_info, v_app_lcm_op_occ_id); + f_create_app_instance_subscription(v_app_inst_subscription_info); + f_init_default_headers_list(-, -, v_headers); + action("Trigger notification"); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort_notif.receive( + mw_http_request( + mw_http_request_post( + PICS_ROOT_API & PX_MEO_PKGM_SUBS & "/" & oct2char(unichar2oct(v_app_inst_subscription_info.id, "UTF-8")), // TODO To be changed + v_headers, + mw_http_message_body_json( + mw_body_json_app_inst_notification( + mw_app_inst_notification // TODO To be refined + ))))) { + tc_ac.stop; + + httpPort_notif.send(m_http_response(m_http_response_ok_no_body(v_headers))); + + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct AppInstSubscriptionInfo ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] httpPort_notif.receive { + tc_ac.stop; + + httpPort_notif.send(m_http_response(m_http_response_500_internal_error(v_headers))); + + log("*** " & testcasename() & ": FAIL: Expected message received ***"); + 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 + + // Postamble + f_delete_app_instance_subscription(v_app_inst_subscription_info.id); + f_terminate_app_instance(v_app_pkg_info.id, v_app_instance_info.id); + f_cf_01_http_notif_down(); + } // End of testcase TC_MEC_MEC010p2_MEX_LCM_017_OK + + } // End of group mex_lifcyclemgt } // End of module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestCases diff --git a/ttcn/AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestControl.ttcn b/ttcn/AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestControl.ttcn index 3a67ba8..07d3737 100644 --- a/ttcn/AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestControl.ttcn +++ b/ttcn/AtsMec_ApplicationPackageLifecycleAndOperationGranting/AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestControl.ttcn @@ -150,6 +150,10 @@ module AtsMec_ApplicationPackageLifecycleAndOperationGrantingAPI_TestControl { execute(TC_MEC_MEC010p2_MEX_LCM_012_NF()); execute(TC_MEC_MEC010p2_MEX_LCM_013_OK()); execute(TC_MEC_MEC010p2_MEX_LCM_013_NF()); + execute(TC_MEC_MEC010p2_MEX_LCM_014_OK()); + execute(TC_MEC_MEC010p2_MEX_LCM_014_BR()); + execute(TC_MEC_MEC010p2_MEX_LCM_014_NF()); + execute(TC_MEC_MEC010p2_MEX_LCM_017_OK()); } } } diff --git a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Functions.ttcn b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Functions.ttcn index 61be897..ecff7dd 100644 --- a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Functions.ttcn +++ b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Functions.ttcn @@ -263,7 +263,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Functions { function f_create_app_instance( out AppPkgInfo p_app_pkg_info, - out AppInstanceInfo p_app_instanceInfo + out AppInstanceInfo p_app_instance_info ) runs on HttpComponent { // Local variables var Headers v_headers; @@ -301,8 +301,8 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Functions { p_app_pkg_info.appDId )))))) -> value v_response { tc_ac.stop; - p_app_instanceInfo := v_response.response.body.json_body.appInstanceInfo; - log("f_create_app_pkg_subscription: INFO: IUT responds to the AppInstanceInfo: ", p_app_instanceInfo); + p_app_instance_info := v_response.response.body.json_body.appInstanceInfo; + log("f_create_app_pkg_subscription: INFO: IUT responds to the AppInstanceInfo: ", p_app_instance_info); } [] tc_ac.timeout { log("f_create_app_pkg_subscription: : INCONC: Expected message not received ***"); @@ -345,21 +345,21 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Functions { function f_instanciate_app_instance( out AppPkgInfo p_app_pkg_info, - out AppInstanceInfo p_app_instanceInfo, + out AppInstanceInfo p_app_instance_info, out charstring p_app_lcm_op_occ_id ) runs on HttpComponent { // Local variables var Headers v_headers; var HttpMessage v_response; var AppPkgInfo v_app_pkg_info; - var AppInstanceInfo v_app_instanceInfo; + var AppInstanceInfo v_app_instance_info; - f_create_app_instance(v_app_pkg_info, v_app_instanceInfo); + f_create_app_instance(v_app_pkg_info, v_app_instance_info); 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(v_app_instanceInfo.id)) & "instantiate", + PICS_ROOT_API & PX_APP_LCM_URI & oct2char(unichar2oct(v_app_instance_info.id)) & "instantiate", v_headers, m_http_message_body_json( m_body_json_instantiate_app_request( @@ -403,13 +403,13 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Functions { // Local variables var Headers v_headers; var AppPkgInfo v_app_pkg_info; - var AppInstanceInfo v_app_instanceInfo; + var AppInstanceInfo v_app_instance_info; 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(v_app_instanceInfo.id)) & "instantiate", + PICS_ROOT_API & PX_APP_LCM_URI & oct2char(unichar2oct(v_app_instance_info.id)) & "instantiate", v_headers, m_http_message_body_json( m_body_json_terminate_app_request( diff --git a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Templates.ttcn b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Templates.ttcn index 6a87a81..193337d 100644 --- a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Templates.ttcn +++ b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Templates.ttcn @@ -944,9 +944,9 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Templates { } // End of template mw_app_instance_subscription_link_list template (omit) AppInstanceSubscriptionLinkList_Link m_app_instance_subscription_link_list_link( - in Json.AnyURI p_href, - in template (omit) AppInstanceSubscriptionLinkList_Link_Subscriptions p_subscriptions := omit - ) := { + in Json.AnyURI p_href, + in template (omit) AppInstanceSubscriptionLinkList_Link_Subscriptions p_subscriptions := omit + ) := { self_ := { href := p_href }, subscriptions := p_subscriptions } // End of template m_app_instance_subscription_link_list_link @@ -959,6 +959,54 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Templates { subscriptions := p_subscriptions } // End of template mw_app_instance_subscription_link_list_link + template (omit) AppInstNotification m_app_inst_notification( + in Json.String p_id, + in NotificationType p_notificationType, + in Json.String p_subscriptionId, + in template (value) ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.TimeStamp p_timeStamp, + in Json.String p_appInstanceId, + in Json.String p_appPkgId, + in Json.String p_appDId, + in template (value) AppInstNotification_Links p_links, + in template (omit) AppInstanceState p_appInstanceState := omit, + in template (omit) LocationInformation p_appInstLocation := omit + ) := { + id := p_id, + notificationType := p_notificationType, + appInstanceState := p_appInstanceState, + subscriptionId := p_subscriptionId, + timeStamp := p_timeStamp, + appInstanceId := p_appInstanceId, + appPkgId := p_appPkgId, + appDId := p_appDId, + appInstLocation := p_appInstLocation, + links := p_links + } // End of template m_app_inst_notification + + template (present) AppInstNotification mw_app_inst_notification( + template (present) Json.String p_id := ?, + template (present) NotificationType p_notificationType := ?, + template (present) Json.String p_subscriptionId := ?, + template (present) ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.TimeStamp p_timeStamp := ?, + template (present) Json.String p_appInstanceId := ?, + template (present) Json.String p_appPkgId := ?, + template (present) Json.String p_appDId := ?, + template (present) AppInstNotification_Links p_links := ?, + template AppInstanceState p_appInstanceState := *, + template LocationInformation p_appInstLocation := * + ) := { + id := p_id, + notificationType := p_notificationType, + appInstanceState := p_appInstanceState, + subscriptionId := p_subscriptionId, + timeStamp := p_timeStamp, + appInstanceId := p_appInstanceId, + appPkgId := p_appPkgId, + appDId := p_appDId, + appInstLocation := p_appInstLocation, + links := p_links + } // End of template mw_app_inst_notification + } // 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 index 2f80948..eb6c3c3 100644 --- a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.ttcn @@ -760,7 +760,8 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { type enumerated StopType { FORCEFUL (0), - GRACEFUL (1) + GRACEFUL (1), + ERROR_CASE (3) // In case of Bad Request tests } /** diff --git a/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn b/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn index 24b035c..063d8d8 100644 --- a/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn +++ b/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn @@ -66,13 +66,13 @@ module LibMec_Pixits { modulepar charstring PX_MEC_SVC_MGMT_APPS_URI := "/mec_service_mgmt/v1/applications"; - modulepar charstring PX_ME_APP_SUPPORT_TIMING_CURRENT_URI := "//timing/current_time"; + modulepar charstring PX_ME_APP_SUPPORT_TIMING_CURRENT_URI := "/timing/current_time"; modulepar charstring PX_ME_APP_SUPPORT_URI := "/applications"; modulepar charstring PX_MEC_SVC_MGMT_SVC_URI := "/mec_service_mgmt/v1/services"; - modulepar charstring PX_ME_APP_SUPPORT_TIMING_CAPS_URI := "//timing/timing_caps"; + modulepar charstring PX_ME_APP_SUPPORT_TIMING_CAPS_URI := "/timing/timing_caps"; modulepar charstring PX_FAI_FA_INFO_URI := "/fai/v1/fa_info"; diff --git a/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn b/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn index a70f3da..4f117db 100644 --- a/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn +++ b/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn @@ -91,16 +91,6 @@ module LibHttp_JsonMessageBodyTypes { 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, @@ -112,13 +102,8 @@ module LibHttp_JsonMessageBodyTypes { AppInstSubscriptionRequest appInstSubscriptionRequest, AppInstSubscriptionInfo appInstSubscriptionInfo, AppInstanceSubscriptionLinkList appInstSubscriptionLinkList, - /* AppLCM_TypesAndValues.CreateAppInstanceRequestWithError createAppInstanceRequestWithError, */ - /* AppLCM_TypesAndValues.InstantiateAppRequestWithError appInstanceInstantiateWithError, */ - /* AppLCM_TypesAndValues.TerminateAppRequestWithError terminateTypeWithError, */ - /* AppLCM_TypesAndValues.OperateAppRequestWithError changeStateToWithError, */ - /* AppLCM_TypesAndValues.SubscriptionRequestWithError subscriptionRequestWithError, */ - /* AppLCM_TypesAndValues.SubscriptionInfo subscriptionInfo, */ - /* AppLCM_TypesAndValues.Notification lcmNotification, */ + CancelMode cancelMode, + AppInstNotification appInstNotification, UEAppInterfaceAPI_TypesAndValues.AppContext appContext, UEAppInterfaceAPI_TypesAndValues.AppInfo appInfo, ServiceInfoList serviceInfoList, diff --git a/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn b/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn index 480f824..62da712 100644 --- a/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn +++ b/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn @@ -303,88 +303,30 @@ module LibHttp_JsonTemplates { appInstSubscriptionLinkList := p_app_instance_subscription_link_list } // End of template mw_body_json_app_instance_subscription_link_list + template (value) JsonBody m_body_json_cancel_mode( + in template (value) CancelMode p_cancel_mode + ) := { + cancelMode := p_cancel_mode + } // End of template m_body_json_cancel_mode - // template (value) JsonBody m_body_json_app_inst_subscription_request_list( - // in template (value) AppInstSubscriptionRequestList p_app_inst_subscription_request_list - // ) := { - // appInstSubscriptionRequestList := p_app_inst_subscription_request_list - // } // End of template m_body_json_app_inst_subscription_request_list - - // template (present) JsonBody mw_body_json_app_inst_subscription_request_list( - // template (present) AppInstSubscriptionRequestList p_app_inst_subscription_request_list := ? - // ) := { - // appInstSubscriptionRequestList := p_app_inst_subscription_request_list - // } // End of template mw_body_json_app_inst_subscription_request_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 - } - - - template (present) JsonBody m_body_json_lifecycle_management_instantiate ( - in template (present) InstantiateAppRequest p_app_instance_instantiate - ) := { - appInstanceInstantiate := p_app_instance_instantiate - } - - template (present) JsonBody m_body_json_lifecycle_management_instantiate_with_error ( - in template (present) InstantiateAppRequestWithError p_app_instance_instantiate_with_error - ) := { - appInstanceInstantiateWithError := p_app_instance_instantiate_with_error - } - - - - template (present) JsonBody m_body_json_lifecycle_management_terminate ( - in template (present) TerminateAppRequest p_app_instance_terminate - ) := { - terminateType := p_app_instance_terminate - } - - template (present) JsonBody m_body_json_lifecycle_management_terminate_with_error ( - in template (present) TerminateAppRequestWithError p_app_instance_terminate_with_error - ) := { - terminateTypeWithError := p_app_instance_terminate_with_error - } - - - - - - template (present) JsonBody m_body_json_lcm_subscribe_with_error( - in template (present) SubscriptionRequestWithError p_app_lcm_request_with_error - ) := { - subscriptionRequestWithError := p_app_lcm_request_with_error - } - - - template (present) JsonBody mw_body_json_lcm_subscription_list( - in template (present) SubscriptionInfoList p_app_lcm_subscription_list - ) := { - subscriptionInfoList := p_app_lcm_subscription_list - } + template (present) JsonBody mw_body_json_cancel_mode( + template (present) CancelMode p_cancel_mode := ? + ) := { + cancelMode := p_cancel_mode + } // End of template mw_body_json_cancel_mode - template (present) JsonBody mw_body_json_lcm_subscription( - in template (present) SubscriptionInfo p_app_lcm_subscription - ) := { - subscriptionInfo := p_app_lcm_subscription - } + template (value) JsonBody m_body_json_app_inst_notification( + in template (value) AppInstNotification p_app_inst_notification + ) := { + appInstNotification := p_app_inst_notification + } // End of template m_body_json_app_inst_notification + template (present) JsonBody mw_body_json_app_inst_notification( + template (present) AppInstNotification p_app_inst_notification := ? + ) := { + appInstNotification := p_app_inst_notification + } // End of template mw_body_json_app_inst_notification - template (present) JsonBody mw_body_json_lcm_notification ( - in template (present) Notification p_lcm_notification - ) := { - lcmNotification := p_lcm_notification - } - */ } // End of group mex_lifcyclemgt group application_mobilty_service_api { -- GitLab From f73c2c519f3197e6743abcac27429796ec373fc1 Mon Sep 17 00:00:00 2001 From: garciay Date: Tue, 28 Nov 2023 08:15:09 +0100 Subject: [PATCH 56/99] review MEC 011 --- plantuml/__main__.py | 6 +- scripts/generate_png.sh | 2 +- ...ormApplicationEnablementAPI_TestCases.ttcn | 1378 ++++++++++++++--- ...mApplicationEnablementAPI_TestControl.ttcn | 84 + ...plicationMobilityServiceAPI_Templates.ttcn | 12 +- ...tionMobilityServiceAPI_TypesAndValues.ttcn | 21 - ...ycleAndOperationGrantingAPI_Templates.ttcn | 109 +- ...ndOperationGrantingAPI_TypesAndValues.ttcn | 109 +- ...ormApplicationEnablementAPI_Functions.ttcn | 72 +- ...atformApplicationEnablementAPI_Pixits.ttcn | 7 + ...ormApplicationEnablementAPI_Templates.ttcn | 99 +- ...plicationEnablementAPI_TypesAndValues.ttcn | 80 +- ...AccessInformationServiceAPI_Templates.ttcn | 19 +- ...sInformationServiceAPI_TypesAndValues.ttcn | 26 +- .../ttcn/LocationAPI_Templates.ttcn | 3 + .../ttcn/LocationAPI_TypesAndValues.ttcn | 22 +- .../RnisAPI/ttcn/RnisAPI_Templates.ttcn | 16 - .../ttcn/TrafficManagementAPI_Templates.ttcn | 3 + .../TrafficManagementAPI_TypesAndValues.ttcn | 14 +- .../V2XInformationServiceAPI_Templates.ttcn | 3 + ...XInformationServiceAPI_TypesAndValues.ttcn | 26 +- .../ttcn/WlanInformationAPI_Templates.ttcn | 19 +- .../WlanInformationAPI_TypesAndValues.ttcn | 24 +- ttcn/LibMec/ttcn/LibMec_Pixits.ttcn | 48 +- ttcn/LibMec/ttcn/LibMec_Templates.ttcn | 16 + ttcn/LibMec/ttcn/LibMec_TypesAndValues.ttcn | 20 + .../ttcn/LibHttp_JsonMessageBodyTypes.ttcn | 1 + .../ttcn/LibHttp_JsonTemplates.ttcn | 12 + 28 files changed, 1683 insertions(+), 568 deletions(-) diff --git a/plantuml/__main__.py b/plantuml/__main__.py index a3f73cf..5589e40 100644 --- a/plantuml/__main__.py +++ b/plantuml/__main__.py @@ -171,7 +171,11 @@ def main(): # End of 'with' statement # End of 'with' statement - os.system('java -DPLANTUML_LIMIT_SIZE=8192 -jar ./plantuml.jar -svg {}'.format(OUT_FILE_PATH)) + # Check if file is not empty + if os.path.getsize(OUT_FILE_PATH) == 0: + logger.error(f'Empty result, please check that FileMask is properly set: ERROR | WARNING | USER | MATCHING | EXECUTOR_RUNTIME | VERDICTOP | PORTEVENT | TIMEROP | TESTCASE') + else: + os.system('java -DPLANTUML_LIMIT_SIZE=8192 -jar ./plantuml.jar -svg {}'.format(OUT_FILE_PATH)) # End of main function if __name__ == "__main__": diff --git a/scripts/generate_png.sh b/scripts/generate_png.sh index 7c73718..37b46ba 100755 --- a/scripts/generate_png.sh +++ b/scripts/generate_png.sh @@ -1,6 +1,6 @@ #!/bin/bash #set -e -set -vx +#set -vx clear diff --git a/ttcn/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn b/ttcn/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn index e00b0ff..6646ce9 100644 --- a/ttcn/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn +++ b/ttcn/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn @@ -7,7 +7,7 @@ * No part may be reproduced except as authorized by written permission. * The copyright and the foregoing restriction extend to reproduction in all media. * All rights reserved. - * @see ETSI GS MEC 003, Draft ETSI GS MEC 011 V2.2.1 + * @see ETSI GS MEC 003, Draft ETSI GS MEC 011 V3.2.1 */ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { @@ -29,6 +29,9 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { import from EdgePlatformApplicationEnablementAPI_Pics all; import from EdgePlatformApplicationEnablementAPI_Pixits all; + // LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI + import from ApplicationPackageLifecycleAndOperationGrantingAPI_Templates all; + // LibMec import from LibMec_TypesAndValues all; import from LibMec_Templates all; @@ -45,11 +48,11 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { /** * @desc Check that the IUT responds with a list of available MEC services for a given application instance when queried 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_001_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; + var ServiceInfo v_service_info; // Test control if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_APP_ENABLEMENT_API_SUPPORTED)) { @@ -64,6 +67,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { // Test adapter configuration // Preamble + f_create_service_info(v_service_info, v_headers); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( @@ -82,8 +86,17 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { mw_http_response( mw_http_response_ok( mw_http_message_body_json( - mw_body_json_service_info_list - )))) { + mw_body_json_service_info_list( + { + *, + mw_service_info( + v_service_info.serName, + -, -, -, -, -, + PX_APP_INSTANCE_ID + ), + * + } + ))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a ServiceInfoList ***"); @@ -96,12 +109,12 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { } // End of 'alt' statement // Postamble + f_delete_service_info(v_service_info); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC011_SRV_APPSAQ_001_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/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/APPSAQ/PlatAppServices.tplan2 */ testcase TC_MEC_MEC011_SRV_APPSAQ_001_BR() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -154,8 +167,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { } // End of testcase TC_MEC_MEC011_SRV_APPSAQ_001_BR /** - * @desc Check that the IUT notifies the authorised relevant (subscribed) application instances when a new service for a given application instance is registered. - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/APPSAQ/PlatAppServices.tplan2 + * @desc Check that the IUT notifies the authorised relevant (subscribed) application instances when a new service for a given application instance is registered */ testcase TC_MEC_MEC011_SRV_APPSAQ_002_OK() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -199,13 +211,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { "2.0", m_end_point_uris({"/meMp1/service/MyEntryPoint"}), m_security_info - ) - ) - ) - ) - ) - ) - ); + ))))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -257,7 +263,6 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_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/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/APPSAQ/PlatAppServices.tplan2 */ testcase TC_MEC_MEC011_SRV_APPSAQ_002_BR() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -324,7 +329,6 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { /** * @desc Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/APPSAQ/PlatAppServices.tplan2 */ testcase TC_MEC_MEC011_SRV_APPSAQ_002_NF() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -387,7 +391,6 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { /** * @desc Check that the IUT responds with the information on a specific service for a given application instance when queried 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_003_OK() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -445,8 +448,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { } // End of testcase TC_MEC_MEC011_SRV_APPSAQ_003_OK /** - * @desc Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/APPSAQ/PlatAppServices.tplan2 + * @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_MEC011_SRV_APPSAQ_003_NF() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -500,7 +502,6 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { /** * @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 @@ -582,7 +583,6 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_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/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/APPSAQ/PlatAppServices.tplan2 */ testcase TC_MEC_MEC011_SRV_APPSAQ_004_BR() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -662,7 +662,6 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { /** * @desc Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/APPSAQ/PlatAppServices.tplan2 */ testcase TC_MEC_MEC011_SRV_APPSAQ_004_NF() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -727,7 +726,6 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { /** * @desc Check that the IUT responds with an error when a request sent by a MEC Application doesn't comply with a required condition - * @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_PF() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -811,7 +809,6 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { /** * @desc Check that the IUT responds with a list of subscriptions for notifications on services availability when queried by a MEC Application - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/APPSAQ/PlatAppSubscriptions.tplan2 */ testcase TC_MEC_MEC011_SRV_APPSUB_001_OK() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -868,7 +865,6 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { /** * @desc Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/APPSAQ/PlatAppSubscriptions.tplan2 */ testcase TC_MEC_MEC011_SRV_APPSUB_001_NF() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -922,7 +918,6 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { /** * @desc Check that the IUT acknowledges the subscription by a MEC Application to notifications on service availability events. - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/APPSAQ/PlatAppSubscriptions.tplan2 */ testcase TC_MEC_MEC011_SRV_APPSUB_002_OK() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -998,7 +993,6 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_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/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/APPSAQ/PlatAppSubscriptions.tplan2 */ testcase TC_MEC_MEC011_SRV_APPSUB_002_BR() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -1064,7 +1058,6 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { /** * @desc Check that the IUT responds with the information on a specific subscription when queried by a MEC Application - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/APPSAQ/PlatAppSubscriptions.tplan2 */ testcase TC_MEC_MEC011_SRV_APPSUB_003_OK() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -1121,7 +1114,6 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { /** * @desc Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/APPSAQ/PlatAppSubscriptions.tplan2 */ testcase TC_MEC_MEC011_SRV_APPSUB_003_NF() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -1175,7 +1167,6 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { /** * @desc Check that the IUT acknowledges the unsubscribe from service availability event notifications when commanded by a MEC Application - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/APPSAQ/PlatAppSubscriptions.tplan2 */ testcase TC_MEC_MEC011_SRV_APPSUB_004_OK() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -1229,7 +1220,6 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { /** * @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/APPSAQ/PlatAppSubscriptions.tplan2 */ testcase TC_MEC_MEC011_SRV_APPSUB_004_NF() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -1284,12 +1274,10 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { } // End of group app_sub - group conf_task { /** * @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 @@ -1348,7 +1336,6 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { /** * @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 @@ -1407,7 +1394,6 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { /** * @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 @@ -1466,7 +1452,6 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { /** * @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 @@ -1532,7 +1517,6 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { /** * @desc Check that the IUT responds with a list of active DNS rules when queried by a MEC Application - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/DNS/PlatDnsRules.tplan2 */ testcase TC_MEC_MEC011_SRV_DNS_001_OK() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -1586,9 +1570,61 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { f_cf_01_http_down(); } // End of testcase TC_MEC_MEC011_SRV_DNS_001_OK + /** + * @desc Check that the IUT responds with a list of active DNS rules when queried by a MEC Application + */ + testcase TC_MEC_MEC011_SRV_DNS_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_ME_APP_SUPPORT_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_APP_INSTANCE_ID, "UTF-8")) & "/dns_rules", + v_headers + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_404_not_found + )) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a DnsRuleList ***"); + 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_DNS_001_NF + /** * @desc Check that the IUT responds with the information on a specific DNS rule when queried by a MEC Application - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/DNS/PlatDnsRules.tplan2 */ testcase TC_MEC_MEC011_SRV_DNS_002_OK() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -1646,7 +1682,6 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { /** * @desc Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/DNS/PlatDnsRules.tplan2 */ testcase TC_MEC_MEC011_SRV_DNS_002_NF() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -1700,7 +1735,6 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { /** * @desc Check that the IUT updates a specific DNS rule when commanded by a MEC Application - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/DNS/PlatDnsRules.tplan2 */ testcase TC_MEC_MEC011_SRV_DNS_003_OK() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -1766,7 +1800,6 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_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/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/DNS/PlatDnsRules.tplan2 */ testcase TC_MEC_MEC011_SRV_DNS_003_BR() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -1831,7 +1864,6 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { /** * @desc Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/DNS/PlatDnsRules.tplan2 */ testcase TC_MEC_MEC011_SRV_DNS_003_NF() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -1895,7 +1927,6 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { /** * @desc Check that the IUT responds with an error when a request sent by a MEC Application doesn't comply with a required condition - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/DNS/PlatDnsRules.tplan2 */ testcase TC_MEC_MEC011_SRV_DNS_003_PF() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -1960,15 +1991,15 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { } // End of group app_dns - group liv { + group msl { /** * @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; + var ServiceInfo v_service_info; // Test control if (not(PICS_MEC_PLAT) or not (PICS_SERVICES) or not(PICS_APP_ENABLEMENT_API_SUPPORTED)) { @@ -1983,11 +2014,12 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { // Test adapter configuration // Preamble + f_create_service_info(v_service_info, v_headers); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( m_http_request_get( - PICS_ROOT_API & "/" & PX_LINK_LIV, + PICS_ROOT_API & PX_LINK_LIV, v_headers ) ) @@ -2017,12 +2049,12 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { } // End of 'alt' statement // Postamble + f_delete_service_info(v_service_info); 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 @@ -2045,7 +2077,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - PICS_ROOT_API & "/" & PX_LINK_LIV, + PICS_ROOT_API & PX_LINK_LIV, v_headers ) ) @@ -2076,11 +2108,11 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { /** * @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; + var ServiceInfo v_service_info; // Test control if (not(PICS_MEC_PLAT) or not (PICS_SERVICES) or not(PICS_APP_ENABLEMENT_API_SUPPORTED)) { @@ -2095,11 +2127,12 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { // Test adapter configuration // Preamble + f_create_service_info(v_service_info, v_headers); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( m_http_request_patch( - PICS_ROOT_API & "/" & PX_LINK_LIV, + PICS_ROOT_API & PX_LINK_LIV, v_headers, m_http_message_body_json( m_body_json_srv_liveness_info( @@ -2140,12 +2173,12 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { } // End of 'alt' statement // Postamble + f_delete_service_info(v_service_info); 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 @@ -2168,7 +2201,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { httpPort.send( m_http_request( m_http_request_patch( - PICS_ROOT_API & "/" & PX_LINK_LIV, + PICS_ROOT_API & PX_LINK_LIV, v_headers, m_http_message_body_json( m_body_json_srv_liveness_info( @@ -2208,23 +2241,20 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { 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 { + } // End of group msl + group reg_apps { + /** - * @desc Check that the IUT responds with a list of available MEC services when queried by a MEC Application - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/SAQ/PlatServices.tplan2 + * @desc Check that the IUT acknowledges the registration by a MEC Application to the MEC platform */ - testcase TC_MEC_MEC011_SRV_SAQ_001_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC011_SRV_REGAPPS_001_OK_01() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; + var HttpMessage v_response; // Test control - if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_APP_ENABLEMENT_API_SUPPORTED)) { + 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; @@ -2239,12 +2269,14 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( - m_http_request_get( - PICS_ROOT_API & PX_MEC_SVC_MGMT_SVC_URI, - v_headers - ) - ) - ); + m_http_request_post( + PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI, + v_headers, + m_http_message_body_json( + m_body_json_app_info_regapps( + m_app_info( + PX_APP_NAME + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -2252,14 +2284,23 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { alt { [] httpPort.receive( mw_http_response( - mw_http_response_ok( - mw_http_message_body_json( - mw_body_json_service_info_list - )))) { + mw_http_response_201_created( + mw_http_message_body_json( + mw_body_json_app_info_regapps( + mw_app_info( + PX_APP_NAME + )))))) -> value v_response { tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a ServiceInfoList ***"); - f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + + if (f_check_headers(v_response.response.header) == false) { + log("*** " & testcasename() & ": FAIL: Location header not present ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_error); + } else { + var charstring_list v_header_value; + f_get_header(v_response.response.header, "Location", v_header_value); + log("*** " & testcasename() & ": PASS: IUT successfully responds with a AppInfo ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } } [] tc_ac.timeout { log("*** " & testcasename() & ": INCONC: Expected message not received ***"); @@ -2268,16 +2309,17 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { } // End of 'alt' statement // Postamble + f_app_deletion(v_response.response.body.json_body.appInfo_regapps.appInstanceId); f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC011_SRV_SAQ_001_OK + } // End of testcase TC_MEC_MEC011_SRV_REGAPPS_001_OK_01 /** - * @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/master/Test%20Purposes/SRV/SAQ/PlatServices.tplan2 + * @desc Check that the IUT acknowledges the registration by a MEC Application to the MEC platform */ - testcase TC_MEC_MEC011_SRV_SAQ_001_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC011_SRV_REGAPPS_001_OK_02() 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_APP_ENABLEMENT_API_SUPPORTED)) { @@ -2293,15 +2335,18 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { // Preamble f_init_default_headers_list(-, -, v_headers); - 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")), - v_headers - ) - ) - ); + m_http_request_post( + PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI, + v_headers, + m_http_message_body_json( + m_body_json_app_info_regapps( + m_app_info( + PX_APP_NAME, + -, -, -, + PX_APP_INSTANCE_ID + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -2309,12 +2354,25 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { alt { [] httpPort.receive( mw_http_response( - mw_http_response_400_bad_request() - )) { + mw_http_response_201_created( + mw_http_message_body_json( + mw_body_json_app_info_regapps( + mw_app_info( + PX_APP_NAME, + -, -, -, + PX_APP_INSTANCE_ID + )))))) -> value v_response { tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a ProblemDetails set to 400 Bad Request ***"); - f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + + if (f_check_headers(v_response.response.header) == false) { + log("*** " & testcasename() & ": FAIL: Location header not present ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_error); + } else { + var charstring_list v_header_value; + f_get_header(v_response.response.header, "Location", v_header_value); + log("*** " & testcasename() & ": PASS: IUT successfully responds with a AppInfo ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } } [] tc_ac.timeout { log("*** " & testcasename() & ": INCONC: Expected message not received ***"); @@ -2323,19 +2381,20 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { } // End of 'alt' statement // Postamble + f_app_deletion(v_response.response.body.json_body.appInfo_regapps.appInstanceId); f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC011_SRV_SAQ_001_BR + } // End of testcase TC_MEC_MEC011_SRV_REGAPPS_001_OK_02 /** - * @desc Check that the IUT responds with the information on a specific service when queried by a MEC Application - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/SAQ/PlatServices.tplan2 + * @desc Check that the IUT acknowledges the registration by a MEC Application instanciated by the MEC platform */ - testcase TC_MEC_MEC011_SRV_SAQ_002_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC011_SRV_REGAPPS_001_OK_03() 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_APP_ENABLEMENT_API_SUPPORTED)) { + 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; @@ -2350,12 +2409,17 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { f_init_default_headers_list(-, -, v_headers); 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")), - v_headers - ) - ) - ); + m_http_request_post( + PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI, + v_headers, + m_http_message_body_json( + m_body_json_app_info_regapps( + m_app_info( + PX_APP_NAME, + -, -, + PX_APP_D_ID, + PX_APP_INSTANCE_ID + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -2363,16 +2427,26 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { alt { [] httpPort.receive( mw_http_response( - mw_http_response_ok( - mw_http_message_body_json( - mw_body_json_service_info( - mw_service_info( - PX_SERVICE_ID - )))))) { + mw_http_response_201_created( + mw_http_message_body_json( + mw_body_json_app_info_regapps( + mw_app_info( + PX_APP_NAME, + -, -, + PX_APP_D_ID, + PX_APP_INSTANCE_ID + )))))) -> value v_response { tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a ServiceInfo ***"); - f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + + if (f_check_headers(v_response.response.header) == false) { + log("*** " & testcasename() & ": FAIL: Location header not present ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_error); + } else { + var charstring_list v_header_value; + f_get_header(v_response.response.header, "Location", v_header_value); + log("*** " & testcasename() & ": PASS: IUT successfully responds with a AppInfo ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } } [] tc_ac.timeout { log("*** " & testcasename() & ": INCONC: Expected message not received ***"); @@ -2381,19 +2455,19 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { } // End of 'alt' statement // Postamble + f_app_deletion(v_response.response.body.json_body.appInfo_regapps.appInstanceId); f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC011_SRV_SAQ_002_OK + } // End of testcase TC_MEC_MEC011_SRV_REGAPPS_001_OK_03 /** - * @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/SAQ/PlatServices.tplan2 + * @desc Check that the IUT responds with an error message when the IUT received a registration with missing fields from a MEC Application instanciated by the MEC platform */ - testcase TC_MEC_MEC011_SRV_SAQ_002_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC011_SRV_REGAPPS_001_BR_01() 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)) { + 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; @@ -2408,12 +2482,14 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { f_init_default_headers_list(-, -, v_headers); 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")), - v_headers - ) - ) - ); + m_http_request_post( + PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI, + v_headers, + m_http_message_body_json( + m_body_json_app_info_regapps( + m_app_info( + PX_APP_NAME + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -2421,11 +2497,11 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { alt { [] httpPort.receive( mw_http_response( - mw_http_response_404_not_found - )) { + mw_http_response_400_bad_request + )) { tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a ProblemDetails set to 404 Not Found ***"); + + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct error code ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -2436,26 +2512,17 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC011_SRV_SAQ_002_NF - - } // End of group saq - - /* - * Service Subscriptions (SRVSUB) - */ - group srv_sub { + } // End of testcase TC_MEC_MEC011_SRV_REGAPPS_001_BR_01 /** - * @desc Check that the IUT responds with a list of subscriptions for notifications on services availability when queried by a MEC Application - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/SRVSUB/PlatSrvSubscriptions.tplan2 + * @desc Check that the IUT responds with an error message when the IUT received a registration with missing fields from a MEC Application instanciated by the MEC platform */ - testcase TC_MEC_MEC011_SRV_SRVSUB_001_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC011_SRV_REGAPPS_001_BR_02() 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)) { + 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; @@ -2468,15 +2535,22 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_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", - v_headers - ) - ) - ); + m_http_request_post( + PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI, + v_headers, + m_http_message_body_json( + m_body_json_app_info_regapps( + m_app_info( + PX_APP_NAME, + -, -, + PX_APP_D_ID, + PX_APP_INSTANCE_ID, + -, -, -, -, -, + false + + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -2484,14 +2558,11 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { alt { [] httpPort.receive( mw_http_response( - mw_http_response_ok( - mw_http_message_body_json( - mw_body_json_subscription_link_list( - mw_subscription_link_list - ))))) { + mw_http_response_400_bad_request + )) { tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a Mp1SubscriptionLinkList ***"); + + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct error code ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -2501,20 +2572,18 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_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 + } // End of testcase TC_MEC_MEC011_SRV_REGAPPS_001_BR_03 /** - * @desc Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/SRVSUB/PlatSrvSubscriptions.tplan2 + * @desc Check that the IUT responds with an error message when the IUT received by a MEC Application registration with unexpected appServiceRequired */ - testcase TC_MEC_MEC011_SRV_SRVSUB_001_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC011_SRV_REGAPPS_001_BR_03() 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)) { + 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; @@ -2529,12 +2598,26 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { f_init_default_headers_list(-, -, v_headers); 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", - v_headers - ) - ) - ); + m_http_request_post( + PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI, + v_headers, + m_http_message_body_json( + m_body_json_app_info_regapps( + m_app_info( + PX_APP_NAME, + -, -, + PX_APP_D_ID, + PX_APP_INSTANCE_ID, + -, + { + m_service_dependency( + PX_NON_EXISTENT_SERVICE_ID, + PX_SERVICE_INFO_VERSION + ) + } + + + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -2542,11 +2625,11 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { alt { [] httpPort.receive( mw_http_response( - mw_http_response_404_not_found - )) { + mw_http_response_400_bad_request + )) { tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a ProblemDetails set to 404 Not Found ***"); + + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct error code ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -2557,16 +2640,14 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC011_SRV_SRVSUB_001_NF + } // End of testcase TC_MEC_MEC011_SRV_REGAPPS_001_BR_03 /** - * @desc Check that the IUT acknowledges the subscription by a MEC Application to notifications on service availability events - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/SRVSUB/PlatSrvSubscriptions.tplan2 + * @desc Check that the IUT responds with an error message when the IUT received by a MEC Application registration with unexpected appServiceOptional */ - testcase TC_MEC_MEC011_SRV_SRVSUB_002_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC011_SRV_REGAPPS_001_BR_04() 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_APP_ENABLEMENT_API_SUPPORTED)) { @@ -2585,18 +2666,26 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_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, 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 - ) - ) - ) - ) - ) - ); + m_body_json_app_info_regapps( + m_app_info( + PX_APP_NAME, + -, -, + PX_APP_D_ID, + PX_APP_INSTANCE_ID, + -, + -, + { + m_service_dependency( + PX_NON_EXISTENT_SERVICE_ID, + PX_SERVICE_INFO_VERSION + ) + } + + + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -2604,7 +2693,889 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { alt { [] httpPort.receive( mw_http_response( - mw_http_response_201_created( + 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_REGAPPS_001_BR_04 + + /** + * @desc Check that the IUT responds with an error message when the IUT received by a MEC Application registration with unexpected appFeatureRequired + */ + testcase TC_MEC_MEC011_SRV_REGAPPS_001_BR_05() 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, + v_headers, + m_http_message_body_json( + m_body_json_app_info_regapps( + m_app_info( + PX_APP_NAME, + -, -, + PX_APP_D_ID, + PX_APP_INSTANCE_ID, + -, + -, + -, + { + m_feature_dependency( + "", + "" + ) + } + )))))); + 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_REGAPPS_001_BR_05 + + /** + * @desc Check that the IUT responds with an error message when the IUT received by a MEC Application registration with unexpected appFeatureOptional + + */ + testcase TC_MEC_MEC011_SRV_REGAPPS_001_BR_06() 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, + v_headers, + m_http_message_body_json( + m_body_json_app_info_regapps( + m_app_info( + PX_APP_NAME, + -, -, + PX_APP_D_ID, + PX_APP_INSTANCE_ID, + -, + -, + -, + -, + { + m_feature_dependency( + "", + "" + ) + } + )))))); + 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_REGAPPS_001_BR_06 + + /** + * @desc Check that the IUT responds with the AppInfo description when queried by a MEC Application + */ + testcase TC_MEC_MEC011_SRV_REGAPPS_002_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var AppInfo v_app_info; + + // 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_app_registration(v_app_info, v_headers); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI & "/" & oct2char(unichar2oct(v_app_info.appInstanceId, "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_info_regapps( + mw_app_info( + v_app_info.appName, + -, -, + v_app_info.appDId, + v_app_info.appInstanceId + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct AppInfo ***"); + 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_app_deletion(v_app_info.appInstanceId); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC011_SRV_REGAPPS_002_OK + + /** + * @desc Check that the IUT responds with an error when when it receives a request for returning an AppInfo with a wrong ID + */ + testcase TC_MEC_MEC011_SRV_REGAPPS_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_get( + PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_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 + )) { + 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_REGAPPS_002_NF + + /** + * @desc Check that the IUT responds with 204 No Content when queried to update MEC Application registration + */ + testcase TC_MEC_MEC011_SRV_REGAPPS_003_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var AppInfo v_app_info; + + // 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_app_registration(v_app_info, v_headers); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_put( + PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI & "/" & oct2char(unichar2oct(v_app_info.appInstanceId, "UTF-8")), + v_headers, + m_http_message_body_json( + m_body_json_app_info_regapps( + m_app_info( + v_app_info.appName, + v_app_info.appProvider, + -, + v_app_info.appDId, + v_app_info.appInstanceId + )))))); + 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 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 + + // Postamble + f_app_deletion(v_app_info.appInstanceId); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC011_SRV_REGAPPS_003_OK + + /** + * @desc Check that the IUT responds with an error when queried to update MEC Application registration with a wrong ID + */ + testcase TC_MEC_MEC011_SRV_REGAPPS_003_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var AppInfo v_app_info; + + // 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_app_registration(v_app_info, v_headers); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_put( + PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_APP_INSTANCE_ID, "UTF-8")), + v_headers, + m_http_message_body_json( + m_body_json_app_info_regapps( + m_app_info( + v_app_info.appName, + v_app_info.appProvider, + -, + v_app_info.appDId, + v_app_info.appInstanceId + )))))); + 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_app_deletion(v_app_info.appInstanceId); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC011_SRV_REGAPPS_003_NF + + /** + * @desc Check that the IUT responds with 204 No Content when queried to delete an existing MEC Application registration + */ + testcase TC_MEC_MEC011_SRV_REGAPPS_004_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var AppInfo v_app_info; + + // 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_app_registration(v_app_info, 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(v_app_info.appInstanceId, "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 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 + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC011_SRV_REGAPPS_004_OK + + /** + * @desc Check that the IUT responds with an error when queried to delete an unknown MEC Application registration + */ + testcase TC_MEC_MEC011_SRV_REGAPPS_004_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_delete( + PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_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 + )) { + 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_REGAPPS_004_NF + + } // End of group reg_apps + + /* + * Service Availability Query (SAQ) + */ + group saq { + + /** + * @desc Check that the IUT responds with a list of available MEC services when queried by a MEC Application + */ + testcase TC_MEC_MEC011_SRV_SAQ_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_MEC_SVC_MGMT_SVC_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_service_info_list + )))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a ServiceInfoList ***"); + 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_SAQ_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_MEC011_SRV_SAQ_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_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_MEC_SVC_MGMT_SVC_URI & "?instance_id=" & 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_400_bad_request() + )) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a ProblemDetails set to 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_MEC011_SRV_SAQ_001_BR + + /** + * @desc Check that the IUT responds with the information on a specific service when queried by a MEC Application + */ + testcase TC_MEC_MEC011_SRV_SAQ_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_get( + PICS_ROOT_API & PX_MEC_SVC_MGMT_SVC_URI & "/" & oct2char(unichar2oct(PX_SERVICE_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_service_info( + mw_service_info( + PX_SERVICE_ID + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a ServiceInfo ***"); + 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_SAQ_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_MEC011_SRV_SAQ_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_get( + PICS_ROOT_API & PX_MEC_SVC_MGMT_SVC_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_SERVICE_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 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_MEC011_SRV_SAQ_002_NF + + } // End of group saq + + /* + * Service Subscriptions (SRVSUB) + */ + group srv_sub { + + /** + * @desc Check that the IUT responds with a list of subscriptions for notifications on services availability when queried by a MEC Application + */ + 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)) { + 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); + 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", + 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_subscription_link_list( + mw_subscription_link_list + ))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a Mp1SubscriptionLinkList ***"); + 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_ser_availability_notification_subscription(v_ser_availability_notification_subscription); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC011_SRV_SRVSUB_001_OK + + /** + * @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_MEC011_SRV_SRVSUB_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_MEC_SVC_MGMT_APPS_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_APP_INSTANCE_ID, "UTF-8")) & "/subscriptions", + 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_MEC011_SRV_SRVSUB_001_NF + + /** + * @desc Check that the IUT acknowledges the subscription by a MEC Application to notifications on service availability events + */ + testcase TC_MEC_MEC011_SRV_SRVSUB_002_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_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 & "/" & 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 + ) + ) + ) + ) + ) + ); + 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_srv_avail_notif_subscription( mw_srv_avail_notif_subscription( @@ -2633,7 +3604,6 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_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/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/SRVSUB/PlatSrvSubscriptions.tplan2 */ testcase TC_MEC_MEC011_SRV_SRVSUB_002_BR() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -2695,7 +3665,6 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { /** * @desc Check that the IUT responds with the information on a specific subscription when queried by a MEC Application - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/SRVSUB/PlatSrvSubscriptions.tplan2 */ testcase TC_MEC_MEC011_SRV_SRVSUB_003_OK() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -2716,13 +3685,13 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { // Test adapter configuration // 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 ); + f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( m_http_request_get( @@ -2761,7 +3730,6 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { /** * @desc Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/SRVSUB/PlatSrvSubscriptions.tplan2 */ testcase TC_MEC_MEC011_SRV_SRVSUB_003_NF() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -2815,7 +3783,6 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { /** * @desc Check that the IUT acknowledges the unsubscribe from service availability event notifications when commanded by a MEC Application - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/SRVSUB/PlatSrvSubscriptions.tplan2 */ testcase TC_MEC_MEC011_SRV_SRVSUB_004_OK() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -2836,13 +3803,13 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { // Test adapter configuration // 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 ); + f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( m_http_request_delete( @@ -2875,7 +3842,6 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { /** * @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/PlatSrvSubscriptions.tplan2 */ testcase TC_MEC_MEC011_SRV_SRVSUB_004_NF() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -2930,14 +3896,13 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { } // End of group srv_sub - /* - * Timing capabilities (TIME) - */ + /* + * Timing capabilities (TIME) + */ group timing { /** * @desc Check that the IUT responds with timing capabilities when queried by a MEC Application - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/TIME/PlatTiming.tplan2 */ testcase TC_MEC_MEC011_SRV_TIME_001_OK() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -2997,7 +3962,6 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { /** * @desc Check that the IUT responds with current time when queried by a MEC Application - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/TIME/PlatTiming.tplan2 */ testcase TC_MEC_MEC011_SRV_TIME_002_OK() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -3057,14 +4021,13 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { } // End of group timing - /* - * Traffic rules (TRAF) - */ + /* + * Traffic rules (TRAF) + */ group traffic_rules { /** * @desc Check that the IUT responds with a list of available traffic rules when queried by a MEC Application - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/TRAF/PlatTrafficRules.tplan2 */ testcase TC_MEC_MEC011_SRV_TRAF_001_OK() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -3121,7 +4084,6 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { /** * @desc Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/TRAF/PlatTrafficRules.tplan2 */ testcase TC_MEC_MEC011_SRV_TRAF_001_NF() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -3175,7 +4137,6 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { /** * @desc Check that the IUT responds with the information on a specific traffic rule when queried by a MEC Application - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/TRAF/TrafficRules.tplan2 */ testcase TC_MEC_MEC011_SRV_TRAF_002_OK() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -3233,7 +4194,6 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { /** * @desc Check that the IUT updates a specific traffic rule when commanded by a MEC Application - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/TRAF/TrafficRules.tplan2 */ testcase TC_MEC_MEC011_SRV_TRAF_003_OK() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -3302,7 +4262,6 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_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/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/TRAF/PlatTrafficRules.tplan2 */ testcase TC_MEC_MEC011_SRV_TRAF_003_BR() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -3366,7 +4325,6 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { /** * @desc Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/TRAF/PlatTrafficRules.tplan2 */ testcase TC_MEC_MEC011_SRV_TRAF_003_NF() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -3430,7 +4388,6 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { /** * @desc Check that the IUT responds with an error when a request sent by a MEC Application doesn't comply with a required condition - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/TRAF/PlatTrafficRules.tplan2 */ testcase TC_MEC_MEC011_SRV_TRAF_003_PF() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -3495,14 +4452,13 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { } // End of group traffic_rules - /* - * Transport (TRANS) - */ + /* + * Transport (TRANS) + */ group transport_rules { /** * @desc Check that the IUT responds with a list of available transports when queried by a MEC Application - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/TRANS/PlatTransport.tplan2 */ testcase TC_MEC_MEC011_SRV_TRANS_001_OK() runs on HttpComponent system HttpTestAdapter { // Local variables diff --git a/ttcn/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestControl.ttcn b/ttcn/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestControl.ttcn index 0f71a6c..a806736 100644 --- a/ttcn/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestControl.ttcn +++ b/ttcn/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestControl.ttcn @@ -12,6 +12,90 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestControl { control { if (PICS_MEC_PLAT and PICS_SERVICES) { + if (PICS_APP_ENABLEMENT_API_SUPPORTED) { + execute(TC_MEC_MEC011_SRV_APPSAQ_001_OK()); + execute(TC_MEC_MEC011_SRV_APPSAQ_001_BR()); + execute(TC_MEC_MEC011_SRV_APPSAQ_002_OK()); + execute(TC_MEC_MEC011_SRV_APPSAQ_002_BR()); + execute(TC_MEC_MEC011_SRV_APPSAQ_002_NF()); + execute(TC_MEC_MEC011_SRV_APPSAQ_003_OK()); + execute(TC_MEC_MEC011_SRV_APPSAQ_003_NF()); + execute(TC_MEC_MEC011_SRV_APPSAQ_004_OK()); + execute(TC_MEC_MEC011_SRV_APPSAQ_004_BR()); + execute(TC_MEC_MEC011_SRV_APPSAQ_004_NF()); + execute(TC_MEC_MEC011_SRV_APPSAQ_004_PF()); + + execute(TC_MEC_MEC011_SRV_APPSUB_001_OK()); + execute(TC_MEC_MEC011_SRV_APPSUB_001_NF()); + execute(TC_MEC_MEC011_SRV_APPSUB_002_OK()); + execute(TC_MEC_MEC011_SRV_APPSUB_002_BR()); + execute(TC_MEC_MEC011_SRV_APPSUB_003_OK()); + execute(TC_MEC_MEC011_SRV_APPSUB_003_NF()); + execute(TC_MEC_MEC011_SRV_APPSUB_004_OK()); + execute(TC_MEC_MEC011_SRV_APPSUB_004_NF()); + + execute(TC_MEC_MEC011_SRV_CONFTASK_001_OK()); + execute(TC_MEC_MEC011_SRV_CONFTASK_001_NF()); + execute(TC_MEC_MEC011_SRV_CONFTASK_002_OK()); + execute(TC_MEC_MEC011_SRV_CONFTASK_002_NF()); + + execute(TC_MEC_MEC011_SRV_DNS_001_OK()); + execute(TC_MEC_MEC011_SRV_DNS_001_NF()); + execute(TC_MEC_MEC011_SRV_DNS_002_OK()); + execute(TC_MEC_MEC011_SRV_DNS_002_NF()); + execute(TC_MEC_MEC011_SRV_DNS_003_OK()); + execute(TC_MEC_MEC011_SRV_DNS_003_BR()); + execute(TC_MEC_MEC011_SRV_DNS_003_NF()); + execute(TC_MEC_MEC011_SRV_DNS_003_PF()); + + execute(TC_MEC_MEC011_SRV_MSL_001_OK()); + execute(TC_MEC_MEC011_SRV_MSL_001_NF()); + execute(TC_MEC_MEC011_SRV_MSL_002_OK()); + execute(TC_MEC_MEC011_SRV_MSL_002_BR()); + + execute(TC_MEC_MEC011_SRV_REGAPPS_001_OK_01()); + execute(TC_MEC_MEC011_SRV_REGAPPS_001_OK_02()); + execute(TC_MEC_MEC011_SRV_REGAPPS_001_OK_03()); + execute(TC_MEC_MEC011_SRV_REGAPPS_001_BR_01()); + execute(TC_MEC_MEC011_SRV_REGAPPS_001_BR_02()); + execute(TC_MEC_MEC011_SRV_REGAPPS_001_BR_03()); + execute(TC_MEC_MEC011_SRV_REGAPPS_001_BR_04()); + execute(TC_MEC_MEC011_SRV_REGAPPS_001_BR_05()); + execute(TC_MEC_MEC011_SRV_REGAPPS_001_BR_06()); + execute(TC_MEC_MEC011_SRV_REGAPPS_002_OK()); + execute(TC_MEC_MEC011_SRV_REGAPPS_002_NF()); + execute(TC_MEC_MEC011_SRV_REGAPPS_003_OK()); + execute(TC_MEC_MEC011_SRV_REGAPPS_003_NF()); + execute(TC_MEC_MEC011_SRV_REGAPPS_004_OK()); + execute(TC_MEC_MEC011_SRV_REGAPPS_004_NF()); + + execute(TC_MEC_MEC011_SRV_SAQ_001_OK()); + execute(TC_MEC_MEC011_SRV_SAQ_001_BR()); + execute(TC_MEC_MEC011_SRV_SAQ_002_OK()); + execute(TC_MEC_MEC011_SRV_SAQ_002_NF()); + + execute(TC_MEC_MEC011_SRV_SRVSUB_001_OK()); + execute(TC_MEC_MEC011_SRV_SRVSUB_001_NF()); + execute(TC_MEC_MEC011_SRV_SRVSUB_002_OK()); + execute(TC_MEC_MEC011_SRV_SRVSUB_002_BR()); + execute(TC_MEC_MEC011_SRV_SRVSUB_003_OK()); + execute(TC_MEC_MEC011_SRV_SRVSUB_003_NF()); + execute(TC_MEC_MEC011_SRV_SRVSUB_004_OK()); + execute(TC_MEC_MEC011_SRV_SRVSUB_004_NF()); + + execute(TC_MEC_MEC011_SRV_TIME_001_OK()); + execute(TC_MEC_MEC011_SRV_TIME_002_OK()); + + execute(TC_MEC_MEC011_SRV_TRAF_001_OK()); + execute(TC_MEC_MEC011_SRV_TRAF_001_NF()); + execute(TC_MEC_MEC011_SRV_TRAF_002_OK()); + execute(TC_MEC_MEC011_SRV_TRAF_003_OK()); + execute(TC_MEC_MEC011_SRV_TRAF_003_BR()); + execute(TC_MEC_MEC011_SRV_TRAF_003_NF()); + execute(TC_MEC_MEC011_SRV_TRAF_003_PF()); + + execute(TC_MEC_MEC011_SRV_TRANS_001_OK()); + } } } // End of 'control' statement diff --git a/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_Templates.ttcn b/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_Templates.ttcn index 7ea2bb1..60d997e 100644 --- a/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_Templates.ttcn +++ b/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_Templates.ttcn @@ -95,7 +95,7 @@ module ApplicationMobilityServiceAPI_Templates { in template (omit) Json.AnyURI p_callbackReference := omit, in template (omit) ApplicationMobilityServiceAPI_TypesAndValues.Links p_links := omit, in template (omit) AdjacentFilterCriteria p_filterCriteria := omit, - in template (omit) ApplicationMobilityServiceAPI_TypesAndValues.TimeStamp p_expiryDeadline := omit, + in template (omit) TimeStamp p_expiryDeadline := omit, in template (omit) Json.Bool p_requestTestNotification := omit, in template (omit) ApplicationMobilityServiceAPI_TypesAndValues.WebsockNotifConfig p_websockNotifConfig := omit ) := { @@ -113,7 +113,7 @@ module ApplicationMobilityServiceAPI_Templates { template Json.AnyURI p_callbackReference := *, template ApplicationMobilityServiceAPI_TypesAndValues.Links p_links := *, template AdjacentFilterCriteria p_filterCriteria := *, - template ApplicationMobilityServiceAPI_TypesAndValues.TimeStamp p_expiryDeadline := *, + template TimeStamp p_expiryDeadline := *, template Json.Bool p_requestTestNotification := *, template ApplicationMobilityServiceAPI_TypesAndValues.WebsockNotifConfig p_websockNotifConfig := * ) := { @@ -131,7 +131,7 @@ module ApplicationMobilityServiceAPI_Templates { in template (value) Links_Notification p_links, in template (value) AssociateId p_associateId, in template (value) MobilityStatus p_mobilityStatus, - in template (omit) ApplicationMobilityServiceAPI_TypesAndValues.TimeStamp p_timeStamp := omit, + in template (omit) TimeStamp p_timeStamp := omit, in template (omit) TargetAppInfo p_targetAppInfo := omit ) := { notificationType := p_notificationType, @@ -147,7 +147,7 @@ module ApplicationMobilityServiceAPI_Templates { template (present) Links_Notification p_links := ?, template (present) AssociateId p_associateId := ?, template (present) MobilityStatus p_mobilityStatus := ?, - template ApplicationMobilityServiceAPI_TypesAndValues.TimeStamp p_timeStamp := *, + template TimeStamp p_timeStamp := *, template TargetAppInfo p_targetAppInfo := * ) := { notificationType := p_notificationType, @@ -160,7 +160,7 @@ module ApplicationMobilityServiceAPI_Templates { template (omit) ApplicationMobilityServiceAPI_TypesAndValues.ExpiryNotification m_expire_notification( in Json.String p_notificationType, - in template (omit) ApplicationMobilityServiceAPI_TypesAndValues.TimeStamp p_timestamp := omit, + in template (omit) TimeStamp p_timestamp := omit, in template (omit) ApplicationMobilityServiceAPI_TypesAndValues.Links p_links := omit ) := { notificationType := p_notificationType, @@ -170,7 +170,7 @@ module ApplicationMobilityServiceAPI_Templates { template (present) ApplicationMobilityServiceAPI_TypesAndValues.ExpiryNotification mw_expire_notification( template (present) Json.String p_notificationType := ?, - template ApplicationMobilityServiceAPI_TypesAndValues.TimeStamp p_timestamp := *, + template TimeStamp p_timestamp := *, template ApplicationMobilityServiceAPI_TypesAndValues.Links p_links := * ) := { notificationType := p_notificationType, diff --git a/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_TypesAndValues.ttcn b/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_TypesAndValues.ttcn index 16bdcfd..4a79f59 100644 --- a/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_TypesAndValues.ttcn @@ -331,27 +331,6 @@ module ApplicationMobilityServiceAPI_TypesAndValues { } type record length(1..infinity) of IpAddress IpAddresses; - /** - * @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 - * @see ETSI GS MEC 021 V3.1.1 (2023-10) Clause 7.5.3 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 Json.UInteger Seconds; - - /** - * @desc The nanoseconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC - */ - type Json.UInteger NanoSeconds; - /** * @desc This type represents a type of link * @member href URI referring to a resource diff --git a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Templates.ttcn b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Templates.ttcn index 193337d..b914cc0 100644 --- a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Templates.ttcn +++ b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_Templates.ttcn @@ -3,10 +3,13 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Templates { // JSON import from Json all; - // LibMec_EdgePlatformApplicationEnablementAPI - //import from EdgePlatformApplicationEnablementAPI_TypesAndValues all; /* TITAN WORK-AROUND for build issue (class forward declaration) */ + // LibMec + import from LibMec_TypesAndValues all; - // LibMec_ApplicationMobilityServiceAPI + // LibMec/LibMec_EdgePlatformApplicationEnablementAPI + import from EdgePlatformApplicationEnablementAPI_TypesAndValues all; + + // LibMec/LibMec_ApplicationMobilityServiceAPI import from ApplicationMobilityServiceAPI_TypesAndValues all; // LibMec_ApplicationPackageLifecycleAndOperationGrantingAPI @@ -343,7 +346,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Templates { 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) TimeStamp p_timeStamp := ?, template (present) Json.String p_appPkgId := ?, template (present) Json.String p_appDId := ?, template (present) AppPkgInfo_OperationalState p_operationalState := ?, @@ -498,12 +501,84 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Templates { serTransportDependencies := p_serTransportDependencies, requestedPermissions := p_requestedPermissions } // End of template mw_service_dependency - + + template (value) FeatureDependency m_feature_dependency( + in Json.String p_featureName, + in Json.String p_version + ) := { + featureName := p_featureName, + version := p_version + } // End of template m_feature_dependency + + template (present) FeatureDependency mw_feature_dependency( + template (present) Json.String p_featureName := ?, + template (present) Json.String p_version := ? + ) := { + featureName := p_featureName, + version := p_version + } // End of template mw_feature_dependency + + template (value) TransportDependency m_transport_dependency( + in template (value) TransportDescriptor p_transport, + in template (value) ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.SerializerType p_serializers, + in template (value) Labels p_labels + ) := { + transport := p_transport, + serializers := p_serializers, + labels := p_labels + } // End of template m_transport_dependency + + template (present) TransportDependency mw_transport_dependency( + template (present) TransportDescriptor p_transport := ?, + template (present) ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.SerializerType p_serializers := ?, + template (present) Labels p_labels := ? + ) := { + transport := p_transport, + serializers := p_serializers, + labels := p_labels + } // End of template mw_transport_dependency + + template (omit) TransportDescriptor m_transport_descriptor( + in Json.String p_name, + in ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.TransportType p_type_ := REST_HTTP, + in Json.String p_protocol, + in Json.String p_version, + in template (value) ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.SecurityInfo p_security, + in template (omit) Json.String p_description := omit, + in template (omit) Json.String p_implSpecificInfo := omit + ) := { + name := p_name, + description := p_description, + type_ := p_type_, + protocol := p_protocol, + version := p_version, + security := p_security, + implSpecificInfo := p_implSpecificInfo + } // End of template m_transport_descriptor + + template (present) TransportDescriptor mw_transport_descriptor( + template (present) Json.String p_name := ?, + template (present) ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.TransportType p_type_ := ?, + template (present) Json.String p_protocol := ?, + template (present) Json.String p_version := ?, + template (present) ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.SecurityInfo p_security := ?, + template Json.String p_description := *, + template Json.String p_implSpecificInfo := * + ) := { + name := p_name, + description := p_description, + type_ := p_type_, + protocol := p_protocol, + version := p_version, + security := p_security, + implSpecificInfo := p_implSpecificInfo + } // End of template mw_transport_descriptor + template (omit) TrafficRuleDescriptor m_traffic_rule_descriptor( in template (value) Json.String p_trafficRuleId, in template (value) FilterType p_filterType, in template (value) Json.Integer p_priority, - in template (value) TrafficFilter p_trafficFilter, + in template (value) ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.TrafficFilter p_trafficFilter, in template (value) Action p_action, in template (omit) InterfaceDescriptor p_dstInterface := omit ) := { @@ -519,7 +594,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Templates { template (present) Json.String p_trafficRuleId := ?, template (present) FilterType p_filterType := ?, template (present) Json.Integer p_priority := ?, - template (present) TrafficFilter p_trafficFilter := ?, + template (present) ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.TrafficFilter p_trafficFilter := ?, template (present) Action p_action := ?, template InterfaceDescriptor p_dstInterface := * ) := { @@ -531,7 +606,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Templates { dstInterface := p_dstInterface } // End of template mw_traffic_rule_descriptor - template (omit) TrafficFilter m_traffic_filter( + template (omit) ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.TrafficFilter m_traffic_filter( in template (omit) Json.String p_srcAddress := omit, in template (omit) Json.String p_dstAddress := omit, in template (omit) Json.String p_srcPort := omit, @@ -565,7 +640,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Templates { tC := p_tC } // End of template m_traffic_filter - template TrafficFilter mw_traffic_filter( + template ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.TrafficFilter mw_traffic_filter( template Json.String p_srcAddress := *, template Json.String p_dstAddress := *, template Json.String p_srcPort := *, @@ -818,8 +893,8 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Templates { template (omit) AppLcmOpOcc m_app_lcm_op_occ( in Json.String p_id, in OperationState p_operationState, - in template (value) ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.TimeStamp p_stateEnteredTime, - in template (value) ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.TimeStamp p_startTime, + in template (value) TimeStamp p_stateEnteredTime, + in template (value) TimeStamp p_startTime, in OperationType p_lcmOperation, in template (value) AppLcmOpOcc_Link p_links, in template (omit) OperationParams p_operationParams := omit, @@ -840,8 +915,8 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Templates { template (present) AppLcmOpOcc mw_app_lcm_op_occ( template (present) Json.String p_id := ?, template (present) OperationState p_operationState := ?, - template (present) ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.TimeStamp p_stateEnteredTime := ?, - template (present) ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.TimeStamp p_startTime := ?, + template (present) TimeStamp p_stateEnteredTime := ?, + template (present) TimeStamp p_startTime := ?, template (present) OperationType p_lcmOperation := ?, template (present) AppLcmOpOcc_Link p_links := ?, template OperationParams p_operationParams := *, @@ -961,9 +1036,9 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Templates { template (omit) AppInstNotification m_app_inst_notification( in Json.String p_id, - in NotificationType p_notificationType, + in ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.NotificationType p_notificationType, in Json.String p_subscriptionId, - in template (value) ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.TimeStamp p_timeStamp, + in template (value) TimeStamp p_timeStamp, in Json.String p_appInstanceId, in Json.String p_appPkgId, in Json.String p_appDId, @@ -985,9 +1060,9 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_Templates { template (present) AppInstNotification mw_app_inst_notification( template (present) Json.String p_id := ?, - template (present) NotificationType p_notificationType := ?, + template (present) ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.NotificationType p_notificationType := ?, template (present) Json.String p_subscriptionId := ?, - template (present) ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.TimeStamp p_timeStamp := ?, + template (present) TimeStamp p_timeStamp := ?, template (present) Json.String p_appInstanceId := ?, template (present) Json.String p_appPkgId := ?, template (present) Json.String p_appDId := ?, diff --git a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.ttcn b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.ttcn index eb6c3c3..ba064e3 100644 --- a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.ttcn @@ -16,12 +16,12 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { // LibMec import from LibMec_TypesAndValues all; + // LibMec_EdgePlatformApplicationEnablementAPI + import from EdgePlatformApplicationEnablementAPI_TypesAndValues all; + // LibMec_ApplicationMobilityServiceAPI import from ApplicationMobilityServiceAPI_TypesAndValues all; - // LibMec_EdgePlatformApplicationEnablementAPI - //import from EdgePlatformApplicationEnablementAPI_TypesAndValues all; /* TITAN WORK-AROUND for build issue (class forward declaration) */ - /** * @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 @@ -185,7 +185,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { */ type record TransportsSupported { TransportDescriptor transport, - SerializerType serializers + ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.SerializerType serializers } /** @@ -400,7 +400,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { */ type record TransportDependency { TransportDescriptor transport, - SerializerType serializers, + ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.SerializerType serializers, Labels labels } type record of TransportDependency TransportDependencies; @@ -421,10 +421,10 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { type record TransportDescriptor { Json.String name, Json.String description optional, - TransportType type_, + ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.TransportType type_, Json.String protocol, Json.String version, - SecurityInfo security, + ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.SecurityInfo security, Json.String implSpecificInfo optional } with { variant (type_) "name as 'type'"; @@ -1906,27 +1906,6 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { } type set of KeyValuePair KeyValuePairs; - /** - * @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 Json.UInteger Seconds; - - /** - * @desc The nanoseconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC - */ - type Json.UInteger 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] @@ -1941,8 +1920,8 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { group edge_platform_application_enablement { /* TITAN WORK-AROUND for build issue (class forward declaration) */ /** - * @desc The enumeration TransportType represents types of transports. - * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 8.1.6.4-1: Enumeration TransportType + * @desc The enumeration TransportType represents types of transports. + * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 8.1.6.4-1: Enumeration TransportType */ type enumerated TransportType { REST_HTTP, @@ -1957,26 +1936,26 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { /** * @desc List of supported OAuth 2.0 grant types. */ - type enumerated GrantTypes { - OAUTH2_AUTHORIZATION_CODE, - OAUTH2_IMPLICIT_GRANT, - OAUTH2_RESOURCE_OWNER, - OAUTH2_CLIENT_CREDENTIALS - } - type record length(1..4) of GrantTypes GrantTypesList; + // type enumerated GrantTypes { + // OAUTH2_AUTHORIZATION_CODE, + // OAUTH2_IMPLICIT_GRANT, + // OAUTH2_RESOURCE_OWNER, + // OAUTH2_CLIENT_CREDENTIALS + // } + // type record length(1..4) of GrantTypes GrantTypesList; /** * @desc The token endpoint. */ - type Json.String TokenEndpoint; + //type Json.String TokenEndpoint; /** * @desc Parameters related to use of OAuth 2.0. */ - type record OAuth2Info { - GrantTypesList grantTypes, - TokenEndpoint tokenEndpoint - } + // type record OAuth2Info { + // GrantTypesList grantTypes, + // TokenEndpoint tokenEndpoint + // } /** * @desc This type represents security information related to a transport. @@ -1984,12 +1963,12 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { */ type record SecurityInfo { OAuth2Info oAuth2Info optional, - Json.UInt8 extentions optional + Json.UInt8 extensions optional } /** - * @desc The enumeration SerializerTypes represents types of serializers. - * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 8.1.6.3-1: Enumeration SerializerType + * @desc The enumeration SerializerTypes represents types of serializers. + * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 8.1.6.3-1: Enumeration SerializerType */ type enumerated SerializerType { JSON, @@ -1999,34 +1978,34 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { } /** - * @desc Reference of the catalogue. - */ - type Json.String CategoryRef_Href; + * @desc Reference of the catalogue. + */ + //type Json.String CategoryRef_Href; /** - * @desc Unique identifier of the category. - */ - type Json.String CategoryRef_Id; + * @desc Unique identifier of the category. + */ + //type Json.String CategoryRef_Id; /** - * @desc Name of the category. - */ - type Json.String Name; + * @desc Name of the category. + */ + //type Json.String Name; /** - * @desc Category version. - */ - type Json.String CategoryRef_Version; + * @desc Category version. + */ + //type Json.String CategoryRef_Version; /** - * @desc This type represents the category reference. - */ - type record CategoryRef { - CategoryRef_Href href, - CategoryRef_Id id, - Name name, - CategoryRef_Version version - } + * @desc This type represents the category reference. + */ + // type record CategoryRef { + // CategoryRef_Href href, + // CategoryRef_Id id, + // Name name, + // CategoryRef_Version version + // } type Json.String NotificationType; diff --git a/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Functions.ttcn b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Functions.ttcn index 7e3cb45..2ba0429 100644 --- a/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Functions.ttcn +++ b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Functions.ttcn @@ -173,5 +173,75 @@ module EdgePlatformApplicationEnablementAPI_Functions { } } // End of 'alt' statement } // End of function f_delete_ser_availability_notification_subscription - + + function f_app_registration( + out AppInfo p_app_info, + out Headers p_headers + ) 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, + v_headers, + m_http_message_body_json( + m_body_json_app_info_regapps( + m_app_info( + PX_APP_NAME + )))))); + + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_201_created( + mw_http_message_body_json( + mw_body_json_app_info_regapps( + mw_app_info( + PX_APP_NAME + )))))) -> value v_response { + tc_ac.stop; + + p_app_info := v_response.response.body.json_body.appInfo_regapps; + p_headers := v_response.response.header; + log("f_app_registration: IUT successfully responds with a AppInfo: ", p_app_info); + } + [] tc_ac.timeout { + log("f_app_registration: Expected message not received"); + } + } // End of 'alt' statement + + } // End of function f_app_registration + + function f_app_deletion( + in Json.String p_app_instance_id + ) 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")), + 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_app_deletion: Expected message not received"); + } + } // End of 'alt' statement + + } // End of function f_app_deletion + } // End of module EdgePlatformApplicationEnablementAPI_Functions diff --git a/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Pixits.ttcn b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Pixits.ttcn index e36543d..3c16b76 100644 --- a/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Pixits.ttcn +++ b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Pixits.ttcn @@ -1,8 +1,15 @@ module EdgePlatformApplicationEnablementAPI_Pixits { + // JSON + import from Json all; + // LibMec/EdgePlatformApplicationEnablementAPI import from EdgePlatformApplicationEnablementAPI_TypesAndValues all; + modulepar Json.String PX_APP_NAME := "appName"; + + modulepar Json.String PX_APP_D_ID := "appName"; + modulepar AppInstanceId PX_APP_INSTANCE_ID := "appInst01"; modulepar AppInstanceId PX_NON_EXISTENT_APP_INSTANCE_ID := "appInst99"; diff --git a/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Templates.ttcn b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Templates.ttcn index 2c149ed..11f4d44 100644 --- a/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Templates.ttcn +++ b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Templates.ttcn @@ -1,6 +1,5 @@ /** * @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 EdgePlatformApplicationEnablementAPI_Templates { @@ -10,27 +9,17 @@ module EdgePlatformApplicationEnablementAPI_Templates { // LibCommon import from LibCommon_BasicTypesAndValues all; - // LibMec/AppEna + // LibMec + import from LibMec_TypesAndValues all; + + // LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI + import from ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues all; + + // LibMec/EdgePlatformApplicationEnablementAPI 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( + template (value) EdgePlatformApplicationEnablementAPI_TypesAndValues.SecurityInfo m_security_info( in GrantTypesList p_grantTypes := { OAUTH2_CLIENT_CREDENTIALS }, in TokenEndpoint p_tokenEndpoint := "/mecSerMgmtApi/security/MyTokenEndPoint" ) := { @@ -41,7 +30,7 @@ module EdgePlatformApplicationEnablementAPI_Templates { extentions := omit } // End of template m_security_info - template (present) SecurityInfo mw_security_info( + template (present) EdgePlatformApplicationEnablementAPI_TypesAndValues.SecurityInfo mw_security_info( template (present) GrantTypesList p_grantTypes := ?, template (present) TokenEndpoint p_tokenEndpoint := ? ) := { @@ -88,7 +77,7 @@ module EdgePlatformApplicationEnablementAPI_Templates { in SerName p_serName, in ServiceInfo_Version p_version := PX_SERVICE_INFO_VERSION, in ServiceState p_state := PX_SERVICE_INFO_STATE, - in SerializerType p_serializer := PX_SERIALIZER, + in EdgePlatformApplicationEnablementAPI_TypesAndValues.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, @@ -114,7 +103,7 @@ module EdgePlatformApplicationEnablementAPI_Templates { 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) EdgePlatformApplicationEnablementAPI_TypesAndValues.SerializerType p_serializer := PX_SERIALIZER, template (present) ServiceInfo_Link p_links := ?, template SerInstanceId p_serInstanceId := *, template TransportId p_transportId := *, @@ -149,7 +138,7 @@ module EdgePlatformApplicationEnablementAPI_Templates { } // End of template mw_subscription_link_list template (value) Self m_self( - in template (value) LinkType p_self_ + in template (value) EdgePlatformApplicationEnablementAPI_TypesAndValues.LinkType p_self_ ) := { self_ := p_self_ } // End of template m_self @@ -184,6 +173,62 @@ module EdgePlatformApplicationEnablementAPI_Templates { appInstanceId := p_appInstanceId } // End of template mw_app_termination_notif_subscription + template (omit) AppInfo m_app_info( + in Json.String p_appName, + in template (omit) Json.String p_appProvider := omit, + in template (omit) CategoryRef p_appCategory := omit, + in template (omit) Json.String p_appDId := omit, + in template (omit) Json.String p_appInstanceId := omit, + in template (omit) EndPointInfo p_endpoint := omit, + in template (omit) ServiceDependencies p_appServiceRequired := omit, + in template (omit) ServiceDependencies p_appServiceOptional := omit, + in template (omit) FeatureDependencies p_appFeatureRequired := omit, + in template (omit) FeatureDependencies p_appFeatureOptional := omit, + in template (omit) Json.Bool p_isInsByMec := omit, + in template (omit) AppProfile p_appProfile := omit + ) := { + appName := p_appName, + appProvider := p_appProvider, + appCategory := p_appCategory, + appDId := p_appDId, + appInstanceId := p_appInstanceId, + endpoint := p_endpoint, + appServiceRequired := p_appServiceRequired, + appServiceOptional := p_appServiceOptional, + appFeatureRequired := p_appFeatureRequired, + appFeatureOptional := p_appFeatureOptional, + isInsByMec := p_isInsByMec, + appProfile := p_appProfile + } // End of template m_app_info + + template (present) AppInfo mw_app_info( + template (present) Json.String p_appName := ?, + template Json.String p_appProvider := *, + template CategoryRef p_appCategory := *, + template Json.String p_appDId := *, + template Json.String p_appInstanceId := *, + template EndPointInfo p_endpoint := *, + template ServiceDependencies p_appServiceRequired := *, + template ServiceDependencies p_appServiceOptional := *, + template FeatureDependencies p_appFeatureRequired := *, + template FeatureDependencies p_appFeatureOptional := *, + template Json.Bool p_isInsByMec := *, + template AppProfile p_appProfile := * + ) := { + appName := p_appName, + appProvider := p_appProvider, + appCategory := p_appCategory, + appDId := p_appDId, + appInstanceId := p_appInstanceId, + endpoint := p_endpoint, + appServiceRequired := p_appServiceRequired, + appServiceOptional := p_appServiceOptional, + appFeatureRequired := p_appFeatureRequired, + appFeatureOptional := p_appFeatureOptional, + isInsByMec := p_isInsByMec, + appProfile := p_appProfile + } // End of template mw_app_info + template (value) ServiceLivenessInfo m_service_liveness_info( in ServiceState p_state, in template (value) TimeStamp p_timeStamp, @@ -207,11 +252,11 @@ module EdgePlatformApplicationEnablementAPI_Templates { template (value) TransportInfo m_transport_info( in TransportInfo_Id p_id, in TransportInfo_Name p_name, - in TransportType p_type_, + in EdgePlatformApplicationEnablementAPI_TypesAndValues.TransportType p_type_, in TransportInfo_Protocol p_protocol, in TransportInfo_Version p_version, in template (value) EndPointInfo p_endpoint, - in template (value) SecurityInfo p_security + in template (value) EdgePlatformApplicationEnablementAPI_TypesAndValues.SecurityInfo p_security ) := { id := p_id, name := p_name, @@ -227,11 +272,11 @@ module EdgePlatformApplicationEnablementAPI_Templates { template (present) TransportInfo mw_transport_info( template (present) TransportInfo_Id p_id := ?, template (present) TransportInfo_Name p_name := ?, - template (present) TransportType p_type_ := ?, + template (present) EdgePlatformApplicationEnablementAPI_TypesAndValues.TransportType p_type_ := ?, template (present) TransportInfo_Protocol p_protocol := ?, template (present) TransportInfo_Version p_version := ?, template (present) EndPointInfo p_endpoint := ?, - template (present) SecurityInfo p_security := ? + template (present) EdgePlatformApplicationEnablementAPI_TypesAndValues.SecurityInfo p_security := ? ) := { id := p_id, name := p_name, diff --git a/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_TypesAndValues.ttcn b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_TypesAndValues.ttcn index fd0248c..f24ab58 100644 --- a/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_TypesAndValues.ttcn @@ -1,12 +1,14 @@ /** * @desc The ETSI MEC ISG MEC011 Application Enablement API described using OpenAPI - * @see https://www.etsi.org/deliver/etsi_gs/MEC/001_099/011/03.01.01_60/gs_MEC011v030101p.pdf */ module EdgePlatformApplicationEnablementAPI_TypesAndValues { // JSON import from Json all; + // LibMec + import from LibMec_TypesAndValues all; + // MEC-10-2 import from ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues all; @@ -34,7 +36,7 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { * @member operationAction Operation that is being performed on the MEC application instance * @member maxGracefulTimeout Maximum non-zero timeout value in seconds for graceful termination or graceful stop of an application instance * @member links Object containing hyperlinks related to the resource - * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 7.1.4.2-1: Attributes of AppTerminationNotification + * @see ETSI GS MEC 011 V3.2.1 Table 7.1.4.2-1: Attributes of AppTerminationNotification */ type record AppTerminationNotification { NotificationType notificationType, @@ -50,7 +52,7 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { * that the application has completed its application level related terminate/stop actions, e.g. retention of application state * in the case of stop. * @member operationAction Operation that is being performed on the MEC application instance - * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 7.1.4.3-1: Attributes of AppTerminationConfirmation + * @see ETSI GS MEC 011 V3.2.1 Table 7.1.4.3-1: Attributes of AppTerminationConfirmation */ type record AppTerminationConfirmation { OperationAction operationAction @@ -59,7 +61,7 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { /** * @desc This type represents the information that the MEC application instance indicates to the MEC platform that it is up and running * @member indication Indication about the MEC application instance - * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 7.1.4.4-1: Attributes of AppReadyConfirmation + * @see ETSI GS MEC 011 V3.2.1 Table 7.1.4.4-1: Attributes of AppReadyConfirmation */ type record AppReadyConfirmation { Json.String indication @@ -77,7 +79,7 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { * @member callbackReference URI selected by the MEC application instance to receive notifications on the subscribed MEC application instance management information * @member links Object containing hyperlinks related to the resource * @member appInstanceId It is used as the filtering criterion for the subscribed events - * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 7.1.3.2-1: Attributes of AppTerminationNotificationSubscription + * @see ETSI GS MEC 011 V3.2.1 Table 7.1.3.2-1: Attributes of AppTerminationNotificationSubscription */ type record AppTerminationNotificationSubscription { SubscriptionType subscriptionType, @@ -100,7 +102,7 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { /** * @desc Represents possible states of a MEC service instance - * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 8.1.6.6-1: Enumeration ServiceState + * @see ETSI GS MEC 011 V3.2.1 Table 8.1.6.6-1: Enumeration ServiceState */ type enumerated ServiceState { ACTIVE (0), @@ -114,7 +116,7 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { * @member state Liveness state of the MEC service instance * @member timeStamp The time when the last "heartbeat" message was received by MEC platform * @member interval The interval (in seconds) between two consecutive "heartbeat" messages (see clause 8.2.10.3.3) that MEC platform has determined. - * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 8.1.2.4-1: Attributes of ServiceLivenessInfo + * @see ETSI GS MEC 011 V3.2.1 Table 8.1.2.4-1: Attributes of ServiceLivenessInfo */ type record ServiceLivenessInfo { ServiceState state, @@ -153,19 +155,9 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { } 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. - */ - type Json.UInteger Seconds; - - /** - * @desc The nanoseconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC. - */ - type Json.UInteger NanoSeconds; - /** * @desc Platform Time Source status. 1 = TRACEABLE - time source is locked to the UTC time source. 2 = NONTRACEABLE - time source is not locked to the UTC time source. - * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 7.1.2.5-1: Attributes of CurrentTime + * @see ETSI GS MEC 011 V3.2.1 Table 7.1.2.5-1: Attributes of CurrentTime */ type enumerated TimeSourceStatus { TRACEABLE (1), @@ -177,7 +169,7 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { * @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. * @member timeSourceStatus Platform Time Source status. 1 = TRACEABLE - time source is locked to the UTC time source. 2 = NONTRACEABLE - time source is not locked to the UTC time source. - * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 7.1.2.5-1: Attributes of CurrentTime + * @see ETSI GS MEC 011 V3.2.1 Table 7.1.2.5-1: Attributes of CurrentTime */ type record CurrentTime { Seconds seconds, @@ -199,7 +191,7 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { * @member appFeatureOptional Describes features a MEC application may use if available * @member isInsByMec Indicate whether the application instance is instantiated by the MEC Management * @member appProfile Can be mapped to EAS profile as defined in ETSI TS 129 558 [19] - * @see ETSI GS MEC 011 V3.1.1 (2022-09) 7.1.2.6-1: Attributes of AppInfo + * @see ETSI GS MEC 011 V3.2.1 7.1.2.6-1: Attributes of AppInfo */ type record AppInfo { Json.String appName, @@ -251,7 +243,7 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { * member srcMacAddress If the interface type is "MAC", source address identifies the MAC address of the interface * member dstMacAddress If the interface type is "MAC", destination address identifies the MAC address of the interface * member dstIpAddress If the interface type is "IP", destination address identifies the IP address of the remote destination - * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 7.1.5.3-1: Attributes of DestinationInterface + * @see ETSI GS MEC 011 V3.2.1 Table 7.1.5.3-1: Attributes of DestinationInterface */ type record DestinationInterface { InterfaceType interfaceType, @@ -307,7 +299,7 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { * member ipAddress IP address associated with the FQDN resolved by the DNS rule * member ttl Time to live value, in seconds. * member state Contains the DNS rule state: ACTIVE, INACTIVE - * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 7.1.2.3-1: Attributes of DnsRule + * @see ETSI GS MEC 011 V3.2.1 Table 7.1.2.3-1: Attributes of DnsRule */ type record DnsRule { DnsRule_Id dnsRuleId, @@ -369,7 +361,7 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { /** * @desc This type represents a type of link and may be referenced from data structures. * @member href URI referring to a resource - * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 6.3.2-1: Attributes of the LinkType + * @see ETSI GS MEC 011 V3.2.1 Table 6.3.2-1: Attributes of the LinkType */ type record LinkType { Href href @@ -420,7 +412,7 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { * @desc This type represents a list of links related to currently existing subscriptions for a MEC application instance. * @member self_ Self-referring URI * @member subscriptions The MEC application instance's subscriptions - * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 6.2.2-1: Attributes of the SubscriptionLinkList + * @see ETSI GS MEC 011 V3.2.1 Table 6.2.2-1: Attributes of the SubscriptionLinkList */ type record Links { LinkType self_, @@ -432,7 +424,7 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { /** * @desc This type represents a list of links related to currently existing subscriptions for a MEC application instance. * @member links Object containing hyperlinks related to the resource - * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 6.2.2-1: Attributes of the SubscriptionLinkList + * @see ETSI GS MEC 011 V3.2.1 Table 6.2.2-1: Attributes of the SubscriptionLinkList */ type record SubscriptionLinkList { Links links @@ -444,7 +436,7 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { * @desc The MEC application instance's subscriptions * @member href URI referring to the subscription * @member subscriptionType Type of the subscription - * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 6.2.2-1: Attributes of the SubscriptionLinkList + * @see ETSI GS MEC 011 V3.2.1 Table 6.2.2-1: Attributes of the SubscriptionLinkList */ type record Subscription_ { Json.AnyURI href, @@ -478,7 +470,7 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { /** * @desc This type represents security information related to a transport. - * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 8.1.5.4-1: Attributes of SecurityInfo + * @see ETSI GS MEC 011 V3.2.1 Table 8.1.5.4-1: Attributes of SecurityInfo */ type record SecurityInfo { OAuth2Info oAuth2Info optional, @@ -523,7 +515,7 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { * @member serCategories Categories of services about which to report events * @member states States of the services about which to report events * @member isLocal Restrict event reporting to whether the service is local to the MEC platform where the subscription is managed - * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 8.1.3.2-1: Attributes of SerAvailabilityNotificationSubscription + * @see ETSI GS MEC 011 V3.2.1 Table 8.1.3.2-1: Attributes of SerAvailabilityNotificationSubscription */ type record FilteringCriteria { SerInstanceIdList serInstanceIds optional, @@ -544,7 +536,7 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { /** * @desc The enumeration SerializerTypes represents types of serializers. - * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 8.1.6.3-1: Enumeration SerializerType + * @see ETSI GS MEC 011 V3.2.1 Table 8.1.6.3-1: Enumeration SerializerType */ type enumerated SerializerType { JSON, @@ -579,7 +571,7 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { /** * @desc Contains the types of locality. - * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 8.1.6.5-1: Enumeration LocalityType + * @see ETSI GS MEC 011 V3.2.1 Table 8.1.6.5-1: Enumeration LocalityType */ type enumerated LocalityType { MEC_SYSTEM, @@ -624,7 +616,7 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { * @member isLocal Indicate whether the service is located in the same locality (as defined by scopeOfLocality) as the consuming MEC application (TRUE) or not (FALSE) * @member livenessInterval Interval (in seconds) between two consecutive "heartbeat" messages * @member links Links to resources related to this resource - * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 8.1.2.2-1: Attributes of ServiceInfo + * @see ETSI GS MEC 011 V3.2.1 Table 8.1.2.2-1: Attributes of ServiceInfo */ type record ServiceInfo { SerInstanceId serInstanceId optional, @@ -718,7 +710,7 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { * @member localPriority NTP server local priority * @member authenticationOption NTP authentication option * @member authenticationKeyNum Authentication key number - * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 7.1.2.4-1: Attributes of TimingCaps + * @see ETSI GS MEC 011 V3.2.1 Table 7.1.2.4-1: Attributes of TimingCaps */ type record NtpServers { NtpServerAddrType ntpServerAddrType, @@ -741,22 +733,12 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { } type record of TimingCaps_PtpMasters TimingCaps_PtpMastersList; - /** - * @desc Time. - * @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 This type represents the information provided by the mobile edge platform in response to the Timing capabilities Query message * @member timeStamp * @member ntpServers Number of available NTP servers * @member ptpMasters Number of available PTP Servers (referred to as "masters" in IEEE 1588-2019™ [i.2]) - * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 7.1.2.4-1: Attributes of TimingCaps + * @see ETSI GS MEC 011 V3.2.1 Table 7.1.2.4-1: Attributes of TimingCaps */ type record TimingCaps { TimeStamp timeStamp optional, @@ -830,7 +812,7 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { * @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 011 V3.1.1 (2022-09) Table 7.1.5.2-1: Attributes of TrafficFilter + * @see ETSI GS MEC 011 V3.2.1 Table 7.1.5.2-1: Attributes of TrafficFilter */ type record TrafficFilter { TrafficFilter_AddressList srcAddress optional, @@ -896,7 +878,7 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { * member action The action of the MEC host data plane when a packet matches the trafficFilter * member dstInterface Describes the destination interface information * member state Contains the traffic rule state: ACTIVE, INACTIVE - * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 7.1.2.2-1: Attributes of TrafficRule + * @see ETSI GS MEC 011 V3.2.1 Table 7.1.2.2-1: Attributes of TrafficRule */ type record TrafficRule { TrafficRule_Id trafficRuleId, @@ -947,7 +929,7 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { * @member fqdn Fully Qualified Domain Name of the service * @member addresses Entry point information of the service as one or more pairs of IP address and port * @member alternativeEntry point information of the service in a format defined by an implementation, or in an external specification - * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 8.1.5.3-1: Attributes of EndPointInfo + * @see ETSI GS MEC 011 V3.2.1 Table 8.1.5.3-1: Attributes of EndPointInfo */ type record EndPointInfo { EndPointInfo_UriList uris optional, @@ -967,7 +949,7 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { * @member endpoint Information about the endpoint to access the transport * @member security Information about the security used by the transport * @member implSpecificInfo Additional implementation specific details of the transport - * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 8.1.2.3-1: Attributes of TransportInfo + * @see ETSI GS MEC 011 V3.2.1 Table 8.1.2.3-1: Attributes of TransportInfo */ type record TransportInfo { TransportInfo_Id id, @@ -986,7 +968,7 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { /** * @desc The enumeration TransportType represents types of transports. - * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 8.1.6.4-1: Enumeration TransportType + * @see ETSI GS MEC 011 V3.2.1 Table 8.1.6.4-1: Enumeration TransportType */ type enumerated TransportType { REST_HTTP, @@ -1021,7 +1003,7 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { * @member tunnelType Type of the tunnel, e.g. GTP_U, GRE, etc * @member tunnelDstAddress Destination address of the tunnel * @member tunnelSrcAddress Source address of the tunnel - * @see ETSI GS MEC 011 V3.1.1 (2022-09) Table 7.1.5.4-1: Attributes of TunnelInfo + * @see ETSI GS MEC 011 V3.2.1 Table 7.1.5.4-1: Attributes of TunnelInfo */ type record TunnelInfo { TunnelInfo_TunnelType tunnelType, diff --git a/ttcn/LibMec/FixedAccessInformationServiceAPI/ttcn/FixedAccessInformationServiceAPI_Templates.ttcn b/ttcn/LibMec/FixedAccessInformationServiceAPI/ttcn/FixedAccessInformationServiceAPI_Templates.ttcn index 5ac2133..a5dfa5a 100644 --- a/ttcn/LibMec/FixedAccessInformationServiceAPI/ttcn/FixedAccessInformationServiceAPI_Templates.ttcn +++ b/ttcn/LibMec/FixedAccessInformationServiceAPI/ttcn/FixedAccessInformationServiceAPI_Templates.ttcn @@ -6,6 +6,9 @@ module FixedAccessInformationServiceAPI_Templates { // LibCommon import from LibCommon_BasicTypesAndValues all; + // LibMec + import from LibMec_TypesAndValues all; + // LibMec_FixedAccessInformationServiceAPI import from FixedAccessInformationServiceAPI_TypesAndValues all; import from FixedAccessInformationServiceAPI_Pixits all; @@ -260,20 +263,4 @@ module FixedAccessInformationServiceAPI_Templates { alarms := p_alarms } // End of template mw_filter_criteria_onu_alarm - template (value) TimeStamp m_time_stamp( - in Json.UInteger p_seconds, - in Json.UInteger p_nanoSeconds := 0 - ) := { - seconds := p_seconds, - nanoSeconds := p_nanoSeconds - } // End of temlate m_time_stamp - - template (present) TimeStamp mw_time_stamp( - template (present) Json.UInteger p_seconds := ?, - template (present) Json.UInteger p_nanoSeconds := ? - ) := { - seconds := p_seconds, - nanoSeconds := p_nanoSeconds - } // End of temlate mw_time_stamp - } // End of module FixedAccessInformationServiceAPI_Templates diff --git a/ttcn/LibMec/FixedAccessInformationServiceAPI/ttcn/FixedAccessInformationServiceAPI_TypesAndValues.ttcn b/ttcn/LibMec/FixedAccessInformationServiceAPI/ttcn/FixedAccessInformationServiceAPI_TypesAndValues.ttcn index 6873dc4..de9f30a 100644 --- a/ttcn/LibMec/FixedAccessInformationServiceAPI/ttcn/FixedAccessInformationServiceAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/FixedAccessInformationServiceAPI/ttcn/FixedAccessInformationServiceAPI_TypesAndValues.ttcn @@ -13,6 +13,9 @@ module FixedAccessInformationServiceAPI_TypesAndValues { // JSON import from Json all; + // LibMec + import from LibMec_TypesAndValues all; + /** * @desc This type represents the fixed access information * @member timeStamp Time stamp @@ -699,29 +702,6 @@ module FixedAccessInformationServiceAPI_TypesAndValues { LinkType subscription } - /** - * @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 - * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.5.2-1: Attributes of the 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 - * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.5.2-1: Attributes of the TimeStamp - */ - type Json.UInteger Seconds; - - /** - * @desc The nanoseconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC - * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.5.2-1: Attributes of the TimeStamp - */ - type Json.UInteger NanoSeconds; - /** * @desc This type represents a customer premises (physical location) * @member latitude Latitude (DATUM=WGS84) diff --git a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Templates.ttcn b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Templates.ttcn index 15b6974..4d824fc 100644 --- a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Templates.ttcn +++ b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Templates.ttcn @@ -6,6 +6,9 @@ module LocationAPI_Templates { // LibCommon import from LibCommon_BasicTypesAndValues all; + // LibMec + import from LibMec_TypesAndValues all; + // LibMec/LocationAPI import from LocationAPI_TypesAndValues all; import from LocationAPI_Pixits all; diff --git a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn index 0693c57..5f232e9 100644 --- a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn @@ -13,26 +13,8 @@ module LocationAPI_TypesAndValues { // JSON import from Json all; - /** - * @desc The seconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC - */ - type Json.UInteger Seconds; - - /** - * @desc The nanoseconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC - */ - type Json.UInteger NanoSeconds; - - /** - * @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 - * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.5.2 Type: TimeStamp - */ - type record TimeStamp { - Seconds seconds, - NanoSeconds nanoSeconds - } + // LibMec + import from LibMec_TypesAndValues all; /** * @desc This type represents a list of UserInfo. diff --git a/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_Templates.ttcn b/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_Templates.ttcn index c4145ec..83d31c1 100644 --- a/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_Templates.ttcn +++ b/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_Templates.ttcn @@ -448,22 +448,6 @@ module RnisAPI_Templates { s1BearerInfoDetailed := p_s1BearerInfoDetailed } // End of mw_s1_ue_info - template (value) TimeStamp m_time_stamp( - in UInt32 p_seconds, - in UInt32 p_nanoSeconds := 0 - ) := { - seconds := p_seconds, - nanoSeconds := p_nanoSeconds - } // End of temlate m_time_stamp - - template (present) TimeStamp mw_time_stamp( - template (present) UInt32 p_seconds := ?, - template (present) UInt32 p_nanoSeconds := ? - ) := { - seconds := p_seconds, - nanoSeconds := p_nanoSeconds - } // End of temlate mw_time_stamp - template (value) FilterCriteriaAssoc m_filter_criteria( in AppInstanceId p_appInstanceId, in template (value) AssociateId p_associateId, diff --git a/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Templates.ttcn b/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Templates.ttcn index 372367f..2fd17bf 100644 --- a/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Templates.ttcn +++ b/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Templates.ttcn @@ -6,6 +6,9 @@ module TrafficManagementAPI_Templates { // LibCommon import from LibCommon_BasicTypesAndValues all; + // LibMec + import from LibMec_TypesAndValues all; + // LibMec/TrafficManagementAPI import from TrafficManagementAPI_TypesAndValues all; import from TrafficManagementAPI_Pixits all; diff --git a/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_TypesAndValues.ttcn b/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_TypesAndValues.ttcn index 4c11591..3800d40 100644 --- a/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_TypesAndValues.ttcn @@ -3,6 +3,9 @@ module TrafficManagementAPI_TypesAndValues { // JSON import from Json all; + // LibMec + import from LibMec_TypesAndValues all; + /** * @desc Information of bandwidth resource * @member allocationId Bandwidth allocation instance identifier @@ -48,17 +51,6 @@ module TrafficManagementAPI_TypesAndValues { AllocationDirection allocationDirection optional } - /** - * @desc Time stamp description - * @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 015 V2.2.1 (2022-12) Clause 7.2.2 Type: BwInfo - */ - type record TimeStamp { - Seconds seconds, - NanoSeconds nanoSeconds - } - /** * @desc Bandwidth allocation instance identifier * @see ETSI GS MEC 015 V2.2.1 (2022-12) Clause 7.2.2 Type: BwInfo diff --git a/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Templates.ttcn b/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Templates.ttcn index 5365b30..72e6485 100644 --- a/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Templates.ttcn +++ b/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Templates.ttcn @@ -16,6 +16,9 @@ module V2XInformationServiceAPI_Templates { // LibCommon import from LibCommon_BasicTypesAndValues all; + // LibMec + import from LibMec_TypesAndValues all; + // LibMec/V2XInformationServiceAPI import from V2XInformationServiceAPI_TypesAndValues all; import from V2XInformationServiceAPI_Pixits all; diff --git a/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_TypesAndValues.ttcn b/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_TypesAndValues.ttcn index 045f4f4..3521625 100644 --- a/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_TypesAndValues.ttcn @@ -13,6 +13,9 @@ module V2XInformationServiceAPI_TypesAndValues { // JSON import from Json all; + // LibMec + import from LibMec_TypesAndValues all; + /** * @desc Provisioning information required for V2X communication over Uu unicast * @member timeStamp_ Time stamp @@ -508,29 +511,6 @@ module V2XInformationServiceAPI_TypesAndValues { variant (links) "name as '_links'"; } - /** - * @desc Time stamp description - * @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 030 V3.1.1 (2023-03) Table 6.5.2-1: Attributes of the 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 - * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.5.2-1: Attributes of the TimeStamp - */ - type Json.UInteger Seconds; - - /** - * @desc The nanoseconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC - * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.5.2-1: Attributes of the TimeStamp - */ - type Json.UInteger NanoSeconds; - /** * @desc Location information * @member ecgi E-UTRAN CelI Global Identifier of the serving cell diff --git a/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Templates.ttcn b/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Templates.ttcn index 828ad59..3806442 100644 --- a/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Templates.ttcn +++ b/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Templates.ttcn @@ -6,26 +6,13 @@ module WlanInformationAPI_Templates { // LibCommon import from LibCommon_BasicTypesAndValues all; + // LibMec + import from LibMec_TypesAndValues all; + // LibMec/WlanInformationAPI 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, diff --git a/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_TypesAndValues.ttcn b/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_TypesAndValues.ttcn index a87f639..e5d677e 100644 --- a/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_TypesAndValues.ttcn @@ -13,6 +13,9 @@ module WlanInformationAPI_TypesAndValues { // JSON import from Json all; + // LibMec + import from LibMec_TypesAndValues all; + /** * @desc This type represents the information on Access Points available from the WLAN Access Information Service. * @member timeStamp TimeStamp @@ -339,27 +342,6 @@ module WlanInformationAPI_TypesAndValues { variant (links) "name as '_links'"; } - /** - * @desc Time stamp description - * @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 028 V2.3.1 Table 6.5.2-1: Attributes of the 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 Json.UInteger Seconds; - - /** - * @desc The nanoseconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC - */ - type Json.UInteger NanoSeconds; - /** * @desc Identifiers determining a specific 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 diff --git a/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn b/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn index 063d8d8..0b42a5b 100644 --- a/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn +++ b/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn @@ -14,9 +14,9 @@ module LibMec_Pixits { modulepar charstring PX_ME_APP_Q_UE_IDENTITY_ID_URI := "/ui/v1/"; - modulepar charstring PX_SVC_MGMT_TRANS_URI := "/mec_service_mgmt/v1/transports"; + modulepar charstring PX_SVC_MGMT_TRANS_URI := "mec_service_mgmt/v1/transports"; - modulepar charstring PX_SVC_MGMT_APP_URI := "/mec_service_mgmt/v1/application"; + modulepar charstring PX_SVC_MGMT_APP_URI := "mec_service_mgmt/v1/application"; modulepar charstring PX_RNIS_SUBSCRITIONS_URI := "/rni/v2/subscriptions"; @@ -42,37 +42,39 @@ module LibMec_Pixits { modulepar charstring PX_ME_APP_AMS_SUBS := "/amsi/v1/subscriptions"; - modulepar charstring PX_MEO_GRANT_URI := "/granting/v1/grants"; + modulepar charstring PX_MEO_GRANT_URI := "granting/v1/grants"; - modulepar charstring PX_MEO_PKGM_URI := "/app_pkgm/v1/app_packages" + modulepar charstring PX_MEO_PKGM_URI := "app_pkgm/v1/app_packages" - modulepar charstring PX_MEO_PKGM_URI_ONBOARDED := "/app_pkgm/v1/onboarded_app_packages" + 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_MEO_PKGM_SUBS := "app_pkgm/v1/subscriptions" - modulepar charstring PX_MEPM_PKGM_URI := "/app_pkgm/v1/app_packages" + modulepar charstring PX_MEPM_PKGM_URI := "app_pkgm/v1/app_packages" - modulepar charstring PX_MEPM_PKGM_SUBS := "/app_pkgm/v1/subscriptions" + modulepar charstring PX_MEPM_PKGM_SUBS := "app_pkgm/v1/subscriptions" - modulepar charstring PX_APP_LCM_URI := "/app_lcm/v1/app_instances" + modulepar charstring PX_APP_LCM_URI := "app_lcm/v1/app_instances" - modulepar charstring PX_MEX_LCM_SUBS := "/app_lcm/v1/subscriptions"; + modulepar charstring PX_MEX_LCM_SUBS := "app_lcm/v1/subscriptions"; - modulepar charstring PX_MEX_LCM_OP_OCC_URI := "/app_lcm/v1/app_lcm_op_occs"; + modulepar charstring PX_MEX_LCM_OP_OCC_URI := "app_lcm/v1/app_lcm_op_occs"; modulepar charstring PX_UE_APP_CTX_URI := "/mx2/v1/app_contexts"; modulepar charstring PX_UE_APPS_URI := "/mx2/v1/app_list"; - modulepar charstring PX_MEC_SVC_MGMT_APPS_URI := "/mec_service_mgmt/v1/applications"; + modulepar charstring PX_MEC_SVC_MGMT_APPS_URI := "mec_app_support/v2/registrations"; - modulepar charstring PX_ME_APP_SUPPORT_TIMING_CURRENT_URI := "/timing/current_time"; + modulepar charstring PX_ME_APP_SUPPORT_TIMING_CURRENT_URI := "mec_app_support/v2/timing/current_time"; - modulepar charstring PX_ME_APP_SUPPORT_URI := "/applications"; + modulepar charstring PX_ME_APP_SUPPORT_URI := "mec_app_support/v2/applications"; - modulepar charstring PX_MEC_SVC_MGMT_SVC_URI := "/mec_service_mgmt/v1/services"; + modulepar charstring PX_ME_APP_REG_APPS_URI := "mec_app_support/v2/applications"; - modulepar charstring PX_ME_APP_SUPPORT_TIMING_CAPS_URI := "/timing/timing_caps"; + modulepar charstring PX_MEC_SVC_MGMT_SVC_URI := "mec_service_mgmt/v1/services"; + + modulepar charstring PX_ME_APP_SUPPORT_TIMING_CAPS_URI := "mec_app_support/v2/timing/timing_caps"; modulepar charstring PX_FAI_FA_INFO_URI := "/fai/v1/fa_info"; @@ -86,18 +88,18 @@ module LibMec_Pixits { modulepar charstring PX_UE_ZONAL_TRAF_SUB_URI := "/fai/v1/optical_network_info"; - modulepar charstring PX_FED_API_LIST_SYSTEM_INFO := "/fed_enablement/v1/fed_resources/system_info"; + modulepar charstring PX_FED_API_LIST_SYSTEM_INFO := "fed_enablement/v1/fed_resources/system_info"; - modulepar charstring PX_FED_API_SUB := "/fed_enablement/v1/fed_resources/system_info"; + modulepar charstring PX_FED_API_SUB := "fed_enablement/v1/fed_resources/system_info"; - modulepar charstring PX_FED_API_SUB_WRONG := "/fed_enablement/v10/fed_resources/system_info"; // v10 instead of v1 + modulepar charstring PX_FED_API_SUB_WRONG := "fed_enablement/v10/fed_resources/system_info"; // v10 instead of v1 - modulepar charstring PX_IOT_API_LIST_DEVICE_INFO := "/iots/v1/registered_devices"; + modulepar charstring PX_IOT_API_LIST_DEVICE_INFO := "iots/v1/registered_devices"; - modulepar charstring PX_IOT_API_SUB := "/iots/v1/registered_devices"; + modulepar charstring PX_IOT_API_SUB := "iots/v1/registered_devices"; - modulepar charstring PX_IOT_API_LIST_PLTF_INFO := "/iots/v1/registered_iot_platforms"; + modulepar charstring PX_IOT_API_LIST_PLTF_INFO := "iots/v1/registered_iot_platforms"; - modulepar charstring PX_IOT_API_LIST_PLTF_SUB := "/iots/v1/registered_iot_platforms"; + modulepar charstring PX_IOT_API_LIST_PLTF_SUB := "iots/v1/registered_iot_platforms"; } // End of module LibMec_Pixits diff --git a/ttcn/LibMec/ttcn/LibMec_Templates.ttcn b/ttcn/LibMec/ttcn/LibMec_Templates.ttcn index d5f8e82..fafc89d 100644 --- a/ttcn/LibMec/ttcn/LibMec_Templates.ttcn +++ b/ttcn/LibMec/ttcn/LibMec_Templates.ttcn @@ -37,4 +37,20 @@ module LibMec_Templates { instance := p_instance } // End of template mw_problem_details + 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 + } // End of module LibMec_Templates diff --git a/ttcn/LibMec/ttcn/LibMec_TypesAndValues.ttcn b/ttcn/LibMec/ttcn/LibMec_TypesAndValues.ttcn index 829f2eb..b960094 100644 --- a/ttcn/LibMec/ttcn/LibMec_TypesAndValues.ttcn +++ b/ttcn/LibMec/ttcn/LibMec_TypesAndValues.ttcn @@ -6,6 +6,26 @@ module LibMec_TypesAndValues { // LibCommon import from LibCommon_BasicTypesAndValues all; + /** + * @desc Time stamp description + * @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 Json.UInteger Seconds; + + /** + * @desc The nanoseconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC + */ + type Json.UInteger NanoSeconds; + /** * @desc Problem Details for HTTP APIs * @member type_ A URI reference according to IETF RFC 3986 that identifies the problem type diff --git a/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn b/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn index 4f117db..7cef8ba 100644 --- a/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn +++ b/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn @@ -72,6 +72,7 @@ module LibHttp_JsonMessageBodyTypes { MtsSessionInfo mtsSessionInfo, MtsSessionInfos mtsSessionInfos, EdgePlatformApplicationEnablementAPI_TypesAndValues.TransportInfoList transportInfoList, + EdgePlatformApplicationEnablementAPI_TypesAndValues.AppInfo appInfo_regapps, TrafficRuleList trafficRuleList, TrafficRule trafficRule, /*AppMobilityServiceInfo appMobilityServiceInfo,*/ diff --git a/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn b/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn index 62da712..fdb1e45 100644 --- a/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn +++ b/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn @@ -970,6 +970,18 @@ module LibHttp_JsonTemplates { trafficRuleList := p_trafficRuleList } // End of template mw_body_json_traffic_rule_list + template (value) JsonBody m_body_json_app_info_regapps( + in template (value) EdgePlatformApplicationEnablementAPI_TypesAndValues.AppInfo p_appInfo_regapps + ) := { + appInfo_regapps := p_appInfo_regapps + } // End of template m_body_json_app_info_regapps + + template (present) JsonBody mw_body_json_app_info_regapps( + template (present) EdgePlatformApplicationEnablementAPI_TypesAndValues.AppInfo p_appInfo_regapps := ? + ) := { + appInfo_regapps := p_appInfo_regapps + } // End of template mw_body_json_app_info_regapps + } // End of group app_enablement_api group ue_app_ctx { -- GitLab From f582f187aa93320f49bbddfd6bcf4338f8ecb314 Mon Sep 17 00:00:00 2001 From: garciay Date: Tue, 28 Nov 2023 09:09:14 +0100 Subject: [PATCH 57/99] review MEC 012 --- .../AtsMec_Rnis/AtsMec_RnisAPI_TestCases.ttcn | 83 +++++++++++++------ .../AtsMec_RnisAPI_TestControl.ttcn | 18 ++++ .../ttcn/LibHttp_JsonMessageBodyTypes.ttcn | 1 + .../ttcn/LibHttp_JsonTemplates.ttcn | 12 +++ 4 files changed, 89 insertions(+), 25 deletions(-) diff --git a/ttcn/AtsMec_Rnis/AtsMec_RnisAPI_TestCases.ttcn b/ttcn/AtsMec_Rnis/AtsMec_RnisAPI_TestCases.ttcn index 9dc2638..1e79a3c 100644 --- a/ttcn/AtsMec_Rnis/AtsMec_RnisAPI_TestCases.ttcn +++ b/ttcn/AtsMec_Rnis/AtsMec_RnisAPI_TestCases.ttcn @@ -65,8 +65,7 @@ module AtsMec_RnisAPI_TestCases { 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 + * @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 */ testcase TC_MEC_MEC012_SRV_RNIS_001_OK() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -166,7 +165,6 @@ module AtsMec_RnisAPI_TestCases { /** * @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 @@ -227,7 +225,6 @@ module AtsMec_RnisAPI_TestCases { /** * @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 @@ -289,7 +286,6 @@ module AtsMec_RnisAPI_TestCases { /** * @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 @@ -351,7 +347,6 @@ module AtsMec_RnisAPI_TestCases { /** * @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 @@ -411,7 +406,6 @@ module AtsMec_RnisAPI_TestCases { /** * @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 @@ -471,7 +465,6 @@ module AtsMec_RnisAPI_TestCases { /** * @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 @@ -531,7 +524,6 @@ module AtsMec_RnisAPI_TestCases { /** * @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 @@ -589,7 +581,6 @@ module AtsMec_RnisAPI_TestCases { /** * @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 @@ -645,6 +636,59 @@ module AtsMec_RnisAPI_TestCases { f_cf_01_http_notif_down(); } // End of testcase TC_MEC_MEC012_SRV_RNIS_009_OK + /** + * @desc Check that the RNIS service sends an RNIS notification on subscription expiration if the RNIS service has an associated subscription and the event is generated + */ + testcase TC_MEC_MEC012_SRV_RNIS_010_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("Wait for subscription expiration"); + 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_expiry_notification_rnis + )))) { + 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_010_OK + } // End of group rnis_notifications group all_subscriptions { @@ -660,8 +704,7 @@ module AtsMec_RnisAPI_TestCases { * - MeasTaSubscription * - CaReconfSubscription * - S1BearerSubscription - * - NrMeasRepUeSubscription" - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisSpecificSubscription_BV.tplan2 + * - NrMeasRepUeSubscription */ testcase TC_MEC_MEC012_SRV_RNIS_011_OK() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -729,8 +772,7 @@ module AtsMec_RnisAPI_TestCases { * - MeasTaSubscription * - CaReconfSubscription * - S1BearerSubscription - * - NrMeasRepUeSubscription" - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisSpecificSubscription_BV.tplan2 + * - NrMeasRepUeSubscription */ testcase TC_MEC_MEC012_SRV_RNIS_012_OK() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -812,7 +854,6 @@ module AtsMec_RnisAPI_TestCases { /** * @desc Check that the RNIS service responds with an error when it receives a request to get all RNIS subscriptions with a wrong subscription type - * @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_011_BR() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -870,7 +911,6 @@ module AtsMec_RnisAPI_TestCases { /** * @desc Check that the RNIS service responds with an error when it receives a request to create a new RNIS subscription with a wrong format - * @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_012_BR() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -952,8 +992,7 @@ module AtsMec_RnisAPI_TestCases { * - MeasTaSubscription * - CaReconfSubscription * - S1BearerSubscription - * - NrMeasRepUeSubscription" - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisSpecificSubscription_BV.tplan2 + * - NrMeasRepUeSubscription */ testcase TC_MEC_MEC012_SRV_RNIS_013_OK() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -1076,8 +1115,7 @@ module AtsMec_RnisAPI_TestCases { * - MeasTaSubscription * - CaReconfSubscription * - S1BearerSubscription - * - NrMeasRepUeSubscription" - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisSpecificSubscription_BV.tplan2 + * - NrMeasRepUeSubscription */ testcase TC_MEC_MEC012_SRV_RNIS_014_OK() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -1210,7 +1248,6 @@ module AtsMec_RnisAPI_TestCases { /** * @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_015_OK() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -1307,7 +1344,6 @@ module AtsMec_RnisAPI_TestCases { /** * @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_013_NF() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -1361,7 +1397,6 @@ module AtsMec_RnisAPI_TestCases { /** * @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_014_BR() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -1477,7 +1512,6 @@ module AtsMec_RnisAPI_TestCases { /** * @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_014_NF() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -1548,7 +1582,6 @@ module AtsMec_RnisAPI_TestCases { /** * @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_015_NF() runs on HttpComponent system HttpTestAdapter { // Local variables diff --git a/ttcn/AtsMec_Rnis/AtsMec_RnisAPI_TestControl.ttcn b/ttcn/AtsMec_Rnis/AtsMec_RnisAPI_TestControl.ttcn index 20cc6fb..02c7634 100644 --- a/ttcn/AtsMec_Rnis/AtsMec_RnisAPI_TestControl.ttcn +++ b/ttcn/AtsMec_Rnis/AtsMec_RnisAPI_TestControl.ttcn @@ -17,13 +17,31 @@ module AtsMec_RnisAPI_TestControl { execute(TC_MEC_MEC012_SRV_RNIS_002_OK()); execute(TC_MEC_MEC012_SRV_RNIS_003_OK()); execute(TC_MEC_MEC012_SRV_RNIS_004_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_005_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_006_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_006_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_007_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_007_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_010_OK()); } + if (PICS_RNIS_ALL_SUBSCRIPTIONS) { execute(TC_MEC_MEC012_SRV_RNIS_011_OK()); execute(TC_MEC_MEC012_SRV_RNIS_012_OK()); execute(TC_MEC_MEC012_SRV_RNIS_011_BR()); execute(TC_MEC_MEC012_SRV_RNIS_012_BR()); } + + if (PICS_RNIS_SPECIFIC_SUBSCRIPTION) { + execute(TC_MEC_MEC012_SRV_RNIS_013_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_013_NF()); + execute(TC_MEC_MEC012_SRV_RNIS_014_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_014_BR()); + execute(TC_MEC_MEC012_SRV_RNIS_014_NF()); + execute(TC_MEC_MEC012_SRV_RNIS_015_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_015_NF()); + } + if (PICS_RNIS_QUERY) { execute(TC_MEC_MEC012_SRV_RNIS_016_OK()); execute(TC_MEC_MEC012_SRV_RNIS_016_BR()); diff --git a/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn b/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn index 7cef8ba..f72b195 100644 --- a/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn +++ b/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn @@ -64,6 +64,7 @@ module LibHttp_JsonMessageBodyTypes { MeasTaSubscription measTaSubscription, CaReConfSubscription caReConfSubscription, S1BearerSubscription s1BearerSubscription, + RnisAPI_TypesAndValues.ExpiryNotification expiryNotification_rnis, L2Meas l2Meas, BwInfoList bwInfoList, BwInfo bwInfo, diff --git a/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn b/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn index fdb1e45..e27ee69 100644 --- a/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn +++ b/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn @@ -718,6 +718,18 @@ module LibHttp_JsonTemplates { l2Meas := p_l2Meas } // End of template mw_body_json_l2_meas_subscription + template (value) JsonBody m_body_json_expiry_notification_rnis( + in template (value) RnisAPI_TypesAndValues.ExpiryNotification p_expiryNotification + ) := { + expiryNotification_rnis := p_expiryNotification + } // End of template m_body_json_expiry_notification_rnis + + template (present) JsonBody mw_body_json_expiry_notification_rnis( + template (present) RnisAPI_TypesAndValues.ExpiryNotification p_expiryNotification := ? + ) := { + expiryNotification_rnis := p_expiryNotification + } // End of template mw_body_json_expiry_notification_rnis + } // End of group rnis_subscriptions group rnis_notifications { -- GitLab From f6052a81b4b2d43b5317b9a1e71f4fd82d984042 Mon Sep 17 00:00:00 2001 From: garciay Date: Tue, 19 Dec 2023 16:13:48 +0100 Subject: [PATCH 58/99] TTF T027: TTCN-3 ATS MEC 013 review - TPs bugs fixed --- titan-test-system-framework | 2 +- .../AtsMec_LocationAPI_TestCases.ttcn | 4270 +++++++++++++---- .../AtsMec_LocationAPI_TestControl.ttcn | 96 +- .../ttcn/LocationAPI_Functions.ttcn | 252 +- .../LocationAPI/ttcn/LocationAPI_Pixits.ttcn | 14 + .../ttcn/LocationAPI_Templates.ttcn | 278 ++ .../ttcn/LocationAPI_TypesAndValues.ttcn | 210 +- .../ttcn/LibHttp_JsonMessageBodyTypes.ttcn | 8 + .../ttcn/LibHttp_JsonTemplates.ttcn | 96 + 9 files changed, 4093 insertions(+), 1133 deletions(-) diff --git a/titan-test-system-framework b/titan-test-system-framework index 524df4e..6901c1c 160000 --- a/titan-test-system-framework +++ b/titan-test-system-framework @@ -1 +1 @@ -Subproject commit 524df4ef9a2fed2c32c1d9166ebebdb51fa666ba +Subproject commit 6901c1c381950f308d2b1643e90757248ae99eab diff --git a/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestCases.ttcn b/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestCases.ttcn index 20105f0..46d16cc 100644 --- a/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestCases.ttcn +++ b/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestCases.ttcn @@ -7,7 +7,7 @@ * No part may be reproduced except as authorized by written permission. * The copyright and the foregoing restriction extend to reproduction in all media. * All rights reserved. - * @see ETSI GS MEC 003, Draft ETSI GS MEC 013 V2.0.3 (2018-10) + * @see ETSI GS MEC 003, Draft ETSI GS MEC 013 V3.1.1 (2018-10) */ module AtsMec_LocationAPI_TestCases { @@ -30,42 +30,42 @@ module AtsMec_LocationAPI_TestCases { // LibMec import from LibMec_Functions all; + import from LibMec_Templates all; import from LibMec_Pics all; import from LibMec_Pixits all; - group ueLocationLookup { - + group radioNodeLocationLookup { + /** - * @desc Check that the IUT responds with a list for the location of User Equipments when queried by a MEC Application + * @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 */ - testcase TC_MEC_MEC013_SRV_UELOCLOOK_001_OK() runs on HttpComponent system HttpTestAdapter { + 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_LOC_API_USERS_SUB_URI, + 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 { @@ -73,20 +73,13 @@ module AtsMec_LocationAPI_TestCases { mw_http_response( mw_http_response_ok( mw_http_message_body_json( - mw_body_json_user_list( - mw_user_list( - ?/*{mw_user_info( - PX_USER, - PX_ACCESS_POINT_ID, - PX_ZONE_ID, - -, - PX_RESOURCE_URL - )}*/, - ? - )))))) { + 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 a ZoneId ***"); + + log("*** " & testcasename() & ": PASS: IUT successfully responds with an AccessPoint list containing a ZoneId ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -94,54 +87,106 @@ 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_UELOCLOOK_001_OK - + } // End of testcase TC_MEC_MEC013_SRV_RLOCLOOK_001_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/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/SRV/UELOC/PlatUeLocationLookup.tplan2 - * @see https://forge.etsi.org/gitlab/mec/gs013-location-api/blob/master/LocationAPI.yaml#/definitions/UserInfo + * @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 + + /** + * @desc Check that the IUT responds with the radio nodes when queried by a MEC Application */ - testcase TC_MEC_MEC013_SRV_UELOCLOOK_001_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_RLOCLOOK_002_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_USERS_LIST_URI & "?areaId=" & oct2char(unichar2oct(PX_ZONE_ID, "UTF-8")), // areaId instead of zoneId + PICS_ROOT_API & PX_ME_APP_Q_ZONE_ID_URI & "/" & oct2char(unichar2oct(PX_ZONE_ID, "UTF-8")) & "/accessPoints/" & oct2char(unichar2oct(PX_ACCESS_POINT_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 - )) { + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_access_point_info( + mw_access_point_info( + PX_ACCESS_POINT_ID + )))))) -> value v_response { tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with 400 Bad Request ***"); + + log("*** " & testcasename() & ": PASS: IUT successfully responds with an AccessPointInfo ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -149,54 +194,120 @@ 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_UELOCLOOK_001_BR - + } // End of testcase TC_MEC_MEC013_SRV_RLOCLOOK_002_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/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/SRV/UELOC/PlatUeLocationLookup.tplan2 - * @see https://forge.etsi.org/gitlab/mec/gs013-location-api/blob/master/LocationAPI.yaml#/definitions/UserInfo + * @desc Check that the IUT responds with an error when the radio nodes does not exist + */ + testcase TC_MEC_MEC013_SRV_RLOCLOOK_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_get( + PICS_ROOT_API & PX_ME_APP_Q_ZONE_ID_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_ZONE_ID, "UTF-8")) & "/accessPoints/" & 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 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_002_NF + + } // End of group radioNodeLocationLookup + + group ueAreaLookup { + + /** + * @desc Check that the IUT responds with a list of UE area subscriptions when queried by a MEC Application - No filter */ - testcase TC_MEC_MEC013_SRV_UELOCLOOK_001_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UEAREALOOK_001_OK_01() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; - + var UserAreaNotification v_user_area_notification; + var charstring v_subscription_id; + // 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_create_user_area_subscription(v_user_area_notification, v_subscription_id); 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 & "?zoneId=" & oct2char(unichar2oct(PX_NON_EXISTENT_ZONE_ID, "UTF-8")), + PICS_ROOT_API & PX_LOC_API_AREA_SUB_URI, v_headers - ) - ) - ); + ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); - + // Test Body tc_ac.start; alt { [] httpPort.receive( mw_http_response( - mw_http_response_404_not_found - )) { + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_notification_subscription_list( + mw_notification_subscription_list( + -, + { + *, + mw_subscription( + "UserAreaSubscription", + v_user_area_notification.links_.self_.href + ), + * + } + )))))) { tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a 404 Not Found ***"); + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of UserAreaSubscription ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -204,68 +315,67 @@ module AtsMec_LocationAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + // Postamble + f_delete_user_area_subscription(v_subscription_id); f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC013_SRV_UELOCLOOK_001_NF - - } // End of group ueLocationLookup - - group ueLocSub { - + } // End of testcase TC_MEC_MEC013_SRV_UEAREALOOK_001_OK_01 + /** - * @desc Check that the IUT acknowledges the subscription by a MEC Application to notifications user location event + * @desc Check that the IUT responds with a list of UE area subscriptions when queried by a MEC Application - Event filter */ - testcase TC_MEC_MEC013_SRV_UELOCSUB_001_OK_01() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UEAREALOOK_001_OK_02() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; - + var UserAreaNotification v_user_area_notification; + var charstring v_subscription_id; + // 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_create_user_area_subscription(v_user_area_notification, v_subscription_id); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( - m_http_request_post( - PICS_ROOT_API & PX_LOC_API_USERS_SUB_URI, - v_headers, - m_http_message_body_json( - m_body_json_user_location_event_subscription( - m_user_location_event_subscription( - PX_CALLBACK_REF_URL, - PX_USER, - PX_CLIENT_ID - )))))); + m_http_request_get( + PICS_ROOT_API & PX_LOC_API_AREA_SUB_URI & "?event", + v_headers + ))); 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_location_event_subscription( - mw_user_location_event_subscription( - PX_CALLBACK_REF_URL, - PX_USER, - -, - PX_CLIENT_ID - )))))) -> value v_response { + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_notification_subscription_list( + mw_notification_subscription_list( + -, + { + *, + mw_subscription( + "UserAreaSubscription", + v_user_area_notification.links_.self_.href + ), + * + } + )))))) -> value v_response { tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a callbackURL ***"); + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of UserAreaSubscription ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -273,56 +383,54 @@ module AtsMec_LocationAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + // Postamble - f_delete_user_location_event_subscription(v_response.response.body.json_body.userLocationEventSubscription); + f_delete_user_area_subscription(v_subscription_id); f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC013_SRV_UELOCSUB_001_OK_01 - + } // End of testcase TC_MEC_MEC013_SRV_UEAREALOOK_001_OK_02 + /** - * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - Neither callbackReference nor websockNotifConfig provided + * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - Invalid filter */ - testcase TC_MEC_MEC013_SRV_UELOCSUB_001_BR_01() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UEAREALOOK_001_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; - + var UserAreaNotification v_user_area_notification; + var charstring v_subscription_id; + // 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_create_user_area_subscription(v_user_area_notification, v_subscription_id); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( - m_http_request_post( - PICS_ROOT_API & PX_LOC_API_USERS_SUB_URI, - v_headers, - m_http_message_body_json( - m_body_json_user_location_event_subscription( - m_user_location_event_subscription_error( - PX_USER, - PX_CLIENT_ID - )))))); + m_http_request_get( + PICS_ROOT_API & PX_LOC_API_AREA_SUB_URI & "?filter(dummy, "")", + 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 400 Bad Request ***"); + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error code ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -330,21 +438,1761 @@ module AtsMec_LocationAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + // Postamble + f_delete_user_area_subscription(v_subscription_id); f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC013_SRV_UELOCSUB_001_BR_01 - + } // End of testcase TC_MEC_MEC013_SRV_UEAREALOOK_001_BR + /** - * @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/UELOCSUB/PlatUeLocationSubscription.tplan2 + * @desc Check that the IUT acknowledges the change of UE area subscription request when commanded by a MEC Application */ - testcase TC_MEC_MEC013_SRV_UELOCSUB_002_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UEAREALOOK_002_OK() runs on HttpComponent system HttpTestAdapter { // Local variables - var UserLocationEventSubscription v_userLocationEventSubscription; var Headers v_headers; - var charstring v_uri; - + var UserAreaNotification v_user_area_notification; + var charstring v_subscription_id; + + // 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_create_user_area_subscription(v_user_area_notification, v_subscription_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_LOC_API_AREA_SUB_URI & "/" & v_subscription_id, + 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_area_notification( + v_user_area_notification + ))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct UserAreaNotification ***"); + 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_user_area_subscription(v_subscription_id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC013_SRV_UEAREALOOK_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_UEAREALOOK_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_get( + PICS_ROOT_API & PX_LOC_API_AREA_SUB_URI & "/" & PX_NON_EXISTENT_SUBSCRIPTION_ID, + 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_MEC013_SRV_UEAREALOOK_002_NF + + } // End of group ueAreaLookup + + group ueAreaSubscribe { + + /** + * @desc Check that the IUT acknowledges the creation of UE area subscription request when commanded by a MEC Application + */ + testcase TC_MEC_MEC013_SRV_UEAREASUB_001_OK_01() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var charstring v_subscription_id; + + // 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_LOC_API_AREA_SUB_URI, + v_headers, + m_http_message_body_json( + m_body_json_user_area_subscription( + m_user_area_subscription( + PX_AREA_SUB_CALLBACK_URI, // callbackReference + PX_USER, + m_area_info( + ELLIPSOID_POINT_UNCERT_CIRCLE, + { + m_point({PX_UE_COORD_LAT}, {PX_UE_COORD_LONG}) + }, + PX_RADIUS + ), + PX_TRACKIMNG_ACCURACY, + 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_user_area_notification( + mw_user_area_notification // FIXME To be refined + ))))) -> value v_response { + tc_ac.stop; + + // Check HTTP Location header + if (f_check_headers(v_response.response.header) == false) { + log("*** " & testcasename() & ": FAIL: IUT failed in Area subscription ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_error); + } else { + var charstring_list v_header_location; + f_get_header(v_response.response.header, "Location", v_header_location); + v_subscription_id := regexp( + v_header_location[0], + "?+" & PX_LOC_API_USERS_SUB_URI & "/(?*)", + 0 + ); + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a userAreaNotification, SubscriptionId: ", v_subscription_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 + + // Postamble + f_delete_user_area_subscription(v_subscription_id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC013_SRV_UEAREASUB_001_OK_01 + + /** + * @desc Check that the IUT acknowledges the creation of UE area subscription request when commanded by a MEC Application + */ + testcase TC_MEC_MEC013_SRV_UEAREASUB_001_OK_02() runs on HttpComponent system HttpTestAdapter { + // Local variables + var UserAreaNotification v_user_area_notification; + var charstring v_subscription_id; + + // 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_notif_up(); + + // Test adapter configuration + + // Preamble + f_create_user_area_subscription(v_user_area_notification, v_subscription_id); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort_notif.receive( + mw_http_request( + mw_http_request_post( + -, + -, + mw_http_message_body_json( + mw_body_json_user_area_notification( + mw_user_area_notification // FIXME To be refined + ))))) { + tc_ac.stop; + + // Send response + var Headers v_headers; + f_init_default_headers_list(-, -, v_headers); + httpPort_notif.send(m_http_response(m_http_response_ok_no_body(v_headers))); + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a userAreaNotification ***"); + 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_user_area_subscription(v_subscription_id); + f_cf_01_http_notif_down(); + } // End of testcase TC_MEC_MEC013_SRV_UEAREASUB_001_OK_02 + + /** + * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - Neither callbackReference nor websockNotifConfig provided + */ + 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_LOC_API_AREA_SUB_URI, + v_headers, + m_http_message_body_json( + m_body_json_user_area_subscription( + m_user_area_subscription( + "", // callbackReference + PX_USER, + m_area_info( + ELLIPSOID_POINT_UNCERT_CIRCLE, + { + m_point({PX_UE_COORD_LAT}, {PX_UE_COORD_LONG}) + } + // No radius + ), + PX_TRACKIMNG_ACCURACY, + PX_CLIENT_ID //clientCorrelator + )))))); + 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 change of UE area subscription request 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 UserAreaNotification v_user_area_notification; + var charstring v_subscription_id; + + // 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_create_user_area_subscription(v_user_area_notification, v_subscription_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_put( + PICS_ROOT_API & PX_LOC_API_AREA_SUB_URI & "/" & v_subscription_id, + v_headers, + m_http_message_body_json( + m_body_json_user_area_subscription( + m_user_area_subscription( + PX_UE_NEW_SUB_CALLBACK_URI, // callbackReference + PX_USER, + m_area_info( + ELLIPSOID_POINT_UNCERT_CIRCLE, + { m_point({PX_UE_COORD_LAT}, {PX_UE_COORD_LONG}) }, + PX_RADIUS + ), // AreaInfo + PX_TRACKIMNG_ACCURACY // TrackingAccuracy + + + )))))); + 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_area_subscription( + mw_user_area_subscription(PX_UE_NEW_SUB_CALLBACK_URI + )))))) { + + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with updated 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 + + // 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_put( + PICS_ROOT_API & PX_LOC_API_AREA_SUB_URI & "/" & PX_NON_EXISTENT_SUBSCRIPTION_ID, + v_headers, + m_http_message_body_json( + m_body_json_user_area_subscription( + m_user_area_subscription( + PX_UE_NEW_SUB_CALLBACK_URI, // callbackReference + PX_USER, + m_area_info( + ELLIPSOID_POINT_UNCERT_CIRCLE, + { m_point({PX_UE_COORD_LAT}, {PX_UE_COORD_LONG}) }, + PX_RADIUS + ), // AreaInfo + PX_TRACKIMNG_ACCURACY // TrackingAccuracy + )))))); + 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_MEC013_SRV_UEAREASUB_002_NF + + /** + * @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_003_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var UserAreaNotification v_user_area_notification; + var charstring v_subscription_id; + + // 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_create_user_area_subscription(v_user_area_notification, v_subscription_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & PX_LOC_API_AREA_SUB_URI & "/" & v_subscription_id, + 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_003_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_003_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_LOC_API_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_003_NF + + } // End of group ueAreaSubscribe + + group ueDistanceLookup { + + /** + * @desc Check that the IUT responds with the list of UE distance subscriptions 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; + var UserDistanceNotification v_user_distance_notification; + var charstring v_subscription_id; + + // 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_create_user_distance_subscription(v_user_distance_notification, v_subscription_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_LOC_API_DISTANCE_SUB_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_notification_subscription_list( + mw_notification_subscription_list( + -, + { + *, + mw_subscription( + "UserDistanceSubscription", + v_user_distance_notification.links_.self_.href + ), + * + } + )))))) { + 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_delete_user_distance_subscription(v_subscription_id); + 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 - Invalid filter + */ + 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 & PX_LOC_API_DISTANCE_SUB_URI & "?event", + 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 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_BR + + /** + * @desc Check that the IUT responds with the distance to a UE when queried by a MEC Application + */ + testcase TC_MEC_MEC013_SRV_UEDISTLOOK_002_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var UserDistanceNotification v_user_distance_notification; + var charstring v_subscription_id; + + // 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_create_user_distance_subscription(v_user_distance_notification, v_subscription_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_LOC_API_DISTANCE_SUB_URI & v_subscription_id, + 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_distance_notification( + v_user_distance_notification + ))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct UserDistanceNotification ***"); + 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_user_distance_subscription(v_subscription_id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC013_SRV_UEDISTLOOK_002_OK + + /** + * @desc Check that the IUT responds with an error when inconsistent request was sent by a MEC Application + */ + testcase TC_MEC_MEC013_SRV_UEDISTLOOK_002_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var UserDistanceNotification v_user_distance_notification; + var charstring v_subscription_id; + + // 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_create_user_distance_subscription(v_user_distance_notification, v_subscription_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_LOC_API_DISTANCE_SUB_URI & "/" & PX_NON_EXISTENT_SUBSCRIPTION_ID, + 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_user_distance_subscription(v_subscription_id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC013_SRV_UEDISTLOOK_002_NF + + } // End of group ueDistanceLookup + + 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_01() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var charstring v_subscription_id; + + // 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_LOC_API_DISTANCE_SUB_URI, + v_headers, + m_http_message_body_json( + m_body_json_user_distance_subscription( + m_user_distance_subscription( + PX_UE_DIST_SUB_CALLBACK_URI, // callbackReference + PX_USER, + { PX_UE_MONITORED_IP_ADDRESS }, // monitoredAddress + PX_DISTANCE, + PX_TRACKIMNG_ACCURACY, + AllWithinDistance, + -, // checkImmediate + 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_user_distance_subscription( + mw_user_distance_subscription( + PX_UE_DIST_SUB_CALLBACK_URI, // callbackReference + -, + PX_USER, + { PX_UE_MONITORED_IP_ADDRESS }, // monitoredAddressPX_CLIENT_ID, //clientCorrelator + PX_DISTANCE, + PX_TRACKIMNG_ACCURACY, + AllWithinDistance, + -, // checkImmediate + PX_CLIENT_ID //clientCorrelator + )))))) -> value v_response { + tc_ac.stop; + + // Check HTTP Location header + if (f_check_headers(v_response.response.header) == false) { + log("*** " & testcasename() & ": FAIL: IUT failed in Distance subscription ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_error); + } else { + var charstring_list v_header_location; + f_get_header(v_response.response.header, "Location", v_header_location); + v_subscription_id := regexp( + v_header_location[0], + "?+" & PX_LOC_API_DISTANCE_SUB_URI & "/(?*)", + 0 + ); + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a userDistanceSubscription, SubscriptionId: ", v_subscription_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 + + // Postamble + f_delete_user_distance_subscription(v_subscription_id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC013_SRV_UEDISTSUB_001_OK_01 + + /** + * @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_02() runs on HttpComponent system HttpTestAdapter { + // Local variables + var UserDistanceNotification v_user_distance_notification; + var charstring v_subscription_id; + + // 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_notif_up(); + + // Test adapter configuration + + // Preamble + f_create_user_distance_subscription(v_user_distance_notification, v_subscription_id); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort_notif.receive( + mw_http_request( + mw_http_request_post( + -, + -, + mw_http_message_body_json( + mw_body_json_user_distance_notification( + v_user_distance_notification + ))))) { + tc_ac.stop; + + // Send response + var Headers v_headers; + f_init_default_headers_list(-, -, v_headers); + httpPort_notif.send(m_http_response(m_http_response_ok_no_body(v_headers))); + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a userDistanceNotification ***"); + 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_user_distance_subscription(v_subscription_id); + f_cf_01_http_notif_down(); + } // End of testcase TC_MEC_MEC013_SRV_UEDISTSUB_001_OK_02 + + /** + * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - Neither callbackReference nor websockNotifConfig provided + */ + 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_LOC_API_DISTANCE_SUB_URI, + v_headers, + m_http_message_body_json( + m_body_json_user_distance_subscription( + m_user_distance_subscription( + "", // callbackReference + PX_USER, + { }, // monitoredAddress is empty + PX_DISTANCE, + PX_TRACKIMNG_ACCURACY, + AllWithinDistance, + -, // checkImmediate + PX_CLIENT_ID //clientCorrelator + )))))); + 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 UserDistanceNotification v_user_distance_notification; + var charstring v_subscription_id; + + // 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_create_user_distance_subscription(v_user_distance_notification, v_subscription_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & PX_LOC_API_DISTANCE_SUB_URI & "/" & v_subscription_id, + 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_LOC_API_DISTANCE_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_UEDISTSUB_002_NF + + } // End of group ueDistanceSubscribe + + group ueInfLook { + + /** + * @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 - No Filter + */ + testcase TC_MEC_MEC013_SRV_UEINFLOOK_001_OK_01() 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_PLATand 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 UserList ***"); + 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_UEINFLOOK_001_OK_01 + + /** + * @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 - Filter with one address + */ + testcase TC_MEC_MEC013_SRV_UEINFLOOK_001_OK_02() 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_PLATand 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 & "?address=" & PX_IP_ADDRESS, + 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( + { + *, + mw_user_info(PX_IP_ADDRESS), + * + }, + ?) + ))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a UserList ***"); + 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_UEINFLOOK_001_OK_02 + + /** + * @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 - Filter with several addresses + */ + testcase TC_MEC_MEC013_SRV_UEINFLOOK_001_OK_03() 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_PLATand 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 & "?address=[" & PX_IP_ADDRESS & "," & PX_IP_ADDRESS_1 & "]", + 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( // FIXME Use superset? + { + *, + mw_user_info(PX_IP_ADDRESS), + mw_user_info(PX_IP_ADDRESS_1), + * + }, + ?) + ))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a UserList ***"); + 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_UEINFLOOK_001_OK_03 + + /** + * @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 - Filter with several zoneIds + */ + testcase TC_MEC_MEC013_SRV_UEINFLOOK_001_OK_04() 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_PLATand 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 & "?zoneId=[" & PX_ZONE_ID & "," & PX_ZONE_ID_1 & "]", + 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( // FIXME Use superset? + { + *, + mw_user_info(-, -, PX_ZONE_ID), + mw_user_info(-, -, PX_ZONE_ID_1), + * + } + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a UserList ***"); + 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_UEINFLOOK_001_OK_04 + + /** + * @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_UEINFLOOK_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 & PX_ME_APP_Q_USERS_LIST_URI & "?addr=" & PX_IP_ADDRESS, // Wrong name should trigger an error response. + 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 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_UEINFLOOK_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_UEINFLOOK_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_USERS_LIST_URI & "?address=" & PX_ACR_UNKNOWN_IP, + 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 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_UEINFLOOK_001_OK_001_NF + + } // End of group ueInfLook + + 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 & PX_LOC_API_USERS_SUB_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_notification_subscription_list( + mw_notification_subscription_list // FIXME + ))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of notification 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 + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC013_SRV_UELOCLOOK_001_OK + + /** + * @desc Check that the IUT responds with the subscription when queried by a MEC Application - UE location Event + */ + testcase TC_MEC_MEC013_SRV_UELOCLOOK_002_OK_01() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var UserLocationEventNotification v_user_location_event_notification; + var charstring v_user_location_event_subscription_id; + var UserLocationPeriodicNotification v_user_location_periodic_notification; + var charstring v_user_location_periodic_subscription_id; + + // 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_create_user_location_event_subscription(v_user_location_event_notification, v_user_location_event_subscription_id); + f_create_user_location_periodic_subscription(v_user_location_periodic_notification, v_user_location_periodic_subscription_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_LOC_API_USERS_SUB_URI & "?event", + 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_notification_subscription_list( + mw_notification_subscription_list( + -, // FIXME + { + *, + mw_subscription( + v_user_location_event_notification.notificationType, + v_user_location_event_notification.links_.self_.href + ), + * + } + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of notification 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 + + // Postamble + f_delete_user_location_event_subscription(v_user_location_event_subscription_id); + f_delete_user_location_periodic_subscription(v_user_location_periodic_subscription_id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC013_SRV_UELOCLOOK_002_OK_01 + + /** + * @desc Check that the IUT responds with the subscription when queried by a MEC Application - UE location Periodic + */ + testcase TC_MEC_MEC013_SRV_UELOCLOOK_002_OK_02() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var UserLocationEventNotification v_user_location_event_notification; + var charstring v_user_location_event_subscription_id; + var UserLocationPeriodicNotification v_user_location_periodic_notification; + var charstring v_user_location_periodic_subscription_id; + + // 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_create_user_location_event_subscription(v_user_location_event_notification, v_user_location_event_subscription_id); + f_create_user_location_periodic_subscription(v_user_location_periodic_notification, v_user_location_periodic_subscription_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_LOC_API_USERS_SUB_URI & "?periodic", + 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_notification_subscription_list( + mw_notification_subscription_list( + -, // FIXME + { + *, + mw_subscription( + v_user_location_periodic_notification.notificationType, + v_user_location_periodic_notification.links_.self_.href + ), + * + } + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of notification 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 + + // Postamble + f_delete_user_location_event_subscription(v_user_location_event_subscription_id); + f_delete_user_location_periodic_subscription(v_user_location_periodic_subscription_id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC013_SRV_UELOCLOOK_002_OK_02 + + /** + * @desc Check that the IUT responds with the subscription when queried by a MEC Application - UE location Event and address + */ + testcase TC_MEC_MEC013_SRV_UELOCLOOK_002_OK_03() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var UserLocationEventNotification v_user_location_event_notification_1; + var charstring v_user_location_event_subscription_id_1; + var UserLocationEventNotification v_user_location_event_notification_2; + var charstring v_user_location_event_subscription_id_2; + var UserLocationPeriodicNotification v_user_location_periodic_notification; + var charstring v_user_location_periodic_subscription_id; + + // 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_create_user_location_event_subscription(v_user_location_event_notification_1, v_user_location_event_subscription_id_1); + f_create_user_location_event_subscription(v_user_location_event_notification_2, v_user_location_event_subscription_id_2, PX_USER_2); + f_create_user_location_periodic_subscription(v_user_location_periodic_notification, v_user_location_periodic_subscription_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_LOC_API_USERS_SUB_URI & "?event&adress=" & PX_USER_2, + 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_notification_subscription_list( + mw_notification_subscription_list( + -, // FIXME + { + *, + mw_subscription( + v_user_location_periodic_notification.notificationType, + v_user_location_periodic_notification.links_.self_.href + ), + * + } + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of notification 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 + + // Postamble + f_delete_user_location_event_subscription(v_user_location_event_subscription_id_1); + f_delete_user_location_event_subscription(v_user_location_event_subscription_id_2); + f_delete_user_location_periodic_subscription(v_user_location_periodic_subscription_id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC013_SRV_UELOCLOOK_002_OK_03 + + /** + * @desc Check that the IUT responds with an error when inconsistent request was sent by a MEC Application - Invalid filter + */ + testcase TC_MEC_MEC013_SRV_UELOCLOOK_002_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var UserLocationEventNotification v_user_location_event_notification; + var charstring v_user_location_event_subscription_id; + var UserLocationPeriodicNotification v_user_location_periodic_notification; + var charstring v_user_location_periodic_subscription_id; + // 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 ***"); @@ -358,34 +2206,350 @@ module AtsMec_LocationAPI_TestCases { // Test adapter configuration // Preamble - f_create_user_location_event_subscription(v_userLocationEventSubscription); - v_uri :=regexp( - oct2char(unichar2oct(v_userLocationEventSubscription.links_.self_.href)), - "?+" & PX_LOC_API_USERS_SUB_URI & "/(?*)", - 0 - ); + f_create_user_location_event_subscription(v_user_location_event_notification, v_user_location_event_subscription_id); + f_create_user_location_periodic_subscription(v_user_location_periodic_notification, v_user_location_periodic_subscription_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_LOC_API_USERS_SUB_URI & "?dummy", + 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_delete_user_location_event_subscription(v_user_location_event_subscription_id); + f_delete_user_location_periodic_subscription(v_user_location_periodic_subscription_id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC013_SRV_UELOCLOOK_002_BR + + /** + * @desc Check that the IUT responds with an error when inconsistent request was sent by a MEC Application + */ + testcase TC_MEC_MEC013_SRV_UELOCLOOK_002_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var UserLocationEventNotification v_user_location_event_notification; + var charstring v_user_location_event_subscription_id; + var UserLocationPeriodicNotification v_user_location_periodic_notification; + var charstring v_user_location_periodic_subscription_id; + + // 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_create_user_location_event_subscription(v_user_location_event_notification, v_user_location_event_subscription_id); + f_create_user_location_periodic_subscription(v_user_location_periodic_notification, v_user_location_periodic_subscription_id); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( - m_http_request_delete( - PICS_ROOT_API & PX_LOC_API_USERS_SUB_URI & "/" & v_uri, - v_headers - ) - ) - ); + m_http_request_get( + PICS_ROOT_API & PX_LOC_API_USERS_SUB_URI & "?event&adress=" & PX_USER_2, + 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 - )) { + 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_user_location_event_subscription(v_user_location_event_subscription_id); + f_delete_user_location_periodic_subscription(v_user_location_periodic_subscription_id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC013_SRV_UELOCLOOK_002_NF + + /** + * @desc Check that the IUT responds with the subscription when queried by a MEC Application - UE location Event + */ + testcase TC_MEC_MEC013_SRV_UELOCLOOK_003_OK_01() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var UserLocationEventNotification v_user_location_event_notification; + var charstring v_user_location_event_subscription_id; + var UserLocationPeriodicNotification v_user_location_periodic_notification; + var charstring v_user_location_periodic_subscription_id; + + // 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_create_user_location_event_subscription(v_user_location_event_notification, v_user_location_event_subscription_id); + f_create_user_location_periodic_subscription(v_user_location_periodic_notification, v_user_location_periodic_subscription_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_LOC_API_USERS_SUB_URI & "/" & v_user_location_event_subscription_id, + 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_location_event_subscription( + mw_user_location_event_subscription( + v_user_location_event_notification.links_.self_.href + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct userLocationEventSubscription ***"); + 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_user_location_event_subscription(v_user_location_event_subscription_id); + f_delete_user_location_periodic_subscription(v_user_location_periodic_subscription_id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC013_SRV_UELOCLOOK_003_OK_01 + + /** + * @desc Check that the IUT responds with the subscription when queried by a MEC Application - UE location Periodoc + */ + testcase TC_MEC_MEC013_SRV_UELOCLOOK_003_OK_02() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var UserLocationEventNotification v_user_location_event_notification; + var charstring v_user_location_event_subscription_id; + var UserLocationPeriodicNotification v_user_location_periodic_notification; + var charstring v_user_location_periodic_subscription_id; + + // 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_create_user_location_event_subscription(v_user_location_event_notification, v_user_location_event_subscription_id); + f_create_user_location_periodic_subscription(v_user_location_periodic_notification, v_user_location_periodic_subscription_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_LOC_API_USERS_SUB_URI & "/" & v_user_location_periodic_subscription_id, + 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_location_periodic_subscription( + mw_user_location_periodic_subscription( + v_user_location_periodic_notification.links_.self_.href + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct userLocationEventSubscription ***"); + 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_user_location_event_subscription(v_user_location_event_subscription_id); + f_delete_user_location_periodic_subscription(v_user_location_periodic_subscription_id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC013_SRV_UELOCLOOK_003_OK_02 + + /** + * @desc Check that the IUT responds with the subscription when queried by a MEC Application - UE location Event + */ + testcase TC_MEC_MEC013_SRV_UELOCLOOK_003_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_LOC_API_USERS_SUB_URI & "/" & PX_NON_EXISTENT_SUBSCRIPTION_ID, + 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 userLocationEventSubscription ***"); + 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_003_NF + + } // End of group ueLocationLookup + + group ueLocSub { + + /** + * @desc Check that the IUT acknowledges the subscription by a MEC Application to notifications user location event + */ + testcase TC_MEC_MEC013_SRV_UELOCSUB_001_OK_01_01() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var charstring v_subscription_id; + + // 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_LOC_API_USERS_SUB_URI, + v_headers, + m_http_message_body_json( + m_body_json_user_location_event_subscription( + m_user_location_event_subscription( + PX_CALLBACK_REF_URL, + PX_USER, + PX_CLIENT_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_user_location_event_subscription( + mw_user_location_event_subscription( + PX_CALLBACK_REF_URL, + PX_USER, + -, + PX_CLIENT_ID + )))))) -> value v_response { tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with 204 No Content ***"); - f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + // Check HTTP Location header + if (f_check_headers(v_response.response.header) == false) { + log("*** " & testcasename() & ": FAIL: IUT failed in Distance subscription ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_error); + } else { + var charstring_list v_header_location; + f_get_header(v_response.response.header, "Location", v_header_location); + v_subscription_id := regexp( + v_header_location[0], + "?+" & PX_LOC_API_USERS_SUB_URI & "/(?*)", + 0 + ); + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a userLocationEventSubscription, SubscriptionId: ", v_subscription_id," ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } } [] tc_ac.timeout { log("*** " & testcasename() & ": INCONC: Expected message not received ***"); @@ -394,16 +2558,76 @@ module AtsMec_LocationAPI_TestCases { } // End of 'alt' statement // Postamble + f_delete_user_location_event_subscription(v_subscription_id); f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC013_SRV_UELOCSUB_002_OK + } // End of testcase TC_MEC_MEC013_SRV_UELOCSUB_001_OK_01_01 /** - * @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/remove-401s/Test%20Purposes/SRV/UELOCSUB/PlatUeLocationSubscription.tplan2 + * @desc Check that the IUT acknowledges the subscription by a MEC Application to notifications user location event */ - testcase TC_MEC_MEC013_SRV_UELOCSUB_002_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UELOCSUB_001_OK_01_02() runs on HttpComponent system HttpTestAdapter { + // Local variables + var UserLocationEventNotification v_user_location_event_notification; + var charstring v_subscription_id; + + // 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_notif_up(); + + // Test adapter configuration + + // Preamble + f_create_user_location_event_subscription(v_user_location_event_notification, v_subscription_id); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort_notif.receive( + mw_http_request( + mw_http_request_post( + -, -, + mw_http_message_body_json( + mw_body_json_user_location_event_notification( + mw_user_location_event_notification( + -, -, + v_user_location_event_notification.links_ + )))))) { + tc_ac.stop; + + // Send response + var Headers v_headers; + f_init_default_headers_list(-, -, v_headers); + httpPort_notif.send(m_http_response(m_http_response_ok_no_body(v_headers))); + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a userLocationEventNotification ***"); + 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_user_location_event_subscription(v_subscription_id); + f_cf_01_http_notif_down(); + } // End of testcase TC_MEC_MEC013_SRV_UELOCSUB_001_OK_01_02 + + /** + * @desc Check that the IUT acknowledges the subscription by a MEC Application to notifications user location periodic + */ + testcase TC_MEC_MEC013_SRV_UELOCSUB_001_OK_02_01() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; + var HttpMessage v_response; + var charstring v_subscription_id; // Test control if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) { @@ -421,12 +2645,16 @@ module AtsMec_LocationAPI_TestCases { f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( - m_http_request_delete( - PICS_ROOT_API & PX_LOC_API_USERS_SUB_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_ID, "UTF-8")), - v_headers - ) - ) - ); + m_http_request_post( + PICS_ROOT_API & PX_LOC_API_USERS_SUB_URI, + v_headers, + m_http_message_body_json( + m_body_json_user_location_periodic_subscription( + m_user_location_periodic_subscription( + PX_CALLBACK_REF_URL, + PX_USER, + PX_CLIENT_ID + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -434,12 +2662,33 @@ module AtsMec_LocationAPI_TestCases { alt { [] httpPort.receive( mw_http_response( - mw_http_response_404_not_found - )) { + mw_http_response_201_created( + mw_http_message_body_json( + mw_body_json_user_location_periodic_subscription( + mw_user_location_periodic_subscription( + PX_CALLBACK_REF_URL, + PX_USER, + -, + PX_CLIENT_ID + )))))) -> value v_response { tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with 404 Not Found ***"); - f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + // Check HTTP Location header + if (f_check_headers(v_response.response.header) == false) { + log("*** " & testcasename() & ": FAIL: IUT failed in Distance subscription ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_error); + } else { + var charstring_list v_header_location; + f_get_header(v_response.response.header, "Location", v_header_location); + v_subscription_id := regexp( + v_header_location[0], + "?+" & PX_LOC_API_USERS_SUB_URI & "/(?*)", + 0 + ); + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a userLocationPeriodicSubscription, SubscriptionId: ", v_subscription_id," ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } } [] tc_ac.timeout { log("*** " & testcasename() & ": INCONC: Expected message not received ***"); @@ -448,20 +2697,74 @@ module AtsMec_LocationAPI_TestCases { } // End of 'alt' statement // Postamble + f_delete_user_location_periodic_subscription(v_subscription_id); f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC013_SRV_UELOCSUB_002_NF - - } // End of group ueLocSub - - group ueLocPeriodicSub { + } // End of testcase TC_MEC_MEC013_SRV_UELOCSUB_001_OK_02_01 /** * @desc Check that the IUT acknowledges the subscription by a MEC Application to notifications user location periodic */ - testcase TP_MEC_MEC013_SRV_UELOCSUB_001_OK_02() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UELOCSUB_001_OK_02_02() runs on HttpComponent system HttpTestAdapter { + // Local variables + var UserLocationPeriodicNotification v_user_location_periodic_notification; + var charstring v_subscription_id; + + // 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_notif_up(); + + // Test adapter configuration + + // Preamble + f_create_user_location_periodic_subscription(v_user_location_periodic_notification, v_subscription_id); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort_notif.receive( + mw_http_request( + mw_http_request_post( + -, -, + mw_http_message_body_json( + mw_body_json_user_location_periodic_notification( + mw_user_location_periodic_notification( + -, -, + v_user_location_periodic_notification.links_ + )))))) { + tc_ac.stop; + + // Send response + var Headers v_headers; + f_init_default_headers_list(-, -, v_headers); + httpPort_notif.send(m_http_response(m_http_response_ok_no_body(v_headers))); + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a userLocationPeriodicNotification ***"); + 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_user_location_periodic_subscription(v_subscription_id); + f_cf_01_http_notif_down(); + } // End of testcase TC_MEC_MEC013_SRV_UELOCSUB_001_OK_02_02 + + /** + * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - Neither callbackReference nor websockNotifConfig provided + */ + testcase TC_MEC_MEC013_SRV_UELOCSUB_001_BR_01() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; - var HttpMessage v_response; // Test control if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) { @@ -483,11 +2786,12 @@ module AtsMec_LocationAPI_TestCases { PICS_ROOT_API & PX_LOC_API_USERS_SUB_URI, v_headers, m_http_message_body_json( - m_body_json_user_location_periodic_subscription( - m_user_location_periodic_subscription( - PX_CALLBACK_REF_URL, - PX_USER - )))))); + m_body_json_user_location_event_subscription( + m_user_location_event_subscription( + "", + PX_USER, + PX_CLIENT_ID + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -495,16 +2799,11 @@ module AtsMec_LocationAPI_TestCases { alt { [] httpPort.receive( mw_http_response( - mw_http_response_201_created( - mw_http_message_body_json( - mw_body_json_user_location_periodic_subscription( - mw_user_location_periodic_subscription( - PX_CALLBACK_REF_URL, - PX_USER - )))))) -> value v_response { + mw_http_response_400_bad_request + )) { tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with a callbackURL ***"); + log("*** " & testcasename() & ": PASS: IUT successfully responds with 400 Bad Request ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -514,15 +2813,13 @@ module AtsMec_LocationAPI_TestCases { } // End of 'alt' statement // Postamble - f_delete_user_location_periodic_subscription(v_response.response.body.json_body.userLocationPeriodicSubscription); f_cf_01_http_down(); - } // End of testcase TP_MEC_MEC013_SRV_UELOCSUB_001_OK_02 + } // End of testcase TC_MEC_MEC013_SRV_UELOCSUB_001_BR_01 /** - * @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 + * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - Neither callbackReference nor websockNotifConfig provided */ - testcase TC_MEC_MEC013_SRV_UETRACKSUB_001_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UELOCSUB_001_BR_02() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -543,15 +2840,15 @@ module AtsMec_LocationAPI_TestCases { httpPort.send( m_http_request( m_http_request_post( - PICS_ROOT_API & PX_LOC_API_USERS_SUB_URI & "_Invalid", + PICS_ROOT_API & PX_LOC_API_USERS_SUB_URI, v_headers, m_http_message_body_json( m_body_json_user_location_periodic_subscription( m_user_location_periodic_subscription( - PX_CALLBACK_REF_URL, - PX_CLIENT_ID_UNKNOWN, - PX_USER - )))))); + "", + PX_USER, + PX_CLIENT_ID + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -560,7 +2857,7 @@ module AtsMec_LocationAPI_TestCases { [] httpPort.receive( mw_http_response( mw_http_response_400_bad_request - )) { + )) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with 400 Bad Request ***"); @@ -574,17 +2871,16 @@ module AtsMec_LocationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC013_SRV_UETRACKSUB_001_BR + } // End of testcase TC_MEC_MEC013_SRV_UELOCSUB_001_BR_02 /** * @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 { + testcase TC_MEC_MEC013_SRV_UELOCSUB_002_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; - var UserLocationPeriodicSubscription v_position_notification_subscription; - var charstring v_uri; + var UserLocationEventNotification v_user_location_event_notification; + var charstring v_subscription_id; // Test control if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) { @@ -599,33 +2895,26 @@ module AtsMec_LocationAPI_TestCases { // Test adapter configuration // Preamble - f_create_user_location_periodic_subscription(v_position_notification_subscription); - v_uri := regexp( - oct2char(unichar2oct(v_position_notification_subscription.links_.self_.href)), - "?+" & PX_LOC_API_USERS_SUB_URI & "/(?*)", - 0 - ); + f_create_user_location_event_subscription(v_user_location_event_notification, v_subscription_id); + 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_LOC_API_USERS_SUB_URI & "/" & v_uri, + PICS_ROOT_API & PX_LOC_API_USERS_SUB_URI & "/" & v_subscription_id, 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 204 No Content ***"); + log("*** " & testcasename() & ": PASS: IUT successfully responds with 204 No Content ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -636,13 +2925,12 @@ module AtsMec_LocationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC013_SRV_UETRACKSUB_002_OK + } // 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 - * @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_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UELOCSUB_002_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -665,9 +2953,7 @@ module AtsMec_LocationAPI_TestCases { m_http_request_delete( PICS_ROOT_API & PX_LOC_API_USERS_SUB_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_ID, "UTF-8")), v_headers - ) - ) - ); + ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -676,203 +2962,98 @@ module AtsMec_LocationAPI_TestCases { [] httpPort.receive( mw_http_response( mw_http_response_404_not_found - )) { + )) { tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds 404 Not Found ***"); + 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_UETRACKSUB_002_NF - - } // End of group ueLocPeriodicSub - - group ueInfLook { - - /** - * @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 - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/remove-401s/Test%20Purposes/SRV/UEINFLOOK/PlatUeInformationLookup.tplan2 - */ - testcase TC_MEC_MEC013_SRV_UEINFLOOK_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_PLATand 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 UserList ***"); - 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_UEINFLOOK_001_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/gitlab/mec/gs032p2-test-purposes/blob/remove-401s/Test%20Purposes/SRV/UEINFLOOK/PlatUeInformationLookup.tplan2 - */ - testcase TC_MEC_MEC013_SRV_UEINFLOOK_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 & PX_ME_APP_Q_USERS_LIST_URI & "/invalid/" & oct2char(unichar2oct(PX_USER, "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 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_UEINFLOOK_001_BR + } + [] 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 /** - * @desc Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/remove-401s/Test%20Purposes/SRV/UEINFLOOK/PlatUeInformationLookup.tplan2 + * @desc Check that the IUT acknowledges a request to modify an existing subscription by a MEC Application */ - testcase TC_MEC_MEC013_SRV_UEINFLOOK_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_USERS_LIST_URI & "/" & oct2char(unichar2oct(PX_USER_UNKNOWN, "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 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); + testcase TC_MEC_MEC013_SRV_UELOCSUB_003_OK_01() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var UserLocationEventNotification v_user_location_event_notification; + var charstring v_subscription_id; + + // 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; } - } // End of 'alt' statement - - // Postamble - f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC013_SRV_UEINFLOOK_001_OK_001_NF - - } // End of group ueInfLook - - group ueInfSub { + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_user_location_event_subscription(v_user_location_event_notification, v_subscription_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_put( + PICS_ROOT_API & PX_LOC_API_USERS_SUB_URI & "/" & v_subscription_id, + v_headers, + m_http_message_body_json( + m_body_json_user_location_event_subscription( + m_user_location_event_subscription( + PX_UE_NEW_SUB_CALLBACK_URI, + PX_USER, + PX_CLIENT_ID + )))))); + 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_location_event_subscription( + mw_user_location_event_subscription( + PX_UE_NEW_SUB_CALLBACK_URI, + PX_USER, + -, + PX_CLIENT_ID + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully updates userLocationPeriodicSubscription, SubscriptionId: ", v_subscription_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 + + // Postamble + f_delete_user_location_periodic_subscription(v_subscription_id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC013_SRV_UELOCSUB_003_OK_01 /** - * @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 - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/remove-401s/Test%20Purposes/SRV/UEINFSUB/PlatUeInformationSubscription.tplan2 + * @desc Check that the IUT acknowledges a request to modify an existing subscription by a MEC Application */ - testcase TC_MEC_MEC013_SRV_UEINFSUB_001_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UELOCSUB_003_OK_02() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; - var HttpMessage v_response; + var UserLocationPeriodicNotification v_user_location_periodic_notification; + var charstring v_subscription_id; // Test control if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) { @@ -887,19 +3068,20 @@ module AtsMec_LocationAPI_TestCases { // Test adapter configuration // Preamble + f_create_user_location_periodic_subscription(v_user_location_periodic_notification, v_subscription_id); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( - m_http_request_post( - PICS_ROOT_API & PX_LOC_API_ZONES_SUB_URI, - v_headers, - m_http_message_body_json( - m_body_json_zone_location_event_subscription( - m_zone_location_event_subscription( - PX_CALLBACK_REF_URL, - PX_CLIENT_ID, - PX_ZONE_ID - )))))); + m_http_request_put( + PICS_ROOT_API & PX_LOC_API_USERS_SUB_URI & "/" & v_subscription_id, + v_headers, + m_http_message_body_json( + m_body_json_user_location_periodic_subscription( + m_user_location_periodic_subscription( + PX_UE_NEW_SUB_CALLBACK_URI, + PX_USER, + PX_CLIENT_ID + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -907,17 +3089,18 @@ module AtsMec_LocationAPI_TestCases { alt { [] httpPort.receive( mw_http_response( - mw_http_response_201_created( - mw_http_message_body_json( - mw_body_json_zone_location_event_subscription( - mw_zone_location_event_subscription( - PX_CALLBACK_REF_URL, - PX_CLIENT_ID, - PX_ZONE_ID - )))))) -> value v_response { + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_user_location_periodic_subscription( + mw_user_location_periodic_subscription( + PX_UE_NEW_SUB_CALLBACK_URI, + PX_USER, + -, + PX_CLIENT_ID + )))))) { tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with a callbackURL ***"); + log("*** " & testcasename() & ": PASS: IUT successfully updates userLocationPeriodicSubscription, SubscriptionId: ", v_subscription_id," ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -927,17 +3110,18 @@ module AtsMec_LocationAPI_TestCases { } // End of 'alt' statement // Postamble - f_delete_zone_location_event_subscription(v_response.response.body.json_body.zoneLocationEventSubscription); + f_delete_user_location_periodic_subscription(v_subscription_id); f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC013_SRV_UEINFSUB_001_OK + } // End of testcase TC_MEC_MEC013_SRV_UELOCSUB_003_OK_02 /** - * @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/UEINFSUB/PlatUeInformationSubscription.tplan2 + * @desc Check that the IUT responds with an error when received an inconsistent request */ - testcase TC_MEC_MEC013_SRV_UEINFSUB_001_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UELOCSUB_003_BR_01() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; + var UserLocationEventNotification v_user_location_event_notification; + var charstring v_subscription_id; // Test control if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) { @@ -952,56 +3136,53 @@ module AtsMec_LocationAPI_TestCases { // Test adapter configuration // Preamble + f_create_user_location_event_subscription(v_user_location_event_notification, v_subscription_id); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( - m_http_request_post( - PICS_ROOT_API & "/invilad/" & PX_LOC_API_ZONES_SUB_URI, - v_headers, - m_http_message_body_json( - m_body_json_zone_location_event_subscription( - m_zone_location_event_subscription( - PX_CLIENT_ID, - PX_CALLBACK_REF_URL, - PX_ZONE_ID - ) - ) - ) - ) - ) - ); + m_http_request_put( + PICS_ROOT_API & PX_LOC_API_USERS_SUB_URI & "/" & v_subscription_id, + v_headers, + m_http_message_body_json( + m_body_json_user_location_event_subscription( + m_user_location_event_subscription( + "", + PX_USER, + PX_CLIENT_ID + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_ac.start; alt { [] httpPort.receive( - mw_http_response( - mw_http_response_400_bad_request - )) { + mw_http_response( + mw_http_response_400_bad_request + )) { tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds 400 Bad Request ***"); - f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + 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_user_location_periodic_subscription(v_subscription_id); f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC013_SRV_UEINFSUB_001_BR + } // End of testcase TC_MEC_MEC013_SRV_UELOCSUB_003_BR_01 /** - * @desc Check that the IUT acknowledges the cancellation of UE information change notifications when commanded by a MEC Application - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/remove-401s/Test%20Purposes/SRV/UEINFSUB/PlatUeInformationSubscription.tplan2 + * @desc Check that the IUT responds with an error when received an inconsistent request */ - testcase TC_MEC_MEC013_SRV_UEINFSUB_002_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UELOCSUB_003_BR_02() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; - var ZoneLocationEventSubscription v_zone_location_event_subscription; - var charstring v_uri; + var UserLocationPeriodicNotification v_user_location_periodic_notification; + var charstring v_subscription_id; // Test control if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) { @@ -1016,19 +3197,20 @@ module AtsMec_LocationAPI_TestCases { // Test adapter configuration // Preamble - f_create_zone_location_event_subscription(v_zone_location_event_subscription); - v_uri := regexp( - oct2char(unichar2oct(v_zone_location_event_subscription.links_.self_.href)), - "?+" & PX_LOC_API_ZONES_SUB_URI & "/(?*)", - 0 - ); + f_create_user_location_periodic_subscription(v_user_location_periodic_notification, v_subscription_id); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( - m_http_request_delete( - PICS_ROOT_API & PX_LOC_API_ZONES_SUB_URI & "/" & v_uri, - v_headers - ))); + m_http_request_put( + PICS_ROOT_API & PX_LOC_API_USERS_SUB_URI & "/" & v_subscription_id, + v_headers, + m_http_message_body_json( + m_body_json_user_location_periodic_subscription( + m_user_location_periodic_subscription( + "", + PX_USER, + PX_CLIENT_ID + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -1036,11 +3218,11 @@ module AtsMec_LocationAPI_TestCases { alt { [] httpPort.receive( mw_http_response( - mw_http_response_204_no_content - )) { + mw_http_response_400_bad_request + )) { tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with 204 No Content ***"); + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct error code ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -1050,14 +3232,14 @@ module AtsMec_LocationAPI_TestCases { } // End of 'alt' statement // Postamble + f_delete_user_location_periodic_subscription(v_subscription_id); f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC013_SRV_UEINFSUB_002_OK + } // End of testcase TC_MEC_MEC013_SRV_UELOCSUB_003_BR_02 /** - * @desc Check that the IUT acknowledges the cancellation of UE information change notifications when commanded by a MEC Application - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/remove-401s/Test%20Purposes/SRV/UEINFSUB/PlatUeInformationSubscription.tplan2 + * @desc Check that the IUT acknowledges a request to modify a not existing subscription by a MEC Application */ - testcase TC_MEC_MEC013_SRV_UEINFSUB_002_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UELOCSUB_003_NF_01() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -1077,24 +3259,28 @@ module AtsMec_LocationAPI_TestCases { f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( - m_http_request_delete( - PICS_ROOT_API & PX_LOC_API_ZONES_SUB_URI & "/" & oct2char(unichar2oct(PX_USER_UNKNOWN, "UTF-8")), - v_headers - ) - ) - ); + m_http_request_put( + PICS_ROOT_API & PX_LOC_API_USERS_SUB_URI & "/" & PX_NON_EXISTENT_SUBSCRIPTION_ID, + v_headers, + m_http_message_body_json( + m_body_json_user_location_event_subscription( + m_user_location_event_subscription( + PX_UE_NEW_SUB_CALLBACK_URI, + PX_USER, + PX_CLIENT_ID + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_ac.start; alt { [] httpPort.receive( - mw_http_response( - mw_http_response_404_not_found - )) { + mw_http_response( + mw_http_response_404_not_found + )) { tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds 404 Not Found ***"); + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct error code ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -1105,63 +3291,53 @@ module AtsMec_LocationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC013_SRV_UEINFSUB_002_NF + } // End of testcase TC_MEC_MEC013_SRV_UELOCSUB_003_NF_01 - } // End of group ueInfSub - - /* - * 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 + * @desc Check that the IUT responds with an error when received an inconsistent request */ - testcase TC_MEC_MEC013_SRV_RLOCLOOK_001_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UELOCSUB_003_NF_02() 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 - ) - ) - ); + m_http_request_put( + PICS_ROOT_API & PX_LOC_API_USERS_SUB_URI & "/" & PX_NON_EXISTENT_SUBSCRIPTION_ID, + v_headers, + m_http_message_body_json( + m_body_json_user_location_periodic_subscription( + m_user_location_periodic_subscription( + PX_UE_NEW_SUB_CALLBACK_URI, + PX_USER, + PX_CLIENT_ID + )))))); 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 { + mw_http_response_404_not_found + )) { tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with an AccessPoint list containing a ZoneId ***"); + + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct error code ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -1169,207 +3345,373 @@ 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_RLOCLOOK_001_OK + } // End of testcase TC_MEC_MEC013_SRV_UELOCSUB_003_NF_02 + + } // End of group ueLocSub + + group ueTestNot { /** - * @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 provides a test notification when requested by a MEC Application */ - testcase TC_MEC_MEC013_SRV_RLOCLOOK_001_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UETESTNOT_001_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; - + var HttpMessage v_response; + var charstring v_subscription_id; + // 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; + 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(); - + f_cf_01_http_notif_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 - ) - ) - ); + m_http_request_post( + PICS_ROOT_API & PX_LOC_API_USERS_SUB_URI, + v_headers, + m_http_message_body_json( + m_body_json_user_location_event_subscription( + m_user_location_event_subscription( + PX_CALLBACK_REF_URL, + PX_USER, + PX_CLIENT_ID, + true + )))))); 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_location_event_subscription( + mw_user_location_event_subscription( + PX_CALLBACK_REF_URL, + PX_USER, + -, + PX_CLIENT_ID, + true + )))))) -> value v_response { + tc_ac.stop; + + // Check HTTP Location header + if (f_check_headers(v_response.response.header) == false) { + log("*** " & testcasename() & ": FAIL: IUT failed in Distance subscription ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_error); + } else { + var charstring_list v_header_location; + f_get_header(v_response.response.header, "Location", v_header_location); + v_subscription_id := regexp( + v_header_location[0], + "?+" & PX_LOC_API_USERS_SUB_URI & "/(?*)", + 0 + ); + + log("*** " & testcasename() & ": INFO: IUT successfully responds with a userLocationEventSubscription, SubscriptionId: ", v_subscription_id," ***"); + repeat; // Wait for test notification + } + } + [] httpPort_notif.receive( + mw_http_request( + mw_http_request_post( + -, + -, + mw_http_message_body_json( + mw_body_json_test_notification( + mw_test_notification( + v_response.response.body.json_body.userLocationEventNotification.links_ + )))))) { + tc_ac.stop; + + // Send response + f_init_default_headers_list(-, -, v_headers); + httpPort_notif.send(m_http_response(m_http_response_ok_no_body(v_headers))); + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a userAreaNotification ***"); + 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_user_location_event_subscription(v_subscription_id); + f_cf_01_http_notif_down(); + } // End of testcase TC_MEC_MEC013_SRV_UETESTNOT_001_OK + /** + * @desc Check that the IUT terminates notifications after time expiration + */ + testcase TC_MEC_MEC013_SRV_UETESTNOT_002_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var charstring v_subscription_id; + var boolean v_notification_received_after_expiry := false; + timer tc_expiry := PX_NOTIF_EXPIRY; + timer tc_expiry_guard := PX_NOTIF_EXPIRY / 2.0; + + // 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_notif_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_LOC_API_USERS_SUB_URI, + v_headers, + m_http_message_body_json( + m_body_json_user_location_event_subscription( + m_user_location_event_subscription( + PX_CALLBACK_REF_URL, + PX_USER, + PX_CLIENT_ID, + -, -, -, -, + m_time_stamp( + float2int(PX_NOTIF_EXPIRY) + ))))))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + // Test Body tc_ac.start; + tc_expiry.start; alt { [] httpPort.receive( mw_http_response( - mw_http_response_404_not_found() - )) { + mw_http_response_201_created( + mw_http_message_body_json( + mw_body_json_user_location_event_subscription( + mw_user_location_event_subscription( + PX_CALLBACK_REF_URL, + PX_USER, + -, + PX_CLIENT_ID + )))))) -> value v_response { tc_ac.stop; + + // Check HTTP Location header + if (f_check_headers(v_response.response.header) == false) { + log("*** " & testcasename() & ": FAIL: IUT failed in Distance subscription ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_error); + } else { + var charstring_list v_header_location; + f_get_header(v_response.response.header, "Location", v_header_location); + v_subscription_id := regexp( + v_header_location[0], + "?+" & PX_LOC_API_USERS_SUB_URI & "/(?*)", + 0 + ); - log("*** " & testcasename() & ": PASS: IUT successfully responds with a ProblemDetails set to 404 Not Found ***"); - f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + log("*** " & testcasename() & ": INFO: IUT successfully responds with a userLocationEventSubscription, SubscriptionId: ", v_subscription_id," ***"); + tc_ac.start; + repeat; // Wait for test notification + } + } + [] httpPort_notif.receive( + mw_http_request( + mw_http_request_post( + -, + -, + mw_http_message_body_json( + mw_body_json_test_notification( + mw_test_notification( + v_response.response.body.json_body.userLocationEventNotification.links_ + )))))) { + tc_ac.stop; + + // Send response + f_init_default_headers_list(-, -, v_headers); + httpPort_notif.send(m_http_response(m_http_response_ok_no_body(v_headers))); + + log("*** " & testcasename() & ": INFO: Receive new notification ***"); + + v_notification_received_after_expiry := true; + tc_ac.start; + repeat; + } + [] tc_expiry.timeout { + v_notification_received_after_expiry := false; + tc_expiry_guard.start; + repeat; + } + [] tc_expiry_guard.timeout { + if (v_notification_received_after_expiry) { + log("*** " & testcasename() & ": FAIL: Received notification after expiration time ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_error); + } else { + log("*** " & testcasename() & ": PASS: No more notification received ***"); + 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 + f_delete_user_location_event_subscription(v_subscription_id); + f_cf_01_http_notif_down(); + } // End of testcase TC_MEC_MEC013_SRV_UETESTNOT_002_OK + } // End of group ueTestNot + group ueZoneLook { + // TODO + } // End of group ueZoneLook - /* - * UE Area Subscribe (UEAREASUB) - */ - group ueAreaSubscribe { + group ueZoneSub { /** - * @desc Check that the IUT acknowledges the creation of UE area subscription request when commanded by a MEC Application + * @desc Check that the IUT acknowledges the creation of UE zone subscription request when commanded by a MEC Application */ - testcase TC_MEC_MEC013_SRV_UEAREASUB_001_OK_01() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UEZONESUB_001_OK_01_01() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; - + var charstring v_subscription_id; + // 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; + 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_LOC_API_AREA_SUB_URI, - v_headers, - m_http_message_body_json( - m_body_json_user_area_subscription( - m_user_area_subscription( - PX_AREA_SUB_CALLBACK_URI, // callbackReference - PX_USER, - m_area_info( - ELLIPSOID_POINT_UNCERT_CIRCLE, - { - m_point({PX_UE_COORD_LAT}, {PX_UE_COORD_LONG}) - }, - PX_RADIUS - ), - PX_TRACKIMNG_ACCURACY, - PX_CLIENT_ID //clientCorrelator - )))))); + m_http_request_post( + PICS_ROOT_API & PX_LOC_API_ZONES_SUB_URI, + v_headers, + m_http_message_body_json( + m_body_json_zone_location_event_subscription( + m_zone_location_event_subscription( + PX_CALLBACK_REF_URL, + PX_CLIENT_ID, + PX_ZONE_ID + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); - + // Test Body tc_ac.start; - alt { + alt { [] httpPort.receive( mw_http_response( - mw_http_response_201_created( + mw_http_response_201_created( mw_http_message_body_json( - mw_body_json_user_area_subscription( - mw_user_area_subscription( - PX_AREA_SUB_CALLBACK_URI, // callbackReference - -, -, - mw_area_info( - ELLIPSOID_POINT_UNCERT_CIRCLE, - { - m_point({PX_UE_COORD_LAT}, {PX_UE_COORD_LONG}) - }, - PX_RADIUS - ), - PX_TRACKIMNG_ACCURACY, - PX_CLIENT_ID //clientCorrelator - )))))) -> value v_response { + mw_body_json_zone_location_event_notification( + mw_zone_location_event_notification( + // FIXME + )))))) -> value v_response { tc_ac.stop; + + // Check HTTP Location header + if (f_check_headers(v_response.response.header) == false) { + log("*** " & testcasename() & ": FAIL: IUT failed in Distance subscription ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_error); + } else { + var charstring_list v_header_location; + f_get_header(v_response.response.header, "Location", v_header_location); + v_subscription_id := regexp( + v_header_location[0], + "?+" & PX_LOC_API_ZONES_SUB_URI & "/(?*)", + 0 + ); - log("*** " & testcasename() & ": PASS: IUT successfully responds with a userAreaSubscription ***"); - f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + log("*** " & testcasename() & ": PASS: IUT successfully responds with a zoneLocationEventSubscription, SubscriptionId: ", v_subscription_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 - + // Postamble - f_delete_user_area_subscription(v_response.response.body.json_body.userAreaSubscription); + f_delete_zone_location_event_subscription(v_subscription_id); f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC013_SRV_UEAREASUB_001_OK_01 + } // End of testcase TC_MEC_MEC013_SRV_UEZONESUB_001_OK_01_01 /** - * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application + * @desc Check that the IUT acknowledges the creation of UE zone subscription request when commanded by a MEC Application */ - testcase TC_MEC_MEC013_SRV_UEAREASUB_001_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UEZONESUB_001_OK_01_02() runs on HttpComponent system HttpTestAdapter { // Local variables - var Headers v_headers; - + var ZoneLocationEventNotification v_zone_location_event_notification; + var charstring v_subscription_id; + // 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; + 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(); - + f_cf_01_http_notif_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_LOC_API_AREA_SUB_URI, - v_headers, - m_http_message_body_json( - m_body_json_user_area_subscription( - m_user_area_subscription( - PX_AREA_SUB_CALLBACK_URI, // callbackReference - PX_USER, - m_area_info( - ELLIPSOID_POINT_UNCERT_CIRCLE, - { - m_point({PX_UE_COORD_LAT}, {PX_UE_COORD_LONG}) - } - // No radius - ), - PX_TRACKIMNG_ACCURACY, - PX_CLIENT_ID //clientCorrelator - )))))); + f_create_zone_location_event_subscription(v_zone_location_event_notification, v_subscription_id); f_selfOrClientSyncAndVerdict(c_prDone, e_success); - + // Test Body tc_ac.start; alt { - [] httpPort.receive( - mw_http_response( - mw_http_response_400_bad_request - )) { + [] httpPort_notif.receive( + mw_http_request( + mw_http_request_post( + -, -, + mw_http_message_body_json( + mw_body_json_zone_location_event_notification( + mw_zone_location_event_notification( + -, + v_zone_location_event_notification.links_ + )))))) { tc_ac.stop; + + // Send response + var Headers v_headers; + f_init_default_headers_list(-, -, v_headers); + httpPort_notif.send(m_http_response(m_http_response_ok_no_body(v_headers))); - log("*** " & testcasename() & ": PASS: IUT successfully responds with 400 Bad Request ***"); + log("*** " & testcasename() & ": PASS: IUT successfully responds with a zoneLocationEventNotification ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -1377,114 +3719,137 @@ 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_UEAREASUB_001_BR + f_delete_zone_location_event_subscription(v_subscription_id); + f_cf_01_http_notif_down(); + } // End of testcase TC_MEC_MEC013_SRV_UEZONESUB_001_OK_01_02 /** - * @desc Check that the IUT acknowledges the cancellation of UE area change notifications when commanded by a MEC Application + * @desc Check that the IUT acknowledges the creation of UE zone subscription request when commanded by a MEC Application - OperationStatus constraint */ - testcase TC_MEC_MEC013_SRV_UEAREASUB_002_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UEZONESUB_001_OK_02_01_01() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; - var UserAreaSubscription v_user_area_subscription; - var charstring v_uri; - + var HttpMessage v_response; + var charstring v_subscription_id; + // 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; + 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_user_area_subscription(v_user_area_subscription); - v_uri := regexp( - oct2char(unichar2oct(v_user_area_subscription.links_.self_.href)), - "?+" & PX_LOC_API_AREA_SUB_URI & "/(?*)", - 0 - ); httpPort.send( m_http_request( - m_http_request_delete( - PICS_ROOT_API & PX_LOC_API_AREA_SUB_URI & "/" & v_uri, - v_headers - ) - ) - ); + m_http_request_post( + PICS_ROOT_API & PX_LOC_API_ZONES_SUB_URI, + v_headers, + m_http_message_body_json( + m_body_json_zone_status_subscription( + m_zone_status_subscription( + PX_AREA_SUB_CALLBACK_URI, + -, + PX_ZONE_ID, + -, -, -, -, -, -, -, + Serviceable + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); - + // Test Body tc_ac.start; alt { [] httpPort.receive( mw_http_response( - mw_http_response_204_no_content - )) { - + mw_http_response_201_created( + mw_http_message_body_json( + mw_body_json_zone_status_notification( + mw_zone_status_notification( + -, -, + Serviceable + )))))) -> value v_response { tc_ac.stop; + + // Check HTTP Location header + if (f_check_headers(v_response.response.header) == false) { + log("*** " & testcasename() & ": FAIL: IUT failed in Distance subscription ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_error); + } else { + var charstring_list v_header_location; + f_get_header(v_response.response.header, "Location", v_header_location); + v_subscription_id := regexp( + v_header_location[0], + "?+" & PX_LOC_API_ZONES_SUB_URI & "/(?*)", + 0 + ); - log("*** " & testcasename() & ": PASS: IUT successfully responds with no content ***"); - f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + log("*** " & testcasename() & ": PASS: IUT successfully responds with a zoneLocationEventSubscription, SubscriptionId: ", v_subscription_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 - + // Postamble + f_delete_zone_status_subscription(v_subscription_id); f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC013_SRV_UEAREASUB_002_OK - + } // End of testcase TC_MEC_MEC013_SRV_UEZONESUB_001_OK_02_01_01 + /** - * @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 creation of UE zone subscription request when commanded by a MEC Application - OperationStatus constraint */ - testcase TC_MEC_MEC013_SRV_UEAREASUB_002_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UEZONESUB_001_OK_02_01_02() runs on HttpComponent system HttpTestAdapter { // Local variables - var Headers v_headers; - + var ZoneStatusNotification v_zone_status_notification; + var charstring v_subscription_id; + // 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; + 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(); - + f_cf_01_http_notif_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_LOC_API_AREA_SUB_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_ID, "UTF-8")), - v_headers - ) - ) - ); + f_create_zone_status_subscription(v_zone_status_notification, v_subscription_id); f_selfOrClientSyncAndVerdict(c_prDone, e_success); - + // Test Body tc_ac.start; alt { - [] httpPort.receive( - mw_http_response( - mw_http_response_404_not_found - )) { + [] httpPort_notif.receive( + mw_http_request( + mw_http_request_post( + -, -, + mw_http_message_body_json( + mw_body_json_zone_status_notification( + mw_zone_status_notification( + v_zone_status_notification.links_ + )))))) { tc_ac.stop; + + // Send response + var Headers v_headers; + f_init_default_headers_list(-, -, v_headers); + httpPort_notif.send(m_http_response(m_http_response_ok_no_body(v_headers))); - log("*** " & testcasename() & ": PASS: IUT successfully responds with 404 Not Found ***"); + log("*** " & testcasename() & ": PASS: IUT successfully responds with a zoneLocationEventNotification ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -1492,117 +3857,131 @@ 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_UEAREASUB_002_NF - - } // End of group ueAreaSubscribe - - /* - * UE Distance Lookup (UEDISTLOOK) - */ - group ueDistanceLookup { + f_delete_zone_status_subscription(v_subscription_id); + f_cf_01_http_notif_down(); + } // End of testcase TC_MEC_MEC013_SRV_UEZONESUB_001_OK_02_01_02 /** - * @desc Check that the IUT responds with the distance to a UE when queried by a MEC Application + * @desc Check that the IUT acknowledges the creation of UE zone subscription request when commanded by a MEC Application - UserNumEvent constraint */ - testcase TC_MEC_MEC013_SRV_UEDISTLOOK_001_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UEZONESUB_001_OK_02_02_01() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; - + var HttpMessage v_response; + var charstring v_subscription_id; + // 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; + 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 - ) - ) - ); + m_http_request_post( + PICS_ROOT_API & PX_LOC_API_ZONES_SUB_URI, + v_headers, + m_http_message_body_json( + m_body_json_zone_status_subscription( + m_zone_status_subscription( + PX_AREA_SUB_CALLBACK_URI, + -, + PX_ZONE_ID, + -, -, -, + PX_UPPER_NUM_USER_THRESHOLD, + PX_LOWER_NUM_USER_THRESHOLD + )))))); 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 - ))))) { - + mw_http_response_201_created( + mw_http_message_body_json( + mw_body_json_zone_status_notification( + mw_zone_status_notification( + // FIXME + )))))) -> value v_response { tc_ac.stop; + + // Check HTTP Location header + if (f_check_headers(v_response.response.header) == false) { + log("*** " & testcasename() & ": FAIL: IUT failed in Distance subscription ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_error); + } else { + var charstring_list v_header_location; + f_get_header(v_response.response.header, "Location", v_header_location); + v_subscription_id := regexp( + v_header_location[0], + "?+" & PX_LOC_API_ZONES_SUB_URI & "/(?*)", + 0 + ); - log("*** " & testcasename() & ": PASS: IUT successfully responds with a 200 OK ***"); - f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + log("*** " & testcasename() & ": PASS: IUT successfully responds with a zoneLocationEventSubscription, SubscriptionId: ", v_subscription_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 - + // Postamble + f_delete_zone_status_subscription(v_subscription_id); f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC013_SRV_UEDISTLOOK_001_OK - + } // End of testcase TC_MEC_MEC013_SRV_UEZONESUB_001_OK_02_02_01 + /** - * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application + * @desc Check that the IUT acknowledges the creation of UE zone subscription request when commanded by a MEC Application - UserNumEvent constraint */ - testcase TC_MEC_MEC013_SRV_UEDISTLOOK_001_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UEZONESUB_001_OK_02_02_02() runs on HttpComponent system HttpTestAdapter { // Local variables - var Headers v_headers; - + var ZoneStatusNotification v_zone_status_notification; + var charstring v_subscription_id; + // 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; + 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(); - + f_cf_01_http_notif_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_create_zone_status_subscription(v_zone_status_notification, v_subscription_id, omit, PX_UPPER_NUM_USER_THRESHOLD, PX_LOWER_NUM_USER_THRESHOLD); f_selfOrClientSyncAndVerdict(c_prDone, e_success); - + // Test Body tc_ac.start; alt { - [] httpPort.receive( - mw_http_response( - mw_http_response_400_bad_request - )) { - + [] httpPort_notif.receive( + mw_http_request( + mw_http_request_post( + -, -, + mw_http_message_body_json( + mw_body_json_zone_status_notification( + v_zone_status_notification + ))))) { tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a 400 bad request ***"); + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a zoneLocationEventNotification ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -1610,81 +3989,57 @@ module AtsMec_LocationAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + // Postamble + f_delete_zone_status_subscription(v_subscription_id); 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 { - + } // End of testcase TC_MEC_MEC013_SRV_UEZONESUB_001_OK_02_02_02 + /** - * @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 + * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - Neither callbackReference nor websockNotifConfig provided */ - testcase TC_MEC_MEC013_SRV_UEDISTSUB_001_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UEZONESUB_001_BR() 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; + 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_LOC_API_DISTANCE_SUB_URI, + PICS_ROOT_API & PX_LOC_API_ZONES_SUB_URI, v_headers, m_http_message_body_json( - m_body_json_user_distance_subscription( - m_user_distance_subscription( - PX_UE_DIST_SUB_CALLBACK_URI, // callbackReference - PX_USER, - { PX_UE_MONITORED_IP_ADDRESS }, // monitoredAddress - PX_DISTANCE, - PX_TRACKIMNG_ACCURACY, - AllWithinDistance, - -, // checkImmediate - PX_CLIENT_ID //clientCorrelator - )))))); + m_body_json_zone_location_event_subscription( + m_zone_location_event_subscription( + "", + PX_CLIENT_ID, + PX_ZONE_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_user_distance_subscription( - mw_user_distance_subscription( - PX_UE_DIST_SUB_CALLBACK_URI, // callbackReference - -, - PX_USER, - { PX_UE_MONITORED_IP_ADDRESS }, // monitoredAddressPX_CLIENT_ID, //clientCorrelator - PX_DISTANCE, - PX_TRACKIMNG_ACCURACY, - AllWithinDistance, - -, // checkImmediate - PX_CLIENT_ID //clientCorrelator - )))))) -> value v_response { + mw_http_response_400_bad_request + )) { tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with a userDistanceSubscription ***"); + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct error code ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -1692,63 +4047,66 @@ module AtsMec_LocationAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + // Postamble - f_delete_user_distance_subscription(v_response.response.body.json_body.userDistanceSubscription); f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC013_SRV_UEDISTSUB_001_OK - + } // End of testcase TC_MEC_MEC013_SRV_UEZONESUB_001_BR + /** - * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application + * @desc Check that the IUT acknowledges the change of UE area subscription request when commanded by a MEC Application */ - testcase TC_MEC_MEC013_SRV_UEDISTSUB_001_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UEZONESUB_002_OK_01() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; - + var HttpMessage v_response; + var ZoneLocationEventNotification v_zone_location_event_notification; + var charstring v_subscription_id; + // 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; + 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_create_zone_location_event_subscription(v_zone_location_event_notification, v_subscription_id); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( - m_http_request_post( - PICS_ROOT_API & PX_LOC_API_DISTANCE_SUB_URI & "_INVALID", + m_http_request_put( + PICS_ROOT_API & PX_LOC_API_ZONES_SUB_URI & v_subscription_id, v_headers, m_http_message_body_json( - m_body_json_user_distance_subscription( - m_user_distance_subscription( - PX_UE_DIST_SUB_CALLBACK_URI, // callbackReference - PX_USER, - { }, // monitoredAddress is empty - PX_DISTANCE, - PX_TRACKIMNG_ACCURACY, - AllWithinDistance, - -, // checkImmediate - PX_CLIENT_ID //clientCorrelator - )))))); + m_body_json_zone_location_event_subscription( + m_zone_location_event_subscription( + PX_UE_NEW_SUB_CALLBACK_URI, + PX_CLIENT_ID, + PX_ZONE_ID + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); - + // Test Body tc_ac.start; alt { [] httpPort.receive( mw_http_response( - mw_http_response_400_bad_request - )) { - + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_zone_location_event_subscription( + mw_zone_location_event_subscription( + PX_UE_NEW_SUB_CALLBACK_URI, + PX_CLIENT_ID, + PX_ZONE_ID + )))))) { tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with 400 Bad Request ***"); + + log("*** " & testcasename() & ": PASS: IUT successfully updates the zoneLocationEventSubscription ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -1756,61 +4114,66 @@ module AtsMec_LocationAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + // Postamble + f_delete_zone_location_event_subscription(v_subscription_id); f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC013_SRV_UEDISTSUB_001_BR - + } // End of testcase TC_MEC_MEC013_SRV_UEZONESUB_002_OK_01 + /** - * @desc Check that the IUT acknowledges the cancellation of UE distance notifications when commanded by a MEC Application + * @desc Check that the IUT acknowledges the change of UE area subscription request when commanded by a MEC Application */ - testcase TC_MEC_MEC013_SRV_UEDISTSUB_002_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UEZONESUB_002_OK_02() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; - var UserDistanceSubscription v_user_distance_subscription; - var charstring v_uri; - + var ZoneStatusNotification v_zone_status_notification; + var charstring v_subscription_id; + // 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; + 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_create_zone_status_subscription(v_zone_status_notification, v_subscription_id); f_init_default_headers_list(-, -, v_headers); - f_create_user_distance_subscription(v_user_distance_subscription); - v_uri := regexp( - oct2char(unichar2oct(v_user_distance_subscription.links_.self_.href)), - "?+" & PX_LOC_API_DISTANCE_SUB_URI & "/(?*)", - 0 - ); httpPort.send( m_http_request( - m_http_request_delete( - PICS_ROOT_API & PX_LOC_API_DISTANCE_SUB_URI & "/" & v_uri, - v_headers - ) - ) - ); + m_http_request_post( + PICS_ROOT_API & PX_LOC_API_ZONES_SUB_URI & v_subscription_id, + v_headers, + m_http_message_body_json( + m_body_json_zone_status_subscription( + m_zone_status_subscription( + PX_UE_NEW_SUB_CALLBACK_URI, + -, + PX_ZONE_ID + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); - + // Test Body tc_ac.start; alt { [] httpPort.receive( mw_http_response( - mw_http_response_204_no_content - )) { - + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_zone_status_subscription( + mw_zone_status_subscription( + PX_UE_NEW_SUB_CALLBACK_URI, + -, + PX_ZONE_ID + )))))) { tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with no content ***"); + + log("*** " & testcasename() & ": PASS: IUT successfully updates with a zoneStatusSubscription ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -1818,53 +4181,57 @@ module AtsMec_LocationAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + // Postamble + f_delete_zone_status_subscription(v_subscription_id); f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC013_SRV_UEDISTSUB_002_OK - + } // End of testcase TC_MEC_MEC013_SRV_UEZONESUB_002_OK_02 + /** * @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 { + testcase TC_MEC_MEC013_SRV_UEZONESUB_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; + 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_LOC_API_DISTANCE_SUB_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_ID, "UTF-8")), - v_headers - ) - ) - ); + m_http_request_put( + PICS_ROOT_API & PX_LOC_API_ZONES_SUB_URI & PX_NON_EXISTENT_SUBSCRIPTION_ID, + v_headers, + m_http_message_body_json( + m_body_json_zone_location_event_subscription( + m_zone_location_event_subscription( + PX_UE_NEW_SUB_CALLBACK_URI, + PX_CLIENT_ID, + PX_ZONE_ID + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); - + // Test Body tc_ac.start; alt { [] httpPort.receive( mw_http_response( - mw_http_response_404_not_found() - )) { - + mw_http_response_404_not_found + )) { tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with 404 Not Found ***"); + + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct error code ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -1872,11 +4239,118 @@ 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_UEDISTSUB_002_NF - - } // End of group ueDistanceSubscribe + } // End of testcase TC_MEC_MEC013_SRV_UEZONESUB_002_NF + /** + * @desc Check that the IUT acknowledges the cancellation of UE area change notifications when commanded by a MEC Application + */ + testcase TC_MEC_MEC013_SRV_UEZONESUB_003_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var ZoneLocationEventNotification v_zone_location_event_notification; + var charstring v_subscription_id; + + // 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_create_zone_location_event_subscription(v_zone_location_event_notification, v_subscription_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & PX_LOC_API_ZONES_SUB_URI & "/" & v_subscription_id, + 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 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 + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC013_SRV_UEZONESUB_003_OK + + /** + * @desc Check that the IUT acknowledges the cancellation of UE information change notifications when commanded by a MEC Application + */ + testcase TC_MEC_MEC013_SRV_UEZONESUB_003_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_LOC_API_ZONES_SUB_URI & "/" & PX_NON_EXISTENT_SUBSCRIPTION_ID, + 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 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_UEZONESUB_003_NF + + } // End of group ueZoneSub + } // End of module AtsMec_LocationAPI_TestCases diff --git a/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestControl.ttcn b/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestControl.ttcn index fb4852e..2a8ce72 100644 --- a/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestControl.ttcn +++ b/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestControl.ttcn @@ -13,30 +13,88 @@ module AtsMec_LocationAPI_TestControl { if (PICS_MEC_PLAT and PICS_SERVICES) { if (PICS_LOCATION_API_SUPPORTED) { - execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_OK()); - execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_BR()); - execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_NF()); + execute(TC_MEC_MEC013_SRV_RLOCLOOK_001_OK()); + execute(TC_MEC_MEC013_SRV_RLOCLOOK_001_NF()); + execute(TC_MEC_MEC013_SRV_RLOCLOOK_002_OK()); + execute(TC_MEC_MEC013_SRV_RLOCLOOK_002_NF()); + + execute(TC_MEC_MEC013_SRV_UEAREALOOK_001_OK_01()); + execute(TC_MEC_MEC013_SRV_UEAREALOOK_001_OK_02()); + execute(TC_MEC_MEC013_SRV_UEAREALOOK_001_BR()); + execute(TC_MEC_MEC013_SRV_UEAREALOOK_002_OK()); + execute(TC_MEC_MEC013_SRV_UEAREALOOK_002_NF()); + + execute(TC_MEC_MEC013_SRV_UEAREASUB_001_OK_01()); + execute(TC_MEC_MEC013_SRV_UEAREASUB_001_OK_02()); + execute(TC_MEC_MEC013_SRV_UEAREASUB_001_BR()); + execute(TC_MEC_MEC013_SRV_UEAREASUB_002_OK()); + execute(TC_MEC_MEC013_SRV_UEAREASUB_002_NF()); + execute(TC_MEC_MEC013_SRV_UEAREASUB_003_OK()); + execute(TC_MEC_MEC013_SRV_UEAREASUB_003_NF()); + + execute(TC_MEC_MEC013_SRV_UEDISTLOOK_001_OK()); + execute(TC_MEC_MEC013_SRV_UEDISTLOOK_001_BR()); + execute(TC_MEC_MEC013_SRV_UEDISTLOOK_002_OK()); + execute(TC_MEC_MEC013_SRV_UEDISTLOOK_002_NF()); + + execute(TC_MEC_MEC013_SRV_UEDISTSUB_001_OK_01()); + execute(TC_MEC_MEC013_SRV_UEDISTSUB_001_OK_02()); + execute(TC_MEC_MEC013_SRV_UEDISTSUB_001_BR()); + execute(TC_MEC_MEC013_SRV_UEDISTSUB_002_OK()); + execute(TC_MEC_MEC013_SRV_UEDISTSUB_002_NF()); + + execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_OK_01()); + execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_OK_02()); + execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_OK_03()); + execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_OK_04()); + execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_BR()); + execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_NF()); - execute(TC_MEC_MEC013_SRV_UELOCSUB_001_OK_01()); + execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_OK()); + execute(TC_MEC_MEC013_SRV_UELOCLOOK_002_OK_01()); + execute(TC_MEC_MEC013_SRV_UELOCLOOK_002_OK_02()); + execute(TC_MEC_MEC013_SRV_UELOCLOOK_002_OK_03()); + execute(TC_MEC_MEC013_SRV_UELOCLOOK_002_BR()); + execute(TC_MEC_MEC013_SRV_UELOCLOOK_002_NF()); + execute(TC_MEC_MEC013_SRV_UELOCLOOK_003_OK_01()); + execute(TC_MEC_MEC013_SRV_UELOCLOOK_003_OK_02()); + execute(TC_MEC_MEC013_SRV_UELOCLOOK_003_NF()); + + execute(TC_MEC_MEC013_SRV_UELOCSUB_001_OK_01_01()); + execute(TC_MEC_MEC013_SRV_UELOCSUB_001_OK_01_02()); + execute(TC_MEC_MEC013_SRV_UELOCSUB_001_OK_02_01()); + execute(TC_MEC_MEC013_SRV_UELOCSUB_001_OK_02_02()); execute(TC_MEC_MEC013_SRV_UELOCSUB_001_BR_01()); + execute(TC_MEC_MEC013_SRV_UELOCSUB_001_BR_02()); execute(TC_MEC_MEC013_SRV_UELOCSUB_002_OK()); execute(TC_MEC_MEC013_SRV_UELOCSUB_002_NF()); - - execute(TP_MEC_MEC013_SRV_UELOCSUB_001_OK_02()); - execute(TC_MEC_MEC013_SRV_UETRACKSUB_001_BR()); - execute(TC_MEC_MEC013_SRV_UETRACKSUB_002_OK()); - execute(TC_MEC_MEC013_SRV_UETRACKSUB_002_NF()); - - execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_OK()); - execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_BR()); - execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_NF()); - - execute(TC_MEC_MEC013_SRV_UEINFSUB_001_OK()); - execute(TC_MEC_MEC013_SRV_UEINFSUB_001_BR()); - execute(TC_MEC_MEC013_SRV_UEINFSUB_002_OK()); - execute(TC_MEC_MEC013_SRV_UEINFSUB_002_NF()); + execute(TC_MEC_MEC013_SRV_UELOCSUB_003_OK_01()); + execute(TC_MEC_MEC013_SRV_UELOCSUB_003_OK_02()); + execute(TC_MEC_MEC013_SRV_UELOCSUB_003_BR_01()); + execute(TC_MEC_MEC013_SRV_UELOCSUB_003_BR_02()); + execute(TC_MEC_MEC013_SRV_UELOCSUB_003_NF_01()); + execute(TC_MEC_MEC013_SRV_UELOCSUB_003_NF_02()); + + execute(TC_MEC_MEC013_SRV_UETESTNOT_001_OK()); + execute(TC_MEC_MEC013_SRV_UETESTNOT_002_OK()); + + + + + + execute(TC_MEC_MEC013_SRV_UEZONESUB_001_OK_01_01()); + execute(TC_MEC_MEC013_SRV_UEZONESUB_001_OK_01_02()); + execute(TC_MEC_MEC013_SRV_UEZONESUB_001_OK_02_01_01()); + execute(TC_MEC_MEC013_SRV_UEZONESUB_001_OK_02_01_02()); + execute(TC_MEC_MEC013_SRV_UEZONESUB_001_OK_02_02_01()); + execute(TC_MEC_MEC013_SRV_UEZONESUB_001_OK_02_02_02()); + execute(TC_MEC_MEC013_SRV_UEZONESUB_001_BR()); + execute(TC_MEC_MEC013_SRV_UEZONESUB_002_OK_01()); + execute(TC_MEC_MEC013_SRV_UEZONESUB_002_OK_02()); + execute(TC_MEC_MEC013_SRV_UEZONESUB_002_NF()); + execute(TC_MEC_MEC013_SRV_UEZONESUB_003_OK()); + execute(TC_MEC_MEC013_SRV_UEZONESUB_003_NF()); - execute(TC_MEC_MEC013_SRV_UEAREASUB_001_OK_01()); } } } // End of 'control' statement diff --git a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Functions.ttcn b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Functions.ttcn index e783c0b..0177ba7 100644 --- a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Functions.ttcn +++ b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Functions.ttcn @@ -38,7 +38,9 @@ module LocationAPI_Functions { import from LibMec_Pixits all; function f_create_user_location_event_subscription( - out UserLocationEventSubscription p_user_location_event_subscription + out UserLocationEventNotification p_user_location_event_notification, + out charstring p_subscription_id, + in Address p_address := PX_USER ) runs on HttpComponent { var Headers v_headers; var HttpMessage v_response; @@ -53,7 +55,7 @@ module LocationAPI_Functions { m_body_json_user_location_event_subscription( m_user_location_event_subscription( PX_CALLBACK_REF_URL, - PX_USER + p_address )))))); tc_ac.start; alt { @@ -61,16 +63,24 @@ module LocationAPI_Functions { mw_http_response( mw_http_response_201_created( mw_http_message_body_json( - mw_body_json_user_location_event_subscription( - mw_user_location_event_subscription( - PX_CALLBACK_REF_URL, - PX_USER - )))))) -> value v_response { + mw_body_json_user_location_event_notification( + mw_user_location_event_notification( + p_address + )))))) -> value v_response { tc_ac.stop; - // FIXME Extract HTTP Location header - p_user_location_event_subscription := v_response.response.body.json_body.userLocationEventSubscription; - log("f_create_user_location_event_subscription: INFO: IUT successfully responds to the subscription: ", p_user_location_event_subscription); + // Extract HTTP Location header + var charstring_list v_subscription_id; + f_get_header(v_response.response.header, "Location", v_subscription_id); + // Extract HTTP subssription id + p_subscription_id := regexp( + v_subscription_id[0], + "?+" & PX_LOC_API_USERS_SUB_URI & "/(?*)", + 0 + ); + p_user_location_event_notification := v_response.response.body.json_body.userLocationEventNotification; + log("f_create_user_location_event_subscription: INFO: IUT successfully responds to the subscription: ", p_user_location_event_notification); + log("f_create_user_location_event_subscription: INFO: p_subscription_id: ", p_subscription_id); } [] tc_ac.timeout { log("f_create_user_location_event_subscription: INCONC: Expected message not received"); @@ -80,29 +90,23 @@ module LocationAPI_Functions { } // End of function f_create_user_location_event_subscription function f_delete_user_location_event_subscription( - in UserLocationEventSubscription p_user_location_event_subscription + in charstring p_subscription_id ) runs on HttpComponent { var Headers v_headers; - var HttpMessage v_response; - var charstring v_uri :=regexp( - oct2char(unichar2oct(p_user_location_event_subscription.links_.self_.href)), - "?+" & PX_LOC_API_USERS_SUB_URI & "/(?*)", - 0 - ); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( m_http_request_delete( - PICS_ROOT_API & PX_LOC_API_USERS_SUB_URI & "/" & v_uri, + PICS_ROOT_API & PX_LOC_API_USERS_SUB_URI & "/" & p_subscription_id, v_headers - ))); + ))); tc_ac.start; alt { [] httpPort.receive( mw_http_response( mw_http_response_204_no_content - )) { + )) { tc_ac.stop; } [] tc_ac.timeout { @@ -113,7 +117,8 @@ module LocationAPI_Functions { } // End of function f_delete_user_location_event_subscription function f_create_user_location_periodic_subscription( - out UserLocationPeriodicSubscription p_user_location_periodic_subscription + out UserLocationPeriodicNotification p_user_location_periodic_notification, + out charstring p_subscription_id ) runs on HttpComponent { var Headers v_headers; var HttpMessage v_response; @@ -135,15 +140,24 @@ module LocationAPI_Functions { mw_http_response( mw_http_response_201_created( mw_http_message_body_json( - mw_body_json_user_location_periodic_subscription( - mw_user_location_periodic_subscription( + mw_body_json_user_location_periodic_notification( + mw_user_location_periodic_notification( PX_CALLBACK_REF_URL )))))) -> value v_response { tc_ac.stop; - // FIXME Extract HTTP Location header - p_user_location_periodic_subscription := v_response.response.body.json_body.userLocationPeriodicSubscription; - log("f_create_user_location_periodic_subscription: INFO: IUT successfully responds to the subscription: ", p_user_location_periodic_subscription); + // Extract HTTP Location header + var charstring_list v_subscription_id; + f_get_header(v_response.response.header, "Location", v_subscription_id); + // Extract HTTP subssription id + p_subscription_id := regexp( + v_subscription_id[0], + "?+" & PX_LOC_API_USERS_SUB_URI & "/(?*)", + 0 + ); + p_user_location_periodic_notification := v_response.response.body.json_body.userLocationPeriodicNotification; + log("f_create_user_location_periodic_subscription: INFO: IUT successfully responds to the subscription: ", p_user_location_periodic_notification); + log("f_create_user_location_periodic_subscription: INFO: p_subscription_id: ", p_subscription_id); } [] tc_ac.timeout { log("f_create_user_location_periodic_subscription: INCONC: Expected message not received"); @@ -153,21 +167,15 @@ module LocationAPI_Functions { } // End of function f_create_user_location_periodic_subscription function f_delete_user_location_periodic_subscription( - in UserLocationPeriodicSubscription p_position_notification_subscription + in charstring p_subscription_id ) runs on HttpComponent { var Headers v_headers; - var HttpMessage v_response; - var charstring v_uri := regexp( - oct2char(unichar2oct(p_position_notification_subscription.links_.self_.href)), - "?+" & PX_LOC_API_USERS_SUB_URI & "/(?*)", - 0 - ); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( m_http_request_delete( - PICS_ROOT_API & PX_LOC_API_USERS_SUB_URI & "/" & v_uri, + PICS_ROOT_API & PX_LOC_API_USERS_SUB_URI & "/" & p_subscription_id, v_headers ))); tc_ac.start; @@ -185,7 +193,8 @@ module LocationAPI_Functions { } // End of function f_delete_user_location_periodic_subscription function f_create_zone_location_event_subscription( - out ZoneLocationEventSubscription p_zone_location_event_subscription + out ZoneLocationEventNotification p_zone_location_event_notification, + out charstring p_subscription_id ) runs on HttpComponent { var Headers v_headers; var HttpMessage v_response; @@ -198,28 +207,35 @@ module LocationAPI_Functions { v_headers, m_http_message_body_json( m_body_json_zone_location_event_subscription( - m_zone_location_event_subscription( - PX_CLIENT_ID, - PX_CALLBACK_REF_URL, - PX_ZONE_ID - )))))); + m_zone_location_event_subscription( + 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_zone_location_event_subscription( - mw_zone_location_event_subscription( - PX_CLIENT_ID, - PX_CALLBACK_REF_URL, - PX_ZONE_ID - )))))) -> value v_response { + mw_body_json_zone_location_event_notification( + mw_zone_location_event_notification( + // FIXME + )))))) -> value v_response { tc_ac.stop; - // FIXME Extract HTTP Location header - p_zone_location_event_subscription := v_response.response.body.json_body.zoneLocationEventSubscription; - log("f_create_zone_location_event_subscription: INFO: IUT successfully responds to the subscription: ", p_zone_location_event_subscription); + // Extract HTTP Location header + var charstring_list v_subscription_id; + f_get_header(v_response.response.header, "Location", v_subscription_id); + // Extract HTTP subssription id + p_subscription_id := regexp( + v_subscription_id[0], + "?+" & PX_LOC_API_ZONES_SUB_URI & "/(?*)", + 0 + ); + p_zone_location_event_notification := v_response.response.body.json_body.zoneLocationEventNotification; + log("f_create_zone_location_event_subscription: INFO: IUT successfully responds to the subscription: ", p_zone_location_event_notification); + log("f_create_zone_location_event_subscription: INFO: p_subscription_id: ", p_subscription_id); } [] tc_ac.timeout { log("f_create_zone_location_event_subscription: INCONC: Expected message not received"); @@ -229,21 +245,16 @@ module LocationAPI_Functions { } // End of function f_create_zone_location_event_subscription function f_delete_zone_location_event_subscription( - in ZoneLocationEventSubscription p_zone_location_event_subscription + in charstring p_subscription_id ) runs on HttpComponent { var Headers v_headers; var HttpMessage v_response; - var charstring v_uri := regexp( - oct2char(unichar2oct(p_zone_location_event_subscription.links_.self_.href)), - "?+" & PX_LOC_API_ZONES_SUB_URI & "/(?*)", - 0 - ); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( m_http_request_delete( - PICS_ROOT_API & PX_LOC_API_ZONES_SUB_URI & "/" & v_uri, + PICS_ROOT_API & PX_LOC_API_ZONES_SUB_URI & "/" & p_subscription_id, v_headers ))); tc_ac.start; @@ -261,7 +272,11 @@ module LocationAPI_Functions { } // End of function f_delete_zone_location_event_subscription function f_create_zone_status_subscription( - out ZoneStatusSubscription p_zone_status_subscription + out ZoneStatusNotification p_zone_status_notification, + out charstring p_subscription_id, + in template (omit) OperationStatus p_operationStatus := Serviceable, + in template (omit) Json.UInteger p_upper_num_user_threshold := omit, + in template (omit) Json.UInteger p_lower_num_user_threshold := omit ) runs on HttpComponent { var Headers v_headers; var HttpMessage v_response; @@ -276,8 +291,12 @@ module LocationAPI_Functions { m_body_json_zone_status_subscription( m_zone_status_subscription( PX_AREA_SUB_CALLBACK_URI, - PX_USER, - PX_ZONE_ID + -, + PX_ZONE_ID, + -, -, -, -, -, + p_upper_num_user_threshold, + p_lower_num_user_threshold, + p_operationStatus )))))); tc_ac.start; alt { @@ -285,16 +304,27 @@ module LocationAPI_Functions { mw_http_response( mw_http_response_201_created( mw_http_message_body_json( - mw_body_json_zone_status_subscription( - mw_zone_status_subscription( - PX_AREA_SUB_CALLBACK_URI + mw_body_json_zone_status_notification( + mw_zone_status_notification( + -, -, + p_operationStatus, + -, + PX_ZONE_ID )))))) -> value v_response { tc_ac.stop; - // FIXME Extract HTTP Location header - p_zone_status_subscription := v_response.response.body.json_body.zoneStatusSubscription; - log("f_create_zone_status_subscription: INFO: IUT successfully responds to the subscription: ", p_zone_status_subscription); - } + // Extract HTTP Location header + var charstring_list v_subscription_id; + f_get_header(v_response.response.header, "Location", v_subscription_id); + // Extract HTTP subssription id + p_subscription_id := regexp( + v_subscription_id[0], + "?+" & PX_LOC_API_ZONES_SUB_URI & "/(?*)", + 0 + ); + p_zone_status_notification := v_response.response.body.json_body.zoneStatusNotification; + log("f_create_zone_status_subscription: INFO: IUT successfully responds to the subscription: ", p_zone_status_notification); + log("f_create_zone_status_subscription: INFO: p_subscription_id: ", p_subscription_id); } [] tc_ac.timeout { log("f_create_zone_status_subscription: INCONC: Expected message not received"); } @@ -303,29 +333,23 @@ module LocationAPI_Functions { } // End of function f_create_zone_status_subscription function f_delete_zone_status_subscription( - in ZoneStatusSubscription p_zone_status_subscription + in charstring p_subscription_id ) runs on HttpComponent { var Headers v_headers; - var HttpMessage v_response; - var charstring v_uri := regexp( - oct2char(unichar2oct(p_zone_status_subscription.links_.self_.href)), - "?+" & PX_LOC_API_AREA_SUB_URI & "/(?*)", - 0 - ); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( m_http_request_delete( - PICS_ROOT_API & PX_LOC_API_ZONES_SUB_URI & "/" & v_uri, + PICS_ROOT_API & PX_LOC_API_ZONES_SUB_URI & "/" & p_subscription_id, v_headers - ))); + ))); tc_ac.start; alt { [] httpPort.receive( mw_http_response( mw_http_response_204_no_content - )) { + )) { tc_ac.stop; } [] tc_ac.timeout { @@ -335,7 +359,8 @@ module LocationAPI_Functions { } // End of function f_delete_zone_status_subscription function f_create_user_area_subscription( - out UserAreaSubscription p_user_area_subscription + out UserAreaNotification p_user_area_notification, + out charstring p_subscription_id ) runs on HttpComponent { var Headers v_headers; var HttpMessage v_response; @@ -357,22 +382,31 @@ module LocationAPI_Functions { PX_RADIUS ), // AreaInfo PX_TRACKIMNG_ACCURACY // TrackingAccuracy - )))))); + )))))); tc_ac.start; alt { [] httpPort.receive( mw_http_response( mw_http_response_201_created( mw_http_message_body_json( - mw_body_json_user_area_subscription( - mw_user_area_subscription( - PX_UE_DIST_SUB_CALLBACK_URI - )))))) -> value v_response { + mw_body_json_user_area_notification( + mw_user_area_notification( + // FIXME PX_UE_DIST_SUB_CALLBACK_URI + )))))) -> value v_response { tc_ac.stop; - // FIXME Extract HTTP Location header - p_user_area_subscription := v_response.response.body.json_body.userAreaSubscription; - log("f_create_user_area_subscription: INFO: IUT successfully responds to the subscription: ", p_user_area_subscription); + // Extract HTTP Location header + var charstring_list v_subscription_id; + f_get_header(v_response.response.header, "Location", v_subscription_id); + // Extract HTTP subssription id + p_subscription_id := regexp( + v_subscription_id[0], + "?+" & PX_LOC_API_USERS_SUB_URI & "/(?*)", + 0 + ); + p_user_area_notification := v_response.response.body.json_body.userAreaNotification; + log("f_create_user_area_subscription: INFO: IUT successfully responds to the subscription: ", p_user_area_notification); + log("f_create_user_area_subscription: INFO: p_subscription_id: ", p_subscription_id); } [] tc_ac.timeout { log("f_create_user_area_subscription: INCONC: Expected message not received"); @@ -382,21 +416,15 @@ module LocationAPI_Functions { } // End of function f_create_user_area_subscription function f_delete_user_area_subscription( - in UserAreaSubscription p_user_area_subscription + in charstring p_subscription_id ) runs on HttpComponent { var Headers v_headers; - var HttpMessage v_response; - var charstring v_uri := regexp( - oct2char(unichar2oct(p_user_area_subscription.links_.self_.href)), - "?+" & PX_LOC_API_AREA_SUB_URI & "/(?*)", - 0 - ); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( m_http_request_delete( - PICS_ROOT_API & PX_LOC_API_AREA_SUB_URI & "/" & v_uri, + PICS_ROOT_API & PX_LOC_API_AREA_SUB_URI & "/" & p_subscription_id, v_headers ))); tc_ac.start; @@ -414,7 +442,8 @@ module LocationAPI_Functions { } // End of function f_delete_user_area_subscription function f_create_user_distance_subscription( - out UserDistanceSubscription p_user_distance_subscription + out UserDistanceNotification p_user_distance_notification, + out charstring p_subscription_id ) runs on HttpComponent { var Headers v_headers; var HttpMessage v_response; @@ -440,15 +469,24 @@ module LocationAPI_Functions { mw_http_response( mw_http_response_201_created( mw_http_message_body_json( - mw_body_json_user_distance_subscription( - mw_user_distance_subscription( - PX_UE_DIST_SUB_CALLBACK_URI + mw_body_json_user_distance_notification( + mw_user_distance_notification( + // FIXME PX_UE_DIST_SUB_CALLBACK_URI )))))) -> value v_response { tc_ac.stop; - // FIXME Extract HTTP Location header - p_user_distance_subscription := v_response.response.body.json_body.userDistanceSubscription; - log("f_create_user_distance_subscription: INFO: IUT successfully responds to the subscription: ", p_user_distance_subscription); + // Extract HTTP Location header + var charstring_list v_subscription_id; + f_get_header(v_response.response.header, "Location", v_subscription_id); + // Extract HTTP subssription id + p_subscription_id := regexp( + v_subscription_id[0], + "?+" & PX_LOC_API_DISTANCE_SUB_URI & "/(?*)", + 0 + ); + p_user_distance_notification := v_response.response.body.json_body.userDistanceNotification; + log("f_create_user_distance_subscription: INFO: IUT successfully responds to the subscription: ", p_user_distance_notification); + log("f_create_user_distance_subscription: INFO: p_subscription_id: ", p_subscription_id); } [] tc_ac.timeout { log("f_create_user_distance_subscription: INCONC: Expected message not received"); @@ -458,29 +496,23 @@ module LocationAPI_Functions { } // End of function f_create_user_distance_subscription function f_delete_user_distance_subscription( - in UserDistanceSubscription p_user_distance_subscription + charstring p_subscription_id ) runs on HttpComponent { var Headers v_headers; - var HttpMessage v_response; - var charstring v_uri := regexp( - oct2char(unichar2oct(p_user_distance_subscription.links_.self_.href)), - "?+" & PX_LOC_API_DISTANCE_SUB_URI & "/(?*)", - 0 - ); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( m_http_request_delete( - PICS_ROOT_API & PX_LOC_API_DISTANCE_SUB_URI & "/" & v_uri, + PICS_ROOT_API & PX_LOC_API_DISTANCE_SUB_URI & "/" & p_subscription_id, v_headers - ))); + ))); tc_ac.start; alt { [] httpPort.receive( mw_http_response( mw_http_response_204_no_content - )) { + )) { tc_ac.stop; } [] tc_ac.timeout { diff --git a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Pixits.ttcn b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Pixits.ttcn index 87c88ea..8d6672e 100644 --- a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Pixits.ttcn +++ b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Pixits.ttcn @@ -11,6 +11,8 @@ module LocationAPI_Pixits { modulepar Address PX_USER := "ue1"; + modulepar Address PX_USER_2 := "ue2"; + modulepar Address PX_USER_UNKNOWN := "acr:192.168.5.1.1"; modulepar ClientCorrelator PX_CLIENT_ID := "0123"; @@ -25,6 +27,8 @@ module LocationAPI_Pixits { modulepar ZoneId PX_ZONE_ID := "zone1"; + modulepar ZoneId PX_ZONE_ID_1 := "zone2"; + modulepar ZoneId PX_NON_EXISTENT_ZONE_ID := "zone51"; modulepar ResourceURL PX_RESOURCE_URL := "http://meep-loc-serv/etsi-013/location/v3/users/ue1"; @@ -41,10 +45,14 @@ module LocationAPI_Pixits { modulepar Address PX_IP_ADDRESS := "acr:10.0.0.3"; + modulepar Address PX_IP_ADDRESS_1 := "acr:10.0.0.10"; + modulepar CallbackReference PX_AREA_SUB_CALLBACK_URI := "http://clientApp.example.com/location_notifications/123456"; modulepar CallbackReference PX_UE_DIST_SUB_CALLBACK_URI := "http://clientApp.example.com/location_notifications/123456"; + modulepar CallbackReference PX_UE_NEW_SUB_CALLBACK_URI := "http://clientApp.example.com/new_location_notifications/123456"; + modulepar Address PX_UE_MONITORED_IP_ADDRESS := "acr:10.0.0.1"; modulepar Address PX_ACR_UNKNOWN_IP := "acr:10.0.0.254"; @@ -68,5 +76,11 @@ module LocationAPI_Pixits { modulepar CallbackReference PX_USERTRACK_SUB_CALLBACK_URI := ""; modulepar CallbackReference PX_TRAFFIC_SUB_CALLBACK_URI := ""; + + modulepar float PX_NOTIF_EXPIRY := 60.0; + + modulepar Json.UInteger PX_UPPER_NUM_USER_THRESHOLD := 10; + + modulepar Json.UInteger PX_LOWER_NUM_USER_THRESHOLD := 1; } // End of module LocationAPI_Pixits diff --git a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Templates.ttcn b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Templates.ttcn index 4d824fc..e407685 100644 --- a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Templates.ttcn +++ b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Templates.ttcn @@ -158,6 +158,46 @@ module LocationAPI_Templates { resourceURL := p_resourceURL } // End of template mw_access_point_list + template (omit) AccessPointInfo m_access_point_info( + in AccessPointId p_accessPointId, + in ConnectionType p_connectionType, + in OperationStatus p_operationStatus, + in NumberOfUsers p_numberOfUsers, + in template (value) ResourceURL p_resourceURL, + in template (omit) LocationInfo p_locationInfo := omit, + in template (omit) InterestRealm p_interestRealm := omit, + in template (omit) DateTimeStamp p_timezone := omit + ) := { + accessPointId := p_accessPointId, + locationInfo := p_locationInfo, + connectionType := p_connectionType, + operationStatus := p_operationStatus, + numberOfUsers := p_numberOfUsers, + interestRealm := p_interestRealm, + timezone := p_timezone, + resourceURL := p_resourceURL + } // End of template m_access_point_info + + template (present) AccessPointInfo mw_access_point_info( + template (present) AccessPointId p_accessPointId := ?, + template (present) ConnectionType p_connectionType := ?, + template (present) OperationStatus p_operationStatus := ?, + template (present) NumberOfUsers p_numberOfUsers := ?, + template (present) ResourceURL p_resourceURL := ?, + template LocationInfo p_locationInfo := *, + template InterestRealm p_interestRealm := *, + template DateTimeStamp p_timezone := * + ) := { + accessPointId := p_accessPointId, + locationInfo := p_locationInfo, + connectionType := p_connectionType, + operationStatus := p_operationStatus, + numberOfUsers := p_numberOfUsers, + interestRealm := p_interestRealm, + timezone := p_timezone, + resourceURL := p_resourceURL + } // End of template mw_access_point_info + template (omit) Subscription m_subscription( in Json.String p_subscriptionType, in template (omit) Json.AnyURI p_href := omit @@ -190,6 +230,44 @@ module LocationAPI_Templates { resourceURL := p_resourceURL } // End of template mw_notification_subscription_list + template (omit) UserAreaNotification m_user_area_notification( + in template (value) Address p_address_, + in template (value) LocationEventType p_userLocationEvent, + in template (value) Links p_links_, + in template (omit) TimeStamp p_timeStamp := omit, + in template (omit) LocationInfo p_locationInfo := omit, + in template (omit) CivicAddress p_civicInfo := omit, + in template (omit) RelativeLocationInfo p_relativeLocationInfo := omit + ) :={ + notificationType := "UserAreaNotification", + timeStamp := p_timeStamp, + address_ := p_address_, + locationInfo := p_locationInfo, + civicInfo := p_civicInfo, + relativeLocationInfo := p_relativeLocationInfo, + userLocationEvent := p_userLocationEvent, + links_ := p_links_ + } // End of template m_user_area_notification + + template (present) UserAreaNotification mw_user_area_notification( + template (present) Address p_address_ := ?, + template (present) LocationEventType p_userLocationEvent := ?, + template (present) Links p_links_ := ?, + template TimeStamp p_timeStamp := *, + template LocationInfo p_locationInfo := *, + template CivicAddress p_civicInfo := *, + template RelativeLocationInfo p_relativeLocationInfo := * + ) :={ + notificationType := "UserAreaNotification", + timeStamp := p_timeStamp, + address_ := p_address_, + locationInfo := p_locationInfo, + civicInfo := p_civicInfo, + relativeLocationInfo := p_relativeLocationInfo, + userLocationEvent := p_userLocationEvent, + links_ := p_links_ + } // End of template mw_user_area_notification + template (omit) UserLocationEventSubscription m_user_location_event_subscription( in CallbackReference p_callbackReference, in Address p_address := PX_USER, @@ -525,6 +603,206 @@ module LocationAPI_Templates { expiryDeadline := p_expiryDeadline } // End of template mw_user_distance_subscription + template (omit) UserDistanceNotification m_user_distance_notification( + in template (value) UserList p_monitoredUsers, + in template (value) DistanceCriteria p_distanceEvent, + in template (value) Links p_links_, + in template (omit) TimeStamp p_timeStamp := omit + ) := { + notificationType := "UserDistanceNotification", + timeStamp := p_timeStamp, + monitoredUsers := p_monitoredUsers, + distanceEvent := p_distanceEvent, + links_ := p_links_ + } // End of template m_user_distance_notification + + template (present) UserDistanceNotification mw_user_distance_notification( + template (present) UserList p_monitoredUsers := ?, + template (present) DistanceCriteria p_distanceEvent := ?, + template (present) Links p_links_ := ?, + template TimeStamp p_timeStamp := * + ) := { + notificationType := "UserDistanceNotification", + timeStamp := p_timeStamp, + monitoredUsers := p_monitoredUsers, + distanceEvent := p_distanceEvent, + links_ := p_links_ + } // End of template mw_user_distance_notification + + template (omit) UserLocationEventNotification m_user_location_event_notification( + in template (value) Address p_address_, + in template (value) LocationEventType p_userLocationEvent, + in template (value) Links p_links_, + in template (omit) TimeStamp p_timeStamp := omit, + in template (omit) LocationInfo p_locationInfo := omit, + in template (omit) CivicAddress p_civicInfo := omit, + in template (omit) RelativeLocationInfo p_relativeLocationInfo := omit, + in template (omit) ZoneId p_zoneId := omit, + in template (omit) AccessPointId p_accessPointId := omit + ) :={ + notificationType := "UserLocationEventNotification", + timeStamp := p_timeStamp, + address_ := p_address_, + userLocationEvent := p_userLocationEvent, + locationInfo := p_locationInfo, + civicInfo := p_civicInfo, + relativeLocationInfo := p_relativeLocationInfo, + zoneId := p_zoneId, + accessPointId := p_accessPointId, + links_ := p_links_ + } // End of template m_user_location_event_notification + + template (present) UserLocationEventNotification mw_user_location_event_notification( + template (present) Address p_address_ := ?, + template (present) LocationEventType p_userLocationEvent := ?, + template (present) Links p_links_ := ?, + template TimeStamp p_timeStamp := *, + template LocationInfo p_locationInfo := *, + template CivicAddress p_civicInfo := *, + template RelativeLocationInfo p_relativeLocationInfo := *, + template ZoneId p_zoneId := *, + template AccessPointId p_accessPointId := * + ) :={ + notificationType := "UserLocationEventNotification", + timeStamp := p_timeStamp, + address_ := p_address_, + userLocationEvent := p_userLocationEvent, + locationInfo := p_locationInfo, + civicInfo := p_civicInfo, + relativeLocationInfo := p_relativeLocationInfo, + zoneId := p_zoneId, + accessPointId := p_accessPointId, + links_ := p_links_ + } // End of template mw_user_location_event_notification + + template (omit) UserLocationPeriodicNotification m_user_location_periodic_notification( + in template (value) Address p_address_, + in template (value) LocationEventType p_userLocationEvent, + in template (value) Links p_links_, + in template (omit) TimeStamp p_timeStamp := omit, + in template (omit) LocationInfo p_locationInfo := omit, + in template (omit) CivicAddress p_civicInfo := omit, + in template (omit) RelativeLocationInfo p_relativeLocationInfo := omit, + in template (omit) ZoneId p_zoneId := omit, + in template (omit) AccessPointId p_accessPointId := omit, + in template (omit) Json.Bool p_isFinalNotification := omit + ) :={ + notificationType := "UserLocationPeriodicNotification", + timeStamp := p_timeStamp, + address_ := p_address_, + userLocationEvent := p_userLocationEvent, + locationInfo := p_locationInfo, + civicInfo := p_civicInfo, + relativeLocationInfo := p_relativeLocationInfo, + zoneId := p_zoneId, + accessPointId := p_accessPointId, + isFinalNotification := p_isFinalNotification, + links_ := p_links_ + } // End of template m_user_location_periodic_notification + + template (present) UserLocationPeriodicNotification mw_user_location_periodic_notification( + template (present) Address p_address_ := ?, + template (present) LocationEventType p_userLocationEvent := ?, + template (present) Links p_links_ := ?, + template TimeStamp p_timeStamp := *, + template LocationInfo p_locationInfo := *, + template CivicAddress p_civicInfo := *, + template RelativeLocationInfo p_relativeLocationInfo := *, + template ZoneId p_zoneId := *, + template AccessPointId p_accessPointId := *, + template Json.Bool p_isFinalNotification := * + ) :={ + notificationType := "UserLocationPeriodicNotification", + timeStamp := p_timeStamp, + address_ := p_address_, + userLocationEvent := p_userLocationEvent, + locationInfo := p_locationInfo, + civicInfo := p_civicInfo, + relativeLocationInfo := p_relativeLocationInfo, + zoneId := p_zoneId, + accessPointId := p_accessPointId, + isFinalNotification := p_isFinalNotification, + links_ := p_links_ + } // End of template mw_user_location_periodic_notification + + template (omit) ZoneLocationEventNotification m_zone_location_event_notification( + in template (value) Address p_address_, + in template (value) Links p_links_, + in template (value) LocationEventType p_userLocationEvent, + in template (omit) TimeStamp p_timeStamp := omit, + in template (omit) ZoneId p_zoneId := omit + ) := { + notificationType := "ZoneLocationEventNotification", + timeStamp := p_timeStamp, + address_ := p_address_, + userLocationEvent := p_userLocationEvent, + zoneId := p_zoneId, + links_ := p_links_ + } // End of template m_zone_location_event_notification + + template (present) ZoneLocationEventNotification mw_zone_location_event_notification( + template (present) Address p_address_ := ?, + template (present) Links p_links_ := ?, + template (present) LocationEventType p_userLocationEvent := ?, + template TimeStamp p_timeStamp := *, + template ZoneId p_zoneId := * + ) := { + notificationType := "ZoneLocationEventNotification", + timeStamp := p_timeStamp, + address_ := p_address_, + userLocationEvent := p_userLocationEvent, + zoneId := p_zoneId, + links_ := p_links_ + } // End of template mw_zone_location_event_notification + + template (omit) ZoneStatusNotification m_zone_status_notification( + in template (value) Links p_links_, + in template (omit) UserNumEvent p_userNumEvent := omit, + in template (omit) OperationStatus p_operationStatus := omit, + in template (omit) TimeStamp p_timeStamp := omit, + in template (omit) ZoneId p_zoneId := omit, + in template (omit) AccessPointId p_accessPointId := omit + ) := { + notificationType := "ZoneStatusNotification", + timeStamp := p_timeStamp, + userNumEvent := p_userNumEvent, + operationStatus := p_operationStatus, + zoneId := p_zoneId, + accessPointId := p_accessPointId, + links_ := p_links_ + } // End of template m_zone_status_notification + + template (present) ZoneStatusNotification mw_zone_status_notification( + template (present) Links p_links_ := ?, + template UserNumEvent p_userNumEvent := *, + template OperationStatus p_operationStatus := *, + template TimeStamp p_timeStamp := *, + template ZoneId p_zoneId := *, + template AccessPointId p_accessPointId := * + ) := { + notificationType := "ZoneStatusNotification", + timeStamp := p_timeStamp, + userNumEvent := p_userNumEvent, + operationStatus := p_operationStatus, + zoneId := p_zoneId, + accessPointId := p_accessPointId, + links_ := p_links_ + } // End of template mw_zone_status_notification + + template (value) TestNotification m_test_notification( + in template (value) LinksSubscription p_links_ + ) := { + notificationType := "TestNotification", + links_ := p_links_ + } // End of template m_test_notification + + template (present) TestNotification mw_test_notification( + template (present) LinksSubscription p_links_ := ? + ) := { + notificationType := "TestNotification", + links_ := p_links_ + } // End of template mw_test_notification + template (omit) AreaInfo m_area_info( in template (value) Shape p_shape, in template (value) Points p_points, diff --git a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn index 5f232e9..e5c9bad 100644 --- a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn @@ -702,7 +702,7 @@ module LocationAPI_TypesAndValues { */ type record NotificationSubscriptionList { Subscriptions subscription optional, - ResourceURL resourceURL + ResourceURL resourceURL } /** @@ -720,16 +720,16 @@ module LocationAPI_TypesAndValues { * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.3.4 Type: UserLocationEventSubscription */ type record UserLocationEventSubscription { - Json.String subscriptionType, - Json.String clientCorrelator optional, - CallbackReference callbackReference optional, - Json.Bool requestTestNotification optional, - WebsockNotifConfig websockNotifConfig optional, - Links links_ optional, - Address address_, - UserEventPara userEventPara optional, + Json.String subscriptionType, + Json.String clientCorrelator optional, + CallbackReference callbackReference optional, + Json.Bool requestTestNotification optional, + WebsockNotifConfig websockNotifConfig optional, + Links links_ optional, + Address address_, + UserEventPara userEventPara optional, LocationEventCriteria locationEventCriteria optional, - TimeStamp expiryDeadline optional + TimeStamp expiryDeadline optional } with { variant (links_) "name as '_links'"; variant (address_) "name as 'address'"; @@ -749,15 +749,15 @@ module LocationAPI_TypesAndValues { * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.3.5 Type: UserLocationPeriodicSubscription */ type record UserLocationPeriodicSubscription{ - Json.String subscriptionType, - Json.String clientCorrelator optional, - CallbackReference callbackReference optional, - Json.Bool requestTestNotification optional, + Json.String subscriptionType, + Json.String clientCorrelator optional, + CallbackReference callbackReference optional, + Json.Bool requestTestNotification optional, WebsockNotifConfig websockNotifConfig optional, - Links links_ optional, - Address address_, - PeriodicEventInfo periodicEventInfo, - TimeStamp expiryDeadline optional + Links links_ optional, + Address address_, + PeriodicEventInfo periodicEventInfo, + TimeStamp expiryDeadline optional } with { variant (links_) "name as '_links'"; variant (address_) "name as 'address'"; @@ -770,7 +770,7 @@ module LocationAPI_TypesAndValues { * @see ETSI TS 129 572 V16.7.0 Clause 6.1.6.2.24 Type: PeriodicEventInfo */ type record PeriodicEventInfo { - ReportingAmount reportingAmount, + ReportingAmount reportingAmount, ReportingInterval reportingInterval } // End of type PeriodicEventInfo @@ -804,16 +804,16 @@ module LocationAPI_TypesAndValues { * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.3.6 Type: ZoneLocationEventSubscription */ type record ZoneLocationEventSubscription { - Json.String subscriptionType, - Json.String clientCorrelator optional, - CallbackReference callbackReference optional, - Json.Bool requestTestNotification optional, - WebsockNotifConfig websockNotifConfig optional, - Links links_ optional, - ZoneId zoneId, + Json.String subscriptionType, + Json.String clientCorrelator optional, + CallbackReference callbackReference optional, + Json.Bool requestTestNotification optional, + WebsockNotifConfig websockNotifConfig optional, + Links links_ optional, + ZoneId zoneId, LocationEventCriteria locationEventCriteria optional, - ReportingCtrl reportingCtrl optional, - TimeStamp expiryDeadline optional + ReportingCtrl reportingCtrl optional, + TimeStamp expiryDeadline optional } with { variant (links_) "name as '_links'"; } // End of type ZoneLocationEventSubscription @@ -837,20 +837,20 @@ module LocationAPI_TypesAndValues { * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.3.7 Type: ZoneStatusSubscription */ type record ZoneStatusSubscription { - Json.String subscriptionType, - Json.String clientCorrelator optional, - CallbackReference callbackReference optional, - Json.Bool requestTestNotification optional, + Json.String subscriptionType, + Json.String clientCorrelator optional, + CallbackReference callbackReference optional, + Json.Bool requestTestNotification optional, WebsockNotifConfig websockNotifConfig optional, - Links links_ optional, - ZoneId zoneId, - Json.UInteger upperNumberOfUsersZoneThreshold optional, - Json.UInteger lowerNumberOfUsersZoneThreshold optional, - Json.UInteger upperNumberOfUsersAPThreshold optional, - Json.UInteger lowerNumberOfUsersAPThreshold optional, - OperationStatus operationStatus optional, - ReportingCtrl reportingCtrl optional, - TimeStamp expiryDeadline optional + Links links_ optional, + ZoneId zoneId, + Json.UInteger upperNumberOfUsersZoneThreshold optional, + Json.UInteger lowerNumberOfUsersZoneThreshold optional, + Json.UInteger upperNumberOfUsersAPThreshold optional, + Json.UInteger lowerNumberOfUsersAPThreshold optional, + OperationStatus operationStatus optional, + ReportingCtrl reportingCtrl optional, + TimeStamp expiryDeadline optional } with { variant (links_) "name as '_links'"; } // End of type ZoneStatusSubscription @@ -872,18 +872,18 @@ module LocationAPI_TypesAndValues { * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.3.8 Type: UserAreaSubscription */ type record UserAreaSubscription { - Json.String subscriptionType, - Json.String clientCorrelator optional, - CallbackReference callbackReference optional, - Json.Bool requestTestNotification optional, - WebsockNotifConfig websockNotifConfig optional, - Links links_ optional, - AreaInfo areaDefine, - Json.Number trackingAccuracy, + Json.String subscriptionType, + Json.String clientCorrelator optional, + CallbackReference callbackReference optional, + Json.Bool requestTestNotification optional, + WebsockNotifConfig websockNotifConfig optional, + Links links_ optional, + AreaInfo areaDefine, + Json.Number trackingAccuracy, LocationEventCriteria locationEventCriteria optional, - ReportingCtrl reportingCtrl optional, - Json.Bool reportingLocationReq optional, - TimeStamp expiryDeadline optional + ReportingCtrl reportingCtrl optional, + Json.Bool reportingLocationReq optional, + TimeStamp expiryDeadline optional } with { variant (links_) "name as '_links'"; } // End of type UserAreaSubscription @@ -908,20 +908,20 @@ module LocationAPI_TypesAndValues { * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.3.9 Type: UserDistanceSubscription */ type record UserDistanceSubscription { - Json.String subscriptionType, - Json.String clientCorrelator optional, - CallbackReference callbackReference optional, - Json.Bool requestTestNotification optional, + Json.String subscriptionType, + Json.String clientCorrelator optional, + CallbackReference callbackReference optional, + Json.Bool requestTestNotification optional, WebsockNotifConfig websockNotifConfig optional, - Links links_ optional, - Json.AnyURI referenceAddress optional, - Json.AnyURIArray monitoredAddress, - Json.Number distance, - Json.Number trackingAccuracy, - DistanceCriteria criteria, - Json.Bool checkImmediate, - ReportingCtrl reportingCtrl optional, - TimeStamp expiryDeadline optional + Links links_ optional, + Json.AnyURI referenceAddress optional, + Json.AnyURIArray monitoredAddress, + Json.Number distance, + Json.Number trackingAccuracy, + DistanceCriteria criteria, + Json.Bool checkImmediate, + ReportingCtrl reportingCtrl optional, + TimeStamp expiryDeadline optional } with { variant (links_) "name as '_links'"; } // End of type UserDistanceSubscription @@ -943,7 +943,7 @@ module LocationAPI_TypesAndValues { * @desc Hyperlink related to the resource * @member Identifying the subscription for the test notification * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.4.3 Type: TestNotification - * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.4.4 Type: UserLoctiationEventNotification + * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.4.4 Type: UserLocationEventNotification */ type record LinksSubscription { LinkType subscription @@ -961,23 +961,23 @@ module LocationAPI_TypesAndValues { * @member zoneId The identity of the zone * @member accessPointId The identity of the access point * @member _links Object containing hyperlinks related to the resource - * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.4.4 Type: UserLoctiationEventNotification - */ - type record UserLoctiationEventNotification { - Json.String notificationType, - TimeStamp timeStamp optional, - Address address_, - LocationEventType userLocationEvent, - LocationInfo locationInfo optional, - CivicAddress civicInfo optional, + * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.4.4 Type: UserLocationEventNotification + */ + type record UserLocationEventNotification { + Json.String notificationType, + TimeStamp timeStamp optional, + Address address_, + LocationEventType userLocationEvent, + LocationInfo locationInfo optional, + CivicAddress civicInfo optional, RelativeLocationInfo relativeLocationInfo optional, - ZoneId zoneId optional, - AccessPointId accessPointId optional, - Links links_ + ZoneId zoneId optional, + AccessPointId accessPointId optional, + Links links_ } with { variant (links_) "name as '_links'"; variant (address_) "name as 'address'"; - } // End of type UserLoctiationEventNotification + } // End of type UserLocationEventNotification /** * @desc This type represents a notification from location server with regards to UE location periodic reporting. @@ -995,17 +995,17 @@ module LocationAPI_TypesAndValues { * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.4.5 Type: UserLocationPeriodicNotification */ type record UserLocationPeriodicNotification { - Json.String notificationType, - TimeStamp timeStamp optional, - Address address_, - LocationEventType userLocationEvent, - LocationInfo locationInfo optional, - CivicAddress civicInfo optional, + Json.String notificationType, + TimeStamp timeStamp optional, + Address address_, + LocationEventType userLocationEvent, + LocationInfo locationInfo optional, + CivicAddress civicInfo optional, RelativeLocationInfo relativeLocationInfo optional, - ZoneId zoneId optional, - AccessPointId accessPointId optional, - Json.Bool isFinalNotification optional, - Links links_ + ZoneId zoneId optional, + AccessPointId accessPointId optional, + Json.Bool isFinalNotification optional, + Links links_ } with { variant (links_) "name as '_links'"; variant (address_) "name as 'address'"; @@ -1022,12 +1022,12 @@ module LocationAPI_TypesAndValues { * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.4.6 Type: ZoneLocationEventNotification */ type record ZoneLocationEventNotification { - Json.String notificationType, - TimeStamp timeStamp optional, - Address address_, + Json.String notificationType, + TimeStamp timeStamp optional, + Address address_, LocationEventType userLocationEvent, - ZoneId zoneId optional, - Links links_ + ZoneId zoneId optional, + Links links_ } with { variant (links_) "name as '_links'"; variant (address_) "name as 'address'"; @@ -1078,14 +1078,14 @@ module LocationAPI_TypesAndValues { * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.4.8 Type: UserAreaNotification */ type record UserAreaNotification { - Json.String notificationType, - TimeStamp timeStamp optional, - Address address_, - LocationInfo locationInfo optional, - CivicAddress civicInfo optional, + Json.String notificationType, + TimeStamp timeStamp optional, + Address address_, + LocationInfo locationInfo optional, + CivicAddress civicInfo optional, RelativeLocationInfo relativeLocationInfo optional, - LocationEventType userLocationEvent, - Links links_ + LocationEventType userLocationEvent, + Links links_ } with { variant (links_) "name as '_links'"; variant (address_) "name as 'address'"; @@ -1101,11 +1101,11 @@ module LocationAPI_TypesAndValues { * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.4.9 Type: UserDistanceNotification */ type record UserDistanceNotification { - Json.String notificationType, - TimeStamp timeStamp optional, - UserList monitoredUsers, + Json.String notificationType, + TimeStamp timeStamp optional, + UserList monitoredUsers, DistanceCriteria distanceEvent, - Links links_ + Links links_ } with { variant (links_) "name as '_links'"; } // End of type UserDistanceNotification diff --git a/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn b/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn index f72b195..957ee15 100644 --- a/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn +++ b/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn @@ -42,6 +42,7 @@ module LibHttp_JsonMessageBodyTypes { UserList userList, // ETSI GS MEC 013 V3.1.1 Clause 6.2.5 Type: UserList LocationAPI_TypesAndValues.ZoneInfo zoneInfo, // ETSI GS MEC 013 V3.1.1 Clause 6.2.1 Zonal presence data types AccessPointList accessPointList, // ETSI GS MEC 013 V3.1.1 Clause 6.2.1 Zonal presence data types + AccessPointInfo accessPointInfo, // ETSI GS MEC 013 V3.1.1 Clause 6.2.1 Zonal presence data types NotificationSubscriptionList notificationSubscriptionList, // ETSI GS MEC 013 V3.1.1 Clause 6.3.3 Type: NotificationSubscriptionList UserLocationEventSubscription userLocationEventSubscription, // ETSI GS MEC 013 V3.1.1 Clause 6.3.4 Type: UserLocationEventSubscription UserLocationPeriodicSubscription userLocationPeriodicSubscription, // ETSI GS MEC 013 V3.1.1 Clause 6.3.5 Type: UserLocationPeriodicSubscription @@ -49,6 +50,13 @@ module LibHttp_JsonMessageBodyTypes { ZoneStatusSubscription zoneStatusSubscription, // ETSI GS MEC 013 V3.1.1 Clause 6.3.7 Type: ZoneStatusSubscription UserAreaSubscription userAreaSubscription, // ETSI GS MEC 013 V3.1.1 Clause 6.3.8 Type: UserAreaSubscription UserDistanceSubscription userDistanceSubscription, // ETSI GS MEC 013 V3.1.1 Clause 6.3.9 Type: UserDistanceSubscription + UserAreaNotification userAreaNotification, // ETSI GS MEC 013 V3.1.1 Clause 6.4.8 Type: UserAreaNotification + UserDistanceNotification userDistanceNotification, // ETSI GS MEC 013 V3.1.1 Clause 6.4.9 Type: UserDistanceNotification + UserLocationEventNotification userLocationEventNotification, // ETSI GS MEC 013 V3.1.1 Clause 6.4.4 Type: UserLocationEventNotification + UserLocationPeriodicNotification userLocationPeriodicNotification, // ETSI GS MEC 013 V3.1.1 Clause 6.4.5 Type: UserLocationPeriodicNotification + ZoneLocationEventNotification zoneLocationEventNotification, // ETSI GS MEC 013 V3.1.1 Clause 6.4.6 Type: ZoneLocationEventNotification + ZoneStatusNotification zoneStatusNotification, // ETSI GS MEC 013 V3.1.1 Clause 6.4.7 Type: ZoneStatusNotification + LocationAPI_TypesAndValues.TestNotification testNotification, // ETSI GS MEC 013 V3.1.1 Clause 6.4.3 Type: TestNotification TerminalDistance terminalDistance, LibMec_TypesAndValues.ProblemDetails problemDetails, UeIdentityTagInfo ueIdentityTagInfo, diff --git a/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn b/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn index e27ee69..b504dd6 100644 --- a/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn +++ b/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn @@ -446,6 +446,18 @@ module LibHttp_JsonTemplates { accessPointList := p_access_point_list } // End of template mw_body_json_access_point_list + template (value) JsonBody m_body_json_access_point_info( + in template (value) AccessPointInfo p_access_point_info + ) := { + accessPointInfo := p_access_point_info + } // End of template m_body_json_access_point_info + + template (present) JsonBody mw_body_json_access_point_info( + template (present) AccessPointInfo p_access_point_info := ? + ) := { + accessPointInfo := p_access_point_info + } // End of template mw_body_json_access_point_info + template (value) JsonBody m_body_json_notification_subscription_list( in template (value) NotificationSubscriptionList p_notification_subscription_list ) := { @@ -542,6 +554,90 @@ module LibHttp_JsonTemplates { terminalDistance := p_terminal_distance } // End of template mw_body_json_terminal_distance + template (value) JsonBody m_body_json_user_area_notification( + in template (value) UserAreaNotification p_userAreaNotification + ) := { + userAreaNotification := p_userAreaNotification + } // End of template m_body_json_user_area_notification + + template (present) JsonBody mw_body_json_user_area_notification( + template (present) UserAreaNotification p_userAreaNotification := ? + ) := { + userAreaNotification := p_userAreaNotification + } // End of template mw_body_json_user_area_notification + + template (value) JsonBody m_body_json_user_distance_notification( + in template (value) UserDistanceNotification p_userDistanceNotification + ) := { + userDistanceNotification := p_userDistanceNotification + } // End of template m_body_json_user_distance_notification + + template (present) JsonBody mw_body_json_user_distance_notification( + template (present) UserDistanceNotification p_userDistanceNotification := ? + ) := { + userDistanceNotification := p_userDistanceNotification + } // End of template mw_body_json_user_distance_notification + + template (value) JsonBody m_body_json_user_location_event_notification( + in template (value) UserLocationEventNotification p_userLocationEventNotification + ) := { + userLocationEventNotification := p_userLocationEventNotification + } // End of template m_body_json_user_location_event_notification + + template (present) JsonBody mw_body_json_user_location_event_notification( + template (present) UserLocationEventNotification p_userLocationEventNotification := ? + ) := { + userLocationEventNotification := p_userLocationEventNotification + } // End of template mw_body_json_user_location_event_notification + + template (value) JsonBody m_body_json_user_location_periodic_notification( + in template (value) UserLocationPeriodicNotification p_userLocationPeriodicNotification + ) := { + userLocationPeriodicNotification := p_userLocationPeriodicNotification + } // End of template m_body_json_user_location_periodic_notification + + template (present) JsonBody mw_body_json_user_location_periodic_notification( + template (present) UserLocationPeriodicNotification p_userLocationPeriodicNotification := ? + ) := { + userLocationPeriodicNotification := p_userLocationPeriodicNotification + } // End of template mw_body_json_user_location_periodic_notification + + template (value) JsonBody m_body_json_zone_location_event_notification( + in template (value) ZoneLocationEventNotification p_zoneLocationEventNotification + ) := { + zoneLocationEventNotification := p_zoneLocationEventNotification + } // End of template m_body_json_zone_location_event_notification + + template (present) JsonBody mw_body_json_zone_location_event_notification( + template (present) ZoneLocationEventNotification p_zoneLocationEventNotification := ? + ) := { + zoneLocationEventNotification := p_zoneLocationEventNotification + } // End of template mw_body_json_zone_location_event_notification + + template (value) JsonBody m_body_json_zone_status_notification( + in template (value) ZoneStatusNotification p_zoneStatusNotification + ) := { + zoneStatusNotification := p_zoneStatusNotification + } // End of template m_body_json_zone_status_notification + + template (present) JsonBody mw_body_json_zone_status_notification( + template (present) ZoneStatusNotification p_zoneStatusNotification := ? + ) := { + zoneStatusNotification := p_zoneStatusNotification + } // End of template mw_body_json_zone_status_notification + + template (value) JsonBody m_body_json_test_notification( + in template (value) LocationAPI_TypesAndValues.TestNotification p_testNotification + ) := { + testNotification := p_testNotification + } // End of template m_body_json_test_notification + + template (present) JsonBody mw_body_json_test_notification( + template (present) LocationAPI_TypesAndValues.TestNotification p_testNotification := ? + ) := { + testNotification := p_testNotification + } // End of template mw_body_json_test_notification + } // End of group location_api group ue_identity_api { -- GitLab From 07a33b7eed8f33c68708572d96d952489bfcd3a7 Mon Sep 17 00:00:00 2001 From: garciay Date: Wed, 3 Jan 2024 15:06:10 +0100 Subject: [PATCH 59/99] TTF T027: TTCN-3 ATS MEC 013 finalized --- .../AtsMec_LocationAPI_TestCases.ttcn | 569 +++++++++++++++++- .../AtsMec_LocationAPI_TestControl.ttcn | 13 +- .../ttcn/LocationAPI_Functions.ttcn | 5 +- 3 files changed, 579 insertions(+), 8 deletions(-) diff --git a/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestCases.ttcn b/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestCases.ttcn index 46d16cc..e4f5762 100644 --- a/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestCases.ttcn +++ b/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestCases.ttcn @@ -3584,7 +3584,573 @@ module AtsMec_LocationAPI_TestCases { } // End of group ueTestNot group ueZoneLook { - // TODO + + /** + * @desc Check that the IUT responds with a list zones when queried by a MEC Application + */ + testcase TC_MEC_MEC013_SRV_UEZONELOOK_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_LOC_API_ZONES_SUB_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_notification_subscription_list( + mw_notification_subscription_list + ))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of ZoneSubscription ***"); + 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_UEZONELOOK_001_OK + + /** + * @desc Check that the IUT responds with the subscription when queried by a MEC Application - Zone location Event + */ + testcase TC_MEC_MEC013_SRV_UEZONELOOK_002_OK_01() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var ZoneLocationEventNotification v_zone_location_event_notification; + var charstring v_subscription_id; + + // 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_create_zone_location_event_subscription(v_zone_location_event_notification, v_subscription_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_LOC_API_ZONES_SUB_URI & "?event", + 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_notification_subscription_list( + mw_notification_subscription_list( + -, + { + *, + mw_subscription( + "ZoneLocationEventSubscription", + v_zone_location_event_notification.links_.self_.href + ), + * + } + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of ZoneSubscription ***"); + 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_zone_location_event_subscription(v_subscription_id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC013_SRV_UEZONELOOK_002_OK_01 + + /** + * @desc Check that the IUT responds with the subscription when queried by a MEC Application - Zone Status + */ + testcase TC_MEC_MEC013_SRV_UEZONELOOK_002_OK_02() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var ZoneStatusNotification v_zone_status_notification; + var charstring v_subscription_id; + + // 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_create_zone_status_subscription(v_zone_status_notification, v_subscription_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_LOC_API_ZONES_SUB_URI & "?status", + 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_notification_subscription_list( + mw_notification_subscription_list( + -, + { + *, + mw_subscription( + "ZoneStatusSubscription", + v_zone_status_notification.links_.self_.href + ), + * + } + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of ZoneSubscription ***"); + 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_zone_status_subscription(v_subscription_id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC013_SRV_UEZONELOOK_002_OK_02 + + /** + * @desc Check that the IUT responds with the subscription when queried by a MEC Application - UE location Event and address + */ + testcase TC_MEC_MEC013_SRV_UEZONELOOK_002_OK_03() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var ZoneLocationEventNotification v_zone_location_event_notification_1, v_zone_location_event_notification_2; + var ZoneStatusNotification v_zone_status_notification; + var charstring v_subscription_id_event_1, v_subscription_id_event_2; + var charstring v_subscription_id_status; + + // 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_create_zone_location_event_subscription(v_zone_location_event_notification_1, v_subscription_id_event_1); + f_create_zone_location_event_subscription(v_zone_location_event_notification_2, v_subscription_id_event_2, PX_USER_2); + f_create_zone_status_subscription(v_zone_status_notification, v_subscription_id_status); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_LOC_API_ZONES_SUB_URI & "?event&address=" & PX_USER_2, + 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_notification_subscription_list( + mw_notification_subscription_list( + -, + { + *, + mw_subscription( + "ZoneLocationEventSubscription.", + v_zone_location_event_notification_2.links_.self_.href + ), + * + } + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of ZoneSubscription ***"); + 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_zone_location_event_subscription(v_subscription_id_event_1); + f_delete_zone_location_event_subscription(v_subscription_id_event_2); + f_delete_zone_status_subscription(v_subscription_id_status); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC013_SRV_UEZONELOOK_002_OK_03 + + /** + * @desc Check that the IUT responds with an error when inconsistent request was sent by a MEC Application - Invalid filter + */ + testcase TC_MEC_MEC013_SRV_UEZONELOOK_002_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var ZoneLocationEventNotification v_zone_location_event_notification_1, v_zone_location_event_notification_2; + var ZoneStatusNotification v_zone_status_notification; + var charstring v_subscription_id_event_1, v_subscription_id_event_2; + var charstring v_subscription_id_status; + + // 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_create_zone_location_event_subscription(v_zone_location_event_notification_1, v_subscription_id_event_1); + f_create_zone_location_event_subscription(v_zone_location_event_notification_2, v_subscription_id_event_2, PX_USER_2); + f_create_zone_status_subscription(v_zone_status_notification, v_subscription_id_status); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_LOC_API_ZONES_SUB_URI & "?event&address", // Invalid 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 list of ZoneSubscription ***"); + 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_zone_location_event_subscription(v_subscription_id_event_1); + f_delete_zone_location_event_subscription(v_subscription_id_event_2); + f_delete_zone_status_subscription(v_subscription_id_status); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC013_SRV_UEZONELOOK_002_BR + + /** + * @desc Check that the IUT responds with an error when inconsistent request was sent by a MEC Application + */ + testcase TC_MEC_MEC013_SRV_UEZONELOOK_002_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var ZoneLocationEventNotification v_zone_location_event_notification; + var ZoneStatusNotification v_zone_status_notification; + var charstring v_subscription_id_event; + var charstring v_subscription_id_status; + + // 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_create_zone_location_event_subscription(v_zone_location_event_notification, v_subscription_id_event); + f_create_zone_status_subscription(v_zone_status_notification, v_subscription_id_status); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_LOC_API_ZONES_SUB_URI & "?event&address=" & PX_USER_2, + 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_zone_location_event_subscription(v_subscription_id_event); + f_delete_zone_status_subscription(v_subscription_id_status); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC013_SRV_UEZONELOOK_002_NF + + /** + * @desc Check that the IUT responds with the subscription when queried by a MEC Application - Zone location Event + */ + testcase TC_MEC_MEC013_SRV_UEZONELOOK_003_OK_01() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var ZoneLocationEventNotification v_zone_location_event_notification; + var charstring v_subscription_id; + + // 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_create_zone_location_event_subscription(v_zone_location_event_notification, v_subscription_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_LOC_API_ZONES_SUB_URI & "/" & v_subscription_id, + 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_notification_subscription_list( + mw_notification_subscription_list( + -, + { + *, + mw_subscription( + "ZoneLocationEventSubscription.", + v_zone_location_event_notification.links_.self_.href + ), + * + } + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct ZoneSubscription ***"); + 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_zone_location_event_subscription(v_subscription_id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC013_SRV_UEZONELOOK_003_OK_01 + + /** + * @desc Check that the IUT responds with the subscription when queried by a MEC Application - Zone status Event + */ + testcase TC_MEC_MEC013_SRV_UEZONELOOK_003_OK_02() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var ZoneStatusNotification v_zone_status_notification; + var charstring v_subscription_id; + + // 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_create_zone_status_subscription(v_zone_status_notification, v_subscription_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_LOC_API_ZONES_SUB_URI & "/" & v_subscription_id, + 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_notification_subscription_list( + mw_notification_subscription_list( + -, + { + *, + mw_subscription( + "ZoneLocationEventSubscription.", + v_zone_status_notification.links_.self_.href + ), + * + } + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct ZoneSubscription ***"); + 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_zone_status_subscription(v_subscription_id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC013_SRV_UEZONELOOK_003_OK_02 + + /** + * @desc Check that the IUT responds with an error when the non existing subscription is queried by a MEC Application + */ + testcase TC_MEC_MEC013_SRV_UEZONELOOK_003_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_LOC_API_ZONES_SUB_URI & "/" & PX_NON_EXISTENT_SUBSCRIPTION_ID, + 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_MEC013_SRV_UEZONELOOK_003_NF + } // End of group ueZoneLook group ueZoneSub { @@ -4058,7 +4624,6 @@ module AtsMec_LocationAPI_TestCases { testcase TC_MEC_MEC013_SRV_UEZONESUB_002_OK_01() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; - var HttpMessage v_response; var ZoneLocationEventNotification v_zone_location_event_notification; var charstring v_subscription_id; diff --git a/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestControl.ttcn b/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestControl.ttcn index 2a8ce72..81b4e68 100644 --- a/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestControl.ttcn +++ b/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestControl.ttcn @@ -78,9 +78,15 @@ module AtsMec_LocationAPI_TestControl { execute(TC_MEC_MEC013_SRV_UETESTNOT_001_OK()); execute(TC_MEC_MEC013_SRV_UETESTNOT_002_OK()); - - - + execute(TC_MEC_MEC013_SRV_UEZONELOOK_001_OK()); + execute(TC_MEC_MEC013_SRV_UEZONELOOK_002_OK_01()); + execute(TC_MEC_MEC013_SRV_UEZONELOOK_002_OK_02()); + execute(TC_MEC_MEC013_SRV_UEZONELOOK_002_OK_03()); + execute(TC_MEC_MEC013_SRV_UEZONELOOK_002_BR()); + execute(TC_MEC_MEC013_SRV_UEZONELOOK_002_NF()); + execute(TC_MEC_MEC013_SRV_UEZONELOOK_003_OK_01()); + execute(TC_MEC_MEC013_SRV_UEZONELOOK_003_OK_02()); + execute(TC_MEC_MEC013_SRV_UEZONELOOK_003_NF()); execute(TC_MEC_MEC013_SRV_UEZONESUB_001_OK_01_01()); execute(TC_MEC_MEC013_SRV_UEZONESUB_001_OK_01_02()); @@ -94,7 +100,6 @@ module AtsMec_LocationAPI_TestControl { execute(TC_MEC_MEC013_SRV_UEZONESUB_002_NF()); execute(TC_MEC_MEC013_SRV_UEZONESUB_003_OK()); execute(TC_MEC_MEC013_SRV_UEZONESUB_003_NF()); - } } } // End of 'control' statement diff --git a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Functions.ttcn b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Functions.ttcn index 0177ba7..5823989 100644 --- a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Functions.ttcn +++ b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Functions.ttcn @@ -194,7 +194,8 @@ module LocationAPI_Functions { function f_create_zone_location_event_subscription( out ZoneLocationEventNotification p_zone_location_event_notification, - out charstring p_subscription_id + out charstring p_subscription_id, + in Address p_user := PX_USER ) runs on HttpComponent { var Headers v_headers; var HttpMessage v_response; @@ -209,7 +210,7 @@ module LocationAPI_Functions { m_body_json_zone_location_event_subscription( m_zone_location_event_subscription( PX_CALLBACK_REF_URL, - -, + p_user, PX_ZONE_ID )))))); tc_ac.start; -- GitLab From 07baf01303f98810bd0a6677a4086431d689412b Mon Sep 17 00:00:00 2001 From: garciay Date: Fri, 5 Jan 2024 11:28:57 +0100 Subject: [PATCH 60/99] TTF T027: TTCN-3 ATS MEC 013 finalized --- .../AtsMec_UEidentityAPI_TestCases.ttcn | 75 ++++++------------- .../AtsMec_UEidentityAPI_TestControl.ttcn | 17 ++--- 2 files changed, 32 insertions(+), 60 deletions(-) diff --git a/ttcn/AtsMec_UEidentity/AtsMec_UEidentityAPI_TestCases.ttcn b/ttcn/AtsMec_UEidentity/AtsMec_UEidentityAPI_TestCases.ttcn index 9ef8643..7c4418c 100644 --- a/ttcn/AtsMec_UEidentity/AtsMec_UEidentityAPI_TestCases.ttcn +++ b/ttcn/AtsMec_UEidentity/AtsMec_UEidentityAPI_TestCases.ttcn @@ -1,5 +1,5 @@ /** - * @author ETSI / STF569 + * @author ETSI / STF569 / TTF T027 * @version $URL:$ * $ID:$ * @desc This module provides the MEC test cases. @@ -7,7 +7,7 @@ * No part may be reproduced except as authorized by written permission. * The copyright and the foregoing restriction extend to reproduction in all media. * All rights reserved. - * @see ETSI GS MEC 003, ETSI GS MEC 014 V2.1.1 + * @see ETSI GS MEC 003, ETSI GS MEC 014 V3.1.1 */ module AtsMec_UEidentityAPI_TestCases { @@ -38,7 +38,6 @@ module AtsMec_UEidentityAPI_TestCases { /** * @desc Check that the IUT responds with the information on a UE Identity tag when queried by a MEC Application - * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/UETAG/PlatUeIdentity.tplan2 */ testcase TC_MEC_MEC014_SRV_UETAG_001_OK() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -61,11 +60,9 @@ module AtsMec_UEidentityAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - "/" & PICS_ROOT_API & PX_ME_APP_Q_UE_IDENTITY_ID_URI & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/ue_identity_tag_info?ueIdentityTag=" & oct2char(unichar2oct(PX_UE_IDENTITY_TAG, "UTF-8")), + PICS_ROOT_API & PICS_ROOT_API & PX_ME_APP_Q_UE_IDENTITY_ID_URI & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/ue_identity_tag_info?ueIdentityTag=" & oct2char(unichar2oct(PX_UE_IDENTITY_TAG, "UTF-8")), v_headers - ) - ) - ); + ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -78,7 +75,7 @@ module AtsMec_UEidentityAPI_TestCases { mw_body_json_ue_identity_tag_info( mw_ue_identity_tag_info( { *, mw_ue_identity_tag_item(PX_UE_IDENTITY_TAG), * } - )))))) { + )))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a UeIdentityTag ***"); @@ -96,7 +93,6 @@ module AtsMec_UEidentityAPI_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/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/SRV/UeIdentity/PlatUeIdentity.tplan2 */ testcase TC_MEC_MEC014_SRV_UETAG_001_BR() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -119,11 +115,9 @@ module AtsMec_UEidentityAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - "/" & PICS_ROOT_API & PX_ME_APP_Q_UE_IDENTITY_ID_URI & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/invalid/ue_identity_tag_info?ueIdentityTag=" & oct2char(unichar2oct(PX_UE_IDENTITY_TAG, "UTF-8")), + PICS_ROOT_API & PICS_ROOT_API & PX_ME_APP_Q_UE_IDENTITY_ID_URI & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/invalid/ue_identity_tag_info?ueIdentityTag=" & oct2char(unichar2oct(PX_UE_IDENTITY_TAG, "UTF-8")), v_headers - ) - ) - ); + ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -136,7 +130,7 @@ module AtsMec_UEidentityAPI_TestCases { mw_body_json_problem_details( mw_problem_details( -, -, 400 - )))))) { + )))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a ProblemDetails set to 400 Bad Request ***"); @@ -154,7 +148,6 @@ module AtsMec_UEidentityAPI_TestCases { /** * @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/MEC-tests/blob/master/Test%20Purposes/SRV/UeIdentity/PlatUeIdentity.tplan2 */ testcase TC_MEC_MEC014_SRV_UETAG_001_NF() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -177,11 +170,9 @@ module AtsMec_UEidentityAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - "/" & PICS_ROOT_API & PX_ME_APP_Q_UE_IDENTITY_ID_URI & oct2char(unichar2oct(PX_NON_EXISTENT_APP_INSTANCE_ID, "UTF-8")) & "/ue_identity_tag_info?ueIdentityTag=" & oct2char(unichar2oct(PX_UE_IDENTITY_TAG, "UTF-8")), + PICS_ROOT_API & PICS_ROOT_API & PX_ME_APP_Q_UE_IDENTITY_ID_URI & oct2char(unichar2oct(PX_NON_EXISTENT_APP_INSTANCE_ID, "UTF-8")) & "/ue_identity_tag_info?ueIdentityTag=" & oct2char(unichar2oct(PX_UE_IDENTITY_TAG, "UTF-8")), v_headers - ) - ) - ); + ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -194,7 +185,7 @@ module AtsMec_UEidentityAPI_TestCases { mw_body_json_problem_details( mw_problem_details( -, -, 404 - )))))) { + )))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a ProblemDetails set to 404 Not Found ***"); @@ -212,15 +203,14 @@ module AtsMec_UEidentityAPI_TestCases { /** * @desc Check that the IUT registers a tag (representing a UE) or a list of tags when commanded by a MEC Application - * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/SRV/UeIdentity/PlatUeIdentity.tplan2 */ testcase TC_MEC_MEC014_SRV_UETAG_002_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; // Test control - if (not(PICS_MEC_PLAT) or not(PICS_UE_IDENTITY_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_LOCATION_API_SUPPORTED required for executing the TC ***"); + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_UE_IDENTITY_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_LOCATION_API_SUPPORTED required for executing the TC ***"); setverdict(inconc); stop; } @@ -240,7 +230,7 @@ module AtsMec_UEidentityAPI_TestCases { httpPort.send( m_http_request( m_http_request_put( - "/" & PICS_ROOT_API & PX_ME_APP_Q_UE_IDENTITY_ID_URI & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/ue_identity_tag_info", + PICS_ROOT_API & PICS_ROOT_API & PX_ME_APP_Q_UE_IDENTITY_ID_URI & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/ue_identity_tag_info", v_headers, m_http_message_body_json( m_body_json_ue_identity_tag_info( @@ -251,12 +241,7 @@ module AtsMec_UEidentityAPI_TestCases { REGISTERED ) } - ) - ) - ) - ) - ) - ); + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -269,7 +254,7 @@ module AtsMec_UEidentityAPI_TestCases { mw_body_json_ue_identity_tag_info( mw_ue_identity_tag_info( { *, mw_ue_identity_tag_item(PX_UE_IDENTITY_TAG, REGISTERED), * } - )))))) { + )))))) { tc_ac.stop; if (f_check_user_register_state(-, v_headers) == 1) { @@ -292,7 +277,6 @@ module AtsMec_UEidentityAPI_TestCases { /** * @desc Check that the IUT responds with an error when an unauthorised request is sent by a MEC Application - * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/SRV/UeIdentity/PlatUeIdentity.tplan2 */ testcase TC_MEC_MEC014_SRV_UETAG_002_BR() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -320,7 +304,7 @@ module AtsMec_UEidentityAPI_TestCases { httpPort.send( m_http_request( m_http_request_put( - "/" & PICS_ROOT_API & PX_ME_APP_Q_UE_IDENTITY_ID_URI & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/ue_identity_tag_info", + PICS_ROOT_API & PICS_ROOT_API & PX_ME_APP_Q_UE_IDENTITY_ID_URI & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/ue_identity_tag_info", v_headers, m_http_message_body_json( m_body_json_ue_identity_tag_info( @@ -331,12 +315,7 @@ module AtsMec_UEidentityAPI_TestCases { INVALID_STATE ) } - ) - ) - ) - ) - ) - ); + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -349,7 +328,7 @@ module AtsMec_UEidentityAPI_TestCases { mw_body_json_problem_details( mw_problem_details( -, -, 400 - ))))*/)) { + ))))*/)) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a ProblemDetails set to 403 Forbidden ***"); @@ -367,7 +346,6 @@ module AtsMec_UEidentityAPI_TestCases { /** * @desc Check that the IUT responds with ProblemDetails on information an invalid URI - * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/SRV/UeIdentity/PlatUeIdentity.tplan2 */ testcase TC_MEC_MEC014_SRV_UETAG_002_PF() runs on HttpComponent system HttpTestAdapter { // FIXME Which IE protocol should be invalid? // Local variables @@ -390,7 +368,7 @@ module AtsMec_UEidentityAPI_TestCases { httpPort.send( m_http_request( m_http_request_put( - "/" & PICS_ROOT_API & PX_ME_APP_Q_UE_IDENTITY_ID_URI & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/ue_identity_tag_info", + PICS_ROOT_API & PICS_ROOT_API & PX_ME_APP_Q_UE_IDENTITY_ID_URI & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/ue_identity_tag_info", v_headers, m_http_message_body_json( m_body_json_ue_identity_tag_info( @@ -401,12 +379,7 @@ module AtsMec_UEidentityAPI_TestCases { UNREGISTERED ) } - ) - ) - ) - ) - ) - ); + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -419,7 +392,7 @@ module AtsMec_UEidentityAPI_TestCases { mw_body_json_problem_details( mw_problem_details( -, -, 412 - )))))) { + )))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a ProblemDetails set to 412 Precondition Failed ***"); @@ -465,7 +438,7 @@ module AtsMec_UEidentityAPI_TestCases { // httpPort.send( // m_http_request( // m_http_request_post( -// "/" & PICS_ROOT_API & PX_ME_APP_Q_UE_IDENTITY_ID_URI & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/ue_identity_tag_info", +// PICS_ROOT_API & PICS_ROOT_API & PX_ME_APP_Q_UE_IDENTITY_ID_URI & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/ue_identity_tag_info", // v_headers, // m_http_message_body_json( // m_body_json_ue_identity_tag_info( @@ -543,7 +516,7 @@ module AtsMec_UEidentityAPI_TestCases { // httpPort.send( // m_http_request( // m_http_request_post( -// "/" & PICS_ROOT_API & PX_ME_APP_Q_UE_IDENTITY_ID_URI & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/ue_identity_tag_info", +// PICS_ROOT_API & PICS_ROOT_API & PX_ME_APP_Q_UE_IDENTITY_ID_URI & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/ue_identity_tag_info", // v_headers, // m_http_message_body_json( // m_body_json_ue_identity_tag_info( diff --git a/ttcn/AtsMec_UEidentity/AtsMec_UEidentityAPI_TestControl.ttcn b/ttcn/AtsMec_UEidentity/AtsMec_UEidentityAPI_TestControl.ttcn index f324d06..97dcc2e 100644 --- a/ttcn/AtsMec_UEidentity/AtsMec_UEidentityAPI_TestControl.ttcn +++ b/ttcn/AtsMec_UEidentity/AtsMec_UEidentityAPI_TestControl.ttcn @@ -11,15 +11,14 @@ module AtsMec_UEidentityAPI_TestControl { control { - if (PICS_MEC_PLAT and PICS_SERVICES) { - if (PICS_UE_IDENTITY_API_SUPPORTED) { - execute(TC_MEC_MEC014_SRV_UETAG_001_OK()); - execute(TC_MEC_MEC014_SRV_UETAG_001_BR()); - execute(TC_MEC_MEC014_SRV_UETAG_001_NF()); - execute(TC_MEC_MEC014_SRV_UETAG_002_OK()); - execute(TC_MEC_MEC014_SRV_UETAG_002_BR()); - execute(TC_MEC_MEC014_SRV_UETAG_002_PF()); - } + if (PICS_MEC_PLAT and PICS_SERVICES and PICS_UE_IDENTITY_API_SUPPORTED) { + execute(TC_MEC_MEC014_SRV_UETAG_001_OK()); + execute(TC_MEC_MEC014_SRV_UETAG_001_BR()); + execute(TC_MEC_MEC014_SRV_UETAG_001_NF()); + + execute(TC_MEC_MEC014_SRV_UETAG_002_OK()); + execute(TC_MEC_MEC014_SRV_UETAG_002_BR()); + execute(TC_MEC_MEC014_SRV_UETAG_002_PF()); } } // End of 'control' statement -- GitLab From 92a6584ec85c57190686fcb1f4c3934b7c5ac2fa Mon Sep 17 00:00:00 2001 From: garciay Date: Fri, 5 Jan 2024 16:02:06 +0100 Subject: [PATCH 61/99] TTF T027: Start review MEC-028 --- .../AtsMec_WlanInformationAPI_TestCases.ttcn | 2204 +++--- ...AtsMec_WlanInformationAPI_TestControl.ttcn | 28 +- .../json/UEAppInterfaceApi.json | 1051 --- .../EdgePlatformApplicationEnablementAPI.json | 2529 ------- ttcn/LibMec/LocationAPI/json/LocationAPI.json | 4344 ----------- .../ttcn/LocationAPI_Functions.ttcn | 2 +- ttcn/LibMec/RnisAPI/json/RnisAPI.json | 6574 ----------------- .../json/BwManagementApi.json | 629 -- .../json/TrafficSteeringApi.json | 657 -- .../json/UEAppInterfaceAPI.json | 618 -- .../UEidentityAPI/json/UEidentityAPI.json | 310 - .../json/MEC030_V2XInformationService.yaml | 1568 ---- .../json/WlanInformationAPI.json | 2701 ------- .../ttcn/WlanInformationAPI_Functions.ttcn | 41 +- .../ttcn/WlanInformationAPI_Templates.ttcn | 16 + ttcn/LibMec/ttcn/LibMec_Pixits.ttcn | 54 +- 16 files changed, 1194 insertions(+), 22132 deletions(-) delete mode 100644 ttcn/LibMec/DeviceApplicationInterfaceAPI/json/UEAppInterfaceApi.json delete mode 100644 ttcn/LibMec/EdgePlatformApplicationEnablementAPI/json/EdgePlatformApplicationEnablementAPI.json delete mode 100644 ttcn/LibMec/LocationAPI/json/LocationAPI.json delete mode 100644 ttcn/LibMec/RnisAPI/json/RnisAPI.json delete mode 100644 ttcn/LibMec/TrafficManagementAPI/json/BwManagementApi.json delete mode 100644 ttcn/LibMec/TrafficManagementAPI/json/TrafficSteeringApi.json delete mode 100644 ttcn/LibMec/UEAppInterfaceAPI/json/UEAppInterfaceAPI.json delete mode 100644 ttcn/LibMec/UEidentityAPI/json/UEidentityAPI.json delete mode 100644 ttcn/LibMec/V2XInformationServiceAPI/json/MEC030_V2XInformationService.yaml delete mode 100644 ttcn/LibMec/WlanInformationAPI/json/WlanInformationAPI.json diff --git a/ttcn/AtsMec_WlanInformation/AtsMec_WlanInformationAPI_TestCases.ttcn b/ttcn/AtsMec_WlanInformation/AtsMec_WlanInformationAPI_TestCases.ttcn index 892b5d0..ff317d9 100644 --- a/ttcn/AtsMec_WlanInformation/AtsMec_WlanInformationAPI_TestCases.ttcn +++ b/ttcn/AtsMec_WlanInformation/AtsMec_WlanInformationAPI_TestCases.ttcn @@ -1,5 +1,5 @@ /** - * @author ETSI / TTF T012 + * @author ETSI / TTF T012 / TTF T027 * @version $URL:$ * $ID:$ * @desc This module provides the MEC test cases. @@ -7,7 +7,7 @@ * No part may be reproduced except as authorized by written permission. * The copyright and the foregoing restriction extend to reproduction in all media. * All rights reserved. - * @see ETSI GS MEC 002, Draft ETSI GS MEC 028 V2.1.1 (2020-06) + * @see ETSI GS MEC 002, Draft ETSI GS MEC 028 V2.3.1 (2022-07) */ module AtsMec_WlanInformationAPI_TestCases { @@ -43,426 +43,227 @@ module AtsMec_WlanInformationAPI_TestCases { /** * @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/ApInfo.tplan2 */ testcase TC_MEC_MEC028_SRV_WAI_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_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 & "/ap/ap_information", - v_headers - ) - ) - ); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES 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 & "/ap/ap_information", + 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_ap_info_list - )))) -> value v_response { - 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(); + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_ap_info_list + )))) { + 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_001_OK /** * @desc Check that the IUT responds with the list of WLAN Access 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 */ testcase TC_MEC_MEC028_SRV_WAI_002_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 & "/ap/ap_information?filter=(eq," & PX_WLAN_FILTER_FIELD & "," & PX_WLAN_FILTER_VALUE & ")", - v_headers - ) - ) - ); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES 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 & "/ap/ap_information?filter=(eq," & PX_WLAN_FILTER_FIELD & "," & PX_WLAN_FILTER_VALUE & ")", + 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_ap_info_list - )))) -> value v_response { - 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(); + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_ap_info_list + )))) { + 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_002_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 */ testcase TC_MEC_MEC028_SRV_WAI_002_BR() 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 & "/apId/ap_information?filter=(ee," & PX_WLAN_FILTER_FIELD & "," & PX_WLAN_FILTER_VALUE & ")", // Invalid requery - v_headers - ) - ) - ); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES 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 & "/apId/ap_information?filter=(ee," & PX_WLAN_FILTER_FIELD & "," & PX_WLAN_FILTER_VALUE & ")", // Invalid requery + 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 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(); + // 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_002_BR /** * @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/StationInfo.tplan2 */ testcase TC_MEC_MEC028_SRV_WAI_003_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 & "/sta/sta_information", - v_headers - ) - ) - ); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES 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 & "/sta/sta_information", + 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_sta_info_list - )))) -> value v_response { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a StaInfo 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 - - // Postamble - f_cf_01_http_down(); + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_sta_info_list + )))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a StaInfo 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 + + // Postamble + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC028_SRV_WAI_003_OK /** * @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/StationInfo.tplan2 */ testcase TC_MEC_MEC028_SRV_WAI_004_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 & "/sta/sta_information?filter=(eq," & PX_WLAN_FILTER_FIELD & "," & PX_WLAN_FILTER_VALUE & ")", - 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_sta_info_list - )))) -> value v_response { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a StaInfo 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 - - // Postamble - f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC028_SRV_WAI_004_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/StationInfo.tplan2 - */ - testcase TC_MEC_MEC028_SRV_WAI_004_BR() 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 & "/staId/sta_information?filter=(ee," & PX_WLAN_FILTER_FIELD & "," & PX_WLAN_FILTER_VALUE & ")", // Invalid requery - 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 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_004_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/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 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", - 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 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 - - // Postamble - f_delete_assoc_sta_subscription(v_assoc_sta_subscription); - f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC028_SRV_WAI_005_OK - - /** - * @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/Subscription.tplan2 - */ - testcase TC_MEC_MEC028_SRV_WAI_006_OK() 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; + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_WLAN_INFORMATION_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; } // Test component configuration @@ -471,33 +272,27 @@ module AtsMec_WlanInformationAPI_TestCases { // 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", + m_http_request_get( + PICS_ROOT_API & PX_ME_WLAN_QUERIES_URI & "/sta/sta_information?filter=(eq," & PX_WLAN_FILTER_FIELD & "," & PX_WLAN_FILTER_VALUE & ")", 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 { + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_sta_info_list + )))) { tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of AssocStaSubscription ***"); + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a StaInfo list ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -507,801 +302,998 @@ module AtsMec_WlanInformationAPI_TestCases { } // 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 + } // End of testcase TC_MEC_MEC028_SRV_WAI_004_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/Subscription.tplan2 */ - testcase TC_MEC_MEC028_SRV_WAI_006_BR() runs on HttpComponent system HttpTestAdapter { - // Local variables - var AssocStaSubscription v_assoc_sta_subscription; - 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; + testcase TC_MEC_MEC028_SRV_WAI_004_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_WLAN_INFORMATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES 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 & "/staId/sta_information?filter=(ee," & PX_WLAN_FILTER_FIELD & "," & PX_WLAN_FILTER_VALUE & ")", // Invalid requery + 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); } - - // 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/assoc_sta", - v_headers - ) - ) - ); - f_selfOrClientSyncAndVerdict(c_prDone, 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_004_BR - // Test Body - tc_ac.start; - alt { - [] httpPort.receive( - mw_http_response( - mw_http_response_400_bad_request - )) { - tc_ac.stop; + /** + * @desc Check that the IUT responds with the requested list of subscription + */ + testcase TC_MEC_MEC028_SRV_WAI_005_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var AssocStaSubscription v_assoc_sta_subscription, v_assoc_sta_subscription_1; + var Json.String v_subscription_id, v_subscription_id_1; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES 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, v_subscription_id); + f_create_assoc_sta_subscription(v_assoc_sta_subscription, v_subscription_id_1); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_WLAN_URI_SUB, + 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( + -, + { + *, + mw_subscription( + v_assoc_sta_subscription.links.self_.href, + "AssocStaSubscription" + ), + mw_subscription( + v_assoc_sta_subscription_1.links.self_.href, + "AssocStaSubscription" + ), * + } + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of 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 + + // Postamble + f_delete_assoc_sta_subscription(v_subscription_id); + f_delete_assoc_sta_subscription(v_subscription_id_1); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC028_SRV_WAI_005_OK + + /** + * @desc Check that the IUT responds with the requested list of subscription when the MEC Platform is queried using a filter on subscription type + */ + testcase TC_MEC_MEC028_SRV_WAI_006_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var AssocStaSubscription v_assoc_sta_subscription; + var Json.String v_subscription_id + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES 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, v_subscription_id); + 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( + -, + { + *, + mw_subscription( + v_assoc_sta_subscription.links.self_.href, + "AssocStaSubscription" + ), + * + } + )))))) { + 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 + 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_subscription_id); + 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 + */ + testcase TC_MEC_MEC028_SRV_WAI_006_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var AssocStaSubscription v_assoc_sta_subscription; + var Json.String v_subscription_id - // Postamble - f_delete_assoc_sta_subscription(v_assoc_sta_subscription); - f_cf_01_http_down(); + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES 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, v_subscription_id); + 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_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_delete_assoc_sta_subscription(v_subscription_id); + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC028_SRV_WAI_006_BR /** * @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/Subscription.tplan2 */ testcase TC_MEC_MEC028_SRV_WAI_006_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_URI & "/subscriptions/assoc_sta", - v_headers - ) - ) - ); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES 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_URI_SUB, + 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(); + // 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_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/Subscription.tplan2 + * @desc Check that the IUT responds with a Notification Subscription */ testcase TC_MEC_MEC028_SRV_WAI_007_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 & "/subscriptions", - v_headers, - m_http_message_body_json( - m_body_json_assoc_sta_subscription( - m_assoc_sta_subscription( - 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); + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var Json.String v_subscription_id; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES 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_SUB, + v_headers, + m_http_message_body_json( + m_body_json_assoc_sta_subscription( + m_assoc_sta_subscription( + 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 - tc_ac.start; - alt { - [] httpPort.receive( - mw_http_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 ***"); + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_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; + + // Check HTTP Location header + if (f_check_headers(v_response.response.header) == false) { + log("*** " & testcasename() & ": FAIL: IUT failed in subscription ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_error); + } else { + var charstring_list v_header_location; + f_get_header(v_response.response.header, "Location", v_header_location); + v_subscription_id := regexp( + v_header_location[0], + "?+" & PX_ME_WLAN_URI_SUB & "/(?*)", + 0 + ); + + log("*** " & testcasename() & ": PASS: IUT successfully responds to the subscription, SubscriptionId: ", v_subscription_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 - - // Postamble - f_delete_assoc_sta_subscription(v_response.response.body.json_body.assocStaSubscription); - f_cf_01_http_down(); + } + [] 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_subscription_id); + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC028_SRV_WAI_007_OK /** * @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/Subscription.tplan2 */ testcase TC_MEC_MEC028_SRV_WAI_007_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 & "/subscriptions", - v_headers, - m_http_message_body_json( - m_body_json_assoc_sta_subscription( - m_assoc_sta_subscription_invalid( - PX_ASSOC_STA_SUBSCRIPTION_CALLBACK, - m_ap_identity( - PX_MAC_ID - ))))))); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES 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_SUB, + v_headers, + m_http_message_body_json( + m_body_json_assoc_sta_subscription( + m_assoc_sta_subscription_invalid( + PX_ASSOC_STA_SUBSCRIPTION_CALLBACK, + m_ap_identity( + PX_MAC_ID + ))))))); + 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(); + // 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_007_BR /** * @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/Subscription.tplan2 */ testcase TC_MEC_MEC028_SRV_WAI_007_NF() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; + // 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 & "/subscriptions&filter=(eq,ap/macId,00:01:02:03:04:04)", - v_headers, - m_http_message_body_json( - m_body_json_assoc_sta_subscription( - m_assoc_sta_subscription( - PX_ASSOC_STA_SUBSCRIPTION_CALLBACK, - m_ap_identity( - PX_MAC_ID - ))))))); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES 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 & "/subscriptions&filter=(eq,ap/macId,00:01:02:03:04:04)", + v_headers, + m_http_message_body_json( + m_body_json_assoc_sta_subscription( + m_assoc_sta_subscription( + PX_ASSOC_STA_SUBSCRIPTION_CALLBACK, + m_ap_identity( + PX_MAC_ID + ))))))); + 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(); + // 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_MEC028_SRV_WAI_007_NF /** * @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/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)) { - 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); - 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 & PX_ME_WLAN_URI & "/subscriptions/" & v_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_assoc_sta_subscription( - mw_assoc_sta_subscription( - v_assoc_sta_subscription.callbackReference, - -, - -, -, - v_assoc_sta_subscription.links - )))))) -> value v_response { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with an 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(); + // Local variables + var Headers v_headers; + var AssocStaSubscription v_assoc_sta_subscription; + var Json.String v_subscription_id; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES 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, v_subscription_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_WLAN_URI_SUB & "/" & v_subscription_id, + 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_assoc_sta_subscription( + mw_assoc_sta_subscription( + v_assoc_sta_subscription.callbackReference, + -, + -, -, + v_assoc_sta_subscription.links + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with an 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_subscription_id); + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC028_SRV_WAI_008_OK /** * @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/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 ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Test adapter configuration + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_WLAN_INFORMATION_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } - // 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/unknown", - v_headers - ) - ) - ); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); + // 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_URI & "/subscriptions/unknown", + 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 an 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(); + // 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 an 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_cf_01_http_down(); } // End of testcase TC_MEC_MEC028_SRV_WAI_008_NF /** * @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/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)) { - 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); - 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 & PX_ME_WLAN_URI & "/subscriptions/" & v_uri, - v_headers, - m_http_message_body_json( - m_body_json_assoc_sta_subscription( - 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); + // Local variables + var Headers v_headers; + var AssocStaSubscription v_assoc_sta_subscription; + var Json.String v_subscription_id; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES 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, v_subscription_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_put( + PICS_ROOT_API & PX_ME_WLAN_URI_SUB & "/" & v_subscription_id, + v_headers, + m_http_message_body_json( + m_body_json_assoc_sta_subscription( + 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 - tc_ac.start; - 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( - v_assoc_sta_subscription.callbackReference, - ?, - -, -, - v_assoc_sta_subscription.links )))))) -> value v_response { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds to the AssocStatSubscription update ***"); - 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_response.response.body.json_body.assocStaSubscription); - f_cf_01_http_down(); + // Test Body + tc_ac.start; + 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( + v_assoc_sta_subscription.callbackReference, + ?, + -, -, + v_assoc_sta_subscription.links + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds to the AssocStatSubscription update ***"); + 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_subscription_id); + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC028_SRV_WAI_009_OK /** * @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/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; - - // 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_put( - 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( - 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); + // Local variables + var Headers v_headers; + var AssocStaSubscription v_assoc_sta_subscription; + var Json.String v_subscription_id; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES 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, v_subscription_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_put( + PICS_ROOT_API & PX_ME_WLAN_URI_SUB & "/" & v_subscription_id, + v_headers, + m_http_message_body_json( + m_body_json_assoc_sta_subscription( + m_assoc_sta_subscription( + "", // No callback reference + 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 - tc_ac.start; - alt { - [] httpPort.receive( - mw_http_response( - mw_http_response_400_bad_request - )) { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds 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_assoc_sta_subscription(v_assoc_sta_subscription); - f_cf_01_http_down(); + // 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 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_assoc_sta_subscription(v_subscription_id); + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC028_SRV_WAI_009_BR + /** + * @desc Check that the IUT responds with an error when an unknown subscription modification request + */ + testcase TC_MEC_MEC028_SRV_WAI_009_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var AssocStaSubscription v_assoc_sta_subscription; + var Json.String v_subscription_id; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES 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, v_subscription_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_put( + PICS_ROOT_API & PX_ME_WLAN_URI_SUB & "/unknown", + v_headers, + m_http_message_body_json( + m_body_json_assoc_sta_subscription( + 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 + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_404_not_found + )) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds to the AssocStatSubscription update ***"); + 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_subscription_id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC028_SRV_WAI_009_NF + /** * @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/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 charstring v_uri; - - // 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); - 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_uri, - v_headers - ) - ) - ); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); + // Local variables + var Headers v_headers; + var AssocStaSubscription v_assoc_sta_subscription; + var Json.String v_subscription_id; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES 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, v_subscription_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & PX_ME_WLAN_URI_SUB & v_subscription_id, + 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 an 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_cf_01_http_down(); + // 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 an 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_cf_01_http_down(); } // End of testcase TC_MEC_MEC028_SRV_WAI_010_OK /** * @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/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 charstring v_uri; - - // 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); - 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_uri & "_Invalid", - v_headers - ) - ) - ); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES 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_delete( + PICS_ROOT_API & PX_ME_WLAN_URI_SUB & "unknown", + 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 an 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(); + // 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 an 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_cf_01_http_down(); } // End of testcase TC_MEC_MEC028_SRV_WAI_010_NF /** * @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/NotificationCallback.tplan2 */ testcase TC_MEC_MEC028_SRV_WAI_011_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var AssocStaSubscription v_assoc_sta_subscription; - var Headers v_headers; - var HttpMessage v_response; + // Local variables + var Headers v_headers; + var AssocStaSubscription v_assoc_sta_subscription; + var Json.String v_subscription_id; - // 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_notif_up(); - - // Test adapter configuration - - // Preamble - f_create_assoc_sta_subscription(v_assoc_sta_subscription); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_WLAN_INFORMATION_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_notif_up(); + + // Test adapter configuration + + // Preamble + f_create_assoc_sta_subscription(v_assoc_sta_subscription, v_subscription_id); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); - // Test Body - tc_wait.start; - alt { - [] httpPort_notif.receive( - mw_http_request( - mw_http_request_post( - -, - -, - mw_http_message_body_json( - mw_body_json_assoc_sta_subscription( - mw_assoc_sta_subscription( - PX_ASSOC_STA_SUBSCRIPTION_CALLBACK, - -, - -, -, - ? - )))))) -> value v_response { - tc_wait.stop; - - f_init_default_headers_list(-, -, v_headers); - httpPort_notif.send( - m_http_response( - m_http_response_ok_no_body( - 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_delete_assoc_sta_subscription(v_assoc_sta_subscription); - f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); - } - } // End of 'alt' statement - - // Postamble - f_delete_assoc_sta_subscription(v_assoc_sta_subscription); - f_cf_01_http_notif_down(); + // Test Body + tc_wait.start; + alt { + [] httpPort_notif.receive( + mw_http_request( + mw_http_request_post( + -, + -, + mw_http_message_body_json( + mw_body_json_assoc_sta_subscription( + mw_assoc_sta_subscription( + PX_ASSOC_STA_SUBSCRIPTION_CALLBACK, + -, + -, -, + ? + )))))) { + tc_wait.stop; + + f_init_default_headers_list(-, -, v_headers); + httpPort_notif.send( + m_http_response( + m_http_response_ok_no_body( + 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_delete_assoc_sta_subscription(v_subscription_id); + 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 diff --git a/ttcn/AtsMec_WlanInformation/AtsMec_WlanInformationAPI_TestControl.ttcn b/ttcn/AtsMec_WlanInformation/AtsMec_WlanInformationAPI_TestControl.ttcn index 90b10bf..7f33626 100644 --- a/ttcn/AtsMec_WlanInformation/AtsMec_WlanInformationAPI_TestControl.ttcn +++ b/ttcn/AtsMec_WlanInformation/AtsMec_WlanInformationAPI_TestControl.ttcn @@ -11,9 +11,35 @@ module AtsMec_WlanInformationAPI_TestControl { control { - if (PICS_MEC_PLAT and PICS_WLAN_INFORMATION_API_SUPPORTED) { + if (PICS_MEC_PLAT and PICS_SERVICES and PICS_WLAN_INFORMATION_API_SUPPORTED) { execute(TC_MEC_MEC028_SRV_WAI_001_OK()); execute(TC_MEC_MEC028_SRV_WAI_002_OK()); + execute(TC_MEC_MEC028_SRV_WAI_002_BR()); + + execute(TC_MEC_MEC028_SRV_WAI_003_OK()); + execute(TC_MEC_MEC028_SRV_WAI_004_OK()); + execute(TC_MEC_MEC028_SRV_WAI_004_BR()); + + execute(TC_MEC_MEC028_SRV_WAI_005_OK()); + execute(TC_MEC_MEC028_SRV_WAI_006_OK()); + execute(TC_MEC_MEC028_SRV_WAI_006_BR()); + execute(TC_MEC_MEC028_SRV_WAI_006_NF()); + + execute(TC_MEC_MEC028_SRV_WAI_007_OK()); + execute(TC_MEC_MEC028_SRV_WAI_007_BR()); + execute(TC_MEC_MEC028_SRV_WAI_007_NF()); + + execute(TC_MEC_MEC028_SRV_WAI_008_OK()); + execute(TC_MEC_MEC028_SRV_WAI_008_NF()); + + execute(TC_MEC_MEC028_SRV_WAI_009_OK()); + execute(TC_MEC_MEC028_SRV_WAI_009_BR()); + execute(TC_MEC_MEC028_SRV_WAI_009_NF()); + + execute(TC_MEC_MEC028_SRV_WAI_010_OK()); + execute(TC_MEC_MEC028_SRV_WAI_010_NF()); + + execute(TC_MEC_MEC028_SRV_WAI_011_OK()); } } // End of 'control' statement diff --git a/ttcn/LibMec/DeviceApplicationInterfaceAPI/json/UEAppInterfaceApi.json b/ttcn/LibMec/DeviceApplicationInterfaceAPI/json/UEAppInterfaceApi.json deleted file mode 100644 index 6075bbc..0000000 --- a/ttcn/LibMec/DeviceApplicationInterfaceAPI/json/UEAppInterfaceApi.json +++ /dev/null @@ -1,1051 +0,0 @@ -{ - "openapi": "3.0.0", - "info": { - "contact": { - "url": "https://forge.etsi.org/rep/mec/gs016-dev-app-api" - }, - "title": "ETSI GS MEC 016 Device application interface", - "version": "2.2.1", - "description": "The ETSI MEC ISG Device application interface API described using OpenAPI.", - "license": { - "name": "BSD-3-Clause", - "url": "https://forge.etsi.org/legal-matters" - } - }, - "externalDocs": { - "description": "ETSI GS MEC016 V2.2.1 Device application interface", - "url": "https://www.etsi.org/deliver/etsi_gs/MEC/001_099/016/02.02.01_60/gs_MEC016v020201p.pdf" - }, - "servers": [ - { - "url": "https://localhost/dev_app/v1" - } - ], - "tags": [ - { - "name": "dev_app" - } - ], - "paths": { - "/app_list": { - "get": { - "tags": [ - "dev_app" - ], - "summary": "Get available application information.", - "description": "Used to query information about the available MEC applications.", - "operationId": "meAppListGET", - "parameters": [ - { - "$ref": "#/components/parameters/Query.appName" - }, - { - "$ref": "#/components/parameters/Query.appProvider" - }, - { - "$ref": "#/components/parameters/Query.appSoftVersion" - }, - { - "$ref": "#/components/parameters/Query.vendorId" - }, - { - "$ref": "#/components/parameters/Query.serviceCont" - } - ], - "responses": { - "200": { - "description": "The response body contains an array of the user applications available to the querying device application.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ApplicationList" - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - } - } - } - }, - "/app_contexts": { - "post": { - "tags": [ - "dev_app" - ], - "summary": "Creation of a new application context.", - "description": "Used to create a new application context. Upon success, the response contains entity body describing the created application context.", - "operationId": "devAppContextsGET", - "requestBody": { - "description": "Entity body in the request contains the Application Context as requested by the device application.", - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AppContext" - } - } - } - }, - "parameters": [], - "responses": { - "201": { - "description": "The response body contains the Application Context as it was created by the MEC system, which includes the reference URI(s) of the associated user application instance(s). The URI of the resource created within the MEC system associated with the request, with its specific application context ID, shall be included in the 'Location' HTTP header of the response.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AppContext" - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - } - }, - "callbacks": { - "notification": { - "{$request.body#/appContext.callbackReference}": { - "post": { - "summary": "Callback POST used to send a notification", - "description": "Notification with content based on subscription type", - "operationId": "notificationPOST", - "requestBody": { - "description": "Subscription notification", - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InlineNotification" - }, - "example": { - "notificationType": "ApplicationContextDeleteNotification", - "contextId": "contextId123" - } - } - } - }, - "responses": { - "204": { - "$ref": "#/components/responses/204" - } - } - } - } - } - } - } - }, - "/app_contexts/{contextId}": { - "put": { - "tags": [ - "dev_app" - ], - "summary": "Updating the callbackReference and/or appLocation of an existing application context.", - "description": "Used to update the callback reference and/or application location constraints of an existing application context. Upon successful operation, the target resource is updated with the new application context information.", - "operationId": "devAppContextPUT", - "requestBody": { - "description": "Only the callbackReference and/or appLocation attribute values are allowed to be updated. Other attributes and their values shall remain untouched.", - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AppContext" - } - } - } - }, - "parameters": [ - { - "$ref": "#/components/parameters/Path.contextId" - } - ], - "responses": { - "204": { - "$ref": "#/components/responses/204" - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - } - } - }, - "delete": { - "tags": [ - "dev_app" - ], - "summary": "Deletion of an existing application context.", - "description": "Used to delete the resource that represents the existing application context.", - "operationId": "devAppContextDELETE", - "parameters": [ - { - "$ref": "#/components/parameters/Path.contextId" - } - ], - "responses": { - "204": { - "$ref": "#/components/responses/204" - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - } - } - } - }, - "/obtain_app_loc_availability": { - "post": { - "tags": [ - "dev_app" - ], - "summary": "Obtain the location constraints for a new application context.", - "description": "Used to obtain the locations available for instantiation of a specific user application in the MEC system.", - "operationId": "appLocationAvailabilityPOST", - "requestBody": { - "description": "Entity body in the request contains the user application information for the MEC system to evaluate the locations available for instantiation of that application.", - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ApplicationLocationAvailability" - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "The response body contains the locations available for instantiation of the requested user application in the MEC system.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ApplicationLocationAvailability" - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - } - } - } - } - }, - "components": { - "responses": { - "204": { - "description": "Upon success, a response 204 No Content without any response body is returned." - }, - "400": { - "description": "Bad Request : used to indicate that incorrect parameters were passed to the request.", - "content": { - "application/problem+json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetails" - } - } - } - }, - "401": { - "description": "Unauthorized : used when the client did not submit credentials.", - "content": { - "application/problem+json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetails" - } - } - } - }, - "403": { - "description": "Forbidden : operation is not allowed given the current status of the resource.", - "content": { - "application/problem+json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetails" - } - } - } - }, - "404": { - "description": "Not Found : used when a client provided a URI that cannot be mapped to a valid resource URI.", - "content": { - "application/problem+json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetails" - } - } - } - } - }, - "parameters": { - "Query.appName": { - "name": "appName", - "in": "query", - "description": "Name to identify the MEC application.", - "required": false, - "schema": { - "type": "array", - "items": { - "type": "string", - "maxLength": 32 - } - } - }, - "Query.appProvider": { - "name": "appProvider", - "in": "query", - "description": "Provider of the MEC application.", - "required": false, - "schema": { - "type": "array", - "items": { - "type": "string", - "maxLength": 32 - } - } - }, - "Query.appSoftVersion": { - "name": "appSoftVersion", - "in": "query", - "description": "Software version of the MEC application.", - "required": false, - "schema": { - "type": "array", - "items": { - "type": "string", - "maxLength": 32 - } - } - }, - "Query.vendorId": { - "name": "vendorId", - "in": "query", - "description": "Vendor identifier", - "required": false, - "schema": { - "type": "array", - "items": { - "type": "string", - "maxLength": 32 - } - } - }, - "Query.serviceCont": { - "name": "serviceCont", - "in": "query", - "description": "Required service continuity mode for this application. Permitted values: 0 = SERVICE_CONTINUITY_NOT_REQUIRED. 1 = SERVICE_CONTINUITY_REQUIRED.", - "required": false, - "schema": { - "type": "integer", - "enum": [ - 0, - 1 - ] - } - }, - "Path.contextId": { - "name": "contextId", - "in": "path", - "description": "Uniquely identifies the application context in the MEC system. It is assigned by the MEC system.", - "required": true, - "schema": { - "type": "string" - } - } - }, - "schemas": { - "AddressChangeNotification": { - "properties": { - "appInstanceId": { - "description": "Identifier of the user application instance.", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "contextId": { - "description": "Uniquely identifies the application context in the MEC system.", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "notificationType": { - "description": "Shall be set to \"AddressChangeNotification\".", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "referenceURI": { - "description": "Address of the user application. Used as the reference URI for the application. Assigned by the MEC system.", - "format": "uri", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "URI" - } - }, - "required": [ - "notificationType", - "contextId", - "appInstanceId", - "referenceURI" - ], - "type": "object", - "x-etsi-ref": "6.4.2" - }, - "AppContext": { - "properties": { - "appAutoInstantiation": { - "description": "Provides indication to the MEC system that instantiation of the requested application is desired should a requested appLocation become available that was not at the time of the request.", - "type": "boolean", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Boolean" - }, - "appInfo": { - "description": "", - "properties": { - "appDId": { - "description": "Identifier of this MEC application descriptor. This attribute shall be globally unique. It is equivalent to the appDId defined in clause 6.2.1.2 of ETSI GS MEC 0102 [1]. It shall be present if the application is one in the ApplicationList.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "appDVersion": { - "description": "Identifies the version of the application descriptor. It is equivalent to the appDVersion defined in clause 6.2.1.2 of ETSI GS MEC 0102 [1].", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "appDescription": { - "description": "Human readable description of the MEC application. The length of the value shall not exceed 128 characters.", - "type": "string", - "maxLength": 128, - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "appName": { - "description": "Name of the MEC application. The length of the value shall not exceed 32 characters.", - "type": "string", - "maxLength": 32, - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "appProvider": { - "description": "Provider of the MEC application.\nThe length of the value shall not exceed 32 characters.", - "type": "string", - "maxLength": 32, - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "appSoftVersion": { - "description": "Software version of the MEC application. The length of the value shall not exceed 32 characters.", - "type": "string", - "maxLength": 32, - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "appPackageSource": { - "description": "URI of the application package.\nIncluded in the request if the application is not one in the ApplicationList. appPackageSource enables on-boarding of the application package into the MEC system. The application package shall comply with the definitions in clause 6.2.1.2 of ETSI GS MEC 0102 [1].", - "format": "uri", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "URI" - }, - "userAppInstanceInfo": { - "description": "List of user application instance information.", - "items": { - "type": "object", - "properties": { - "appInstanceId": { - "description": "Identifier of the user application instance. It shall only be included in the response.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "appLocation": { - "$ref": "#/components/schemas/LocationConstraints" - }, - "referenceURI": { - "description": "Address of the user application instance. It shall only be included in the response.", - "format": "uri", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "URI" - } - } - }, - "minItems": 1, - "type": "array", - "x-etsi-mec-cardinality": "1..N", - "x-etsi-mec-origin-type": "array (Structure inlined)" - } - }, - "required": [ - "appName", - "appProvider", - "appDVersion", - "userAppInstanceInfo" - ], - "type": "object", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Structure (inlined)" - }, - "appLocationUpdates": { - "description": "Used by the device application to request to receive notifications at the callbackReference URI relating to location availability for user application instantiation.", - "type": "boolean", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Boolean" - }, - "associateDevAppId": { - "description": "Uniquely identifies the device application. The length of the value shall not exceed 32 characters.", - "type": "string", - "maxLength": 32, - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "callbackReference": { - "description": "URI assigned by the device application to receive application lifecycle related notifications. Inclusion in the request implies the client supports the pub/sub mechanism and is capable of receiving notifications. This endpoint shall be maintained for the lifetime of the application context.", - "format": "uri", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "URI" - }, - "contextId": { - "description": "Uniquely identifies the application context in the MEC system. Assigned by the MEC system and shall be present other than in a create request. The length of the value shall not exceed 32 characters.", - "type": "string", - "maxLength": 32, - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - } - }, - "required": [ - "associateDevAppId", - "appInfo" - ], - "type": "object", - "x-etsi-notes": "NOTE 1:\tIf a value of the attribute is included in the request, the same value shall be included in the response.\nNOTE 2:\tThe design of the current operation with callback reference assumes no web proxy between the entity that originates the notification and the entity that receives it.\nNOTE 3:\tThe language support for the application description may be limited.\nNOTE 4:\tAttribute appLocationUpdates and appAutoInstantiation shall not both be set to TRUE.", - "x-etsi-ref": "6.2.3" - }, - "ApplicationContextDeleteNotification": { - "properties": { - "contextId": { - "description": "Uniquely identifies the application context that has been deleted from the MEC system.", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "notificationType": { - "description": "Shall be set to \"ApplicationContextDeleteNotification\".", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - } - }, - "required": [ - "notificationType", - "contextId" - ], - "type": "object", - "x-etsi-ref": "6.4.3" - }, - "ApplicationContextUpdateNotification": { - "properties": { - "contextId": { - "description": "Uniquely identifies the application context in the MEC system.", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "notificationType": { - "description": "Shall be set to \"ApplicationContextUpdateNotification\".", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "userAppInstanceInfo": { - "description": "List of user application instance information.", - "items": { - "type": "object", - "properties": { - "appInstanceId": { - "description": "Identifier of the user application instance.", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "appLocation": { - "$ref": "#/components/schemas/LocationConstraints" - }, - "referenceURI": { - "description": "Address of the user application instance.", - "format": "uri", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "URI" - } - } - }, - "minItems": 1, - "required": [ - "appInstanceId", - "referenceURI" - ], - "type": "array", - "x-etsi-mec-cardinality": "1..N", - "x-etsi-mec-origin-type": "array (Structure inlined)" - } - }, - "type": "object", - "required": [ - "notificationType", - "contextId", - "userAppInstanceInfo" - ], - "x-etsi-ref": "6.4.4" - }, - "ApplicationList": { - "properties": { - "appList": { - "description": "List of user applications available to the device application. As defined below.", - "items": { - "type": "object", - "properties": { - "appInfo": { - "description": "", - "properties": { - "appCharcs": { - "description": "Characteristics of the application. As defined below. The application characteristics relate to the system resources consumed by the application. A device application can use this information e.g. for estimating the cost of use of the application or for the expected user experience.", - "properties": { - "bandwidth": { - "description": "The required connection bandwidth in kbit/s for the use of the MEC application instance. ", - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "uint32" - }, - "latency": { - "description": "The target round trip time in milliseconds supported by the MEC system for the MEC application instance.", - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "uint32" - }, - "memory": { - "description": "The maximum size in Mbytes of the memory resource expected to be used by the MEC application instance in the MEC system.", - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "uint32" - }, - "serviceCont": { - "description": "Required service continuity mode for this application. Permitted values: 0 = SERVICE_CONTINUITY_NOT_REQUIRED. 1 = SERVICE_CONTINUITY_REQUIRED.", - "enum": [ - 0, - 1 - ], - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Enum" - }, - "storage": { - "description": "The maximum size in Mbytes of the storage resource expected to be used by the MEC application instance in the MEC system.", - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "uint32" - } - }, - "type": "object", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Structure (inlined)" - }, - "appDId": { - "description": "Identifier of this MEC application descriptor. It is equivalent to the appDId defined in clause 6.2.1.2 of ETSI GS MEC 0102 [1]. This attribute shall be globally unique.", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "appDVersion": { - "description": "Identifies the version of the application descriptor. It is equivalent to the appDVersion defined in clause 6.2.1.2 of ETSI GS MEC 0102 [1].", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "appDescription": { - "description": "Human readable description of the MEC application (see note 2).", - "type": "string", - "maxLength": 128, - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "appLocation": { - "description": "Identifies the locations of the MEC application.", - "items": { - "$ref": "#/components/schemas/LocationConstraints" - }, - "minItems": 0, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "LocationConstraints" - }, - "appName": { - "description": "Name of the MEC application. The length of the value shall not exceed 32 characters.", - "type": "string", - "maxLength": 32, - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "appProvider": { - "description": "Provider of the MEC application. The length of the value shall not exceed 32 characters.", - "type": "string", - "maxLength": 32, - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "appSoftVersion": { - "description": "Software version of the MEC application. The length of the value shall not exceed 32 characters.", - "type": "string", - "maxLength": 32, - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - } - }, - "required": [ - "appDId", - "appName", - "appProvider", - "appSoftVersion", - "appDVersion", - "appDescription" - ], - "type": "object", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Structure (inlined)" - }, - "vendorSpecificExt": { - "description": "Extension for vendor specific information (see note 1).", - "properties": { - "vendorId": { - "description": "Vendor identifier. The length of the value shall not exceed 32 characters. The rest of the structure of vendor specific extension is not defined.", - "type": "string", - "maxLength": 32, - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - } - }, - "required": [ - "vendorId" - ], - "type": "object", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Structure (inlined)" - } - } - }, - "minItems": 0, - "required": [ - "appInfo" - ], - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "Array (Structure (inlined))" - } - }, - "type": "object", - "x-etsi-notes": "NOTE 1:\tThe vendor specific extension allows submitting information on the application lists that have been made available to the device application of the corresponding vendor.\nNOTE 2:\tThe language support may be limited. The length of the value shall not exceed 128 characters.", - "x-etsi-ref": "6.2.2" - }, - "ApplicationLocationAvailability": { - "properties": { - "appInfo": { - "description": "", - "properties": { - "appDVersion": { - "description": "Identifies the version of the application descriptor. It is equivalent to the appDVersion defined in clause 6.2.1.2 of ETSI GS MEC 0102 [1].", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "appDescription": { - "description": "Human readable description of the MEC application. The length of the value shall not exceed 128 characters.", - "type": "string", - "maxLength": 128, - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "appName": { - "description": "Name of the MEC application. The length of the value shall not exceed 32 characters.", - "type": "string", - "maxLength": 32, - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "appPackageSource": { - "description": "URI of the application package. Shall be included in the request. The application package shall comply with the definitions in clause 6.2.1.2 of ETSI GS MEC 0102 [1].", - "format": "uri", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "URI" - }, - "appProvider": { - "description": "Provider of the MEC application. The length of the value shall not exceed 32 characters.", - "type": "string", - "maxLength": 32, - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "appSoftVersion": { - "description": "Software version of the MEC application. The length of the value shall not exceed 32 characters.", - "type": "string", - "maxLength": 32, - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "availableLocations": { - "description": "MEC application location constraints. ", - "items": { - "type": "object", - "properties": { - "appLocation": { - "$ref": "#/components/schemas/LocationConstraints" - } - } - }, - "minItems": 0, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "array (Structure (inline))" - } - }, - "required": [ - "appName", - "appProvider", - "appDVersion" - ], - "type": "object", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Structure (inlined)" - }, - "associateDevAppId": { - "description": "Uniquely identifies the device application. The length of the value shall not exceed 32 characters.", - "type": "string", - "maxLength": 32, - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - } - }, - "required": [ - "associateDevAppId", - "appInfo" - ], - "type": "object", - "x-etsi-ref": "6.2.4" - }, - "ApplicationLocationAvailabilityNotification": { - "properties": { - "availableLocations": { - "description": "Locations available to the MEC application.", - "items": { - "type": "object", - "properties": { - "appLocation": { - "$ref": "#/components/schemas/LocationConstraints" - } - } - }, - "minItems": 1, - "required": [ - "appLocation" - ], - "type": "array", - "x-etsi-mec-cardinality": "1..N", - "x-etsi-mec-origin-type": "array (Structure (inline))" - }, - "contextId": { - "description": "Uniquely identifies the application context in the MEC system.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "notificationType": { - "description": "Shall be set to \"ApplicationLocationAvailabilityNotification\".", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - } - }, - "type": "object", - "required": [ - "notificationType", - "availableLocations" - ], - "x-etsi-ref": "6.4.5" - }, - "InlineNotification": { - "oneOf": [ - { - "$ref": "#/components/schemas/AddressChangeNotification" - }, - { - "$ref": "#/components/schemas/ApplicationContextDeleteNotification" - }, - { - "$ref": "#/components/schemas/ApplicationContextUpdateNotification" - }, - { - "$ref": "#/components/schemas/ApplicationLocationAvailabilityNotification" - } - ], - "discriminator": { - "propertyName": "notificationType" - } - }, - "LocationConstraints": { - "properties": { - "area": { - "$ref": "#/components/schemas/Polygon" - }, - "civicAddressElement": { - "description": "Zero or more elements comprising the civic address. Shall be absent if the \"area\" attribute is present.", - "items": { - "type": "object", - "properties": { - "caType": { - "description": "Describe the content type of caValue. The value of caType shall comply with section 3.4 of IETF RFC 4776 [6]. ", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Integer" - }, - "caValue": { - "description": "Content of civic address element corresponding to the caType. The format caValue shall comply with section 3.4 of IETF RFC 4776 [6].", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - } - } - }, - "minItems": 0, - "required": [ - "caType", - "caValue" - ], - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "array (Structure inlined)" - }, - "countryCode": { - "description": "The two-letter ISO 3166 [7] country code in capital letters. Shall be present in case the \"area\" attribute is absent. May be absent if the \"area\" attribute is present (see note).", - "type": "string", - "maxLength": 2, - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - } - }, - "type": "object", - "x-etsi-notes": "NOTE:\tIf both \"countryCode\" and \"area\" are present, no conflicts should exist between the values of these two attributes. In case of conflicts, the API producer (e.g. MEO, MEAO) shall disregard parts of the geographic area signalled by \"area\" that are outside the boundaries of the country signalled by \"countryCode\". If \"countryCode\" is absent, it is solely the \"area\" attribute that defines the location constraint.", - "x-etsi-ref": "6.5.2" - }, - "Polygon": { - "properties": { - "coordinates": { - "items": { - "items": { - "items": { - "type": "number", - "format": "float" - }, - "type": "array" - }, - "type": "array" - }, - "minItems": 1, - "type": "array", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "array" - } - }, - "type": "object" - }, - "ProblemDetails": { - "properties": { - "detail": { - "description": "A human-readable explanation specific to this occurrence of the problem", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "instance": { - "description": "A URI reference that identifies the specific occurrence of the problem", - "format": "uri", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "URI" - }, - "status": { - "description": "The HTTP status code for this occurrence of the problem", - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "title": { - "description": "A short, human-readable summary of the problem type", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "type": { - "description": "A URI reference according to IETF RFC 3986 that identifies the problem type", - "format": "uri", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "URI" - } - }, - "type": "object" - } - } - } -} diff --git a/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/json/EdgePlatformApplicationEnablementAPI.json b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/json/EdgePlatformApplicationEnablementAPI.json deleted file mode 100644 index e6a3904..0000000 --- a/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/json/EdgePlatformApplicationEnablementAPI.json +++ /dev/null @@ -1,2529 +0,0 @@ -{ - "openapi": "3.0.2", - "servers": [ - { - "url": "http://127.0.0.1:8081/mp1/v1" - }, - { - "url": "https://127.0.0.1:8081/mp1/v1" - } - ], - "info": { - "title": "Mp1 API", - "version": "1.1.1", - "description": "The ETSI MEC ISG MEC011 Application Enablement API described using OpenAPI", - "license": { - "name": "ETSI Forge copyright notice", - "url": "https://forge.etsi.org/etsi-forge-copyright-notice.txt" - }, - "contact": { - "email": "cti_support@etsi.org" - } - }, - "externalDocs": { - "description": "ETSI GS MEC011 Application Enablement API, V1.1.1", - "url": "http://www.etsi.org/deliver/etsi_gs/MEC/001_099/011/01.01.01_60/gs_mec011v010101p.pdf" - }, - "tags": [ - { - "name": "trafficRules" - }, - { - "name": "dnsRules" - }, - { - "name": "subscriptions" - }, - { - "name": "services" - }, - { - "name": "timing" - }, - { - "name": "transports" - }, - { - "name": "callbacks" - } - ], - "paths": { - "/applications/{appInstanceId}/dns_rules": { - "parameters": [ - { - "$ref": "#/components/parameters/Path.AppInstanceId" - } - ], - "get": { - "description": "This method retrieves information about all the DNS rules associated with a mobile edge application instance.", - "operationId": "ApplicationsDnsRules_GET", - "tags": [ - "trafficRules" - ], - "responses": { - "200": { - "$ref": "#/components/responses/ApplicationsDnsRules.200" - }, - "400": { - "$ref": "#/components/responses/Error.400" - }, - "403": { - "$ref": "#/components/responses/Error.403" - }, - "404": { - "$ref": "#/components/responses/Error.404" - } - } - } - }, - "/applications/{appInstanceId}/dns_rules/{dnsRuleId}": { - "parameters": [ - { - "$ref": "#/components/parameters/Path.AppInstanceId" - }, - { - "$ref": "#/components/parameters/Path.DnsRuleId" - } - ], - "get": { - "description": "This method retrieves information about a DNS rule associated with a mobile edge application instance.", - "operationId": "ApplicationsDnsRule_GET", - "tags": [ - "dnsRules" - ], - "responses": { - "200": { - "$ref": "#/components/responses/ApplicationsDnsRule.200" - }, - "400": { - "$ref": "#/components/responses/Error.400" - }, - "403": { - "$ref": "#/components/responses/Error.403" - }, - "404": { - "$ref": "#/components/responses/Error.404" - } - } - }, - "put": { - "description": "This method activates, de-activates or updates a traffic rule.", - "operationId": "ApplicationsDnsRule_PUT", - "tags": [ - "dnsRules" - ], - "responses": { - "200": { - "$ref": "#/components/responses/ApplicationsDnsRule.200" - }, - "400": { - "$ref": "#/components/responses/Error.400" - }, - "403": { - "$ref": "#/components/responses/Error.403" - }, - "404": { - "$ref": "#/components/responses/Error.404" - }, - "412": { - "$ref": "#/components/responses/Error.412" - } - }, - "requestBody": { - "$ref": "#/components/requestBodies/ApplicationsDnsRule" - } - } - }, - "/applications/{appInstanceId}/subscriptions": { - "parameters": [ - { - "$ref": "#/components/parameters/Path.AppInstanceId" - } - ], - "get": { - "description": "The GET method may be used to request information about all subscriptions for this requestor. Upon success, the response contains entity body with all the subscriptions for the requestor.", - "operationId": "ApplicationsSubscriptions_GET", - "tags": [ - "subscriptions" - ], - "responses": { - "200": { - "$ref": "#/components/responses/ApplicationsSubscriptions.200" - }, - "400": { - "$ref": "#/components/responses/Error.400" - }, - "403": { - "$ref": "#/components/responses/Error.403" - }, - "404": { - "$ref": "#/components/responses/Error.404" - } - } - }, - "post": { - "description": "The POST method may be used to create a new subscription. One example use case is to create a new subscription to the mobile edge service availability notifications. Upon success, the response contains entity body describing the created subscription.", - "operationId": "ApplicationsSubscriptions_POST", - "tags": [ - "subscriptions" - ], - "responses": { - "201": { - "$ref": "#/components/responses/ApplicationsSubscriptions.201" - }, - "400": { - "$ref": "#/components/responses/Error.400" - }, - "403": { - "$ref": "#/components/responses/Error.403" - }, - "404": { - "$ref": "#/components/responses/Error.404" - } - }, - "requestBody": { - "$ref": "#/components/requestBodies/ApplicationsSubscriptions" - }, - "callbacks": { - "appTerminationNotification": { - "$ref": "#/components/callbacks/AppTerminationNotification" - }, - "serviceAvailabilityNotification": { - "$ref": "#/components/callbacks/ServiceAvailabilityNotification" - } - } - } - }, - "/applications/{appInstanceId}/subscriptions/{subscriptionType}/{subscriptionId}": { - "parameters": [ - { - "$ref": "#/components/parameters/Path.AppInstanceId" - }, - { - "$ref": "#/components/parameters/Path.SubscriptionType" - }, - { - "$ref": "#/components/parameters/Path.SubscriptionId" - } - ], - "get": { - "description": "The GET method requests information about a subscription for this requestor. Upon success, the response contains entity body with the subscription for the requestor.", - "operationId": "ApplicationsSubscription_GET", - "tags": [ - "subscriptions" - ], - "responses": { - "200": { - "$ref": "#/components/responses/ApplicationsSubscription.200" - }, - "400": { - "$ref": "#/components/responses/Error.400" - }, - "403": { - "$ref": "#/components/responses/Error.403" - }, - "404": { - "$ref": "#/components/responses/Error.404" - } - } - }, - "delete": { - "description": "This method deletes a meMp1Subscription. This method is typically used in \"Unsubscribing from service availability event notifications\" procedure.", - "operationId": "ApplicationsSubscription_DELETE", - "tags": [ - "subscriptions" - ], - "responses": { - "204": { - "description": "No Content" - }, - "403": { - "$ref": "#/components/responses/Error.403" - }, - "404": { - "$ref": "#/components/responses/Error.404" - } - } - } - }, - "/applications/{appInstanceId}/traffic_rules": { - "parameters": [ - { - "$ref": "#/components/parameters/Path.AppInstanceId" - } - ], - "get": { - "description": "This method retrieves information about all the traffic rules associated with a mobile edge application instance.", - "operationId": "ApplicationsTrafficRules_GET", - "tags": [ - "trafficRules" - ], - "responses": { - "200": { - "$ref": "#/components/responses/ApplicationsTrafficRules.200" - }, - "400": { - "$ref": "#/components/responses/Error.400" - }, - "403": { - "$ref": "#/components/responses/Error.403" - }, - "404": { - "$ref": "#/components/responses/Error.404" - } - } - } - }, - "/applications/{appInstanceId}/traffic_rules/{trafficRuleId}": { - "parameters": [ - { - "$ref": "#/components/parameters/Path.AppInstanceId" - }, - { - "$ref": "#/components/parameters/Path.TrafficRuleId" - } - ], - "get": { - "description": "This method retrieves information about all the traffic rules associated with a mobile edge application instance.", - "operationId": "ApplicationsTrafficRule_GET", - "tags": [ - "trafficRules" - ], - "responses": { - "200": { - "$ref": "#/components/responses/ApplicationsTrafficRule.200" - }, - "400": { - "$ref": "#/components/responses/Error.400" - }, - "403": { - "$ref": "#/components/responses/Error.403" - }, - "404": { - "$ref": "#/components/responses/Error.404" - } - } - }, - "put": { - "description": "This method retrieves information about all the traffic rules associated with a mobile edge application instance.", - "operationId": "ApplicationsTrafficRule_PUT", - "tags": [ - "trafficRules" - ], - "responses": { - "200": { - "$ref": "#/components/responses/ApplicationsTrafficRule.200" - }, - "400": { - "$ref": "#/components/responses/Error.400" - }, - "403": { - "$ref": "#/components/responses/Error.403" - }, - "404": { - "$ref": "#/components/responses/Error.404" - }, - "412": { - "$ref": "#/components/responses/Error.412" - } - }, - "requestBody": { - "$ref": "#/components/requestBodies/ApplicationsTrafficRule" - } - } - }, - "/services": { - "get": { - "description": "This method retrieves information about a list of meService resources. This method is typically used in \"service availability query\" procedure", - "operationId": "Services_GET", - "tags": [ - "services" - ], - "parameters": [ - { - "$ref": "#/components/parameters/Query.Ser_instance_id" - }, - { - "$ref": "#/components/parameters/Query.Ser_name" - }, - { - "$ref": "#/components/parameters/Query.Ser_category_id" - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/Services.200" - }, - "400": { - "$ref": "#/components/responses/Error.400" - }, - "403": { - "$ref": "#/components/responses/Error.403" - }, - "404": { - "$ref": "#/components/responses/Error.404" - } - } - }, - "post": { - "description": "This method is used to create a meService resource. This method is typically used in \"service availability update and new service registration\" procedure", - "operationId": "Services_POST", - "tags": [ - "services" - ], - "responses": { - "201": { - "$ref": "#/components/responses/Services.201" - }, - "400": { - "$ref": "#/components/responses/Error.400" - }, - "403": { - "$ref": "#/components/responses/Error.403" - }, - "404": { - "$ref": "#/components/responses/Error.404" - } - }, - "requestBody": { - "$ref": "#/components/requestBodies/Services.Post" - } - } - }, - "/services/{serviceId}": { - "parameters": [ - { - "$ref": "#/components/parameters/Path.ServiceId" - } - ], - "get": { - "description": "This method retrieves information about a meService resource. This method is typically used in \"service availability query\" procedure", - "operationId": "ServicesServiceId_GET", - "tags": [ - "services" - ], - "responses": { - "200": { - "$ref": "#/components/responses/ServicesServiceId.200" - }, - "400": { - "$ref": "#/components/responses/Error.400" - }, - "403": { - "$ref": "#/components/responses/Error.403" - }, - "404": { - "$ref": "#/components/responses/Error.404" - } - } - }, - "put": { - "description": "This method updates the information about a meService resource", - "operationId": "ServicesServiceId_PUT", - "tags": [ - "services" - ], - "responses": { - "200": { - "$ref": "#/components/responses/ServicesServiceId.200" - }, - "400": { - "$ref": "#/components/responses/Error.400" - }, - "403": { - "$ref": "#/components/responses/Error.403" - }, - "404": { - "$ref": "#/components/responses/Error.404" - }, - "412": { - "$ref": "#/components/responses/Error.412" - } - }, - "requestBody": { - "$ref": "#/components/requestBodies/ServicesServiceId" - } - } - }, - "/timing/current_time": { - "get": { - "description": "This method retrieves the information of the platform's current time which corresponds to the get platform time procedure", - "operationId": "TimingCurrentTime_GET", - "tags": [ - "timing" - ], - "responses": { - "200": { - "$ref": "#/components/responses/TimingCurrentTime.200" - }, - "400": { - "$ref": "#/components/responses/Error.400" - }, - "403": { - "$ref": "#/components/responses/Error.403" - }, - "404": { - "$ref": "#/components/responses/Error.404" - } - } - } - }, - "/timing/timing_caps": { - "get": { - "description": "This method retrieves the information of the platform's timing capabilities which corresponds to the timing capabilities query", - "operationId": "TimingCaps_GET", - "tags": [ - "timing" - ], - "responses": { - "200": { - "$ref": "#/components/responses/TimingCaps.200" - }, - "400": { - "$ref": "#/components/responses/Error.400" - }, - "403": { - "$ref": "#/components/responses/Error.403" - }, - "404": { - "$ref": "#/components/responses/Error.404" - } - } - } - }, - "/transports": { - "get": { - "description": "This method retrieves information about a list of available transports. This method is typically used by a service-producing application to discover transports provided by the mobile edge platform in the \"transport information query\" procedure", - "operationId": "Transports_GET", - "tags": [ - "transports" - ], - "responses": { - "200": { - "$ref": "#/components/responses/Transports.200" - }, - "400": { - "$ref": "#/components/responses/Error.400" - }, - "403": { - "$ref": "#/components/responses/Error.403" - }, - "404": { - "$ref": "#/components/responses/Error.404" - } - } - } - } - }, - "components": { - "schemas": { - "Empty": { - "description": "Empty schema" - }, - "AppTerminationNotification.MaxGracefulTimeout": { - "description": "Maximum timeout value in seconds for graceful termination or graceful stop of an application instance.", - "type": "integer", - "format": "uint32", - "example": 10 - }, - "AppTerminationNotification.NotificationType": { - "description": "Shall be set to AppTerminationNotification.", - "type": "string", - "example": "AppTerminationNotification" - }, - "AppTerminationNotification": { - "description": "This type represents the information that the mobile edge platform notifies the subscribed application instance about the corresponding application instance termination/stop.", - "type": "object", - "required": [ - "notificationType", - "maxGracefulTimeout", - "_links" - ], - "properties": { - "notificationType": { - "$ref": "#/components/schemas/AppTerminationNotification.NotificationType" - }, - "maxGracefulTimeout": { - "$ref": "#/components/schemas/AppTerminationNotification.MaxGracefulTimeout" - }, - "_links": { - "$ref": "#/components/schemas/Subscription" - } - } - }, - "AppTerminationNotificationSubscription.AppInstanceId": { - "description": "It is used as the filtering criterion for the subscribed events.", - "type": "string", - "example": "ID1" - }, - "AppTerminationNotificationSubscription.CallbackReference": { - "description": "URI selected by the mobile edge application instance to receive notifications on the subscribed mobile edge application instance management information. This shall be included in both the request and the response.", - "type": "string", - "format": "uri" - }, - "AppTerminationNotificationSubscription": { - "description": "This type represents the information that the mobile edge platform notifies the subscribed application instance about the corresponding application instance termination/stop.", - "type": "object", - "required": [ - "subscriptionType", - "callbackReference", - "_links", - "appInstanceId" - ], - "properties": { - "subscriptionType": { - "$ref": "#/components/schemas/AppTerminationNotificationSubscription.SubscriptionType" - }, - "callbackReference": { - "$ref": "#/components/schemas/AppTerminationNotificationSubscription.CallbackReference" - }, - "_links": { - "$ref": "#/components/schemas/Self" - }, - "appInstanceId": { - "$ref": "#/components/schemas/AppTerminationNotificationSubscription.AppInstanceId" - } - } - }, - "AppTerminationNotificationSubscription.SubscriptionType": { - "description": "Shall be set to AppTerminationNotificationSubscription.", - "type": "string", - "example": "AppTerminationNotificationSubscription" - }, - "CategoryRef.Href": { - "description": "Reference of the catalogue", - "type": "string", - "example": "catItem1" - }, - "CategoryRef.Id": { - "description": "Unique identifier of the category", - "type": "string", - "example": "id12345" - }, - "CategoryRef.Name": { - "description": "Name of the category", - "type": "string", - "example": "RNI" - }, - "CategoryRef.Version": { - "description": "Category version", - "type": "string", - "example": "version1" - }, - "CategoryRef": { - "description": "This type represents the category reference", - "type": "object", - "required": [ - "href", - "id", - "name", - "version" - ], - "properties": { - "href": { - "$ref": "#/components/schemas/CategoryRef.Href" - }, - "id": { - "$ref": "#/components/schemas/CategoryRef.Id" - }, - "name": { - "$ref": "#/components/schemas/CategoryRef.Name" - }, - "version": { - "$ref": "#/components/schemas/CategoryRef.Version" - } - } - }, - "CurrentTime": { - "description": "This type represents the information provided by the mobile edge platform in response to the Get Platform Time Request message.", - "type": "object", - "required": [ - "nanoSeconds", - "seconds", - "timeSourceStatus" - ], - "properties": { - "seconds": { - "type": "integer", - "format": "uint32", - "description": "The seconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC", - "example": 1577836800 - }, - "nanoSeconds": { - "type": "integer", - "format": "uint32", - "description": "The nanoseconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC", - "example": 0 - }, - "timeSourceStatus": { - "type": "string", - "enum": [ - "TRACEABLE", - "NONTRACEABLE" - ], - "description": "Platform Time Source status. 1 = TRACEABLE - time source is locked to the UTC time source. 2 = NONTRACEABLE - time source is not locked to the UTC time source", - "example": "TRACEABLE" - } - } - }, - "DestinationInterface.InterfaceType": { - "description": "Type of the interface", - "type": "string", - "enum": [ - "TUNNEL", - "MAC", - "IP" - ], - "example": "TUNNEL" - }, - "DestinationInterface.IpAddress": { - "description": "IP address of the remote destination", - "type": "string", - "example": "192.0.2.0" - }, - "DestinationInterface.MacAddress": { - "description": "Source address identifies the MAC address of the interface", - "type": "string", - "example": "02-00-00-00-00-00" - }, - "DestinationInterface": { - "description": "This type represents the destination interface.", - "type": "object", - "required": [ - "interfaceType" - ], - "properties": { - "interfaceType": { - "$ref": "#/components/schemas/DestinationInterface.InterfaceType" - }, - "tunnelInfo": { - "$ref": "#/components/schemas/TunnelInfo" - }, - "srcMacAddress": { - "$ref": "#/components/schemas/DestinationInterface.MacAddress" - }, - "dstMacAddress": { - "$ref": "#/components/schemas/DestinationInterface.MacAddress" - }, - "dstIpAddress": { - "$ref": "#/components/schemas/DestinationInterface.IpAddress" - } - } - }, - "DnsRule.DomainName": { - "description": "FQDN resolved by the DNS rule", - "type": "string", - "example": "www.example.com" - }, - "DnsRule.Id": { - "description": "Identifies the DNS Rule", - "type": "string", - "example": "dnsRule1" - }, - "DnsRule.IpAddress": { - "description": "IP address associated with the FQDN resolved by the DNS rule", - "type": "string", - "example": "192.0.2.0" - }, - "DnsRule.IpAddressType": { - "description": "IP address type", - "type": "string", - "enum": [ - "IP_V6", - "IP_V4" - ], - "example": "IP_V6" - }, - "DnsRule.State": { - "description": "DNS rule state", - "type": "string", - "enum": [ - "ACTIVE", - "INACTIVE" - ], - "example": "ACTIVE" - }, - "DnsRule.Ttl": { - "description": "Time to live value", - "type": "integer", - "format": "uint32", - "example": "?" - }, - "DnsRule": { - "description": "This type represents the general information of a DNS rule.", - "type": "object", - "required": [ - "dnsRuleId", - "domainName", - "ipAddressType", - "ipAddress", - "state" - ], - "properties": { - "dnsRuleId": { - "$ref": "#/components/schemas/DnsRule.Id" - }, - "domainName": { - "$ref": "#/components/schemas/DnsRule.DomainName" - }, - "ipAddressType": { - "$ref": "#/components/schemas/DnsRule.IpAddressType" - }, - "ipAddress": { - "$ref": "#/components/schemas/DnsRule.IpAddress" - }, - "ttl": { - "$ref": "#/components/schemas/DnsRule.Ttl" - }, - "state": { - "$ref": "#/components/schemas/DnsRule.State" - } - } - }, - "EndPointInfo.Address.Host": { - "description": "Host portion of the address", - "type": "string", - "example": "192.0.2.0" - }, - "EndPointInfo.Address_Port": { - "description": "Port portion of the address", - "type": "integer", - "format": "uint32", - "example": 8080 - }, - "EndPointInfo.Address": { - "description": "A IP address and port pair", - "type": "object", - "required": [ - "host", - "port" - ], - "properties": { - "host": { - "$ref": "#/components/schemas/EndPointInfo.Address.Host" - }, - "port": { - "$ref": "#/components/schemas/EndPointInfo.Address_Port" - } - } - }, - "EndPointInfo.Addresses": { - "description": "Entry point information of the service as one or more pairs of IP address and port", - "type": "object", - "required": [ - "addresses" - ], - "properties": { - "addresses": { - "type": "array", - "minItems": 0, - "items": { - "$ref": "#/components/schemas/EndPointInfo.Address" - } - } - } - }, - "EndPointInfo.Alternative": { - "description": "Entry point information of the service in a format defined by an implementation, or in an external specification.", - "type": "object", - "required": [ - "alternative" - ], - "properties": { - "alternative": { - "type": "object" - } - } - }, - "EndPointInfo.Uri": { - "description": "Entry point information of the service", - "type": "string", - "format": "uri", - "example": "/meMp1/service/EntryPoint" - }, - "EndPointInfo.Uris": { - "description": "Entry point information of the service as string, formatted according to URI syntax", - "type": "object", - "required": [ - "uris" - ], - "properties": { - "uris": { - "type": "array", - "minItems": 0, - "items": { - "$ref": "#/components/schemas/EndPointInfo.Uri" - } - } - } - }, - "LinkType": { - "description": "This type represents a type of link and may be referenced from data structures", - "type": "object", - "properties": { - "href": { - "$ref": "#/components/schemas/Href" - } - } - }, - "Href": { - "description": "URI referring to a resource", - "type": "string", - "format": "uri", - "example": "/meMp1/example" - }, - "Mp1SubscriptionLinkList.Links": { - "description": "Self-referring URI.", - "type": "object", - "required": [ - "self" - ], - "properties": { - "self": { - "$ref": "#/components/schemas/LinkType" - }, - "subscription": { - "description": "Subscription list", - "type": "array", - "items": { - "$ref": "#/components/schemas/Mp1SubscriptionLinkList.Subscription" - } - } - } - }, - "Mp1SubscriptionLinkList.Subscription": { - "description": "A link to a subscription.", - "type": "object", - "required": [ - "href", - "rel" - ], - "properties": { - "href": { - "$ref": "#/components/schemas/Href" - }, - "rel": { - "description": "The values are as defined in the \"subscriptionType\" attribute for each different Mp1 event subscription data type.", - "type": "string", - "enum": [ - "AppTerminationNotificationSubscription", - "SerAvailabilityNotificationSubscription" - ] - } - } - }, - "Mp1SubscriptionLinkList": { - "description": "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.", - "type": "object", - "required": [ - "_links" - ], - "properties": { - "_links": { - "$ref": "#/components/schemas/Mp1SubscriptionLinkList.Links" - } - } - }, - "ProblemDetails": { - "type": "object", - "properties": { - "type": { - "$ref": "#/components/schemas/Problem.type" - }, - "title": { - "$ref": "#/components/schemas/Problem.title" - }, - "status": { - "$ref": "#/components/schemas/Problem.status" - }, - "detail": { - "$ref": "#/components/schemas/Problem.detail" - }, - "instance": { - "$ref": "#/components/schemas/Problem.instance" - } - } - }, - "Problem.detail": { - "type": "string", - "description": "A human-readable explanation specific to this occurrence of the problem" - }, - "Problem.instance": { - "type": "string", - "format": "uri", - "description": "A URI reference that identifies the specific occurrence of the problem" - }, - "Problem.status": { - "type": "integer", - "format": "uint32", - "description": "The HTTP status code for this occurrence of the problem" - }, - "Problem.title": { - "type": "string", - "description": "A short, human-readable summary of the problem type" - }, - "Problem.type": { - "type": "string", - "format": "uri", - "description": "A URI reference according to IETF RFC 3986 that identifies the problem type" - }, - "SecurityInfo.OAuth2Info.GrantTypes": { - "description": "List of supported OAuth 2.0 grant types", - "type": "string", - "enum": [ - "OAUTH2_AUTHORIZATION_CODE", - "OAUTH2_IMPLICIT_GRANT", - "OAUTH2_RESOURCE_OWNER", - "OAUTH2_CLIENT_CREDENTIALS" - ], - "example": "OAUTH2_CLIENT_CREDENTIALS" - }, - "SecurityInfo.OAuth2Info.TokenEndpoint": { - "description": "The token endpoint", - "type": "string", - "format": "uri", - "example": "/meMp1/security/TokenEndPoint" - }, - "SecurityInfo.OAuth2Info": { - "description": "Parameters related to use of OAuth 2.0", - "required": [ - "grantTypes", - "tokenEndpoint" - ], - "properties": { - "grantTypes": { - "description": "List of supported OAuth 2.0 grant types.", - "type": "array", - "minItems": 1, - "maxItems": 4, - "items": { - "$ref": "#/components/schemas/SecurityInfo.OAuth2Info.GrantTypes" - } - }, - "tokenEndpoint": { - "$ref": "#/components/schemas/SecurityInfo.OAuth2Info.TokenEndpoint" - } - }, - "type": "object" - }, - "SecurityInfo": { - "description": "This type represents security information related to a transport", - "type": "object", - "properties": { - "oAuth2Info": { - "$ref": "#/components/schemas/SecurityInfo.OAuth2Info" - } - } - }, - "Self": { - "description": "Self-referring URI.", - "type": "object", - "required": [ - "self" - ], - "properties": { - "self": { - "$ref": "#/components/schemas/LinkType" - } - }, - "readOnly": true - }, - "SerAvailabilityNotificationSubscription.CallbackReference": { - "description": "URI selected by the mobile edge application instance to receive notifications on the subscribed mobile edge service availability information. This shall be included in both the request and the response.", - "type": "string", - "format": "uri" - }, - "SerAvailabilityNotificationSubscription": { - "description": "This type represents a subscription to the notifications from the mobile edge platform regarding the availability of a mobile edge service or a list of mobile edge services.", - "type": "object", - "required": [ - "subscriptionType", - "callbackReference", - "_links", - "filteringCriteria" - ], - "properties": { - "subscriptionType": { - "$ref": "#/components/schemas/SerAvailabilityNotificationSubscription.SubscriptionType" - }, - "callbackReference": { - "$ref": "#/components/schemas/SerAvailabilityNotificationSubscription.CallbackReference" - }, - "_links": { - "$ref": "#/components/schemas/Self" - }, - "filteringCriteria": { - "$ref": "#/components/schemas/ServiceInfo" - } - } - }, - "SerAvailabilityNotificationSubscription.SubscriptionType": { - "description": "Shall be set to SerAvailabilityNotificationSubscription.", - "type": "string", - "example": "SerAvailabilityNotificationSubscription" - }, - "ServiceAvailabilityNotification": { - "description": "This type represents the service availability information.", - "type": "object", - "required": [ - "notificationType", - "services", - "_links" - ], - "properties": { - "notificationType": { - "$ref": "#/components/schemas/SerAvailabilityNotificationSubscription.SubscriptionType" - }, - "services": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ServiceInfo" - } - }, - "_links": { - "$ref": "#/components/schemas/Subscription" - } - } - }, - "SerializerTypes": { - "description": "The enumeration SerializerTypes represents types of serializers", - "type": "string", - "enum": [ - "JSON", - "XML", - "PROTOBUF3" - ], - "example": "JSON" - }, - "ServiceInfo.SerInstanceId": { - "description": "Identifier of the service instance assigned by the MEPM / mobile edge platform.", - "type": "string", - "readOnly": true, - "example": "ServiceInstance123" - }, - "ServiceInfo.SerName": { - "description": "The name of the service. This is how the service producing mobile edge application identifies the service instance it produces.", - "type": "string", - "example": "ExampleService" - }, - "ServiceInfo.State": { - "description": "Contains the state", - "type": "string", - "enum": [ - "ACTIVE", - "INACTIVE" - ], - "example": "ACTIVE" - }, - "ServiceInfo.TransportId": { - "description": "Identifier of the platform-provided transport to be used by the service. Valid identifiers may be obtained using the \"Transport information query\" procedure. May be present in POST requests to signal the use of a platform-provided transport for the service, and shall be absent otherwise.", - "type": "string", - "writeOnly": true, - "example": "Rest1" - }, - "ServiceInfo.Version": { - "description": "Service version", - "type": "string", - "example": "ServiceVersion1" - }, - "ServiceInfo.Post": { - "description": "This type represents the general information of a mobile edge service.", - "type": "object", - "required": [ - "serName", - "version", - "state", - "serializer" - ], - "oneOf": [ - { - "required": [ - "transportId" - ] - }, - { - "required": [ - "transportInfo" - ] - } - ], - "properties": { - "serInstanceId": { - "$ref": "#/components/schemas/ServiceInfo.SerInstanceId" - }, - "serName": { - "$ref": "#/components/schemas/ServiceInfo.SerName" - }, - "serCategory": { - "$ref": "#/components/schemas/CategoryRef" - }, - "version": { - "$ref": "#/components/schemas/ServiceInfo.Version" - }, - "state": { - "$ref": "#/components/schemas/ServiceInfo.State" - }, - "transportId": { - "$ref": "#/components/schemas/ServiceInfo.TransportId" - }, - "transportInfo": { - "$ref": "#/components/schemas/TransportInfo" - }, - "serializer": { - "$ref": "#/components/schemas/SerializerTypes" - } - } - }, - "ServiceInfo": { - "description": "This type represents the general information of a mobile edge service.", - "type": "object", - "required": [ - "serName", - "version", - "state", - "transportInfo", - "serializer" - ], - "properties": { - "serInstanceId": { - "$ref": "#/components/schemas/ServiceInfo.SerInstanceId" - }, - "serName": { - "$ref": "#/components/schemas/ServiceInfo.SerName" - }, - "serCategory": { - "$ref": "#/components/schemas/CategoryRef" - }, - "version": { - "$ref": "#/components/schemas/ServiceInfo.Version" - }, - "state": { - "$ref": "#/components/schemas/ServiceInfo.State" - }, - "transportInfo": { - "$ref": "#/components/schemas/TransportInfo" - }, - "serializer": { - "$ref": "#/components/schemas/SerializerTypes" - } - } - }, - "Subscription": { - "description": "A link to the related subscription", - "type": "object", - "required": [ - "subscription" - ], - "properties": { - "subscription": { - "$ref": "#/components/schemas/LinkType" - } - } - }, - "TimingCaps.NtpServers.AuthenticationKeyNum": { - "description": "Authentication key number", - "type": "integer", - "format": "uint32", - "example": 1 - }, - "TimingCaps.NtpServers.AuthenticationOption": { - "description": "NTP authentication option", - "type": "string", - "enum": [ - "NONE", - "SYMMETRIC_KEY", - "AUTO_KEY" - ], - "example": "NONE" - }, - "TimingCaps.NtpServers.DelayReqMaxRate": { - "description": "Acceptable maximum rate of the Delay_Req messages in packets per second", - "type": "integer", - "format": "uint32", - "example": 10 - }, - "TimingCaps.NtpServers.LocalPriority": { - "description": "NTP server local priority", - "type": "integer", - "format": "uint32", - "example": 1 - }, - "TimingCaps.NtpServers.MaxPollingInterval": { - "description": "Maximum poll interval for NTP messages, in seconds as a power of two. Range 3...17", - "type": "integer", - "format": "uint32", - "example": 17 - }, - "TimingCaps.NtpServers.MinPollingInterval": { - "description": "Minimum poll interval for NTP messages, in seconds as a power of two. Range 3...17", - "type": "integer", - "format": "uint32", - "example": 3 - }, - "TimingCaps.NtpServers.NtpServerAddr": { - "description": "NTP server address", - "type": "string", - "example": "192.0.2.0" - }, - "TimingCaps.NtpServers.NtpServerAddrType": { - "description": "Address type of NTP server", - "type": "string", - "enum": [ - "IP_ADDRESS", - "DNS_NAME" - ], - "example": "IP_ADDRESS" - }, - "TimingCaps.NtpServers_PtpMasterIpAddress": { - "description": "PTP Master IP Address", - "type": "string", - "example": "192.0.2.0" - }, - "TimingCaps.NtpServers_PtpMasterLocalPriority": { - "description": "PTP Master local priority", - "type": "integer", - "format": "uint32", - "example": 1 - }, - "TimingCaps.NtpServers": { - "description": "NTP server detail.", - "type": "object", - "required": [ - "ntpServerAddrType", - "ntpServerAddr", - "minPollingInterval", - "maxPollingInterval", - "localPriority", - "authenticationOption", - "authenticationKeyNum" - ], - "properties": { - "ntpServerAddrType": { - "$ref": "#/components/schemas/TimingCaps.NtpServers.NtpServerAddrType" - }, - "ntpServerAddr": { - "$ref": "#/components/schemas/TimingCaps.NtpServers.NtpServerAddr" - }, - "minPollingInterval": { - "$ref": "#/components/schemas/TimingCaps.NtpServers.MinPollingInterval" - }, - "maxPollingInterval": { - "$ref": "#/components/schemas/TimingCaps.NtpServers.MaxPollingInterval" - }, - "localPriority": { - "$ref": "#/components/schemas/TimingCaps.NtpServers.LocalPriority" - }, - "authenticationOption": { - "$ref": "#/components/schemas/TimingCaps.NtpServers.AuthenticationOption" - }, - "authenticationKeyNum": { - "$ref": "#/components/schemas/TimingCaps.NtpServers.AuthenticationKeyNum" - } - } - }, - "TimingCaps_PtpMasters": { - "description": "NTP server detail.", - "type": "object", - "required": [ - "ptpMasterIpAddress", - "ptpMasterLocalPriority", - "delayReqMaxRate" - ], - "properties": { - "ptpMasterIpAddress": { - "$ref": "#/components/schemas/TimingCaps.NtpServers_PtpMasterIpAddress" - }, - "ptpMasterLocalPriority": { - "$ref": "#/components/schemas/TimingCaps.NtpServers_PtpMasterLocalPriority" - }, - "delayReqMaxRate": { - "$ref": "#/components/schemas/TimingCaps.NtpServers.DelayReqMaxRate" - } - } - }, - "TimingCaps.TimeStamp": { - "description": "time", - "type": "object", - "required": [ - "nanoSeconds", - "seconds" - ], - "properties": { - "seconds": { - "type": "integer", - "format": "uint32", - "description": "The seconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC", - "example": 1577836800 - }, - "nanoSeconds": { - "type": "integer", - "format": "uint32", - "description": "The nanoseconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC", - "example": 0 - } - } - }, - "TimingCaps": { - "description": "This type represents the information provided by the mobile edge platform in response to the Timing capabilities Query message.", - "type": "object", - "properties": { - "timeStamp": { - "$ref": "#/components/schemas/TimingCaps.TimeStamp" - }, - "ntpServers": { - "description": "Available NTP servers", - "type": "array", - "items": { - "$ref": "#/components/schemas/TimingCaps.NtpServers" - } - }, - "ptpMasters": { - "description": "Available PTP Masters", - "type": "array", - "items": { - "$ref": "#/components/schemas/TimingCaps_PtpMasters" - } - } - } - }, - "TrafficFilter.Address": { - "description": "Identify the traffic ip address.", - "type": "string", - "example": "192.168.1.1" - }, - "TrafficFilter.DSCP": { - "description": "Used to match all IPv4 packets that have the same Differentiated Services Code Point (DSCP)", - "type": "integer", - "format": "uint32", - "example": 0 - }, - "TrafficFilter.Port": { - "description": "A port", - "type": "string", - "example": "8080" - }, - "TrafficFilter.Protocol": { - "description": "Protocol of the traffic filter", - "type": "string", - "example": "?" - }, - "TrafficFilter.QCI": { - "description": "Used to match all packets that have the same Quality Class Indicator (QCI).", - "type": "integer", - "format": "uint32", - "example": 1 - }, - "TrafficFilter.TC": { - "description": "Used to match all IPv6 packets that have the same Traffic Class.", - "type": "integer", - "format": "uint32", - "example": 1 - }, - "TrafficFilter.Token": { - "description": "Used for token based traffic rule", - "type": "string", - "example": "?" - }, - "TrafficFilter.TunnelAddress": { - "description": "Used for GTP tunnel based traffic rule", - "type": "string", - "example": "?" - }, - "TrafficFilter.TunnelPort": { - "description": "Used for GTP tunnel based traffic rule", - "type": "string", - "example": "?" - }, - "TrafficFilter": { - "description": "This type represents the traffic filter.", - "type": "object", - "properties": { - "srcAddress": { - "description": "An IP address or a range of IP address. For IPv4, the IP address could be an IP address plus mask, or an individual IP address, or a range of IP addresses. For IPv6, the IP address could be an IP prefix, or a range of IP prefixes.", - "type": "array", - "items": { - "$ref": "#/components/schemas/TrafficFilter.Address" - } - }, - "dstAddress": { - "description": "An IP address or a range of IP address. For IPv4, the IP address could be an IP address plus mask, or an individual IP address, or a range of IP addresses. For IPv6, the IP address could be an IP prefix, or a range of IP prefixes.", - "type": "array", - "items": { - "$ref": "#/components/schemas/TrafficFilter.Address" - } - }, - "srcPort": { - "description": "A port or a range of ports", - "type": "array", - "items": { - "$ref": "#/components/schemas/TrafficFilter.Port" - } - }, - "dstPort": { - "description": "A port or a range of ports", - "type": "array", - "items": { - "$ref": "#/components/schemas/TrafficFilter.Port" - } - }, - "protocol": { - "description": "Specify the protocol of the traffic filter", - "type": "array", - "items": { - "$ref": "#/components/schemas/TrafficFilter.Protocol" - } - }, - "token": { - "description": "Used for token based traffic rule", - "type": "array", - "items": { - "$ref": "#/components/schemas/TrafficFilter.Token" - } - }, - "srcTunnelAddress": { - "description": "Used for GTP tunnel based traffic rule", - "type": "array", - "items": { - "$ref": "#/components/schemas/TrafficFilter.TunnelAddress" - } - }, - "tgtTunnelAddress": { - "description": "Used for GTP tunnel based traffic rule", - "type": "array", - "items": { - "$ref": "#/components/schemas/TrafficFilter.TunnelAddress" - } - }, - "srcTunnelPort": { - "description": "Used for GTP tunnel based traffic rule", - "type": "array", - "items": { - "$ref": "#/components/schemas/TrafficFilter.TunnelPort" - } - }, - "dstTunnelPort": { - "description": "Used for GTP tunnel based traffic rule", - "type": "array", - "items": { - "$ref": "#/components/schemas/TrafficFilter.TunnelPort" - } - }, - "qCI": { - "$ref": "#/components/schemas/TrafficFilter.QCI" - }, - "dSCP": { - "$ref": "#/components/schemas/TrafficFilter.DSCP" - }, - "tC": { - "$ref": "#/components/schemas/TrafficFilter.TC" - } - } - }, - "TrafficRule.Action": { - "description": "The action of the ME host data plane when a packet matches the trafficFilter", - "type": "string", - "enum": [ - "DROP", - "FORWARD_DECAPSULATED", - "FORWARD_AS_IS", - "PASSTHROUGH", - "DUPLICATE_DECAPSULATED", - "DUPLICATE_AS_IS" - ], - "example": "DROP" - }, - "TrafficRule.FilterType": { - "description": "Definition of filter per FLOW or PACKET. If flow the filter match UE->EPC packet and the reverse packet is handled in the same context", - "type": "string", - "enum": [ - "FLOW", - "PACKET" - ], - "example": "FLOW" - }, - "TrafficRule.Id": { - "description": "Identify the traffic rule.", - "type": "string", - "example": "TrafficRule1" - }, - "TrafficRule_Priority": { - "description": "Priority of this traffic rule. If traffic rule conflicts, the one with higher priority take precedence", - "type": "integer", - "format": "uint32", - "example": 1 - }, - "TrafficRule.State": { - "description": "Contains the traffic rule state", - "type": "string", - "enum": [ - "ACTIVE", - "INACTIVE" - ], - "example": "ACTIVE" - }, - "TrafficRule": { - "description": "This type represents the general information of a traffic rule.", - "type": "object", - "required": [ - "trafficRuleId", - "filterType", - "priority", - "trafficFilter", - "action", - "state" - ], - "properties": { - "trafficRuleId": { - "$ref": "#/components/schemas/TrafficRule.Id" - }, - "filterType": { - "$ref": "#/components/schemas/TrafficRule.FilterType" - }, - "priority": { - "$ref": "#/components/schemas/TrafficRule_Priority" - }, - "trafficFilter": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TrafficFilter" - } - }, - "action": { - "$ref": "#/components/schemas/TrafficRule.Action" - }, - "dstInterface": { - "$ref": "#/components/schemas/DestinationInterface" - }, - "state": { - "$ref": "#/components/schemas/TrafficRule.State" - } - } - }, - "TransportInfo.Description": { - "description": "Human-readable description of this transport", - "type": "string", - "example": "REST API" - }, - "TransportInfo.Id": { - "description": "The identifier of this transport", - "type": "string", - "example": "TransId12345" - }, - "TransportInfo.ImplSpecificInfo": { - "description": "Additional implementation specific details of the transport", - "type": "object" - }, - "TransportInfo.Name": { - "description": "The name of this transport", - "type": "string", - "example": "REST" - }, - "TransportInfo.Protocol": { - "description": "The name of the protocol used. Shall be set to HTTP for a REST API.", - "type": "string", - "example": "HTTP" - }, - "TransportInfo.Version": { - "description": "The version of the protocol used", - "type": "string", - "example": "2.0" - }, - "TransportInfo": { - "description": "This type represents the general information of a mobile edge service.", - "type": "object", - "required": [ - "id", - "name", - "type", - "protocol", - "version", - "endpoint", - "security" - ], - "properties": { - "id": { - "$ref": "#/components/schemas/TransportInfo.Id" - }, - "name": { - "$ref": "#/components/schemas/TransportInfo.Name" - }, - "description": { - "$ref": "#/components/schemas/TransportInfo.Description" - }, - "type": { - "$ref": "#/components/schemas/TransportTypes" - }, - "protocol": { - "$ref": "#/components/schemas/TransportInfo.Protocol" - }, - "version": { - "$ref": "#/components/schemas/TransportInfo.Version" - }, - "endpoint": { - "description": "This type represents information about a transport endpoint", - "type": "object", - "oneOf": [ - { - "$ref": "#/components/schemas/EndPointInfo.Uris" - }, - { - "$ref": "#/components/schemas/EndPointInfo.Addresses" - }, - { - "$ref": "#/components/schemas/EndPointInfo.Alternative" - } - ] - }, - "security": { - "$ref": "#/components/schemas/SecurityInfo" - }, - "implSpecificInfo": { - "$ref": "#/components/schemas/TransportInfo.ImplSpecificInfo" - } - } - }, - "TransportTypes": { - "description": "The enumeration TransportTypes represents types of transports", - "type": "string", - "enum": [ - "REST_HTTP", - "MB_TOPIC_BASED", - "MB_ROUTING", - "MB_PUBSUB", - "RPC", - "RPC_STREAMING", - "WEBSOCKET" - ], - "example": "REST_HTTP" - }, - "TunnelInfo.TunnelDstAddress": { - "description": "Destination address of the tunnel", - "type": "string", - "example": "?" - }, - "TunnelInfo.TunnelSrcAddress": { - "description": "Source address of the tunnel", - "type": "string", - "example": "?" - }, - "TunnelInfo.TunnelType": { - "description": "This type represents the tunnel information.", - "type": "string", - "enum": [ - "GTP_U", - "GRE" - ], - "example": "GTP_U" - }, - "TunnelInfo": { - "description": "This type represents the tunnel information.", - "type": "object", - "required": [ - "tunnelType" - ], - "properties": { - "tunnelType": { - "$ref": "#/components/schemas/TunnelInfo.TunnelType" - }, - "tunnelDstAddress": { - "$ref": "#/components/schemas/TunnelInfo.TunnelDstAddress" - }, - "tunnelSrcAddress": { - "$ref": "#/components/schemas/TunnelInfo.TunnelSrcAddress" - } - } - } - }, - "parameters": { - "Path.AppInstanceId": { - "name": "appInstanceId", - "description": "Represents a mobile edge application instance. Note that the appInstanceId is allocated by the mobile edge platform manager.", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - "Path.DnsRuleId": { - "name": "dnsRuleId", - "description": "Represents a DNS rule.", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - "Path.SubscriptionId": { - "name": "subscriptionId", - "description": "Represents a subscription to the notifications from the mobile edge platform.", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - "Path.SubscriptionType": { - "name": "subscriptionType", - "description": "Represents a subscription type to the notifications from the mobile edge platform.", - "in": "path", - "required": true, - "schema": { - "type": "string", - "enum": [ - "AppTerminationNotificationSubscription", - "SerAvailabilityNotificationSubscription" - ] - } - }, - "Path.ServiceId": { - "name": "serviceId", - "description": "Represents a mobile edge service instance.", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - "Path.TrafficRuleId": { - "name": "trafficRuleId", - "description": "Represents a traffic rule.", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - "Query.Ser_category_id": { - "name": "ser_category_id", - "description": "A mobile edge application instance may use ser_category_id as an input parameter to query the availability of a list of mobile edge service instances in a serCategory. Either \"ser_instance_id\" or \"ser_name\" or \"ser_category_id\" or none of them shall be present.", - "in": "query", - "required": false, - "schema": { - "type": "string" - } - }, - "Query.Ser_instance_id": { - "name": "ser_instance_id", - "description": "A mobile edge application instance may use multiple ser_instance_ids as an input parameter to query the availability of a list of mobile edge service instances. Either \"ser_instance_id\" or \"ser_name\" or \"ser_category_id\" or none of them shall be present.", - "in": "query", - "required": false, - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "Query.Ser_name": { - "name": "ser_name", - "description": "A mobile edge application instance may use multiple ser_names as an input parameter to query the availability of a list of mobile edge service instances. Either \"ser_instance_id\" or \"ser_name\" or \"ser_category_id\" or none of them shall be present.", - "in": "query", - "required": false, - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "responses": { - "ApplicationsDnsRules.200": { - "description": "It is used to indicate nonspecific success. The response body contains a representation of the resource.", - "content": { - "application/json": { - "schema": { - "type": "array", - "minItems": 0, - "items": { - "$ref": "#/components/schemas/DnsRule" - } - }, - "examples": { - "DnsRules": { - "$ref": "#/components/examples/DnsRules" - } - } - } - }, - "links": { - "getIndividualMeDNSRule": { - "$ref": "#/components/links/GetIndividualMeDNSRule" - }, - "putIndividualMeDNSRule": { - "$ref": "#/components/links/PutIndividualMeDNSRule" - } - } - }, - "ApplicationsDnsRule.200": { - "description": "It is used to indicate nonspecific success. The response body contains a representation of the resource.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DnsRule" - }, - "examples": { - "DnsRule": { - "$ref": "#/components/examples/DnsRule" - } - } - } - } - }, - "ApplicationsSubscriptions.200": { - "description": "Upon success, a response body containing the list of links to the requested subscriptions is returned.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Mp1SubscriptionLinkList" - } - } - }, - "links": { - "getIndividualMeMp1SubscriptionLinkList": { - "$ref": "#/components/links/GetIndividualMeMp1SubscriptionLinkList" - }, - "delIndividualMeMp1SubscriptionLinkList": { - "$ref": "#/components/links/DelIndividualMeMp1SubscriptionLinkList" - } - } - }, - "ApplicationsSubscriptions.201": { - "description": "Entity body in the request contains a subscription to the mobile edge service availability notifications that is to be created.", - "headers": { - "location": { - "description": "The resource URI of the created resource", - "schema": { - "type": "string", - "format": "uri" - } - } - }, - "content": { - "application/json": { - "schema": { - "oneOf": [ - { - "$ref": "#/components/schemas/AppTerminationNotificationSubscription" - }, - { - "$ref": "#/components/schemas/SerAvailabilityNotificationSubscription" - } - ] - } - } - }, - "links": { - "getIndividualMeMp1Subscription": { - "$ref": "#/components/links/GetIndividualMeMp1Subscription" - }, - "delIndividualMeMp1Subscription": { - "$ref": "#/components/links/DelIndividualMeMp1Subscription" - } - } - }, - "ApplicationsSubscription.200": { - "description": "Upon success, a response body containing the requested subscription is returned.", - "content": { - "application/json": { - "schema": { - "oneOf": [ - { - "$ref": "#/components/schemas/AppTerminationNotificationSubscription" - }, - { - "$ref": "#/components/schemas/SerAvailabilityNotificationSubscription" - } - ] - } - } - } - }, - "ApplicationsTrafficRules.200": { - "description": "It is used to indicate nonspecific success. The response body contains a representation of the resource.", - "content": { - "application/json": { - "schema": { - "type": "array", - "minItems": 0, - "items": { - "$ref": "#/components/schemas/TrafficRule" - } - }, - "examples": { - "TrafficRules": { - "$ref": "#/components/examples/TrafficRules" - } - } - } - }, - "links": { - "getIndividualMeTrafficRule": { - "$ref": "#/components/links/GetIndividualMeTrafficRule" - }, - "putIndividualMeTrafficRule": { - "$ref": "#/components/links/PutIndividualMeTrafficRule" - } - } - }, - "ApplicationsTrafficRule.200": { - "description": "It is used to indicate nonspecific success. The response body contains a representation of the resource.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TrafficRule" - }, - "examples": { - "TrafficRule": { - "$ref": "#/components/examples/TrafficRule" - } - } - } - } - }, - "Services.200": { - "description": "It is used to indicate nonspecific success. The response body contains a representation of the resource.", - "content": { - "application/json": { - "schema": { - "type": "array", - "minItems": 0, - "items": { - "$ref": "#/components/schemas/ServiceInfo" - } - }, - "examples": { - "ServiceInfoList": { - "$ref": "#/components/examples/ServiceInfoList" - } - } - } - }, - "links": { - "getIndividualMeService": { - "$ref": "#/components/links/GetIndividualMeService" - }, - "putIndividualMeService": { - "$ref": "#/components/links/PutIndividualMeService" - } - } - }, - "Services.201": { - "description": "Upon success, the HTTP response shall include a Location HTTP header that contains the resource URI of the created resource.", - "headers": { - "location": { - "description": "The resource URI of the created resource", - "schema": { - "type": "string", - "format": "uri" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ServiceInfo" - }, - "examples": { - "ServiceInfo": { - "$ref": "#/components/examples/ServiceInfo" - } - } - } - }, - "links": { - "getIndividualMeService": { - "$ref": "#/components/links/GetIndividualMeService" - }, - "putIndividualMeService": { - "$ref": "#/components/links/PutIndividualMeService" - } - } - }, - "ServicesServiceId.200": { - "description": "It is used to indicate nonspecific success. The response body contains a representation of the resource.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ServiceInfo" - }, - "examples": { - "ServiceInfo": { - "$ref": "#/components/examples/ServiceInfo" - } - } - } - } - }, - "TimingCurrentTime.200": { - "description": "It is used to indicate nonspecific success. The response body contains a representation of the resource.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CurrentTime" - } - } - } - }, - "TimingCaps.200": { - "description": "It is used to indicate nonspecific success. The response body contains a representation of the resource.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TimingCaps" - } - } - } - }, - "Transports.200": { - "description": "It is used to indicate nonspecific success. The response body contains a representation of the resource.", - "content": { - "application/json": { - "schema": { - "type": "array", - "minItems": 0, - "items": { - "$ref": "#/components/schemas/TransportInfo" - } - } - } - }, - "links": { - "getTransportInfo": { - "$ref": "#/components/links/GetTransportInfo" - } - } - }, - "Error.400": { - "description": "Bad Request", - "content": { - "application/problem+json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetails" - } - }, - "text/plain": { - "schema": { - "$ref": "#/components/schemas/Empty" - } - } - } - }, - "Error.403": { - "description": "Forbidden", - "content": { - "application/problem+json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetails" - } - } - } - }, - "Error.404": { - "description": "Not Found", - "content": { - "application/problem+json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetails" - } - }, - "text/plain": { - "schema": { - "$ref": "#/components/schemas/Empty" - } - } - } - }, - "Error.412": { - "description": "Precondition Failed", - "content": { - "application/problem+json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetails" - } - }, - "text/plain": { - "schema": { - "$ref": "#/components/schemas/Empty" - } - } - } - } - }, - "requestBodies": { - "ApplicationsDnsRule": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DnsRule" - } - } - }, - "description": "The updated state is included in the entity body of the request.", - "required": true - }, - "ApplicationsSubscriptions": { - "content": { - "application/json": { - "schema": { - "oneOf": [ - { - "$ref": "#/components/schemas/AppTerminationNotificationSubscription" - }, - { - "$ref": "#/components/schemas/SerAvailabilityNotificationSubscription" - } - ] - } - } - }, - "description": "Entity body in the request contains a subscription to the mobile edge application termination notifications that is to be created.", - "required": true - }, - "ApplicationsTrafficRule": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TrafficRule" - } - } - }, - "description": "One or more updated attributes that are allowed to be changed", - "required": true - }, - "Services": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ServiceInfo" - } - } - }, - "description": "New ServiceInfo with updated \"state\" is included as entity body of the request", - "required": true - }, - "Services.Post": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ServiceInfo.Post" - } - } - }, - "description": "New ServiceInfo with updated \"state\" is included as entity body of the request", - "required": true - }, - "ServicesServiceId": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ServiceInfo" - } - } - }, - "description": "New ServiceInfo with updated \"state\" is included as entity body of the request", - "required": true - }, - "AppTerminationNotification": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AppTerminationNotification" - } - } - } - }, - "ServiceAvailabilityNotification": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ServiceAvailabilityNotification" - } - } - } - } - }, - "callbacks": { - "AppTerminationNotification": { - "{$request.body#/callbackReference}": { - "post": { - "description": "Represents the information that the MEP notifies the subscribed application instance about the corresponding application instance termination/stop", - "operationId": "AppTerminationNotification_POST", - "tags": [ - "callback" - ], - "requestBody": { - "$ref": "#/components/requestBodies/AppTerminationNotification" - }, - "responses": { - "200": { - "description": "Expected responses from callback consumer, if it accepts the callback" - } - } - } - } - }, - "ServiceAvailabilityNotification": { - "{$request.body#/callbackReference}": { - "post": { - "description": "'Represents the service availability information that is used in the following cases - when the MEC platform announces the newly available\n services to the authorized relevant MEC applications (e.g. \n the applications that indicate the services as \"optional\" \n or \"required\") that are subscribed to the corresponding \n service availability notifications\n- when the MEC platform notifies the authorized relevant applications that are subscribed to the corresponding service availability notifications about the service availability changes.'", - "operationId": "ServiceAvailabilityNotification_POST", - "tags": [ - "callback" - ], - "requestBody": { - "$ref": "#/components/requestBodies/ServiceAvailabilityNotification" - }, - "responses": { - "200": { - "description": "Expected responses from callback consumer, if it accepts the callback" - } - } - } - } - } - }, - "links": { - "GetIndividualMeService": { - "operationId": "ServicesServiceId_GET", - "description": "The `serviceId` value returned in the response can be used as the `serviceId` parameter in `GET /services/{serviceId}`", - "parameters": { - "serviceId": "$response.body#/serviceId" - } - }, - "PutIndividualMeService": { - "operationId": "ServicesServiceId_PUT", - "description": "The `serviceId` value returned in the response can be used as the `serviceId` parameter in `PUT /services/{serviceId}`", - "parameters": { - "serviceId": "$response.body#/serviceId" - } - }, - "GetIndividualMeDNSRule": { - "operationId": "ApplicationsDnsRule_GET", - "description": "The `dnsRuleId` value returned in the response can be used as the `dnsRuleId` parameter in `GET /applications/{appInstanceId}/dns_rules/{dnsRuleId}`", - "parameters": { - "dnsRuleId": "$response.body#/dnsRuleId" - } - }, - "PutIndividualMeDNSRule": { - "operationId": "ApplicationsDnsRule_PUT", - "description": "The `dnsRuleId` value returned in the response can be used as the `dnsRuleId` parameter in `PUT /applications/{appInstanceId}/dns_rules/{dnsRuleId}`", - "parameters": { - "dnsRuleId": "$response.body#/dnsRuleId" - } - }, - "GetIndividualMeTrafficRule": { - "operationId": "ApplicationsTrafficRule_GET", - "description": "The `trafficRuleId` value returned in the response can be used as the `trafficRuleId` parameter in `GET /applications/{appInstanceId}/traffic_rules/{trafficRuleId}`", - "parameters": { - "trafficRuleId": "$response.body#/trafficRuleId" - } - }, - "PutIndividualMeTrafficRule": { - "operationId": "ApplicationsTrafficRule_PUT", - "description": "The `trafficRuleId` value returned in the response can be used as the `trafficRuleId` parameter in `PUT /applications/{appInstanceId}/traffic_rules/{trafficRuleId}`", - "parameters": { - "trafficRuleId": "$response.body#/trafficRuleId" - } - }, - "GetTransportInfo": { - "operationId": "AppServices_POST", - "description": "The `id` value returned in the response can be used as the `transportId` parameter in `POST /applications/{appInstanceId}/services`. The first transport is provided as the link as wildcards are not supported", - "parameters": { - "transportId": "$response.body#/0/id" - } - }, - "GetIndividualMeMp1Subscription": { - "operationId": "ApplicationsSubscription_GET", - "description": "The `subscriptionId` value returned in the response can be used as the `subscriptionId` parameter in `GET /applications/{appInstanceId}/subscriptions/{subscriptionType}/{subscriptionId}`", - "parameters": { - "description": "regex = \\/mp1\\/v1\\/applications\\/.*\\/subscriptions\\/.*\\/(.*);subscriptionId = href.match(regex)[1];// where \"href\" is an attribute within the subscription attribute within the _links attribute", - "subscriptionId": "TBC" - } - }, - "DelIndividualMeMp1Subscription": { - "operationId": "ApplicationsSubscription_DELETE", - "description": "The `subscriptionId` value returned in the response can be used as the `subscriptionId` parameter in `DELETE /applications/{appInstanceId}/subscriptions/{subscriptionType}/{subscriptionId}`", - "parameters": { - "description": "regex = \\/mp1\\/v1\\/applications\\/.*\\/subscriptions\\/.*\\/(.*);subscriptionId = href.match(regex)[1];// where \"href\" is an attribute within the subscription attribute within the _links attribute", - "subscriptionId": "TBC" - } - }, - "GetIndividualMeMp1SubscriptionLinkList": { - "operationId": "ApplicationsSubscription_GET", - "description": "The `subscriptionId` value returned in the response can be used as the `subscriptionId` parameter in `GET /applications/{appInstanceId}/subscriptions/{subscriptionType}/{subscriptionId}`", - "parameters": { - "description": "regex = \\/mp1\\/v1\\/applications\\/.*\\/subscriptions\\/.*\\/(.*);subscriptionId = href.match(regex)[1];// where \"href\" is an attribute within the subscription attribute within the _links attribute", - "subscriptionId": "TBC" - } - }, - "DelIndividualMeMp1SubscriptionLinkList": { - "operationId": "ApplicationsSubscription_DELETE", - "description": "The `subscriptionId` value returned in the response can be used as the `subscriptionId` parameter in `DELETE /applications/{appInstanceId}/subscriptions/{subscriptionType}/{subscriptionId}`", - "parameters": { - "description": "regex = \\/mp1\\/v1\\/applications\\/.*\\/subscriptions\\/.*\\/(.*);subscriptionId = href.match(regex)[1];// where \"href\" is an attribute within the subscription attribute within the _links attribute", - "subscriptionId": "TBC" - } - } - }, - "examples": { - "DnsRule": { - "value": { - "dnsRuleId": "DnsRule1", - "domainName": "www.example.com", - "ipAddressType": "IP_V4", - "ipAddress": "146.241.7.3", - "ttl": 300, - "state": "ACTIVE" - } - }, - "DnsRules": { - "value": [ - { - "dnsRuleId": "DnsRule1", - "domainName": "www.example.com", - "ipAddressType": "IP_V4", - "ipAddress": "146.241.7.3", - "ttl": 300, - "state": "ACTIVE" - } - ] - }, - "ServiceInfo": { - "value": { - "serInstanceId": "ServiceInstance123", - "serName": "ExampleService", - "serCategory": { - "href": "catItem1", - "id": "id12345", - "name": "RNI", - "version": "version1" - }, - "version": "ServiceVersion1", - "state": "ACTIVE", - "transportInfo": { - "id": "TransId12345", - "name": "REST", - "description": "REST API", - "type": "REST_HTTP", - "protocol": "HTTP", - "version": "2.0", - "endpoint": { - "uris": [ - "/meMp1/service/EntryPoint" - ] - }, - "security": { - "oAuth2Info": { - "grantTypes": [ - "OAUTH2_CLIENT_CREDENTIALS" - ], - "tokenEndpoint": "/meMp1/security/TokenEndPoint" - } - } - }, - "serializer": "JSON" - } - }, - "ServiceInfoList": { - "value": [ - { - "serInstanceId": "ServiceInstance123", - "serName": "ExampleService", - "serCategory": { - "href": "catItem1", - "id": "id12345", - "name": "RNI", - "version": "version1" - }, - "version": "ServiceVersion1", - "state": "ACTIVE", - "transportInfo": { - "id": "TransId12345", - "name": "REST", - "description": "REST API", - "type": "REST_HTTP", - "protocol": "HTTP", - "version": "2.0", - "endpoint": { - "addresses": [ - { - "host": "192.0.2.0", - "port": 8080 - } - ] - }, - "security": { - "oAuth2Info": { - "grantTypes": [ - "OAUTH2_CLIENT_CREDENTIALS" - ], - "tokenEndpoint": "/meMp1/security/TokenEndPoint" - } - } - }, - "serializer": "JSON" - } - ] - }, - "TrafficRule": { - "value": { - "trafficRuleId": "TrafficRule123", - "serName": "ExampleService", - "filterType": "FLOW", - "priority": 1, - "trafficFilter": [ - { - "srcAddress": [ - "192.168.2.0/24", - "192.168.3.0/24" - ], - "dstAddress": [ - "192.127.4.100/32" - ], - "dstPort": [ - "80" - ] - } - ], - "action": "FORWARD_DECAPSULATED", - "dstInterface": { - "interfaceType": "IP", - "dstIpAddress": "20.1.1.1" - }, - "state": "ACTIVE" - } - }, - "TrafficRules": { - "value": [ - { - "trafficRuleId": "TrafficRule123", - "serName": "ExampleService", - "filterType": "FLOW", - "priority": 1, - "trafficFilter": [ - { - "srcAddress": [ - "192.168.2.0/24", - "192.168.3.0/24" - ], - "dstAddress": [ - "192.127.4.100/32" - ], - "dstPort": [ - "80" - ] - } - ], - "action": "FORWARD_DECAPSULATED", - "dstInterface": { - "interfaceType": "IP", - "dstIpAddress": "20.1.1.1" - }, - "state": "ACTIVE" - } - ] - } - } - } -} \ No newline at end of file diff --git a/ttcn/LibMec/LocationAPI/json/LocationAPI.json b/ttcn/LibMec/LocationAPI/json/LocationAPI.json deleted file mode 100644 index 5a483d7..0000000 --- a/ttcn/LibMec/LocationAPI/json/LocationAPI.json +++ /dev/null @@ -1,4344 +0,0 @@ -{ - "openapi": "3.0.0", - "info": { - "contact": { - "url": "https://forge.etsi.org/rep/mec/gs013-location-api" - }, - "title": "ETSI GS MEC 013 - Location API", - "version": "2.1.1", - "description": "The ETSI MEC ISG MEC013 Location API described using OpenAPI.", - "license": { - "name": "BSD-3-Clause", - "url": "https://forge.etsi.org/legal-matters" - } - }, - "externalDocs": { - "description": "ETSI MEC013 V2.1.1 Location API", - "url": "http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/02.01.01_60/gs_mec013v020101p.pdf" - }, - "servers": [ - { - "url": "https://localhost/location/v2" - } - ], - "tags": [ - { - "name": "location" - } - ], - "paths": { - "/queries/distance": { - "get": { - "tags": [ - "location" - ], - "summary": "UE Distance Lookup of a specific UE", - "description": "UE Distance Lookup between terminals or a terminal and a location", - "operationId": "distanceGET", - "parameters": [ - { - "$ref": "#/components/parameters/Query.Requester" - }, - { - "$ref": "#/components/parameters/Query.AddressMandatory" - }, - { - "$ref": "#/components/parameters/Query.Latitude" - }, - { - "$ref": "#/components/parameters/Query.Longitude" - } - ], - "responses": { - "200": { - "description": "Successful response to a distance request", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "terminalDistance": { - "$ref": "#/components/schemas/TerminalDistance" - } - } - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "406": { - "$ref": "#/components/responses/406" - }, - "429": { - "$ref": "#/components/responses/429" - } - }, - "x-swagger-router-controller": "queries" - } - }, - "/queries/users": { - "get": { - "tags": [ - "location" - ], - "summary": "UE Location Lookup of a specific UE or group of UEs", - "description": "UE Location Lookup of a specific UE or group of UEs", - "operationId": "usersGET", - "parameters": [ - { - "$ref": "#/components/parameters/Query.ZoneId" - }, - { - "$ref": "#/components/parameters/Query.AccessPointId" - }, - { - "$ref": "#/components/parameters/Query.Address" - } - ], - "responses": { - "200": { - "description": "Successful response to users request", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "userList": { - "$ref": "#/components/schemas/UserList" - } - } - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "406": { - "$ref": "#/components/responses/406" - }, - "429": { - "$ref": "#/components/responses/429" - } - }, - "x-swagger-router-controller": "queries" - } - }, - "/queries/zones": { - "get": { - "tags": [ - "location" - ], - "summary": "Zones information Lookup", - "description": "Used to get a list of identifiers for zones authorized for use by the application.", - "operationId": "zonesGET", - "responses": { - "200": { - "description": "Successful response to zones request", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "zoneList": { - "$ref": "#/components/schemas/ZoneList" - } - } - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "406": { - "$ref": "#/components/responses/406" - }, - "429": { - "$ref": "#/components/responses/429" - } - }, - "x-swagger-router-controller": "queries" - } - }, - "/queries/zones/{zoneId}": { - "get": { - "tags": [ - "location" - ], - "summary": "Zones information Lookup", - "description": "Used to get the information for an authorized zone for use by the application.", - "operationId": "zonesGetById", - "parameters": [ - { - "$ref": "#/components/parameters/Path.ZoneId" - } - ], - "responses": { - "200": { - "description": "Successful response to an access point Id request", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "zoneInfo": { - "$ref": "#/components/schemas/ZoneInfo" - } - } - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "406": { - "$ref": "#/components/responses/406" - }, - "429": { - "$ref": "#/components/responses/429" - } - }, - "x-swagger-router-controller": "queries" - } - }, - "/queries/zones/{zoneId}/accessPoints": { - "get": { - "tags": [ - "location" - ], - "summary": "Radio Node Location Lookup", - "description": "Radio Node Location Lookup to retrieve a list of radio nodes associated to a zone.", - "operationId": "apGET", - "parameters": [ - { - "$ref": "#/components/parameters/Path.ZoneId" - }, - { - "$ref": "#/components/parameters/Query.InterestRealm" - } - ], - "responses": { - "200": { - "description": "Successful response to an access point Id request", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "accessPointList": { - "$ref": "#/components/schemas/AccessPointList" - } - } - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "406": { - "$ref": "#/components/responses/406" - }, - "429": { - "$ref": "#/components/responses/429" - } - }, - "x-swagger-router-controller": "queries" - } - }, - "/queries/zones/{zoneId}/accessPoints/{accessPointId}": { - "get": { - "tags": [ - "location" - ], - "summary": "Radio Node Location Lookup", - "description": "Radio Node Location Lookup to retrieve a radio node associated to a zone.", - "operationId": "apByIdGET", - "parameters": [ - { - "$ref": "#/components/parameters/Path.ZoneId" - }, - { - "$ref": "#/components/parameters/Path.AccessPointId" - } - ], - "responses": { - "200": { - "description": "Successful response to an access point Id request", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "accessPointInfo": { - "$ref": "#/components/schemas/AccessPointInfo" - } - } - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "406": { - "$ref": "#/components/responses/406" - }, - "429": { - "$ref": "#/components/responses/429" - } - }, - "x-swagger-router-controller": "queries" - } - }, - "/subscriptions/area/circle": { - "get": { - "tags": [ - "location" - ], - "summary": "Retrieves all active subscriptions to area change notifications", - "description": "This operation is used for retrieving all active subscriptions to area change notifications.", - "operationId": "areaCircleSubListGET", - "responses": { - "200": { - "description": "Response to retrieve area subscriptions", - "content": { - "application/json": { - "schema": { - "type": "object", - "required": [ - "notificationSubscriptionList" - ], - "properties": { - "notificationSubscriptionList": { - "$ref": "#/components/schemas/NotificationSubscriptionList" - } - }, - "example": { - "notificationSubscriptionList": { - "circleNotificationSubscription": [ - { - "clientCorrelator": "0123", - "callbackReference": { - "callbackData": "1234", - "notifyURL": "http://clientApp.example.com/location_notifications/123456" - }, - "address": "acr:10.0.0.1", - "checkImmediate": true, - "enteringLeavingCriteria": "Entering", - "frequency": 10, - "latitude": -80.88, - "longitude": 41.277, - "radius": 500, - "trackingAccuracy": 10, - "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/area/circle/subscription123" - } - ], - "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/area/circle" - } - } - } - } - } - } - } - }, - "post": { - "tags": [ - "location" - ], - "summary": "Creates a subscription for area change notification", - "description": "Creates a subscription to the Location Service for an area change notification.", - "operationId": "areaCircleSubPOST", - "requestBody": { - "description": "Subscription to be created", - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "circleNotificationSubscription": { - "$ref": "#/components/schemas/CircleNotificationSubscription" - } - }, - "example": { - "circleNotificationSubscription": { - "clientCorrelator": "0123", - "callbackReference": { - "callbackData": "1234", - "notifyURL": "http://clientApp.example.com/location_notifications/123456" - }, - "address": "acr:10.0.0.1", - "checkImmediate": true, - "enteringLeavingCriteria": "Entering", - "frequency": 10, - "latitude": -80.88, - "longitude": 41.277, - "radius": 500, - "trackingAccuracy": 10 - } - } - } - } - } - }, - "responses": { - "201": { - "description": "Successful subscription", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "circleNotificationSubscription": { - "$ref": "#/components/schemas/CircleNotificationSubscription" - } - }, - "example": { - "circleNotificationSubscription": { - "clientCorrelator": "0123", - "callbackReference": { - "callbackData": "1234", - "notifyURL": "http://clientApp.example.com/location_notifications/123456" - }, - "address": "acr:10.0.0.1", - "checkImmediate": true, - "enteringLeavingCriteria": "Entering", - "frequency": 10, - "latitude": -80.88, - "longitude": 41.277, - "radius": 500, - "trackingAccuracy": 10, - "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/area/circle/subscription123" - } - } - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "406": { - "$ref": "#/components/responses/406" - }, - "429": { - "$ref": "#/components/responses/429" - } - }, - "callbacks": { - "notification": { - "{$request.body#/circleNotificationSubscription.callbackReference.notifyURL}": { - "post": { - "summary": "Callback POST used to send a notification", - "description": "Notification from Location service, content based on subscription type", - "operationId": "circleNotificationPOST", - "requestBody": { - "description": "Subscription notification", - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "subscriptionNotification": { - "$ref": "#/components/schemas/SubscriptionNotification" - } - }, - "example": { - "subscriptionNotification": { - "enteringLeavingCriteria": "Entering", - "isFinalNotification": "false,", - "link": { - "rel": "CircleNotificationSubscription", - "href": "http://meAppServer.example.com/location/v2/subscriptions/area/circle/sub123" - }, - "terminalLocation": { - "address": "acr:10.0.0.1", - "currentLocation": { - "accuracy": 100, - "altitude": 1001, - "latitude": -80.86302, - "longitude": 41.277306, - "timestamp": { - "seconds": 1483231138, - "nanoSeconds\"": 0 - } - }, - "locationRetrievalStatus": "Retrieved" - } - } - } - } - } - } - }, - "responses": { - "204": { - "$ref": "#/components/responses/204" - } - } - } - } - } - }, - "x-swagger-router-controller": "subscriptions" - } - }, - "/subscriptions/area/circle/{subscriptionId}": { - "get": { - "tags": [ - "location" - ], - "summary": "Retrieve subscription information", - "description": "Get subscription information.", - "operationId": "areaCircleSubGET", - "parameters": [ - { - "$ref": "#/components/parameters/Path.SubscrId" - } - ], - "responses": { - "200": { - "description": "Subscription information regarding subscription notifications", - "content": { - "application/json": { - "schema": { - "type": "object", - "required": [ - "circleNotificationSubscription" - ], - "properties": { - "circleNotificationSubscription": { - "$ref": "#/components/schemas/CircleNotificationSubscription" - } - }, - "example": { - "circleNotificationSubscription": { - "clientCorrelator": "0123", - "callbackReference": { - "callbackData": "1234", - "notifyURL": "http://clientApp.example.com/location_notifications/123456" - }, - "address": "acr:10.0.0.1", - "checkImmediate": true, - "enteringLeavingCriteria": "Entering", - "frequency": 10, - "latitude": -80.88, - "longitude": 41.277, - "radius": 500, - "trackingAccuracy": 10, - "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/area/circle/subscription123" - } - } - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "406": { - "$ref": "#/components/responses/406" - }, - "429": { - "$ref": "#/components/responses/429" - } - }, - "x-swagger-router-controller": "subscriptions" - }, - "put": { - "tags": [ - "location" - ], - "summary": "Updates a subscription information", - "description": "Updates a subscription.", - "operationId": "areaCircleSubPUT", - "requestBody": { - "description": "Subscription to be modified", - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "circleNotificationSubscription": { - "$ref": "#/components/schemas/CircleNotificationSubscription" - } - }, - "example": { - "circleNotificationSubscription": { - "clientCorrelator": "0123", - "callbackReference": { - "callbackData": "1234", - "notifyURL": "http://clientApp.example.com/location_notifications/123456" - }, - "address": "acr:10.0.0.1", - "checkImmediate": true, - "enteringLeavingCriteria": "Entering", - "frequency": 10, - "latitude": -80.88, - "longitude": 41.277, - "radius": 500, - "trackingAccuracy": 10, - "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/area/circle/subscription123" - } - } - } - } - } - }, - "parameters": [ - { - "$ref": "#/components/parameters/Path.SubscrId" - } - ], - "responses": { - "200": { - "description": "Successful subscription to response to subscription notifications", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "circleNotificationSubscription": { - "$ref": "#/components/schemas/CircleNotificationSubscription" - } - }, - "example": { - "circleNotificationSubscription": { - "clientCorrelator": "0123", - "callbackReference": { - "callbackData": "1234", - "notifyURL": "http://clientApp.example.com/location_notifications/123456" - }, - "address": "acr:10.0.0.1", - "checkImmediate": true, - "enteringLeavingCriteria": "Entering", - "frequency": 10, - "latitude": -80.88, - "longitude": 41.277, - "radius": 500, - "trackingAccuracy": 10, - "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/area/circle/subscription123" - } - } - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "406": { - "$ref": "#/components/responses/406" - }, - "412": { - "$ref": "#/components/responses/412" - }, - "422": { - "$ref": "#/components/responses/422" - }, - "429": { - "$ref": "#/components/responses/429" - } - }, - "x-swagger-router-controller": "subscriptions" - }, - "delete": { - "tags": [ - "location" - ], - "summary": "Cancel a subscription", - "description": "Method to delete a subscription.", - "operationId": "areaCircleSubDELETE", - "parameters": [ - { - "$ref": "#/components/parameters/Path.SubscrId" - } - ], - "responses": { - "204": { - "$ref": "#/components/responses/204" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "429": { - "$ref": "#/components/responses/429" - } - }, - "x-swagger-router-controller": "subscriptions" - } - }, - "/subscriptions/distance": { - "get": { - "tags": [ - "location" - ], - "summary": "Retrieves all active subscriptions to distance change notifications", - "description": "This operation is used for retrieving all active subscriptions to a distance change notifications.", - "operationId": "distanceSubListGET", - "responses": { - "200": { - "description": "Response to retrieve area subscriptions", - "content": { - "application/json": { - "schema": { - "type": "object", - "required": [ - "notificationSubscriptionList" - ], - "properties": { - "notificationSubscriptionList": { - "$ref": "#/components/schemas/NotificationSubscriptionList" - } - }, - "example": { - "notificationSubscriptionList": { - "distanceNotificationSubscription": [ - { - "clientCorrelator": "0123", - "callbackReference": { - "callbackData": "1234", - "notifyURL": "http://clientApp.example.com/location_notifications/123456" - }, - "monitoredAddress": [ - "acr:10.0.0.1", - "acr:10.0.0.2" - ], - "checkImmediate": true, - "criteria": "AllWithinDistance", - "distance": 100, - "frequency": 10, - "referenceAddress": "acr:10.0.0.3", - "trackingAccuracy": 10, - "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/distance/sub123" - } - ], - "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/distance" - } - } - } - } - } - } - } - }, - "post": { - "tags": [ - "location" - ], - "summary": "Creates a subscription for distance change notification", - "description": "Creates a subscription to the Location Service for a distance change notification.", - "operationId": "distanceSubPOST", - "requestBody": { - "description": "Subscription to be created", - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "distanceNotificationSubscription": { - "$ref": "#/components/schemas/DistanceNotificationSubscription" - } - }, - "example": { - "distanceNotificationSubscription": { - "clientCorrelator": "0123", - "callbackReference": { - "callbackData": "1234", - "notifyURL": "http://clientApp.example.com/location_notifications/123456" - }, - "monitoredAddress": [ - "acr:10.0.0.1", - "acr:10.0.0.2" - ], - "checkImmediate": true, - "criteria": "AllWithinDistance", - "distance": 100, - "frequency": 10, - "referenceAddress": "acr:10.0.0.3", - "trackingAccuracy": 10 - } - } - } - } - } - }, - "responses": { - "201": { - "description": "Successful subscription", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "distanceNotificationSubscription": { - "$ref": "#/components/schemas/DistanceNotificationSubscription" - } - }, - "example": { - "distanceNotificationSubscription": { - "clientCorrelator": "0123", - "callbackReference": { - "callbackData": "1234", - "notifyURL": "http://clientApp.example.com/location_notifications/123456" - }, - "monitoredAddress": [ - "acr:10.0.0.1", - "acr:10.0.0.2" - ], - "checkImmediate": true, - "criteria": "AllWithinDistance", - "distance": 100, - "frequency": 10, - "referenceAddress": "acr:10.0.0.3", - "trackingAccuracy": 10, - "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/distance/subscription123" - } - } - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "406": { - "$ref": "#/components/responses/406" - }, - "429": { - "$ref": "#/components/responses/429" - } - }, - "callbacks": { - "notification": { - "{$request.body#/distanceNotificationSubscription.callbackReference.notifyURL}": { - "post": { - "summary": "Callback POST used to send a notification", - "description": "Notification from Location service, content based on subscription type", - "operationId": "distanceNotificationPOST", - "requestBody": { - "description": "Subscription notification", - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "subscriptionNotification": { - "$ref": "#/components/schemas/SubscriptionNotification" - } - }, - "example": { - "subscriptionNotification": { - "distanceCriteria": "AllWithinDistance", - "isFinalNotification": "false,", - "link": { - "rel": "DistanceNotificationSubscription", - "href": "http://meAppServer.example.com/location/v2/subscriptions/distance/sub123" - }, - "terminalLocation": [ - { - "address": "acr:10.0.0.1", - "currentLocation": { - "accuracy": 100, - "altitude": 1001, - "latitude": -80.86302, - "longitude": 41.277306, - "timestamp": { - "seconds": 1483231138, - "nanoSeconds\"": 0 - } - }, - "locationRetrievalStatus": "Retrieved" - }, - { - "address": "acr:10.0.0.2", - "currentLocation": { - "accuracy": 100, - "altitude": 1001, - "latitude": -80.86301, - "longitude": 41.277306, - "timestamp": { - "seconds": 1483231138, - "nanoSeconds\"": 0 - } - }, - "locationRetrievalStatus": "Retrieved" - } - ] - } - } - } - } - } - }, - "responses": { - "204": { - "$ref": "#/components/responses/204" - } - } - } - } - } - }, - "x-swagger-router-controller": "subscriptions" - } - }, - "/subscriptions/distance/{subscriptionId}": { - "get": { - "tags": [ - "location" - ], - "summary": "Retrieve subscription information", - "description": "Get subscription information.", - "operationId": "distanceSubGET", - "parameters": [ - { - "$ref": "#/components/parameters/Path.SubscrId" - } - ], - "responses": { - "200": { - "description": "Subscription information regarding subscription notifications", - "content": { - "application/json": { - "schema": { - "type": "object", - "required": [ - "distanceNotificationSubscription" - ], - "properties": { - "distanceNotificationSubscription": { - "$ref": "#/components/schemas/DistanceNotificationSubscription" - } - }, - "example": { - "distanceNotificationSubscription": { - "clientCorrelator": "0123", - "callbackReference": { - "callbackData": "1234", - "notifyURL": "http://clientApp.example.com/location_notifications/123456" - }, - "monitoredAddress": [ - "acr:10.0.0.1", - "acr:10.0.0.2" - ], - "checkImmediate": true, - "criteria": "AllWithinDistance", - "distance": 100, - "frequency": 10, - "referenceAddress": "acr:10.0.0.3", - "trackingAccuracy": 10, - "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/distance/subscription123" - } - } - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "406": { - "$ref": "#/components/responses/406" - }, - "429": { - "$ref": "#/components/responses/429" - } - }, - "x-swagger-router-controller": "subscriptions" - }, - "put": { - "tags": [ - "location" - ], - "summary": "Updates a subscription information", - "description": "Updates a subscription.", - "operationId": "distanceSubPUT", - "requestBody": { - "description": "Subscription to be modified", - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "distanceNotificationSubscription": { - "$ref": "#/components/schemas/DistanceNotificationSubscription" - } - }, - "example": { - "distanceNotificationSubscription": { - "clientCorrelator": "0123", - "callbackReference": { - "callbackData": "1234", - "notifyURL": "http://clientApp.example.com/location_notifications/123456" - }, - "monitoredAddress": [ - "acr:10.0.0.1", - "acr:10.0.0.2" - ], - "checkImmediate": true, - "criteria": "AllWithinDistance", - "distance": 100, - "frequency": 10, - "referenceAddress": "acr:10.0.0.3", - "trackingAccuracy": 10, - "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/distance/subscription123" - } - } - } - } - } - }, - "parameters": [ - { - "$ref": "#/components/parameters/Path.SubscrId" - } - ], - "responses": { - "200": { - "description": "Successful subscription to response to subscription notifications", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "distanceNotificationSubscription": { - "$ref": "#/components/schemas/DistanceNotificationSubscription" - } - }, - "example": { - "distanceNotificationSubscription": { - "clientCorrelator": "0123", - "callbackReference": { - "callbackData": "1234", - "notifyURL": "http://clientApp.example.com/location_notifications/123456" - }, - "monitoredAddress": [ - "acr:10.0.0.1", - "acr:10.0.0.2" - ], - "checkImmediate": true, - "criteria": "AllWithinDistance", - "distance": 100, - "frequency": 10, - "referenceAddress": "acr:10.0.0.3", - "trackingAccuracy": 10, - "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/distance/subscription123" - } - } - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "406": { - "$ref": "#/components/responses/406" - }, - "412": { - "$ref": "#/components/responses/412" - }, - "422": { - "$ref": "#/components/responses/422" - }, - "429": { - "$ref": "#/components/responses/429" - } - }, - "x-swagger-router-controller": "subscriptions" - }, - "delete": { - "tags": [ - "location" - ], - "summary": "Cancel a subscription", - "description": "Method to delete a subscription.", - "operationId": "distanceSubDELETE", - "parameters": [ - { - "$ref": "#/components/parameters/Path.SubscrId" - } - ], - "responses": { - "204": { - "$ref": "#/components/responses/204" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "429": { - "$ref": "#/components/responses/429" - } - }, - "x-swagger-router-controller": "subscriptions" - } - }, - "/subscriptions/periodic": { - "get": { - "tags": [ - "location" - ], - "summary": "Retrieves all active subscriptions to periodic notifications", - "description": "This operation is used for retrieving all active subscriptions to periodic notifications.", - "operationId": "periodicSubListGET", - "responses": { - "200": { - "description": "Response to retrieve area subscriptions", - "content": { - "application/json": { - "schema": { - "type": "object", - "required": [ - "notificationSubscriptionList" - ], - "properties": { - "notificationSubscriptionList": { - "$ref": "#/components/schemas/NotificationSubscriptionList" - } - }, - "example": { - "notificationSubscriptionList": { - "periodicNotificationSubscription": [ - { - "clientCorrelator": "0123", - "callbackReference": { - "callbackData": "1234", - "notifyURL": "http://clientApp.example.com/location_notifications/123456" - }, - "address": "acr:10.0.0.1", - "frequency": 10, - "requestedAccuracy": 10, - "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/periodic/subscription123" - } - ], - "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/periodic" - } - } - } - } - } - } - } - }, - "post": { - "tags": [ - "location" - ], - "summary": "Creates a subscription for periodic notification", - "description": "Creates a subscription to the Location Service for a periodic notification.", - "operationId": "periodicSubPOST", - "requestBody": { - "description": "Subscription to be created", - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "periodicNotificationSubscription": { - "$ref": "#/components/schemas/PeriodicNotificationSubscription" - } - }, - "example": { - "periodicNotificationSubscription": { - "clientCorrelator": "0123", - "callbackReference": { - "callbackData": "1234", - "notifyURL": "http://clientApp.example.com/location_notifications/123456" - }, - "address": "acr:10.0.0.1", - "frequency": 10, - "requestedAccuracy": 10 - } - } - } - } - } - }, - "responses": { - "201": { - "description": "Successful subscription", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "periodicNotificationSubscription": { - "$ref": "#/components/schemas/PeriodicNotificationSubscription" - } - }, - "example": { - "periodicNotificationSubscription": { - "clientCorrelator": "0123", - "callbackReference": { - "callbackData": "1234", - "notifyURL": "http://clientApp.example.com/location_notifications/123456" - }, - "address": "acr:10.0.0.1", - "frequency": 10, - "requestedAccuracy": 10, - "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/periodic/subscription123" - } - } - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "406": { - "$ref": "#/components/responses/406" - }, - "429": { - "$ref": "#/components/responses/429" - } - }, - "callbacks": { - "notification": { - "{$request.body#/periodicNotificationSubscription.callbackReference.notifyURL}": { - "post": { - "summary": "Callback POST used to send a notification", - "description": "Notification from Location service, content based on subscription type", - "operationId": "periodicNotificationPOST", - "requestBody": { - "description": "Subscription notification", - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "subscriptionNotification": { - "$ref": "#/components/schemas/SubscriptionNotification" - } - }, - "example": { - "subscriptionNotification": { - "isFinalNotification": "false,", - "link": { - "rel": "PeriodicNotificationSubscription", - "href": "http://meAppServer.example.com/location/v2/subscriptions/periodic/sub123" - }, - "terminalLocation": { - "address": "acr:10.0.0.1", - "currentLocation": { - "accuracy": 100, - "altitude": 1001, - "latitude": -80.86302, - "longitude": 41.277306, - "timestamp": { - "seconds": 1483231138, - "nanoSeconds\"": 0 - } - }, - "locationRetrievalStatus": "Retrieved" - } - } - } - } - } - } - }, - "responses": { - "204": { - "$ref": "#/components/responses/204" - } - } - } - } - } - }, - "x-swagger-router-controller": "subscriptions" - } - }, - "/subscriptions/periodic/{subscriptionId}": { - "get": { - "tags": [ - "location" - ], - "summary": "Retrieve subscription information", - "description": "Get subscription information.", - "operationId": "periodicSubGET", - "parameters": [ - { - "$ref": "#/components/parameters/Path.SubscrId" - } - ], - "responses": { - "200": { - "description": "Subscription information regarding subscription notifications", - "content": { - "application/json": { - "schema": { - "type": "object", - "required": [ - "periodicNotificationSubscription" - ], - "properties": { - "periodicNotificationSubscription": { - "$ref": "#/components/schemas/PeriodicNotificationSubscription" - } - }, - "example": { - "periodicNotificationSubscription": { - "clientCorrelator": "0123", - "callbackReference": { - "callbackData": "1234", - "notifyURL": "http://clientApp.example.com/location_notifications/123456" - }, - "address": "acr:10.0.0.1", - "frequency": 10, - "requestedAccuracy": 10, - "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/periodic/subscription123" - } - } - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "406": { - "$ref": "#/components/responses/406" - }, - "429": { - "$ref": "#/components/responses/429" - } - }, - "x-swagger-router-controller": "subscriptions" - }, - "put": { - "tags": [ - "location" - ], - "summary": "Updates a subscription information", - "description": "Updates a subscription.", - "operationId": "periodicSubPUT", - "requestBody": { - "description": "Subscription to be modified", - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "periodicNotificationSubscription": { - "$ref": "#/components/schemas/PeriodicNotificationSubscription" - } - }, - "example": { - "periodicNotificationSubscription": { - "clientCorrelator": "0123", - "callbackReference": { - "callbackData": "1234", - "notifyURL": "http://clientApp.example.com/location_notifications/123456" - }, - "address": "acr:10.0.0.1", - "frequency": 10, - "requestedAccuracy": 10, - "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/periodic/subscription123" - } - } - } - } - } - }, - "parameters": [ - { - "$ref": "#/components/parameters/Path.SubscrId" - } - ], - "responses": { - "200": { - "description": "Successful subscription to response to subscription notifications", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "periodicNotificationSubscription": { - "$ref": "#/components/schemas/PeriodicNotificationSubscription" - } - }, - "example": { - "periodicNotificationSubscription": { - "clientCorrelator": "0123", - "callbackReference": { - "callbackData": "1234", - "notifyURL": "http://clientApp.example.com/location_notifications/123456" - }, - "address": "acr:10.0.0.1", - "frequency": 10, - "requestedAccuracy": 10, - "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/periodic/subscription123" - } - } - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "406": { - "$ref": "#/components/responses/406" - }, - "412": { - "$ref": "#/components/responses/412" - }, - "422": { - "$ref": "#/components/responses/422" - }, - "429": { - "$ref": "#/components/responses/429" - } - }, - "x-swagger-router-controller": "subscriptions" - }, - "delete": { - "tags": [ - "location" - ], - "summary": "Cancel a subscription", - "description": "Method to delete a subscription.", - "operationId": "periodicSubDELETE", - "parameters": [ - { - "$ref": "#/components/parameters/Path.SubscrId" - } - ], - "responses": { - "204": { - "$ref": "#/components/responses/204" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "429": { - "$ref": "#/components/responses/429" - } - }, - "x-swagger-router-controller": "subscriptions" - } - }, - "/subscriptions/userTracking": { - "get": { - "tags": [ - "location" - ], - "summary": "Retrieves all active subscriptions to user tracking notifications", - "description": "This operation is used for retrieving all active subscriptions to user tracking notifications.", - "operationId": "userTrackingSubListGET", - "responses": { - "200": { - "description": "Response to retrieve user tracking subscriptions", - "content": { - "application/json": { - "schema": { - "type": "object", - "required": [ - "notificationSubscriptionList" - ], - "properties": { - "notificationSubscriptionList": { - "$ref": "#/components/schemas/NotificationSubscriptionList" - } - }, - "example": { - "notificationSubscriptionList": { - "userTrackingSubscription": [ - { - "clientCorrelator": "0123", - "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/userTracking/subscription123", - "callbackReference": { - "notifyURL": "http://clientApp.example.com/location_notifications/123456" - }, - "address": "acr:192.0.2.1", - "userEventCriteria": [ - "Transferring" - ] - }, - { - "clientCorrelator": "0124", - "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/userTracking/subscription124", - "callbackReference": { - "notifyURL": "http://clientApp.example.com/location_notifications/123456" - }, - "address": "acr:192.0.2.2", - "userEventCriteria": [ - "Transferring" - ] - } - ], - "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/userTracking" - } - } - } - } - } - } - } - }, - "post": { - "tags": [ - "location" - ], - "summary": "Creates a subscription for user tracking notification", - "description": "Creates a subscription to the Location Service for user tracking change notification.", - "operationId": "userTrackingSubPOST", - "requestBody": { - "description": "Subscription to be created", - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "userTrackingSubscription": { - "$ref": "#/components/schemas/UserTrackingSubscription" - } - }, - "example": { - "userTrackingSubscription": { - "clientCorrelator": "0123", - "callbackReference": { - "notifyURL": "http://my.callback.com/location_notifications/some-id" - }, - "address": "acr:10.0.0.1", - "userEventCriteria": [ - "Transferring" - ] - } - } - } - } - } - }, - "responses": { - "201": { - "description": "Successful subscription", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "userTrackingSubscription": { - "$ref": "#/components/schemas/UserTrackingSubscription" - } - }, - "example": { - "userTrackingSubscription": { - "clientCorrelator": "0123", - "callbackReference": { - "notifyURL": "http://my.callback.com/location_notifications/some-id" - }, - "address": "acr:10.0.0.1", - "userEventCriteria": [ - "Transferring" - ], - "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/userTracking/sub123" - } - } - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "406": { - "$ref": "#/components/responses/406" - }, - "429": { - "$ref": "#/components/responses/429" - } - }, - "callbacks": { - "notification": { - "{$request.body#/userTrackingSubscription.callbackReference.notifyURL}": { - "post": { - "summary": "Callback POST used to send a notification", - "description": "Notification from Location service, content based on subscription type", - "operationId": "userTrackingNotificationPOST", - "requestBody": { - "description": "Subscription notification", - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "zonalPresenceNotification": { - "$ref": "#/components/schemas/ZonalPresenceNotification" - } - }, - "example": { - "zonalPresenceNotification": { - "clientCorrelator": "0123", - "zoneId": "zone01", - "address": "acr:10.0.0.1", - "userEventType": "Transferring", - "currentAccessPointId": "ap2", - "previousAccessPointId": "ap1", - "timestamp": { - "seconds": 1483231138, - "nanoseconds": 0 - }, - "link": { - "rel": "UserTrackingSubscription", - "href": "http://meAppServer.example.com/location/v2/subscriptions/userTracking/sub123" - } - } - } - } - } - } - }, - "responses": { - "204": { - "$ref": "#/components/responses/204" - } - } - } - } - } - }, - "x-swagger-router-controller": "subscriptions" - } - }, - "/subscriptions/userTracking/{subscriptionId}": { - "get": { - "tags": [ - "location" - ], - "summary": "Retrieve subscription information", - "description": "Get subscription information.", - "operationId": "userTrackingSubGET", - "parameters": [ - { - "$ref": "#/components/parameters/Path.SubscrId" - } - ], - "responses": { - "200": { - "description": "Subscription information regarding subscription notifications", - "content": { - "application/json": { - "schema": { - "type": "object", - "required": [ - "userTrackingSubscription" - ], - "properties": { - "userTrackingSubscription": { - "$ref": "#/components/schemas/UserTrackingSubscription" - } - }, - "example": { - "userTrackingSubscription": { - "clientCorrelator": "0123", - "callbackReference": { - "notifyURL": "http://my.callback.com/location_notifications/some-id" - }, - "address": "acr:10.0.0.1", - "userEventCriteria": [ - "Transferring" - ], - "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/userTracking/sub123" - } - } - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "406": { - "$ref": "#/components/responses/406" - }, - "429": { - "$ref": "#/components/responses/429" - } - }, - "x-swagger-router-controller": "subscriptions" - }, - "put": { - "tags": [ - "location" - ], - "summary": "Updates a subscription information", - "description": "Updates a subscription.", - "operationId": "userTrackingSubPUT", - "requestBody": { - "description": "Subscription to be modified", - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "userTrackingSubscription": { - "$ref": "#/components/schemas/UserTrackingSubscription" - } - }, - "example": { - "userTrackingSubscription": { - "clientCorrelator": "0123", - "callbackReference": { - "notifyURL": "http://my.callback.com/location_notifications/some-id" - }, - "address": "acr:10.0.0.1", - "userEventCriteria": [ - "Transferring" - ], - "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/userTracking/sub123" - } - } - } - } - } - }, - "parameters": [ - { - "$ref": "#/components/parameters/Path.SubscrId" - } - ], - "responses": { - "200": { - "description": "Successful subscription to response to subscription notifications", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "userTrackingSubscription": { - "$ref": "#/components/schemas/UserTrackingSubscription" - } - } - }, - "example": { - "userTrackingSubscription": { - "clientCorrelator": "0123", - "callbackReference": { - "notifyURL": "http://my.callback.com/location_notifications/some-id" - }, - "address": "acr:10.0.0.1", - "userEventCriteria": [ - "Transferring" - ], - "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/userTracking/sub123" - } - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "406": { - "$ref": "#/components/responses/406" - }, - "412": { - "$ref": "#/components/responses/412" - }, - "422": { - "$ref": "#/components/responses/422" - }, - "429": { - "$ref": "#/components/responses/429" - } - }, - "x-swagger-router-controller": "subscriptions" - }, - "delete": { - "tags": [ - "location" - ], - "summary": "Cancel a subscription", - "description": "Method to delete a subscription.", - "operationId": "userTrackingSubDELETE", - "parameters": [ - { - "$ref": "#/components/parameters/Path.SubscrId" - } - ], - "responses": { - "204": { - "$ref": "#/components/responses/204" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "429": { - "$ref": "#/components/responses/429" - } - }, - "x-swagger-router-controller": "subscriptions" - } - }, - "/subscriptions/zonalTraffic": { - "get": { - "tags": [ - "location" - ], - "summary": "Retrieves all active subscriptions to zonal traffic notifications", - "description": "This operation is used for retrieving all active subscriptions to zonal traffic change notifications.", - "operationId": "zonalTrafficSubListGET", - "responses": { - "200": { - "description": "Response to retrieve zonal traffic subscriptions", - "content": { - "application/json": { - "schema": { - "type": "object", - "required": [ - "notificationSubscriptionList" - ], - "properties": { - "notificationSubscriptionList": { - "$ref": "#/components/schemas/NotificationSubscriptionList" - } - }, - "example": { - "notificationSubscriptionList": { - "zonalTrafficSubscription": [ - { - "clientCorrelator": "0123", - "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/zonalTraffic/subscription123", - "callbackReference": { - "notifyURL": "http://clientApp.example.com/location_notifications/123456" - }, - "zoneId": "zone01", - "userEventCriteria": [ - "Transferring" - ] - }, - { - "clientCorrelator": "0124", - "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/zonalTraffic/subscription124", - "callbackReference": { - "notifyURL": "http://clientApp.example.com/location_notifications/123456" - }, - "zoneId": "zone02", - "userEventCriteria": [ - "Transferring" - ] - } - ], - "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/zonalTraffic" - } - } - } - } - } - } - } - }, - "post": { - "tags": [ - "location" - ], - "summary": "Creates a subscription for zonal traffic notification", - "description": "Creates a subscription to the Location Service for zonal traffic change notification.", - "operationId": "zonalTrafficSubPOST", - "requestBody": { - "description": "Subscription to be created", - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "zonalTrafficSubscription": { - "$ref": "#/components/schemas/ZonalTrafficSubscription" - } - }, - "example": { - "zonalTrafficSubscription": { - "clientCorrelator": "0123", - "callbackReference": { - "notifyURL": "http://my.callback.com/location_notifications/some-id" - }, - "zoneId": "zone01", - "userEventCriteria": [ - "Transferring" - ] - } - } - } - } - } - }, - "responses": { - "201": { - "description": "Successful subscription", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "zonalTrafficSubscription": { - "$ref": "#/components/schemas/ZonalTrafficSubscription" - } - }, - "example": { - "zonalTrafficSubscription": { - "clientCorrelator": "0123", - "callbackReference": { - "notifyURL": "http://my.callback.com/location_notifications/some-id" - }, - "zoneId": "zone01", - "userEventCriteria": [ - "Transferring" - ], - "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/zonalTraffic/sub123" - } - } - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "406": { - "$ref": "#/components/responses/406" - }, - "429": { - "$ref": "#/components/responses/429" - } - }, - "callbacks": { - "notification": { - "{$request.body#/zonalTrafficSubscription.callbackReference.notifyURL}": { - "post": { - "summary": "Callback POST used to send a notification", - "description": "Notification from Location service, content based on subscription type", - "operationId": "zonalTrafficNotificationPOST", - "requestBody": { - "description": "Subscription notification", - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "zonalPresenceNotification": { - "$ref": "#/components/schemas/ZonalPresenceNotification" - } - }, - "example": { - "zonalPresenceNotification": { - "clientCorrelator": "0123", - "zoneId": "zone01", - "address": "acr:10.0.0.1", - "userEventType": "Transferring", - "currentAccessPointId": "ap2", - "previousAccessPointId": "ap1", - "timestamp": { - "seconds": 1483231138, - "nanoseconds": 0 - }, - "link": { - "rel": "ZonalTrafficSubscription", - "href": "http://meAppServer.example.com/location/v2/subscriptions/zonalTraffic/sub123" - } - } - } - } - } - } - }, - "responses": { - "204": { - "$ref": "#/components/responses/204" - } - } - } - } - } - }, - "x-swagger-router-controller": "subscriptions" - } - }, - "/subscriptions/zonalTraffic/{subscriptionId}": { - "get": { - "tags": [ - "location" - ], - "summary": "Retrieve subscription information", - "description": "Get subscription information.", - "operationId": "zonalTrafficSubGET", - "parameters": [ - { - "$ref": "#/components/parameters/Path.SubscrId" - } - ], - "responses": { - "200": { - "description": "Subscription information regarding subscription notifications", - "content": { - "application/json": { - "schema": { - "type": "object", - "required": [ - "zonalTrafficSubscription" - ], - "properties": { - "zonalTrafficSubscription": { - "$ref": "#/components/schemas/ZonalTrafficSubscription" - } - }, - "example": { - "zonalTrafficSubscription": { - "clientCorrelator": "0123", - "callbackReference": { - "notifyURL": "http://my.callback.com/location_notifications/some-id" - }, - "zoneId": "zone01", - "userEventCriteria": [ - "Transferring" - ], - "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/zonalTraffic/sub123" - } - } - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "406": { - "$ref": "#/components/responses/406" - }, - "429": { - "$ref": "#/components/responses/429" - } - }, - "x-swagger-router-controller": "subscriptions" - }, - "put": { - "tags": [ - "location" - ], - "summary": "Updates a subscription information", - "description": "Updates a subscription.", - "operationId": "zonalTrafficSubPUT", - "requestBody": { - "description": "Subscription to be modified", - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "zonalTrafficSubscription": { - "$ref": "#/components/schemas/ZonalTrafficSubscription" - } - }, - "example": { - "zonalTrafficSubscription": { - "clientCorrelator": "0123", - "callbackReference": { - "notifyURL": "http://my.callback.com/location_notifications/some-id" - }, - "zoneId": "zone01", - "userEventCriteria": [ - "Transferring" - ], - "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/zonalTraffic/sub123" - } - } - } - } - } - }, - "parameters": [ - { - "$ref": "#/components/parameters/Path.SubscrId" - } - ], - "responses": { - "200": { - "description": "Successful subscription to response to subscription notifications", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "zonalTrafficSubscription": { - "$ref": "#/components/schemas/ZonalTrafficSubscription" - } - } - }, - "example": { - "zonalTrafficSubscription": { - "clientCorrelator": "0123", - "callbackReference": { - "notifyURL": "http://my.callback.com/location_notifications/some-id" - }, - "zoneId": "zone01", - "userEventCriteria": [ - "Transferring" - ], - "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/zonalTraffic/sub123" - } - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "406": { - "$ref": "#/components/responses/406" - }, - "412": { - "$ref": "#/components/responses/412" - }, - "422": { - "$ref": "#/components/responses/422" - }, - "429": { - "$ref": "#/components/responses/429" - } - }, - "x-swagger-router-controller": "subscriptions" - }, - "delete": { - "tags": [ - "location" - ], - "summary": "Cancel a subscription", - "description": "Method to delete a subscription.", - "operationId": "zonalTrafficSubDELETE", - "parameters": [ - { - "$ref": "#/components/parameters/Path.SubscrId" - } - ], - "responses": { - "204": { - "$ref": "#/components/responses/204" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "429": { - "$ref": "#/components/responses/429" - } - }, - "x-swagger-router-controller": "subscriptions" - } - }, - "/subscriptions/zoneStatus": { - "get": { - "tags": [ - "location" - ], - "summary": "Retrieves all active subscriptions to zone status notifications", - "description": "This operation is used for retrieving all active subscriptions to zone status change notifications.", - "operationId": "zoneStatusSubListGET", - "responses": { - "200": { - "description": "Response to retrieve zone status subscriptions", - "content": { - "application/json": { - "schema": { - "type": "object", - "required": [ - "notificationSubscriptionList" - ], - "properties": { - "notificationSubscriptionList": { - "$ref": "#/components/schemas/NotificationSubscriptionList" - } - }, - "example": { - "notificationSubscriptionList": { - "zoneStatusSubscription": [ - { - "clientCorrelator": "0123", - "resourceURL": "http://example.com/exampleAPI/location/v2/subscriptions/zoneStatus/subscription123", - "callbackReference": { - "notifyURL": "http://clientApp.example.com/location_notifications/123456" - }, - "zoneId": "zone01", - "numberOfUsersZoneThreshold": 500, - "operationStatus": [ - "Serviceable" - ] - } - ], - "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/zoneStatus" - } - } - } - } - } - } - } - }, - "post": { - "tags": [ - "location" - ], - "summary": "Creates a subscription for zone status notification", - "description": "Creates a subscription to the Location Service for zone status change notification.", - "operationId": "zoneStatusSubPOST", - "requestBody": { - "description": "Subscription to be created", - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "zoneStatusSubscription": { - "$ref": "#/components/schemas/ZoneStatusSubscription" - } - }, - "example": { - "zoneStatusSubscription": { - "clientCorrelator": "0123", - "callbackReference": { - "notifyURL": "http://my.callback.com/location_notifications/some-id" - }, - "zoneId": "zone01", - "numberOfUsersZoneThreshold": 500, - "operationStatus": [ - "Serviceable" - ] - } - } - } - } - } - }, - "responses": { - "201": { - "description": "Successful subscription", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "zoneStatusSubscription": { - "$ref": "#/components/schemas/ZoneStatusSubscription" - } - }, - "example": { - "zoneStatusSubscription": { - "clientCorrelator": "0123", - "callbackReference": { - "notifyURL": "http://my.callback.com/location_notifications/some-id" - }, - "zoneId": "zone01", - "numberOfUsersZoneThreshold": 500, - "operationStatus": [ - "Serviceable" - ], - "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/zoneStatus/sub123" - } - } - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "406": { - "$ref": "#/components/responses/406" - }, - "429": { - "$ref": "#/components/responses/429" - } - }, - "callbacks": { - "notification": { - "{$request.body#/zoneStatusSubscription.callbackReference.notifyURL}": { - "post": { - "summary": "Callback POST used to send a notification", - "description": "Notification from Location service, content based on subscription type", - "operationId": "zoneStatusNotificationPOST", - "requestBody": { - "description": "Subscription notification", - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "zoneStatusNotification": { - "$ref": "#/components/schemas/ZoneStatusNotification" - } - }, - "example": { - "zoneStatusNotification": { - "clientCorrelator": "0123", - "zoneId": "zone01", - "accessPointId": "poa1", - "operationStatus": "Serviceable", - "numberOfUsersInZone": "20", - "numberOfUsersInAP": "12", - "timestamp": { - "seconds": 1483231138, - "nanoseconds": 0 - }, - "link": { - "rel": "ZoneStatusSubscription", - "href": "http://meAppServer.example.com/location/v2/subscriptions/zoneStatus/sub123" - } - } - } - } - } - } - }, - "responses": { - "204": { - "$ref": "#/components/responses/204" - } - } - } - } - } - }, - "x-swagger-router-controller": "subscriptions" - } - }, - "/subscriptions/zoneStatus/{subscriptionId}": { - "get": { - "tags": [ - "location" - ], - "summary": "Retrieve subscription information", - "description": "Get subscription information.", - "operationId": "zoneStatusSubGET", - "parameters": [ - { - "$ref": "#/components/parameters/Path.SubscrId" - } - ], - "responses": { - "200": { - "description": "Subscription information regarding subscription notifications", - "content": { - "application/json": { - "schema": { - "type": "object", - "required": [ - "zoneStatusSubscription" - ], - "properties": { - "zoneStatusSubscription": { - "$ref": "#/components/schemas/ZoneStatusSubscription" - } - }, - "example": { - "zoneStatusSubscription": { - "clientCorrelator": "0123", - "callbackReference": { - "notifyURL": "http://my.callback.com/location_notifications/some-id" - }, - "zoneId": "zone01", - "numberOfUsersZoneThreshold": 500, - "operationStatus": [ - "Serviceable" - ], - "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/zoneStatus/sub123" - } - } - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "406": { - "$ref": "#/components/responses/406" - }, - "429": { - "$ref": "#/components/responses/429" - } - }, - "x-swagger-router-controller": "subscriptions" - }, - "put": { - "tags": [ - "location" - ], - "summary": "Updates a subscription information", - "description": "Updates a subscription.", - "operationId": "zoneStatusSubPUT", - "requestBody": { - "description": "Subscription to be modified", - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "zoneStatusSubscription": { - "$ref": "#/components/schemas/ZoneStatusSubscription" - } - }, - "example": { - "zoneStatusSubscription": { - "clientCorrelator": "0123", - "callbackReference": { - "notifyURL": "http://my.callback.com/location_notifications/some-id" - }, - "zoneId": "zone01", - "numberOfUsersZoneThreshold": 500, - "operationStatus": [ - "Serviceable" - ], - "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/zoneStatus/sub123" - } - } - } - } - } - }, - "parameters": [ - { - "$ref": "#/components/parameters/Path.SubscrId" - } - ], - "responses": { - "200": { - "description": "Successful subscription to response to subscription notifications", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "zoneStatusSubscription": { - "$ref": "#/components/schemas/ZoneStatusSubscription" - } - } - }, - "example": { - "zoneStatusSubscription": { - "clientCorrelator": "0123", - "callbackReference": { - "notifyURL": "http://my.callback.com/location_notifications/some-id" - }, - "zoneId": "zone01", - "numberOfUsersZoneThreshold": 500, - "operationStatus": [ - "Serviceable" - ], - "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/zoneStatus/sub123" - } - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "406": { - "$ref": "#/components/responses/406" - }, - "412": { - "$ref": "#/components/responses/412" - }, - "422": { - "$ref": "#/components/responses/422" - }, - "429": { - "$ref": "#/components/responses/429" - } - }, - "x-swagger-router-controller": "subscriptions" - }, - "delete": { - "tags": [ - "location" - ], - "summary": "Cancel a subscription", - "description": "Method to delete a subscription.", - "operationId": "zoneStatusSubDELETE", - "parameters": [ - { - "$ref": "#/components/parameters/Path.SubscrId" - } - ], - "responses": { - "204": { - "$ref": "#/components/responses/204" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "429": { - "$ref": "#/components/responses/429" - } - }, - "x-swagger-router-controller": "subscriptions" - } - } - }, - "components": { - "responses": { - "200": { - "description": "OK" - }, - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request : used to indicate that incorrect parameters were passed to the request.", - "content": { - "application/problem+json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetails" - } - } - } - }, - "401": { - "description": "Unauthorized : used when the client did not submit credentials.", - "content": { - "application/problem+json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetails" - } - } - } - }, - "403": { - "description": "Forbidden : operation is not allowed given the current status of the resource.", - "content": { - "application/problem+json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetails" - } - } - } - }, - "404": { - "description": "Not Found : used when a client provided a URI that cannot be mapped to a valid resource URI.", - "content": { - "application/problem+json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetails" - } - } - } - }, - "406": { - "description": "Not Acceptable : used to indicate that the server cannot provide the any of the content formats supported by the client.", - "content": { - "application/problem+json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetails" - } - } - } - }, - "412": { - "description": "Precondition failed : used when a condition has failed during conditional requests, e.g. when using ETags to avoid write conflicts when using PUT", - "content": { - "application/problem+json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetails" - } - } - } - }, - "414": { - "description": "URI Too Long : used to indicate that the server is refusing to process the request because the request URI is longer than the server is willing or able to process.", - "content": { - "application/problem+json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetails" - } - } - } - }, - "415": { - "description": "Unsupported Media Type : used to indicate that the server or the client does not support the content type of the entity body.", - "content": { - "application/problem+json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetails" - } - } - } - }, - "422": { - "description": "Unprocessable Entity : used to indicate that the server understands the content type of the request entity and that the syntax of the request entity is correct but that the server is unable to process the contained instructions. This error condition can occur if an JSON request body is syntactically correct but semantically incorrect, for example if the target area for the request is considered too large. This error condition can also occur if the capabilities required by the request are not supported.", - "content": { - "application/problem+json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetails" - }, - "example": { - "application/problem+json": { - "type": "https://meAppServer.example.com/rni/v2/probs/too-many targets", - "title": "Too many targets", - "status": "422", - "detail": "The target area for the request is considered too large", - "instance": "/meAppClient.example.com/77777/msgs/abc" - } - } - } - } - }, - "429": { - "description": "Too Many Requests : used when a rate limiter has triggered.", - "content": { - "application/problem+json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetails" - } - } - } - } - }, - "parameters": { - "Path.AccessPointId": { - "name": "accessPointId", - "in": "path", - "description": "Identifier of access Point", - "required": true, - "schema": { - "type": "string" - }, - "x-exportParamName": "AccessPointId" - }, - "Path.SubscrId": { - "name": "subscriptionId", - "in": "path", - "description": "Subscription Identifier, specifically the \"self\" returned in the subscription request", - "required": true, - "schema": { - "type": "string", - "format": "uri" - }, - "x-exportParamName": "SubscriptionId" - }, - "Path.ZoneId": { - "name": "zoneId", - "in": "path", - "description": "Indentifier of zone", - "required": true, - "schema": { - "type": "string" - }, - "x-exportParamName": "ZoneId" - }, - "Query.AccessPointId": { - "name": "accessPointId", - "in": "query", - "description": "Identifier of access point", - "required": false, - "schema": { - "type": "array", - "items": { - "type": "string" - } - }, - "x-exportParamName": "AccessPointId" - }, - "Query.Address": { - "name": "address", - "in": "query", - "description": "address of users (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI)", - "required": false, - "schema": { - "type": "array", - "items": { - "type": "string" - } - }, - "x-exportParamName": "Address" - }, - "Query.AddressMandatory": { - "name": "address", - "in": "query", - "description": "address of users (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI)", - "required": true, - "schema": { - "type": "array", - "items": { - "type": "string" - } - }, - "x-exportParamName": "AddressMandatory" - }, - "Query.InterestRealm": { - "name": "interestRealm", - "in": "query", - "description": "Interest realm of access point (e.g. geographical area, a type of industry etc.).", - "required": false, - "schema": { - "type": "string" - }, - "x-exportParamName": "InterestRealm" - }, - "Query.Latitude": { - "name": "latitude", - "in": "query", - "description": "Latitude geo position", - "required": false, - "schema": { - "type": "number", - "format": "float" - }, - "x-exportParamName": "Latitude" - }, - "Query.Longitude": { - "name": "longitude", - "in": "query", - "description": "Longitude geo position", - "required": false, - "schema": { - "type": "number", - "format": "float" - }, - "x-exportParamName": "Longitude" - }, - "Query.Requester": { - "name": "requester", - "in": "query", - "description": "Entity that is requesting the information", - "required": false, - "schema": { - "type": "string" - }, - "x-exportParamName": "Requester" - }, - "Query.ZoneId": { - "name": "zoneId", - "in": "query", - "description": "Identifier of zone", - "required": false, - "schema": { - "type": "array", - "items": { - "type": "string" - } - }, - "x-exportParamName": "ZoneId" - } - }, - "schemas": { - "AccessPointInfo": { - "description": "A type containing access point information.", - "properties": { - "accessPointId": { - "description": "Identifier of access point.", - "type": "string", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "string" - }, - "connectionType": { - "$ref": "#/components/schemas/ConnectionType" - }, - "interestRealm": { - "description": "Interest realm of access point.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "locationInfo": { - "$ref": "#/components/schemas/LocationInfo" - }, - "numberOfUsers": { - "description": "Number of users currently on the access point.", - "type": "integer", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "integer" - }, - "operationStatus": { - "$ref": "#/components/schemas/OperationStatus" - }, - "resourceURL": { - "description": "Self referring URL", - "type": "string", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "anyURI" - }, - "timezone": { - "description": "Time zone of access point.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "dateTimeStamp" - } - }, - "required": [ - "accessPointId", - "connectionType", - "operationStatus", - "numberOfUsers", - "resourceURL" - ], - "type": "object" - }, - "AccessPointList": { - "description": "A type containing list of access points.", - "properties": { - "accessPoint": { - "description": "Collection of the access point information list.", - "items": { - "$ref": "#/components/schemas/AccessPointInfo" - }, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "AccessPointInfo" - }, - "resourceURL": { - "description": "Self referring URL", - "type": "string", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "anyURI" - }, - "zoneId": { - "description": "Identifier of zone", - "type": "string", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "string" - } - }, - "required": [ - "zoneId", - "resourceURL" - ], - "type": "object" - }, - "CallbackReference": { - "properties": { - "callbackData": { - "description": "Data the application can register with the server when subscribing to notifications, and that are passed back unchanged in each of the related notifications. These data can be used by the application in the processing of the notification, e.g. for correlation purposes.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "notificationFormat": { - "$ref": "#/components/schemas/NotificationFormat" - }, - "notifyURL": { - "description": "Notify Callback URL", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "anyURI" - } - }, - "required": [ - "notifyURL" - ], - "type": "object" - }, - "CircleNotificationSubscription": { - "description": "A type containing data for notifications, when the area is defined as a circle.", - "properties": { - "address": { - "description": "Address of terminals to monitor (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI)", - "items": { - "type": "string" - }, - "type": "array", - "x-etsi-mec-cardinality": "1..N", - "x-etsi-mec-origin-type": "anyURI" - }, - "callbackReference": { - "$ref": "#/components/schemas/CallbackReference" - }, - "checkImmediate": { - "description": "Check location immediately after establishing notification.", - "type": "boolean", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "boolean" - }, - "clientCorrelator": { - "description": "A correlator that the client can use to tag this particular resource representation during a request to create a resource on the server.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "count": { - "description": "Maximum number of notifications per individual address. For no maximum, either do not include this element or specify a value of zero. Default value is 0.", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "int" - }, - "duration": { - "description": "Period of time (in seconds) notifications are provided for. If set to “0” (zero), a default duration time, which is specified by the service policy, will be used. If the parameter is omitted, the notifications will continue until the maximum duration time, which is specified by the service policy, unless the notifications are stopped by deletion of subscription for notifications.", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "int" - }, - "enteringLeavingCriteria": { - "$ref": "#/components/schemas/EnteringLeavingCriteria" - }, - "frequency": { - "description": "Maximum frequency (in seconds) of notifications per subscription (can also be considered minimum time between notifications).", - "type": "integer", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "int" - }, - "latitude": { - "description": "Latitude of center point.", - "format": "float", - "type": "number", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "float" - }, - "link": { - "description": "Link to other resources that are in relationship with the resource.", - "items": { - "$ref": "#/components/schemas/Link" - }, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "Link" - }, - "longitude": { - "description": "Longitude of center point.", - "format": "float", - "type": "number", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "float" - }, - "radius": { - "description": "Radius circle around center point in meters.", - "format": "float", - "type": "number", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "float" - }, - "requester": { - "description": "Identifies the entity that is requesting the information (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI)", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "anyURI" - }, - "resourceURL": { - "description": "Self referring URL", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "anyURI" - }, - "trackingAccuracy": { - "description": "Number of meters of acceptable error in tracking distance.", - "format": "float", - "type": "number", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "float" - } - }, - "required": [ - "callbackReference", - "address", - "latitude", - "longitude", - "radius", - "trackingAccuracy", - "enteringLeavingCriteria", - "checkImmediate", - "frequency" - ], - "type": "object" - }, - "ConnectionType": { - "description": "The connection type for the access point", - "enum": [ - "Femto", - "LTE-femto", - "Smallcell", - "LTE-smallcell", - "Wifi", - "Pico", - "Micro", - "Macro", - "Wimax", - "Unknown" - ], - "type": "string" - }, - "DistanceCriteria": { - "enum": [ - "AllWithinDistance", - "AnyWithinDistance", - "AllBeyondDistance", - "AnyBeyondDistance" - ], - "type": "string" - }, - "DistanceNotificationSubscription": { - "description": "A type containing data for distance subscription, with reference to other devices.", - "properties": { - "callbackReference": { - "$ref": "#/components/schemas/CallbackReference" - }, - "checkImmediate": { - "description": "Check location immediately after establishing notification.", - "type": "boolean", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "boolean" - }, - "clientCorrelator": { - "description": "A correlator that the client can use to tag this particular resource representation during a request to create a resource on the server.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "count": { - "description": "Maximum number of notifications per individual address. For no maximum, either do not include this element or specify a value of zero. Default value is 0.", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "int" - }, - "criteria": { - "$ref": "#/components/schemas/DistanceCriteria" - }, - "distance": { - "description": "Distance between devices that shall be monitored.", - "format": "float", - "type": "number", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "float" - }, - "duration": { - "description": "Period of time (in seconds) notifications are provided for. If set to “0” (zero), a default duration time, which is specified by the service policy, will be used. If the parameter is omitted, the notifications will continue until the maximum duration time, which is specified by the service policy, unless the notifications are stopped by deletion of subscription for notifications.", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "int" - }, - "frequency": { - "description": "Maximum frequency (in seconds) of notifications per subscription (can also be considered minimum time between notifications).", - "type": "integer", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "int" - }, - "link": { - "description": "Link to other resources that are in relationship with the resource.", - "items": { - "$ref": "#/components/schemas/Link" - }, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "Link" - }, - "monitoredAddress": { - "description": "Contains addresses of devices to monitor (e.g., 'sip' URI, 'tel' URI, 'acr' URI)", - "items": { - "type": "string" - }, - "type": "array", - "x-etsi-mec-cardinality": "1..N", - "x-etsi-mec-origin-type": "anyURI" - }, - "referenceAddress": { - "description": "Indicates address of each device that will be used as reference devices from which the distances towards monitored devices indicated in the Addresses will be monitored (e.g., 'sip' URI, 'tel' URI, 'acr' URI)", - "items": { - "type": "string" - }, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "anyURI" - }, - "requester": { - "description": "Identifies the entity that is requesting the information (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI)", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "anyURI" - }, - "resourceURL": { - "description": "Self referring URL", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "anyURI" - }, - "trackingAccuracy": { - "description": "Number of meters of acceptable error in tracking distance.", - "format": "float", - "type": "number", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "float" - } - }, - "required": [ - "callbackReference", - "monitoredAddress", - "distance", - "trackingAccuracy", - "criteria", - "checkImmediate", - "frequency" - ], - "type": "object" - }, - "EnteringLeavingCriteria": { - "enum": [ - "Entering", - "Leaving" - ], - "type": "string" - }, - "Link": { - "description": "Link to other resources", - "properties": { - "href": { - "description": "URI", - "format": "anyURI", - "type": "string" - }, - "rel": { - "description": "Describes the relationship between the URI and the resource.", - "type": "string" - } - }, - "required": [ - "rel", - "href" - ], - "type": "object" - }, - "LocationInfo": { - "properties": { - "accuracy": { - "description": "Horizontal accuracy / (semi-major) uncertainty of location provided in meters, as defined in [14]. Present only if \"shape\" equals 4, 5 or 6", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "UnsignedInt" - }, - "accuracyAltitude": { - "description": "Altitude accuracy / uncertainty of location provided in meters, as defined in [14]. Present only if \"shape\" equals 3 or 4", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "UnsignedInt" - }, - "accuracySemiMinor": { - "description": "Horizontal accuracy / (semi-major) uncertainty of location provided in meters, as defined in [14]. Present only if \"shape\" equals 4, 5 or 6", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "UnsignedInt" - }, - "altitude": { - "description": "Location altitude relative to the WGS84 ellipsoid surface.", - "format": "float", - "type": "number", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Float" - }, - "confidence": { - "description": "Confidence by which the position of a target entity is known to be within the shape description, expressed as a percentage and defined in [14]. Present only if \"shape\" equals 1, 4 or 6", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "UnsignedInt" - }, - "includedAngle": { - "description": "Present only if \"shape\" equals 6", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "UnsignedInt" - }, - "innerRadius": { - "description": "Present only if \"shape\" equals 6", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "UnsignedInt" - }, - "latitude": { - "description": "Location latitude, expressed in the range -90° to +90°. Cardinality greater than one only if \"shape\" equals 7.", - "items": { - "format": "float", - "type": "number" - }, - "minItems": 1, - "type": "array", - "x-etsi-mec-cardinality": "1..N", - "x-etsi-mec-origin-type": "Float" - }, - "longitude": { - "description": "Location longitude, expressed in the range -180° to +180°. Cardinality greater than one only if \"shape\" equals 7.", - "items": { - "format": "float", - "type": "number" - }, - "minItems": 1, - "type": "array", - "x-etsi-mec-cardinality": "1..N", - "x-etsi-mec-origin-type": "Float" - }, - "offsetAngle": { - "description": "Present only if \"shape\" equals 6", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "UnsignedInt" - }, - "orientationMajorAxis": { - "description": "Angle of orientation of the major axis, expressed in the range 0° to 180°, as defined in [14]. Present only if \"shape\" equals 4 or 6", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "UnsignedInt" - }, - "shape": { - "description": "Shape information, as detailed in [14], associated with the reported location coordinate:

      1 = ELLIPSOID_ARC

      2 = ELLIPSOID_POINT

      3 = ELLIPSOID_POINT_ALTITUDE

      4 = ELLIPSOID_POINT_ALTITUDE_UNCERT_ELLIPSOID

      5 = ELLIPSOID_POINT_UNCERT_CIRCLE

      6 = ELLIPSOID_POINT_UNCERT_ELLIPSE

      7 = POLYGON", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Enum_inlined" - }, - "timestamp": { - "$ref": "#/components/schemas/TimeStamp" - }, - "uncertaintyRadius": { - "description": "Present only if \"shape\" equals 6", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "UnsignedInt" - }, - "velocity": { - "description": "Structure with attributes relating to the target entity’s velocity, as defined in [14].", - "properties": { - "bearing": { - "description": "Bearing, expressed in the range 0° to 360°, as defined in [14].", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "UnsignedInt" - }, - "horizontalSpeed": { - "description": "Horizontal speed, expressed in km/h and defined in [14].", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "UnsignedInt" - }, - "uncertainty": { - "description": "Horizontal uncertainty, as defined in [14]. Present only if \"velocityType\" equals 3 or 4", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "UnsignedInt" - }, - "velocityType": { - "description": "Velocity information, as detailed in [14], associated with the reported location coordinate:

      1 = HORIZONTAL

      2 = HORIZONTAL_VERTICAL

      3 = HORIZONTAL_UNCERT

      4 = HORIZONTAL_VERTICAL_UNCERT", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Enum_inlined" - }, - "verticalSpeed": { - "description": "Vertical speed, expressed in km/h and defined in [14]. Present only if \"velocityType\" equals 2 or 4", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Int" - }, - "verticalUncertainty": { - "description": "Vertical uncertainty, as defined in [14]. Present only if \"velocityType\" equals 4", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "UnsignedInt" - } - }, - "required": [ - "velocityType", - "bearing", - "horizontalSpeed" - ], - "type": "object", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Structure (inlined)" - } - }, - "required": [ - "latitude", - "longitude", - "shape" - ], - "type": "object", - "x-etsi-ref": "6.5.3" - }, - "NotificationFormat": { - "enum": [ - "XML", - "JSON" - ], - "type": "string" - }, - "NotificationSubscriptionList": { - "properties": { - "circleNotificationSubscription": { - "description": "Collection of CircleNotificationSubscription elements, see note 2.", - "items": { - "$ref": "#/components/schemas/CircleNotificationSubscription" - }, - "minItems": 0, - "type": "array", - "x-etsi-mec-cardinality": "0.. N", - "x-etsi-mec-origin-type": "CircleNotificationSubscription" - }, - "distanceNotificationSubscription": { - "description": "Collection of DistanceNotificationSubscription elements, see note 2.", - "items": { - "$ref": "#/components/schemas/DistanceNotificationSubscription" - }, - "minItems": 0, - "type": "array", - "x-etsi-mec-cardinality": "0.. N", - "x-etsi-mec-origin-type": "DistanceNotificationSubscription" - }, - "periodicNotificationSubscription": { - "description": "Collection of PeriodicNotificationSubscription elements, see note 2.", - "items": { - "$ref": "#/components/schemas/PeriodicNotificationSubscription" - }, - "minItems": 0, - "type": "array", - "x-etsi-mec-cardinality": "0.. N", - "x-etsi-mec-origin-type": "PeriodicNotificationSubscription" - }, - "resourceURL": { - "description": "Self-referring URL, see note 1.", - "format": "uri", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "AnyURI" - }, - "userTrackingSubscription": { - "description": "Collection of UserTrackingSubscription elements, see note 1.", - "items": { - "$ref": "#/components/schemas/UserTrackingSubscription" - }, - "minItems": 0, - "type": "array", - "x-etsi-mec-cardinality": "0.. N", - "x-etsi-mec-origin-type": "UserTrackingSubscription" - }, - "zonalTrafficSubscription": { - "description": "Collection of ZonalTrafficSubscription elements, see note 1.", - "items": { - "$ref": "#/components/schemas/ZonalTrafficSubscription" - }, - "minItems": 0, - "type": "array", - "x-etsi-mec-cardinality": "0.. N", - "x-etsi-mec-origin-type": "ZonalTrafficSubscription" - }, - "zoneStatusSubscription": { - "description": "Collection of ZoneStatusSubscription elements, see note 1.", - "items": { - "$ref": "#/components/schemas/ZoneStatusSubscription" - }, - "minItems": 0, - "type": "array", - "x-etsi-mec-cardinality": "0.. N", - "x-etsi-mec-origin-type": "ZoneStatusSubscription" - } - }, - "required": [ - "resourceURL" - ], - "type": "object", - "x-etsi-notes": "NOTE 1:\tAs specified in [5], clause 5.2.2.8.\nNOTE 2: \tAs specified in [6], clause 5.2.2.7.", - "x-etsi-ref": "6.3.3" - }, - "OperationStatus": { - "enum": [ - "Serviceable", - "Unserviceable", - "Unknown" - ], - "type": "string" - }, - "PeriodicNotificationSubscription": { - "description": "A type containing data for periodic subscription.", - "properties": { - "address": { - "description": "Address of terminals to monitor (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI)", - "items": { - "type": "string" - }, - "type": "array", - "x-etsi-mec-cardinality": "1..N", - "x-etsi-mec-origin-type": "anyURI" - }, - "callbackReference": { - "$ref": "#/components/schemas/CallbackReference" - }, - "clientCorrelator": { - "description": "A correlator that the client can use to tag this particular resource representation during a request to create a resource on the server.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "duration": { - "description": "Period of time (in seconds) notifications are provided for. If set to “0” (zero), a default duration time, which is specified by the service policy, will be used. If the parameter is omitted, the notifications will continue until the maximum duration time, which is specified by the service policy, unless the notifications are stopped by deletion of subscription for notifications.", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "int" - }, - "frequency": { - "description": "Maximum frequency (in seconds) of notifications (can also be considered minimum time between notifications) per subscription.", - "type": "integer", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "int" - }, - "link": { - "description": "Link to other resources that are in relationship with the resource.", - "items": { - "$ref": "#/components/schemas/Link" - }, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "Link" - }, - "requestedAccuracy": { - "description": "Accuracy of the provided distance in meters.", - "type": "integer", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "int" - }, - "requester": { - "description": "Identifies the entity that is requesting the information (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI)", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "anyURI" - }, - "resourceURL": { - "description": "Self referring URL", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "anyURI" - } - }, - "required": [ - "callbackReference", - "address", - "requestedAccuracy", - "frequency" - ], - "type": "object" - }, - "ProblemDetails": { - "properties": { - "detail": { - "description": "A human-readable explanation specific to this occurrence of the problem", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "instance": { - "description": "A URI reference that identifies the specific occurrence of the problem", - "format": "uri", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "URI" - }, - "status": { - "description": "The HTTP status code for this occurrence of the problem", - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "title": { - "description": "A short, human-readable summary of the problem type", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "type": { - "description": "A URI reference according to IETF RFC 3986 that identifies the problem type", - "format": "uri", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "URI" - } - }, - "type": "object" - }, - "RetrievalStatus": { - "enum": [ - "Retrieved", - "NotRetrieved", - "Error" - ], - "type": "string" - }, - "ServiceError": { - "description": "used to indicate a notification termination or cancellation.", - "properties": { - "messageId": { - "description": "Message identifier, either with prefix SVC or with prefix POL", - "type": "string", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "string" - }, - "text": { - "description": "Message text, with replacement variables marked with %n, where n is an index into the list of elements, starting at 1", - "type": "string", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "string" - }, - "variables": { - "description": "Variables to substitute into text string", - "items": { - "type": "string" - }, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "string" - } - }, - "required": [ - "messageId", - "text" - ], - "type": "object" - }, - "SubscriptionCancellationNotification": { - "description": "A type containing the subscription cancellation notification.", - "properties": { - "address": { - "description": "Address of terminal if the error applies to an individual terminal.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "anyURI" - }, - "callbackData": { - "description": "CallbackData if passed by the application in the receiptRequest element during the associated subscription operation", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "link": { - "description": "Link to other resources that are in relationship with the resource.", - "items": { - "$ref": "#/components/schemas/Link" - }, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "Link" - }, - "reason": { - "$ref": "#/components/schemas/ServiceError" - } - }, - "required": [ - "terminalLocation" - ], - "type": "object" - }, - "SubscriptionNotification": { - "description": "A type containing the notification subscription.", - "properties": { - "callbackData": { - "description": "CallbackData if passed by the application in the receiptRequest element during the associated subscription operation", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "distanceCriteria": { - "$ref": "#/components/schemas/DistanceCriteria" - }, - "enteringLeavingCriteria": { - "$ref": "#/components/schemas/EnteringLeavingCriteria" - }, - "isFinalNotification": { - "description": "Set to true if it is a final notification about location change.", - "type": "boolean", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "boolean" - }, - "link": { - "description": "Link to other resources that are in relationship with the resource.", - "items": { - "$ref": "#/components/schemas/Link" - }, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "Link" - }, - "terminalLocation": { - "description": "Collection of the terminal locations.", - "items": { - "$ref": "#/components/schemas/TerminalLocation" - }, - "type": "array", - "x-etsi-mec-cardinality": "1..N", - "x-etsi-mec-origin-type": "TerminalLocation" - } - }, - "required": [ - "terminalLocation" - ], - "type": "object" - }, - "TerminalDistance": { - "description": "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.", - "properties": { - "accuracy": { - "description": "Accuracy of the provided distance in meters", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "integer" - }, - "distance": { - "description": "Distance from terminal to a location or between two terminals specified in meters", - "type": "integer", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "integer" - }, - "timestamp": { - "$ref": "#/components/schemas/TimeStamp" - } - }, - "required": [ - "distance" - ], - "type": "object" - }, - "TerminalLocation": { - "description": "A type containing device address, retrieval status and location information.", - "properties": { - "address": { - "description": "Address of the terminal to which the location information applies (e.g., 'sip' URI, 'tel' URI, 'acr' URI).", - "type": "string", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "anyURI" - }, - "currentLocation": { - "$ref": "#/components/schemas/LocationInfo" - }, - "errorInformation": { - "$ref": "#/components/schemas/ServiceError" - }, - "locationRetrievalStatus": { - "$ref": "#/components/schemas/RetrievalStatus" - } - }, - "required": [ - "address", - "locationRetrievalStatus" - ], - "type": "object" - }, - "TerminalLocationList": { - "description": "Collection of the terminal locations.", - "items": { - "$ref": "#/components/schemas/TerminalLocation" - }, - "type": "array", - "x-etsi-mec-cardinality": "1..N", - "x-etsi-mec-origin-type": "TerminalLocation" - }, - "TimeStamp": { - "properties": { - "nanoSeconds": { - "description": "The nanoseconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC.", - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Uint32" - }, - "seconds": { - "description": "The seconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC.", - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Uint32" - } - }, - "required": [ - "seconds", - "nanoSeconds" - ], - "type": "object", - "x-etsi-ref": "6.5.2" - }, - "UserEventType": { - "enum": [ - "Entering", - "Leaving", - "Transferring" - ], - "type": "string" - }, - "UserInfo": { - "properties": { - "accessPointId": { - "description": "The identity of the access point the user is currently on, see note 1.", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "address": { - "description": "Address of user (e.g. 'sip' URI, 'tel' URI, 'acr' URI) currently on the access point, see note 1.", - "format": "uri", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "AnyURI" - }, - "ancillaryInfo": { - "description": "Reserved for future use.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "contextLocationInfo": { - "description": "Contextual information of a user location (e.g. aisle, floor, room number, etc.).", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "locationInfo": { - "$ref": "#/components/schemas/LocationInfo" - }, - "resourceURL": { - "description": "Self-referring URL, see note 1.", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "timestamp": { - "$ref": "#/components/schemas/TimeStamp" - }, - "zoneId": { - "description": "The identity of the zone the user is currently within, see note 1.", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - } - }, - "required": [ - "address", - "accessPointId", - "zoneId", - "resourceURL", - "timestamp" - ], - "type": "object", - "x-etsi-notes": "NOTE 1:\tAs specified in [5], clause 5.2.2.7.\nNOTE 2: \tAs specified in [5], clause 5.2.2.5.", - "x-etsi-ref": "6.2.2" - }, - "UserList": { - "description": "A type containing list of users.", - "properties": { - "resourceURL": { - "description": "Self referring URL", - "type": "string", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "anyURI" - }, - "user": { - "description": "Collection of the zone information list.", - "items": { - "$ref": "#/components/schemas/UserInfo" - }, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "UserInfo" - } - }, - "required": [ - "resourceURL" - ], - "type": "object" - }, - "UserTrackingSubscription": { - "description": "A type containing user tracking subscription.", - "properties": { - "address": { - "description": "Address of user (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI) to monitor", - "type": "string", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "anyURI" - }, - "callbackReference": { - "$ref": "#/components/schemas/CallbackReference" - }, - "clientCorrelator": { - "description": "A correlator that the client can use to tag this particular resource representation during a request to create a resource on the server.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "resourceURL": { - "description": "Self referring URL", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "anyURI" - }, - "userEventCriteria": { - "description": "List of user event values to generate notifications for (these apply to address specified). If this element is missing, a notification is requested to be generated for any change in user event.", - "items": { - "$ref": "#/components/schemas/UserEventType" - }, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "UserEventType" - } - }, - "required": [ - "callbackReference", - "address" - ], - "type": "object" - }, - "ZonalPresenceNotification": { - "description": "A type containing zonal presence notification", - "properties": { - "address": { - "description": "Address of user (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI) to monitor", - "type": "string", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "anyURI" - }, - "callbackData": { - "description": "CallBackData if passed by the application during the associated ZonalTrafficSubscription and UserTrackingSubscription operation. See [REST_NetAPI_Common].", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "currentAccessPointId": { - "description": "Identifier of access point.", - "type": "string", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "string" - }, - "interestRealm": { - "description": "Interest realm of access point (e.g. geographical area, a type of industry etc.).", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "link": { - "description": "Link to other resources that are in relationship with this notification. The server SHOULD include a link to the related subscription. No other links are required or suggested by this specification", - "items": { - "$ref": "#/components/schemas/Link" - }, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "Link" - }, - "previousAccessPointId": { - "description": "Identifier of access point.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "timestamp": { - "$ref": "#/components/schemas/TimeStamp" - }, - "userEventType": { - "$ref": "#/components/schemas/UserEventType" - }, - "zoneId": { - "description": "Identifier of zone", - "type": "string", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "string" - } - }, - "required": [ - "zoneId", - "address", - "userEventType", - "currentAccessPointId", - "timestamp" - ], - "type": "object" - }, - "ZonalTrafficSubscription": { - "description": "A type containing zonal traffic subscription", - "properties": { - "callbackReference": { - "$ref": "#/components/schemas/CallbackReference" - }, - "clientCorrelator": { - "description": "A correlator that the client can use to tag this particular resource representation during a request to create a resource on the server.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "duration": { - "description": "Period (in seconds) of time notifications are provided for. If set to \"0\" (zero), a default duration time, which is specified by the service policy, will be used. If the parameter is omitted, the notifications will continue until the maximum duration time, which is specified by the service policy, unless the notifications are stopped by deletion of subscription for notifications. This element MAY be given by the client during resource creation in order to signal the desired lifetime of the subscription. The server MUST return in this element the period of time for which the subscription will still be valid.", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "unsignedInt" - }, - "interestRealm": { - "description": "Interest realm of access point (e.g. geographical area, a type of industry etc.).", - "items": { - "type": "string" - }, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "string" - }, - "resourceURL": { - "description": "Self referring URL", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "anyURI" - }, - "userEventCriteria": { - "description": "List of user event values to generate notifications for (these apply to zone identifier or all interest realms within zone identifier specified). If this element is missing, a notification is requested to be generated for any change in user event.", - "items": { - "$ref": "#/components/schemas/UserEventType" - }, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "UserEventType" - }, - "zoneId": { - "description": "Identifier of zone", - "type": "string", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "string" - } - }, - "required": [ - "callbackReference", - "zoneId" - ], - "type": "object" - }, - "ZoneInfo": { - "description": "A type containing zone information.", - "properties": { - "numberOfAccessPoints": { - "description": "The number of access points within the zone", - "type": "integer", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "unsignedInt" - }, - "numberOfUnserviceableAccessPoints": { - "description": "Number of inoperable access points within the zone.", - "type": "integer", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "unsignedInt" - }, - "numberOfUsers": { - "description": "The number of users currently on the access point.", - "type": "integer", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "unsignedInt" - }, - "resourceURL": { - "description": "Self referring URL", - "type": "string", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "anyURI" - }, - "zoneId": { - "description": "Identifier of zone", - "type": "string", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "string" - } - }, - "required": [ - "zoneId", - "numberOfAccessPoints", - "numberOfUnserviceableAccessPoints", - "numberOfUsers", - "resourceURL" - ], - "type": "object" - }, - "ZoneList": { - "description": "A type containing a list of zones.", - "properties": { - "resourceURL": { - "description": "Self referring URL", - "type": "string", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "anyURI" - }, - "zone": { - "description": "Collection of the zone information list.", - "items": { - "$ref": "#/components/schemas/ZoneInfo" - }, - "type": "array" - } - }, - "required": [ - "resourceURL" - ], - "type": "object" - }, - "ZoneStatusNotification": { - "description": "A type containing zone status notification.", - "properties": { - "accessPointId": { - "description": "Identifier of an access point.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "callbackData": { - "description": "CallBackData if passed by the application during the associated ZoneStatusSubscription operation. See [REST_NetAPI_Common].", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "link": { - "description": "Link to other resources that are in relationship with this notification. The server SHOULD include a link to the related subscription. No other links are required or suggested by this specification", - "items": { - "$ref": "#/components/schemas/Link" - }, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "Link" - }, - "numberOfUsersInAP": { - "description": "This element shall be present when ZoneStatusSubscription includes numberOfUsersAPThreshold element and the number of users in an access point exceeds the threshold defined in the subscription.", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "unsignedInt" - }, - "numberOfUsersInZone": { - "description": "This element shall be present when ZoneStatusSubscription includes numberOfUsersZoneThreshold element and the number of users in a zone exceeds the threshold defined in this subscription.", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "unsignedInt" - }, - "operationStatus": { - "$ref": "#/components/schemas/OperationStatus" - }, - "timestamp": { - "$ref": "#/components/schemas/TimeStamp" - }, - "zoneId": { - "description": "Identifier of zone", - "type": "string", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "string" - } - }, - "required": [ - "zoneId", - "timestamp" - ], - "type": "object" - }, - "ZoneStatusSubscription": { - "description": "A type containing zone status subscription.", - "properties": { - "callbackReference": { - "$ref": "#/components/schemas/CallbackReference" - }, - "clientCorrelator": { - "description": "A correlator that the client can use to tag this particular resource representation during a request to create a resource on the server.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "numberOfUsersAPThreshold": { - "description": "Threshold number of users in an access point which if crossed shall cause a notification", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "unsignedInt" - }, - "numberOfUsersZoneThreshold": { - "description": "Threshold number of users in a zone which if crossed shall cause a notification", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "unsignedInt" - }, - "operationStatus": { - "description": "List of operation status values to generate notifications for (these apply to all access points within a zone).", - "items": { - "$ref": "#/components/schemas/OperationStatus" - }, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "OperationStatus" - }, - "resourceURL": { - "description": "Self referring URL", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "anyURI" - }, - "zoneId": { - "description": "Identifier of zone", - "type": "string", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "string" - } - }, - "required": [ - "callbackReference", - "zoneId" - ], - "type": "object" - } - } - } -} diff --git a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Functions.ttcn b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Functions.ttcn index 5823989..9f5531f 100644 --- a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Functions.ttcn +++ b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Functions.ttcn @@ -223,7 +223,7 @@ module LocationAPI_Functions { mw_zone_location_event_notification( // FIXME )))))) -> value v_response { - tc_ac.stop; + tc_ac.stop; // Extract HTTP Location header var charstring_list v_subscription_id; diff --git a/ttcn/LibMec/RnisAPI/json/RnisAPI.json b/ttcn/LibMec/RnisAPI/json/RnisAPI.json deleted file mode 100644 index a6c7ee5..0000000 --- a/ttcn/LibMec/RnisAPI/json/RnisAPI.json +++ /dev/null @@ -1,6574 +0,0 @@ -{ - "swagger": "2.0", - "info": { - "description": "The ETSI MEC ISG MEC012 Radio Network Information API described using OpenAPI", - "version": "1.1.1", - "title": "RNI API", - "license": { - "name": "ETSI Forge copyright notice", - "url": "https://forge.etsi.org/etsi-forge-copyright-notice.txt" - } - }, - "externalDocs": { - "description": "ETSI GS MEC012 Radio Network Information API, V1.1.1", - "url": "http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/01.01.01_60/gs_mec012v010101p.pdf" - }, - "host": "127.0.0.1:8081", - "basePath": "/rni/v1", - "schemes": [ - "http", - "https" - ], - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "security": [ - { - "OauthSecurity": [ - "all" - ] - } - ], - "securityDefinitions": { - "OauthSecurity": { - "type": "oauth2", - "flow": "application", - "tokenUrl": "https://oauth.exampleAPI/token", - "scopes": { - "all": "Single oauth2 scope for API" - } - } - }, - "parameters": { - "Body.CellChangeSubscriptionPost": { - "name": "CellChangeSubscriptionPost", - "in": "body", - "description": "Use to creates a subscription to cell change notifications based on the\n filter criteria", - "required": true, - "schema": { - "type": "object", - "properties": { - "CellChangeSubscription": { - "$ref": "#/definitions/CellChangeSubscriptionPost" - } - } - } - }, - "Body.CellChangeSubscription": { - "name": "CellChangeSubscription", - "in": "body", - "description": "Use to creates a subscription to cell change notifications based on the filter criteria", - "required": true, - "schema": { - "type": "object", - "properties": { - "CellChangeSubscription": { - "$ref": "#/definitions/CellChangeSubscription" - } - } - } - }, - "Body.S1BearerSubscriptionPost": { - "name": "S1BearerSubscriptionPost", - "in": "body", - "description": "Use to creates a subscription to S1 Bearer notifications based on the filter criteria", - "required": true, - "schema": { - "type": "object", - "properties": { - "S1BearerSubscription": { - "$ref": "#/definitions/S1BearerSubscriptionPost" - } - } - } - }, - "Body.S1BearerSubscription": { - "name": "S1BearerSubscription", - "in": "body", - "description": "Use to creates a subscription to S1 Bearer notifications based on the filter criteria", - "required": true, - "schema": { - "type": "object", - "properties": { - "S1BearerSubscription": { - "$ref": "#/definitions/S1BearerSubscription" - } - } - } - }, - "Body.MeasTaSubscriptionPost": { - "name": "MeasTaSubscriptionPost", - "in": "body", - "description": "Use to creates a subscription to UE Timing Advance notifications based on the filter criteria", - "required": true, - "schema": { - "type": "object", - "properties": { - "MeasTaSubscription": { - "$ref": "#/definitions/MeasTaSubscriptionPost" - } - } - } - }, - "Body.MeasTaSubscription": { - "name": "MeasTaSubscription", - "in": "body", - "description": "Use to creates a subscription to UE Timing Advance notifications based on the filter criteria", - "required": true, - "schema": { - "type": "object", - "properties": { - "MeasTaSubscription": { - "$ref": "#/definitions/MeasTaSubscription" - } - } - } - }, - "Body.MeasRepUeSubscriptionPost": { - "name": "MeasRepUeSubscriptionPost", - "in": "body", - "description": "Use to creates a subscription to UE measurement report notifications based on the filter criteria", - "required": true, - "schema": { - "type": "object", - "properties": { - "MeasRepUeSubscription": { - "$ref": "#/definitions/MeasRepUeSubscriptionPost" - } - } - } - }, - "Body.MeasRepUeSubscription": { - "name": "MeasRepUeSubscription", - "in": "body", - "description": "Use to creates a subscription to UE measurement report notifications based on the filter criteria", - "required": true, - "schema": { - "type": "object", - "properties": { - "MeasRepUeSubscription": { - "$ref": "#/definitions/MeasRepUeSubscription" - } - } - } - }, - "Body.RabEstSubscriptionPost": { - "name": "RabEstSubscriptionPost", - "in": "body", - "description": "Use to creates a subscription to RAB establishment notifications based on the filter criteria", - "required": true, - "schema": { - "type": "object", - "properties": { - "RabEstSubscription": { - "$ref": "#/definitions/RabEstSubscriptionPost" - } - } - } - }, - "Body.RabEstSubscription": { - "name": "RabEstSubscription", - "in": "body", - "description": "Use to creates a subscription to RAB establishment notifications based on the filter criteria", - "required": true, - "schema": { - "type": "object", - "properties": { - "RabEstSubscription": { - "$ref": "#/definitions/RabEstSubscription" - } - } - } - }, - "Body.RabModSubscriptionPost": { - "name": "RabEstSubscriptionPost", - "in": "body", - "description": "Use to creates a subscription to RAB Modification notifications based on the filter criteria", - "required": true, - "schema": { - "type": "object", - "properties": { - "RabModSubscription": { - "$ref": "#/definitions/RabModSubscriptionPost" - } - } - } - }, - "Body.RabModSubscription": { - "name": "RabEstSubscription", - "in": "body", - "description": "Use to creates a subscription to RAB Modification notifications based on the filter criteria", - "required": true, - "schema": { - "type": "object", - "properties": { - "RabModSubscription": { - "$ref": "#/definitions/RabModSubscription" - } - } - } - }, - "Body.RabRelSubscriptionPost": { - "name": "RabRelSubscriptionPost", - "in": "body", - "description": "Use to creates a subscription to RAB Release notifications based on the filter criteria", - "required": true, - "schema": { - "type": "object", - "properties": { - "RabRelSubscription": { - "$ref": "#/definitions/RabRelSubscriptionPost" - } - } - } - }, - "Body.RabRelSubscription": { - "name": "RabRelSubscription", - "in": "body", - "description": "Use to creates a subscription to RAB Release notifications based on the filter criteria", - "required": true, - "schema": { - "type": "object", - "properties": { - "RabRelSubscription": { - "$ref": "#/definitions/RabRelSubscription" - } - } - } - }, - "Body.CaReConfSubscriptionPost": { - "name": "CaReConfSubscriptionPost", - "in": "body", - "description": "Use to creates a subscription to Carrier Aggregation Reconfiguration notifications based on the filter criteria", - "required": true, - "schema": { - "type": "object", - "properties": { - "CaReConfSubscription": { - "$ref": "#/definitions/CaReConfSubscriptionPost" - } - } - } - }, - "Body.CaReConfSubscription": { - "name": "CaReConfSubscription", - "in": "body", - "description": "Use to creates a subscription to Carrier Aggregation Reconfiguration notifications based on the filter criteria", - "required": true, - "schema": { - "type": "object", - "properties": { - "CaReConfSubscription": { - "$ref": "#/definitions/CaReConfSubscription" - } - } - } - }, - "Path.subscrId": { - "name": "subscriptionId", - "in": "path", - "description": "Subscription Id, specifically the \"self\" returned in the subscription request", - "required": true, - "type": "string", - "format": "uri" - }, - "Query.AppInsId": { - "name": "app_ins_id", - "in": "query", - "description": "Application instance identifier", - "required": false, - "type": "string" - }, - "Query.AppInsIdArr": { - "name": "app_ins_id", - "in": "query", - "description": "Application instance identifier", - "required": true, - "type": "array", - "items": { - "type": "string" - } - }, - "Query.UeIpv4Address": { - "name": "ue_ipv4_address", - "in": "query", - "description": "Comma separated list of IE IPv4 addresses as defined for the type for AssociateId", - "required": false, - "type": "array", - "items": { - "type": "string" - } - }, - "Query.UeIpv6Address": { - "name": "ue_ipv6_address", - "in": "query", - "description": "Comma separated list of IE IPv6 addresses as defined for the type for AssociateId", - "required": false, - "type": "array", - "items": { - "type": "string" - } - }, - "Query.NatedIpAddress": { - "name": "nated_ip_address", - "in": "query", - "description": "Comma separated list of IE NATed IP addresses as defined for the type for AssociateId", - "required": false, - "type": "array", - "items": { - "type": "string" - } - }, - "Query.GtpTeId": { - "name": "gtp_teid", - "in": "query", - "description": "Comma separated list of GTP TEID addresses as defined for the type for AssociateId", - "required": false, - "type": "array", - "items": { - "type": "string" - } - }, - "Query.CellId": { - "name": "cell_id", - "in": "query", - "description": "E-UTRAN Cell Identity as a bit string (size (28)), as defined in ETSI TS 136 413", - "required": false, - "type": "array", - "items": { - "type": "string" - } - }, - "Query.ErabGbrDl": { - "name": "erab_gbr_dl", - "in": "query", - "description": "Guaranteed downlink E-RAB Bit Rate as defined in ETSI TS 123 401", - "required": false, - "type": "integer", - "format": "uint32" - }, - "Query.ErabGbrUl": { - "name": "erab_gbr_ul", - "in": "query", - "description": "Guaranteed uplink E-RAB Bit Rate as defined in ETSI TS 123 401", - "required": false, - "type": "integer", - "format": "uint32" - }, - "Query.ErabId": { - "name": "erab_id", - "in": "query", - "description": "E-RAB identifier", - "required": false, - "type": "integer", - "format": "uint32" - }, - "Query.ErabIdArr": { - "name": "erab_id", - "in": "query", - "description": "E-RAB identifier", - "required": false, - "type": "array", - "items": { - "type": "integer", - "format": "uint32" - } - }, - "Query.ErabMbrDl": { - "name": "erab_mbr_dl", - "in": "query", - "description": "Maximum downlink E-RAB Bit Rate as defined in ETSI TS 123 401", - "required": false, - "type": "integer", - "format": "uint32" - }, - "Query.ErabMbrUl": { - "name": "erab_mbr_ul", - "in": "query", - "description": "Maximum uplink E-RAB Bit Rate as defined in ETSI TS 123 401", - "required": false, - "type": "integer", - "format": "uint32" - }, - "Query.Qci": { - "name": "qci", - "in": "query", - "description": "QoS Class Identifier as defined in ETSI TS 123 401", - "required": false, - "type": "integer", - "format": "uint32" - }, - "Query.TempUeId": { - "name": "temp_ue_id", - "in": "query", - "description": "The temporary identifier allocated for the specific UE as defined in ETSI TS 136 413", - "required": false, - "type": "array", - "items": { - "type": "string" - } - } - }, - "paths": { - "/resources/rab_info": { - "get": { - "description": "Gets information on existing E-RABs that are associated with a specific mobile edge application instance", - "operationId": "rab_infoGET", - "produces": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/Query.AppInsId" - }, - { - "$ref": "#/parameters/Query.CellId" - }, - { - "$ref": "#/parameters/Query.UeIpv4Address" - }, - { - "$ref": "#/parameters/Query.UeIpv6Address" - }, - { - "$ref": "#/parameters/Query.NatedIpAddress" - }, - { - "$ref": "#/parameters/Query.GtpTeId" - }, - { - "$ref": "#/parameters/Query.ErabId" - }, - { - "$ref": "#/parameters/Query.Qci" - }, - { - "$ref": "#/parameters/Query.ErabMbrDl" - }, - { - "$ref": "#/parameters/Query.ErabMbrUl" - }, - { - "$ref": "#/parameters/Query.ErabGbrDl" - }, - { - "$ref": "#/parameters/Query.ErabGbrUl" - } - ], - "responses": { - "200": { - "description": "Successful response to rab_info request", - "schema": { - "type": "object", - "required": [ - "RabInfo" - ], - "properties": { - "RabInfo": { - "$ref": "#/definitions/RabInfo" - } - } - }, - "examples": { - "application/json": { - "RabInfo": { - "timeStamp": { - "seconds": 1577836800, - "nanoSeconds": 0 - }, - "appInId": "01", - "requestId": "01", - "cellUserInfo": { - "ecgi": { - "plmn": { - "mcc": "001", - "mnc": "01" - }, - "cellId": "0x800000A" - }, - "ueInfo": { - "associateId": null, - "type": "1", - "value": "192.0.2.0", - "erabInfo": { - "erabId": 10 - }, - "erabQosParameters": { - "qci": 7, - "qosInformation": { - "erabMbrDl": 10, - "erabMbrUl": 10, - "erabGbrDl": 10, - "erabGbrUl": 10 - } - } - } - } - } - } - } - }, - "400": { - "description": "Bad Request", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "403": { - "description": "Forbidden", - "schema": { - "type": "object", - "required": [ - "ProblemDetails" - ], - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "404": { - "description": "Not Found", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "406": { - "description": "Not Acceptable", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - } - }, - "x-swagger-router-controller": "Default" - } - }, - "/resources/plmn_info": { - "get": { - "description": "Gets the information on Mobile Network(s) that are associated with a specific mobile edge application instance", - "operationId": "plmn_infoGET", - "produces": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/Query.AppInsIdArr" - } - ], - "responses": { - "200": { - "description": "Successful response to rab_info request", - "schema": { - "type": "object", - "properties": { - "PlmnInfo": { - "$ref": "#/definitions/PlmnInfo" - } - } - }, - "examples": { - "application/json": { - "PlmnInfo": { - "timeStamp": { - "seconds": 1577836800, - "nanoSeconds": 0 - }, - "appInId": "01", - "ecgi": { - "plmn": { - "mcc": "001", - "mnc": "01" - }, - "cellId": "0x800000A" - } - } - } - } - }, - "400": { - "description": "Bad Request", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "403": { - "description": "Forbidden", - "schema": { - "type": "object", - "required": [ - "ProblemDetails" - ], - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "404": { - "description": "Not Found", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "406": { - "description": "Not Acceptable", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - } - }, - "x-swagger-router-controller": "Default" - } - }, - "/resources/s1_bearer_info": { - "get": { - "description": "Gets information on existing E-RABs that are associated with a specific mobile edge application instance", - "operationId": "s1_bearer_infoGET", - "produces": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/Query.TempUeId" - }, - { - "$ref": "#/parameters/Query.UeIpv4Address" - }, - { - "$ref": "#/parameters/Query.UeIpv6Address" - }, - { - "$ref": "#/parameters/Query.NatedIpAddress" - }, - { - "$ref": "#/parameters/Query.GtpTeId" - }, - { - "$ref": "#/parameters/Query.CellId" - }, - { - "$ref": "#/parameters/Query.ErabIdArr" - } - ], - "responses": { - "200": { - "description": "Successful response to s1_bearer_info request", - "schema": { - "type": "object", - "required": [ - "S1BearerInfo" - ], - "properties": { - "S1BearerInfo": { - "$ref": "#/definitions/S1BearerInfo" - } - } - }, - "examples": { - "application/json": { - "S1BearerInfo": { - "timeStamp": { - "seconds": 1577836800, - "nanoSeconds": 0 - }, - "s1UeInfo": [ - { - "tempUeId": { - "mmec": "0", - "mtmsi": "1234" - }, - "associateId": [ - { - "type": "1", - "value": "192.0.2.0" - }, - { - "type": "3", - "value": "198.51.100.0" - } - ], - "ecgi": { - "plmn": { - "mcc": "001", - "mnc": "01" - }, - "cellId": "0x800000A" - }, - "s1BearerInfoDetailed": [ - { - "erabId": 1, - "s1EnbInfo": { - "ipAddress": "192.0.2.0", - "tunnelId": "1111" - }, - "sGwInfo": { - "ipAddress": "192.0.2.1", - "tunnelId": "2222" - } - } - ] - }, - { - "tempUeId": { - "mmec": "0", - "mtmsi": "1234" - }, - "associateId": { - "type": "1", - "value": "192.0.2.0" - }, - "ecgi": { - "plmn": { - "mcc": "001", - "mnc": "01" - }, - "cellId": "0x800000B" - }, - "s1BearerInfoDetailed": [ - { - "erabId": 2, - "s1EnbInfo": { - "ipAddress": "192.0.2.0", - "tunnelId": "3333" - }, - "sGwInfo": { - "ipAddress": "192.0.2.1", - "tunnelId": "4444" - } - } - ] - } - ] - } - } - } - }, - "400": { - "description": "Bad Request", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "403": { - "description": "Forbidden", - "schema": { - "type": "object", - "required": [ - "ProblemDetails" - ], - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "404": { - "description": "Not Found", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "406": { - "description": "Not Acceptable", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - } - }, - "x-swagger-router-controller": "Default" - } - }, - "/subscriptions/": { - "get": { - "description": "The GET method can be used to request information about the subscriptions for this requestor", - "operationId": "SubscriptionLinkList_subscriptionsGET", - "produces": [ - "application/json", - "application/problem+json" - ], - "responses": { - "200": { - "description": "Response body contains the list of links to requestors subscriptions.", - "schema": { - "type": "object", - "required": [ - "SubscriptionLinkList" - ], - "properties": { - "SubscriptionLinkList": { - "$ref": "#/definitions/SubscriptionLinkList" - } - } - }, - "examples": { - "application/json": { - "SubscriptionLinkList": { - "_links": { - "self": "http://meAppServer.example.com/rni/v1/subscriptions", - "susbcription": [ - { - "href": "http://meAppClient.example.com/rni/v1/notifications/cell_change/77777", - "subscriptionType": "CELL_CHANGE" - }, - { - "href": "http://meAppClient.example.com/rni/v1/notifications/MeasTa/77777", - "subscriptionType": "MEAS_TIMING_ADVANCE" - } - ] - } - } - } - } - }, - "400": { - "description": "Bad Request", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "403": { - "description": "Forbidden", - "schema": { - "type": "object", - "required": [ - "ProblemDetails" - ], - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "404": { - "description": "Not Found", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "406": { - "description": "Not Acceptable", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - } - }, - "x-swagger-router-controller": "Default" - } - }, - "/subscriptions/cell_change": { - "get": { - "description": "The GET method can be used to request information about the cell_change subscriptions for this requestor", - "operationId": "SubscriptionLinkList_subscriptions_cc_GET", - "produces": [ - "application/json", - "application/problem+json" - ], - "responses": { - "200": { - "description": "Response body contains the list of links to requestors cell_change subscriptions.", - "schema": { - "type": "object", - "required": [ - "SubscriptionLinkList" - ], - "properties": { - "SubscriptionLinkList": { - "$ref": "#/definitions/SubscriptionLinkList" - } - } - }, - "examples": { - "application/json": { - "SubscriptionLinkList": { - "_links": { - "self": "http://meAppServer.example.com/rni/v1/subscriptions/cell_change", - "susbcription": [ - { - "href": "http://meAppClient.example.com/rni/v1/notifications/cell_change/77777", - "subscriptionType": "CELL_CHANGE" - }, - { - "href": "http://meAppClient.example.com/rni/v1/notifications/cell_change/77778", - "subscriptionType": "CELL_CHANGE" - } - ] - } - } - } - } - }, - "400": { - "description": "Bad Request", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "403": { - "description": "Forbidden", - "schema": { - "type": "object", - "required": [ - "ProblemDetails" - ], - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "404": { - "description": "Not Found", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "406": { - "description": "Not Acceptable", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - } - }, - "x-swagger-router-controller": "Default" - }, - "post": { - "description": "Creates a subscription to cell change notifications from Radio Network Information Service", - "operationId": "CellChange_subscriptionsPOST", - "produces": [ - "application/json", - "application/problem+json" - ], - "parameters": [ - { - "$ref": "#/parameters/Body.CellChangeSubscriptionPost" - } - ], - "responses": { - "201": { - "description": "Successful subscription to response to UE cell change notifications", - "schema": { - "type": "object", - "properties": { - "CellChangeSubscription": { - "$ref": "#/definitions/CellChangeSubscription" - } - } - }, - "examples": { - "application/json": { - "CellChangeSubscription": { - "callbackReference": "http://meAppClient.example.com/rni/v1/notifications/cell_change/77777", - "_links": { - "self": "http://meAppServer.example.com/rni/v1/subscriptions/cell_change/sub123" - }, - "filterCriteria": { - "associateId": { - "type": "1", - "value": "192.0.2.0" - }, - "plmn": { - "mnc": "01", - "mcc": "001" - }, - "appInsId": "01", - "trigger": 6, - "cellId": "0x800000B" - }, - "expiryDeadline": { - "seconds": 1577836800, - "nanoSeconds": 0 - } - } - } - } - }, - "400": { - "description": "Bad Request", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "403": { - "description": "Forbidden", - "schema": { - "type": "object", - "required": [ - "ProblemDetails" - ], - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "404": { - "description": "Not Found", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "406": { - "description": "Not Acceptable", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "415": { - "description": "Unsupported Media Type", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "422": { - "description": "Unprocessable Entity", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - }, - "examples": { - "application/problem+json": { - "ProblemDetails": { - "type": "https://meAppServer.example.com/rni/v1/probs/too-many-targets", - "title": "Too many targets", - "status": "422", - "detail": "The target area for the request is considered too large", - "instance": "/meAppClient.example.com/77777/msgs/abc" - } - } - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - } - }, - "x-swagger-router-controller": "Default" - } - }, - "/subscriptions/cell_change/{subscriptionId}": { - "get": { - "description": "Get cell change subscription information", - "operationId": "CellChange_subscriptionsGET", - "produces": [ - "application/json", - "application/problem+json" - ], - "parameters": [ - { - "$ref": "#/parameters/Path.subscrId" - } - ], - "responses": { - "200": { - "description": "Subscription information regarding cell change notifications", - "schema": { - "type": "object", - "required": [ - "CellChangeSubscription" - ], - "properties": { - "CellChangeSubscription": { - "$ref": "#/definitions/CellChangeSubscription" - } - } - }, - "examples": { - "application/json": { - "CellChangeSubscription": { - "callbackReference": "http://meAppClient.example.com/rni/v1/notifications/cell_change/77777", - "_links": { - "self": "http://meAppServer.example.com/rni/v1/subscriptions/cell_change/sub123" - }, - "filterCriteria": { - "appInsId": "01", - "associateId": { - "type": "1", - "value": "192.0.2.0" - }, - "plmn": { - "mnc": "01", - "mcc": "001" - }, - "cellId": "0x800000B", - "hoStatus": 3 - }, - "expiryDeadline": { - "seconds": 1577836800, - "nanoSeconds": 0 - } - } - } - } - }, - "400": { - "description": "Bad Request", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "403": { - "description": "Forbidden", - "schema": { - "type": "object", - "required": [ - "ProblemDetails" - ], - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "404": { - "description": "Not Found", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "406": { - "description": "Not Acceptable", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - } - } - }, - "put": { - "description": "Updates a subscription to cell change notifications from Radio Network Information Service", - "operationId": "CellChange_subscriptionsPUT", - "produces": [ - "application/json", - "application/problem+json" - ], - "parameters": [ - { - "$ref": "#/parameters/Body.CellChangeSubscription" - }, - { - "$ref": "#/parameters/Path.subscrId" - } - ], - "responses": { - "200": { - "description": "Successful subscription to response to cell change notifications", - "schema": { - "type": "object", - "properties": { - "CellChangeSubscription": { - "$ref": "#/definitions/CellChangeSubscription" - } - } - }, - "examples": { - "application/json": { - "CellChangeSubscription": { - "callbackReference": "http://meAppClient.example.com/rni/v1/notifications/cell_change/77777", - "_links": { - "self": "http://meAppServer.example.com/rni/v1/subscriptions/cell_change/sub123" - }, - "filterCriteria": { - "appInsId": "01", - "associateId": { - "type": "1", - "value": "192.0.2.0" - }, - "plmn": { - "mnc": "01", - "mcc": "001" - }, - "cellId": "0x800000B", - "hoStatus": 3 - }, - "expiryDeadline": { - "seconds": 1577836800, - "nanoSeconds": 0 - } - } - } - } - }, - "400": { - "description": "Bad Request", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "403": { - "description": "Forbidden", - "schema": { - "type": "object", - "required": [ - "ProblemDetails" - ], - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "404": { - "description": "Not Found", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "406": { - "description": "Not Acceptable", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "412": { - "description": "Precondition failed", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "422": { - "description": "Unprocessable Entity", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - }, - "examples": { - "application/problem+json": { - "ProblemDetails": { - "type": "https://meAppServer.example.com/rni/v1/probs/too-many-targets", - "title": "Too many targets", - "status": "422", - "detail": "The target area for the request is considered too large", - "instance": "/meAppClient.example.com/77777/msgs/abc" - } - } - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - } - } - }, - "delete": { - "description": "Method to delete a subscription", - "operationId": "CellChange_subscriptionsSubscrIdDELETE", - "produces": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/Path.subscrId" - } - ], - "responses": { - "204": { - "description": "No Content" - } - }, - "x-swagger-router-controller": "Default" - } - }, - "/subscriptions/s1_bearer": { - "get": { - "description": "The GET method can be used to request information about the s1_bearer subscriptions for this requestor", - "operationId": "SubscriptionLinkList_subscriptions_s1_GET", - "produces": [ - "application/json", - "application/problem+json" - ], - "responses": { - "200": { - "description": "Response body contains the list of links to requestors s1_bearer subscriptions.", - "schema": { - "type": "object", - "required": [ - "SubscriptionLinkList" - ], - "properties": { - "SubscriptionLinkList": { - "$ref": "#/definitions/SubscriptionLinkList" - } - } - }, - "examples": { - "application/json": { - "SubscriptionLinkList": { - "_links": { - "self": "http://meAppServer.example.com/rni/v1/subscriptions/s1_bearer", - "susbcription": [ - { - "href": "http://meAppClient.example.com/rni/v1/notifications/s1_bearer/77777", - "subscriptionType": "S1_BEARER" - }, - { - "href": "http://meAppClient.example.com/rni/v1/notifications/s1_bearer/77778", - "subscriptionType": "S1_BEARER" - } - ] - } - } - } - } - }, - "400": { - "description": "Bad Request", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "403": { - "description": "Forbidden", - "schema": { - "type": "object", - "required": [ - "ProblemDetails" - ], - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "404": { - "description": "Not Found", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "406": { - "description": "Not Acceptable", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - } - }, - "x-swagger-router-controller": "Default" - }, - "post": { - "description": "Creates a subscription to S1 bearer notifications from Radio Network Information Service", - "operationId": "S1BearerSubscription_subscriptionsPOST", - "produces": [ - "application/json", - "application/problem+json" - ], - "parameters": [ - { - "$ref": "#/parameters/Body.S1BearerSubscriptionPost" - } - ], - "responses": { - "201": { - "description": "Successful subscription to response to S1 Bearer notifications", - "schema": { - "type": "object", - "properties": { - "S1BearerSubscription": { - "$ref": "#/definitions/S1BearerSubscription" - } - } - }, - "examples": { - "application/json": { - "S1BearerSubscription": { - "callbackReference": "http://meAppClient.example.com/rni/v1/notifications/s1_bearer/77777", - "_links": { - "self": "http://meAppServer.example.com/rni/v1/subscriptions/s1_bearer/sub123" - }, - "eventType": 1, - "s1BearerSubscriptionCriteria": { - "associateId": { - "type": "1", - "value": "192.0.2.0" - }, - "plmn": { - "mnc": "01", - "mcc": "001" - }, - "cellId": "0x800000B", - "erabId": 1 - }, - "expiryDeadline": { - "seconds": 1577836800, - "nanoSeconds": 0 - } - } - } - } - }, - "400": { - "description": "Bad Request", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "403": { - "description": "Forbidden", - "schema": { - "type": "object", - "required": [ - "ProblemDetails" - ], - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "404": { - "description": "Not Found", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "406": { - "description": "Not Acceptable", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "415": { - "description": "Unsupported Media Type", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "422": { - "description": "Unprocessable Entity", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - }, - "examples": { - "application/problem+json": { - "ProblemDetails": { - "type": "https://meAppServer.example.com/rni/v1/probs/too-many-targets", - "title": "Too many targets", - "status": "422", - "detail": "The target area for the request is considered too large", - "instance": "/meAppClient.example.com/77777/msgs/abc" - } - } - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - } - }, - "x-swagger-router-controller": "Default" - } - }, - "/subscriptions/s1_bearer/{subscriptionId}": { - "get": { - "description": "Gets a subscription to S1 bearer notifications from Radio Network Information Service", - "operationId": "S1BearerSubscription_subscriptionsGET", - "produces": [ - "application/json", - "application/problem+json" - ], - "parameters": [ - { - "$ref": "#/parameters/Path.subscrId" - } - ], - "responses": { - "200": { - "description": "Successful subscription to response to S1 Bearer notifications", - "schema": { - "type": "object", - "properties": { - "S1BearerSubscription": { - "$ref": "#/definitions/S1BearerSubscription" - } - } - }, - "examples": { - "application/json": { - "S1BearerSubscription": { - "callbackReference": "http://meAppClient.example.com/rni/v1/notifications/s1_bearer/77777", - "_links": { - "self": "http://meAppServer.example.com/rni/v1/subscriptions/s1_bearer/sub123" - }, - "eventType": 1, - "s1BearerSubscriptionCriteria": { - "associateId": { - "type": "1", - "value": "192.0.2.0" - }, - "plmn": { - "mnc": "01", - "mcc": "001" - }, - "cellId": "0x800000B", - "erabId": 1 - }, - "expiryDeadline": { - "seconds": 1577836800, - "nanoSeconds": 0 - } - } - } - } - }, - "400": { - "description": "Bad Request", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "403": { - "description": "Forbidden", - "schema": { - "type": "object", - "required": [ - "ProblemDetails" - ], - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "404": { - "description": "Not Found", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "406": { - "description": "Not Acceptable", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - } - } - }, - "put": { - "description": "Updates a subscription to S1 bearer notifications from Radio Network Information Service", - "operationId": "S1BearerSubscription_subscriptionsPUT", - "produces": [ - "application/json", - "application/problem+json" - ], - "parameters": [ - { - "$ref": "#/parameters/Path.subscrId" - }, - { - "$ref": "#/parameters/Body.S1BearerSubscription" - } - ], - "responses": { - "200": { - "description": "Successful subscription update to response to S1 Bearer notifications", - "schema": { - "type": "object", - "properties": { - "S1BearerSubscription": { - "$ref": "#/definitions/S1BearerSubscription" - } - } - }, - "examples": { - "application/json": { - "S1BearerSubscription": { - "callbackReference": "http://meAppClient.example.com/rni/v1/notifications/s1_bearer/77777", - "_links": { - "self": "http://meAppServer.example.com/rni/v1/subscriptions/s1_bearer/sub123" - }, - "eventType": 1, - "s1BearerSubscriptionCriteria": { - "associateId": { - "type": "1", - "value": "192.0.2.0" - }, - "plmn": { - "mnc": "01", - "mcc": "001" - }, - "cellId": "0x800000B", - "erabId": 1 - }, - "expiryDeadline": { - "seconds": 1577836800, - "nanoSeconds": 0 - } - } - } - } - }, - "400": { - "description": "Bad Request", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "403": { - "description": "Forbidden", - "schema": { - "type": "object", - "required": [ - "ProblemDetails" - ], - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "404": { - "description": "Not Found", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "406": { - "description": "Not Acceptable", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "412": { - "description": "Precondition failed", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "422": { - "description": "Unprocessable Entity", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - }, - "examples": { - "application/problem+json": { - "ProblemDetails": { - "type": "https://meAppServer.example.com/rni/v1/probs/too-many-targets", - "title": "Too many targets", - "status": "422", - "detail": "The target area for the request is considered too large", - "instance": "/meAppClient.example.com/77777/msgs/abc" - } - } - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - } - } - }, - "delete": { - "description": "Method to delete a subscription", - "operationId": "S1Bearer_subscriptionsSubscrIdDELETE", - "produces": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/Path.subscrId" - } - ], - "responses": { - "204": { - "description": "No Content" - } - }, - "x-swagger-router-controller": "Default" - } - }, - "/subscriptions/ta": { - "get": { - "description": "The GET method can be used to request information about the ta subscriptions for this requestor", - "operationId": "SubscriptionLinkList_subscriptions_ta_GET", - "produces": [ - "application/json", - "application/problem+json" - ], - "responses": { - "200": { - "description": "Response body contains the list of links to requestors ta subscriptions.", - "schema": { - "type": "object", - "required": [ - "SubscriptionLinkList" - ], - "properties": { - "SubscriptionLinkList": { - "$ref": "#/definitions/SubscriptionLinkList" - } - } - }, - "examples": { - "application/json": { - "SubscriptionLinkList": { - "_links": { - "self": "http://meAppServer.example.com/rni/v1/subscriptions/ta", - "susbcription": [ - { - "href": "http://meAppClient.example.com/rni/v1/notifications/ta/77777", - "subscriptionType": "MEAS_REPORT_UE" - }, - { - "href": "http://meAppClient.example.com/rni/v1/notifications/ta/77778", - "subscriptionType": "MEAS_REPORT_UE" - } - ] - } - } - } - } - }, - "400": { - "description": "Bad Request", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "403": { - "description": "Forbidden", - "schema": { - "type": "object", - "required": [ - "ProblemDetails" - ], - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "404": { - "description": "Not Found", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "406": { - "description": "Not Acceptable", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - } - }, - "x-swagger-router-controller": "Default" - }, - "post": { - "description": "Creates a subscription to UE Timing Advance notifications from Radio Network Information Service", - "operationId": "MeasTa_subscriptionsPOST", - "produces": [ - "application/json", - "application/problem+json" - ], - "parameters": [ - { - "$ref": "#/parameters/Body.MeasTaSubscriptionPost" - } - ], - "responses": { - "201": { - "description": "Successful subscription to response to UE Timing Advance notifications", - "schema": { - "type": "object", - "properties": { - "MeasTaSubscription": { - "$ref": "#/definitions/MeasTaSubscription" - } - } - }, - "examples": { - "application/json": { - "MeasTaSubscription": { - "callbackReference": "http://meAppClient.example.com/rni/v1/notifications/ta/77777", - "_links": { - "self": "http://meAppServer.example.com/rni/v1/subscriptions/ta/sub123" - }, - "filterCriteria": { - "associateId": { - "type": "1", - "value": "192.0.2.0" - }, - "plmn": { - "mnc": "01", - "mcc": "001" - }, - "appInsId": "01", - "trigger": 6, - "cellId": "0x800000B" - }, - "expiryDeadline": { - "seconds": 1577836800, - "nanoSeconds": 0 - } - } - } - } - }, - "400": { - "description": "Bad Request", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "403": { - "description": "Forbidden", - "schema": { - "type": "object", - "required": [ - "ProblemDetails" - ], - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "404": { - "description": "Not Found", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "406": { - "description": "Not Acceptable", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "415": { - "description": "Unsupported Media Type", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "422": { - "description": "Unprocessable Entity", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - }, - "examples": { - "application/problem+json": { - "ProblemDetails": { - "type": "https://meAppServer.example.com/rni/v1/probs/too-many-targets", - "title": "Too many targets", - "status": "422", - "detail": "The target area for the request is considered too large", - "instance": "/meAppClient.example.com/77777/msgs/abc" - } - } - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - } - }, - "x-swagger-router-controller": "Default" - } - }, - "/subscriptions/ta/{subscriptionId}": { - "get": { - "description": "Gets UE Timing Advance subscription information from Radio Network Information Service", - "operationId": "MeasTa_subscriptionsGET", - "produces": [ - "application/json", - "application/problem+json" - ], - "parameters": [ - { - "$ref": "#/parameters/Path.subscrId" - } - ], - "responses": { - "200": { - "description": "Subscription information regarding UE Timing Advance notifications", - "schema": { - "type": "object", - "required": [ - "MeasTaSubscription" - ], - "properties": { - "MeasTaSubscription": { - "$ref": "#/definitions/MeasTaSubscription" - } - } - }, - "examples": { - "application/json": { - "MeasTaSubscription": { - "callbackReference": "http://meAppClient.example.com/rni/v1/notifications/ta/77777", - "_links": { - "self": "http://meAppServer.example.com/rni/v1/subscriptions/ta/sub123" - }, - "filterCriteria": { - "associateId": { - "type": "1", - "value": "192.0.2.0" - }, - "plmn": { - "mnc": "01", - "mcc": "001" - }, - "appInsId": "01", - "trigger": 6, - "cellId": "0x800000B" - }, - "expiryDeadline": { - "seconds": 1577836800, - "nanoSeconds": 0 - } - } - } - } - }, - "400": { - "description": "Bad Request", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "403": { - "description": "Forbidden", - "schema": { - "type": "object", - "required": [ - "ProblemDetails" - ], - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "404": { - "description": "Not Found", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "406": { - "description": "Not Acceptable", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - } - } - }, - "put": { - "description": "Updates a subscription to UE Timing Advance notifications from Radio Network Information Service", - "operationId": "MeasTa_subscriptionsPUT", - "produces": [ - "application/json", - "application/problem+json" - ], - "parameters": [ - { - "$ref": "#/parameters/Path.subscrId" - }, - { - "$ref": "#/parameters/Body.MeasTaSubscription" - } - ], - "responses": { - "200": { - "description": "Successful subscription to response to UE Timing Advance notifications", - "schema": { - "type": "object", - "properties": { - "MeasTaSubscription": { - "$ref": "#/definitions/MeasTaSubscription" - } - } - }, - "examples": { - "application/json": { - "MeasTaSubscription": { - "callbackReference": "http://meAppClient.example.com/rni/v1/notifications/ta/77777", - "_links": { - "self": "http://meAppServer.example.com/rni/v1/subscriptions/ta/sub123" - }, - "filterCriteria": { - "associateId": { - "type": "1", - "value": "192.0.2.0" - }, - "plmn": { - "mnc": "01", - "mcc": "001" - }, - "appInsId": "01", - "trigger": 6, - "cellId": "0x800000B" - }, - "expiryDeadline": { - "seconds": 1577836800, - "nanoSeconds": 0 - } - } - } - } - }, - "400": { - "description": "Bad Request", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "403": { - "description": "Forbidden", - "schema": { - "type": "object", - "required": [ - "ProblemDetails" - ], - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "404": { - "description": "Not Found", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "406": { - "description": "Not Acceptable", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "412": { - "description": "Precondition failed", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "422": { - "description": "Unprocessable Entity", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - }, - "examples": { - "application/problem+json": { - "ProblemDetails": { - "type": "https://meAppServer.example.com/rni/v1/probs/too-many-targets", - "title": "Too many targets", - "status": "422", - "detail": "The target area for the request is considered too large", - "instance": "/meAppClient.example.com/77777/msgs/abc" - } - } - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - } - } - }, - "delete": { - "description": "Method to delete a subscription", - "operationId": "MeasTa_subscriptionsSubscrIdDELETE", - "produces": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/Path.subscrId" - } - ], - "responses": { - "204": { - "description": "No Content" - } - }, - "x-swagger-router-controller": "Default" - } - }, - "/subscriptions/meas_rep_ue": { - "get": { - "description": "The GET method can be used to request information about the meas_rep_ue subscriptions for this requestor", - "operationId": "SubscriptionLinkList_subscriptions_mr_GET", - "produces": [ - "application/json", - "application/problem+json" - ], - "responses": { - "200": { - "description": "Response body contains the list of links to requestors meas_rep_ue subscriptions.", - "schema": { - "type": "object", - "required": [ - "SubscriptionLinkList" - ], - "properties": { - "SubscriptionLinkList": { - "$ref": "#/definitions/SubscriptionLinkList" - } - } - }, - "examples": { - "application/json": { - "SubscriptionLinkList": { - "_links": { - "self": "http://meAppServer.example.com/rni/v1/subscriptions/meas_rep_ue", - "susbcription": [ - { - "href": "http://meAppClient.example.com/rni/v1/notifications/meas_rep_ue/77777", - "subscriptionType": "MEAS_REPORT_UE" - }, - { - "href": "http://meAppClient.example.com/rni/v1/notifications/meas_rep_ue/77778", - "subscriptionType": "MEAS_REPORT_UE" - } - ] - } - } - } - } - }, - "400": { - "description": "Bad Request", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "403": { - "description": "Forbidden", - "schema": { - "type": "object", - "required": [ - "ProblemDetails" - ], - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "404": { - "description": "Not Found", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "406": { - "description": "Not Acceptable", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - } - }, - "x-swagger-router-controller": "Default" - }, - "post": { - "description": "Creates a subscription to UE measurement report notifications from Radio Network Information Service", - "operationId": "MeasRepUe_subscriptionsPOST", - "produces": [ - "application/json", - "application/problem+json" - ], - "parameters": [ - { - "$ref": "#/parameters/Body.MeasRepUeSubscriptionPost" - } - ], - "responses": { - "201": { - "description": "Successful subscription to response to UE measurement report notifications", - "schema": { - "type": "object", - "properties": { - "MeasRepUeSubscription": { - "$ref": "#/definitions/MeasRepUeSubscription" - } - } - }, - "examples": { - "application/json": { - "MeasRepUeSubscription": { - "callbackReference": "http://meAppClient.example.com/rni/v1/notifications/meas_rep_ue/77777", - "_links": { - "self": "http://meAppServer.example.com/rni/v1/subscriptions/meas_rep_ue/sub123" - }, - "filterCriteria": { - "associateId": { - "type": "1", - "value": "192.0.2.0" - }, - "plmn": { - "mnc": "01", - "mcc": "001" - }, - "appInsId": "01", - "trigger": 6, - "cellId": "0x800000B" - }, - "expiryDeadline": { - "seconds": 1577836800, - "nanoSeconds": 0 - } - } - } - } - }, - "400": { - "description": "Bad Request", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "403": { - "description": "Forbidden", - "schema": { - "type": "object", - "required": [ - "ProblemDetails" - ], - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "404": { - "description": "Not Found", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "406": { - "description": "Not Acceptable", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "415": { - "description": "Unsupported Media Type", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "422": { - "description": "Unprocessable Entity", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - }, - "examples": { - "application/problem+json": { - "ProblemDetails": { - "type": "https://meAppServer.example.com/rni/v1/probs/too-many-targets", - "title": "Too many targets", - "status": "422", - "detail": "The target area for the request is considered too large", - "instance": "/meAppClient.example.com/77777/msgs/abc" - } - } - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - } - }, - "x-swagger-router-controller": "Default" - } - }, - "/subscriptions/meas_rep_ue/{subscriptionId}": { - "get": { - "description": "Gets a subscription to UE measurement report notifications from Radio Network Information Service", - "operationId": "MeasRepUe_subscriptionsGET", - "produces": [ - "application/json", - "application/problem+json" - ], - "parameters": [ - { - "$ref": "#/parameters/Path.subscrId" - } - ], - "responses": { - "200": { - "description": "Successful subscription to response to UE measurement report notifications", - "schema": { - "type": "object", - "required": [ - "MeasRepUeSubscription" - ], - "properties": { - "MeasRepUeSubscription": { - "$ref": "#/definitions/MeasRepUeSubscription" - } - } - }, - "examples": { - "application/json": { - "MeasRepUeSubscription": { - "callbackReference": "http://meAppClient.example.com/rni/v1/notifications/meas_rep_ue/77777", - "_links": { - "self": "http://meAppServer.example.com/rni/v1/subscriptions/meas_rep_ue/sub123" - }, - "filterCriteria": { - "associateId": { - "type": "1", - "value": "192.0.2.0" - }, - "plmn": { - "mnc": "01", - "mcc": "001" - }, - "appInsId": "01", - "trigger": 6, - "cellId": "0x800000B" - }, - "expiryDeadline": { - "seconds": 1577836800, - "nanoSeconds": 0 - } - } - } - } - }, - "400": { - "description": "Bad Request", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "403": { - "description": "Forbidden", - "schema": { - "type": "object", - "required": [ - "ProblemDetails" - ], - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "404": { - "description": "Not Found", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "406": { - "description": "Not Acceptable", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - } - } - }, - "put": { - "description": "Updates a subscription to UE measurement report notifications from Radio Network Information Service", - "operationId": "MeasRepUeReport_subscriptionsPUT", - "produces": [ - "application/json", - "application/problem+json" - ], - "parameters": [ - { - "$ref": "#/parameters/Path.subscrId" - }, - { - "$ref": "#/parameters/Body.MeasRepUeSubscription" - } - ], - "responses": { - "200": { - "description": "Successful update subscription to response to UE measurement report notifications", - "schema": { - "type": "object", - "properties": { - "MeasRepUeSubscription": { - "$ref": "#/definitions/MeasRepUeSubscription" - } - } - }, - "examples": { - "application/json": { - "MeasRepUeSubscription": { - "callbackReference": "http://meAppClient.example.com/rni/v1/notifications/meas_rep_ue/77777", - "_links": { - "self": "http://meAppServer.example.com/rni/v1/subscriptions/meas_rep_ue/sub123" - }, - "filterCriteria": { - "associateId": { - "type": "1", - "value": "192.0.2.0" - }, - "plmn": { - "mnc": "01", - "mcc": "001" - }, - "appInsId": "01", - "trigger": 6, - "cellId": "0x800000B" - }, - "expiryDeadline": { - "seconds": 1577836800, - "nanoSeconds": 0 - } - } - } - } - }, - "400": { - "description": "Bad Request", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "403": { - "description": "Forbidden", - "schema": { - "type": "object", - "required": [ - "ProblemDetails" - ], - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "404": { - "description": "Not Found", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "406": { - "description": "Not Acceptable", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "412": { - "description": "Precondition failed", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "422": { - "description": "Unprocessable Entity", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - }, - "examples": { - "application/problem+json": { - "ProblemDetails": { - "type": "https://meAppServer.example.com/rni/v1/probs/too-many-targets", - "title": "Too many targets", - "status": "422", - "detail": "The target area for the request is considered too large", - "instance": "/meAppClient.example.com/77777/msgs/abc" - } - } - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - } - } - }, - "delete": { - "description": "Method to delete a subscription", - "operationId": "MeasRepUe_subscriptionsSubscrIdDELETE", - "produces": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/Path.subscrId" - } - ], - "responses": { - "204": { - "description": "No Content. Successful deletion of UE Measurment Report subscription" - } - }, - "x-swagger-router-controller": "Default" - } - }, - "/subscriptions/rab_est": { - "get": { - "description": "The GET method can be used to request information about the rab_est subscriptions for this requestor", - "operationId": "SubscriptionLinkList_subscriptions_re_GET", - "produces": [ - "application/json", - "application/problem+json" - ], - "responses": { - "200": { - "description": "Response body contains the list of links to requestors rab_est subscriptions.", - "schema": { - "type": "object", - "required": [ - "SubscriptionLinkList" - ], - "properties": { - "SubscriptionLinkList": { - "$ref": "#/definitions/SubscriptionLinkList" - } - } - }, - "examples": { - "application/json": { - "SubscriptionLinkList": { - "_links": { - "self": "http://meAppServer.example.com/rni/v1/subscriptions/rab_est", - "susbcription": [ - { - "href": "http://meAppClient.example.com/rni/v1/notifications/rab_est/77777", - "subscriptionType": "RAB_ESTABLISHMENT" - }, - { - "href": "http://meAppClient.example.com/rni/v1/notifications/rab_est/77778", - "subscriptionType": "RAB_ESTABLISHMENT" - } - ] - } - } - } - } - }, - "400": { - "description": "Bad Request", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "403": { - "description": "Forbidden", - "schema": { - "type": "object", - "required": [ - "ProblemDetails" - ], - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "404": { - "description": "Not Found", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "406": { - "description": "Not Acceptable", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - } - }, - "x-swagger-router-controller": "Default" - }, - "post": { - "description": "Creates a subscription to RAB establishment notifications from Radio Network Information Service", - "operationId": "RabEstSubscription_subscriptionsPOST", - "produces": [ - "application/json", - "application/problem+json" - ], - "parameters": [ - { - "$ref": "#/parameters/Body.RabEstSubscriptionPost" - } - ], - "responses": { - "201": { - "description": "Successful subscription to RAB establishment notifications", - "schema": { - "type": "object", - "properties": { - "RabEstSubscription": { - "$ref": "#/definitions/RabEstSubscription" - } - } - }, - "examples": { - "application/json": { - "RabEstSubscription": { - "callbackReference": "http://meAppClient.example.com/rni/v1/notifications/rab_est/77777", - "_links": { - "self": "http://meAppServer.example.com/rni/v1/subscriptions/rab_est/sub123" - }, - "filterCriteriaAssocQci": { - "appInsId": "app01", - "associateId": { - "type": "1", - "value": "192.0.2.0" - }, - "plmn": { - "mnc": "01", - "mcc": "001" - }, - "cellId": "0x800000B", - "qci": 1 - }, - "expiryDeadline": { - "seconds": 1577836800, - "nanoSeconds": 0 - } - } - } - } - }, - "400": { - "description": "Bad Request", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "403": { - "description": "Forbidden", - "schema": { - "type": "object", - "required": [ - "ProblemDetails" - ], - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "404": { - "description": "Not Found", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "406": { - "description": "Not Acceptable", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "415": { - "description": "Unsupported Media Type", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "422": { - "description": "Unprocessable Entity", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - }, - "examples": { - "application/problem+json": { - "ProblemDetails": { - "type": "https://meAppServer.example.com/rni/v1/probs/too-many-targets", - "title": "Too many targets", - "status": "422", - "detail": "The target area for the request is considered too large", - "instance": "/meAppClient.example.com/77777/msgs/abc" - } - } - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - } - }, - "x-swagger-router-controller": "Default" - } - }, - "/subscriptions/rab_est/{subscriptionId}": { - "get": { - "description": "Gets a subscription to RAB establishment notifications from Radio Network Information Service", - "operationId": "RabEstSubscription_subscriptionsGET", - "produces": [ - "application/json", - "application/problem+json" - ], - "parameters": [ - { - "$ref": "#/parameters/Path.subscrId" - } - ], - "responses": { - "200": { - "description": "Subscription information regarding RAB establishment notifications", - "schema": { - "type": "object", - "required": [ - "RabEstSubscription" - ], - "properties": { - "RabEstSubscription": { - "$ref": "#/definitions/RabEstSubscription" - } - } - }, - "examples": { - "application/json": { - "RabEstSubscription": { - "callbackReference": "http://meAppClient.example.com/rni/v1/notifications/rab_est/77777", - "_links": { - "self": "http://meAppServer.example.com/rni/v1/subscriptions/rab_est/sub123" - }, - "filterCriteriaAssocQci": { - "appInsId": "app01", - "associateId": { - "type": "1", - "value": "192.0.2.0" - }, - "plmn": { - "mnc": "01", - "mcc": "001" - }, - "cellId": "0x800000B", - "qci": 1 - }, - "expiryDeadline": { - "seconds": 1577836800, - "nanoSeconds": 0 - } - } - } - } - }, - "400": { - "description": "Bad Request", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "403": { - "description": "Forbidden", - "schema": { - "type": "object", - "required": [ - "ProblemDetails" - ], - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "404": { - "description": "Not Found", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "406": { - "description": "Not Acceptable", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - } - } - }, - "put": { - "description": "Updates a subscription to RAB establishment notifications from Radio Network Information Service", - "operationId": "RabEstSubscription_subscriptionsPUT", - "produces": [ - "application/json", - "application/problem+json" - ], - "parameters": [ - { - "$ref": "#/parameters/Path.subscrId" - }, - { - "$ref": "#/parameters/Body.RabEstSubscription" - } - ], - "responses": { - "200": { - "description": "Successful subscription update to RAB establishment notifications", - "schema": { - "type": "object", - "properties": { - "RabEstSubscription": { - "$ref": "#/definitions/RabEstSubscription" - } - } - }, - "examples": { - "application/json": { - "RabEstSubscription": { - "callbackReference": "http://meAppClient.example.com/rni/v1/notifications/rab_est/77777", - "_links": { - "self": "http://meAppServer.example.com/rni/v1/subscriptions/rab_est/sub123" - }, - "filterCriteriaAssocQci": { - "appInsId": "app01", - "associateId": { - "type": "1", - "value": "192.0.2.0" - }, - "plmn": { - "mnc": "01", - "mcc": "001" - }, - "cellId": "0x800000B", - "qci": 1 - }, - "expiryDeadline": { - "seconds": 1577836800, - "nanoSeconds": 0 - } - } - } - } - }, - "400": { - "description": "Bad Request", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "403": { - "description": "Forbidden", - "schema": { - "type": "object", - "required": [ - "ProblemDetails" - ], - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "404": { - "description": "Not Found", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "406": { - "description": "Not Acceptable", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "412": { - "description": "Precondition failed", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "422": { - "description": "Unprocessable Entity", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - }, - "examples": { - "application/problem+json": { - "ProblemDetails": { - "type": "https://meAppServer.example.com/rni/v1/probs/too-many-targets", - "title": "Too many targets", - "status": "422", - "detail": "The target area for the request is considered too large", - "instance": "/meAppClient.example.com/77777/msgs/abc" - } - } - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - } - } - }, - "delete": { - "description": "Method to delete a subscription", - "operationId": "RabEst_subscriptionsSubscrIdDELETE", - "produces": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/Path.subscrId" - } - ], - "responses": { - "204": { - "description": "No Content. Successful deletion of Rab Establishment subscription" - } - }, - "x-swagger-router-controller": "Default" - } - }, - "/subscriptions/rab_mod": { - "get": { - "description": "The GET method can be used to request information about the rab_mod subscriptions for this requestor", - "operationId": "SubscriptionLinkList_subscriptions_rm_GET", - "produces": [ - "application/json", - "application/problem+json" - ], - "responses": { - "200": { - "description": "Response body contains the list of links to requestors rab_mod subscriptions.", - "schema": { - "type": "object", - "required": [ - "SubscriptionLinkList" - ], - "properties": { - "SubscriptionLinkList": { - "$ref": "#/definitions/SubscriptionLinkList" - } - } - }, - "examples": { - "application/json": { - "SubscriptionLinkList": { - "_links": { - "self": "http://meAppServer.example.com/rni/v1/subscriptions/rab_mod", - "susbcription": [ - { - "href": "http://meAppClient.example.com/rni/v1/notifications/rab_mod/77777", - "subscriptionType": "RAB_MODIFICATION" - }, - { - "href": "http://meAppClient.example.com/rni/v1/notifications/rab_mod/77778", - "subscriptionType": "RAB_MODIFICATION" - } - ] - } - } - } - } - }, - "400": { - "description": "Bad Request", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "403": { - "description": "Forbidden", - "schema": { - "type": "object", - "required": [ - "ProblemDetails" - ], - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "404": { - "description": "Not Found", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "406": { - "description": "Not Acceptable", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - } - }, - "x-swagger-router-controller": "Default" - }, - "post": { - "description": "Creates a subscription to RAB Modification notifications from Radio Network Information Service", - "operationId": "RabModSubscription_subscriptionsPOST", - "produces": [ - "application/json", - "application/problem+json" - ], - "parameters": [ - { - "$ref": "#/parameters/Body.RabModSubscriptionPost" - } - ], - "responses": { - "201": { - "description": "Successful subscription to RAB Modification notifications", - "schema": { - "type": "object", - "properties": { - "RabModSubscription": { - "$ref": "#/definitions/RabModSubscription" - } - } - }, - "examples": { - "application/json": { - "RabModSubscription": { - "callbackReference": "http://meAppClient.example.com/rni/v1/notifications/rab_mod/77777", - "_links": { - "self": "http://meAppServer.example.com/rni/v1/subscriptions/rab_mod/sub123" - }, - "filterCriteriaAssocQci": { - "appInsId": "app01", - "associateId": { - "type": "1", - "value": "192.0.2.0" - }, - "plmn": { - "mnc": "01", - "mcc": "001" - }, - "cellId": "0x800000B", - "qci": 1 - }, - "expiryDeadline": { - "seconds": 1577836800, - "nanoSeconds": 0 - } - } - } - } - }, - "400": { - "description": "Bad Request", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "403": { - "description": "Forbidden", - "schema": { - "type": "object", - "required": [ - "ProblemDetails" - ], - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "404": { - "description": "Not Found", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "406": { - "description": "Not Acceptable", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "415": { - "description": "Unsupported Media Type", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "422": { - "description": "Unprocessable Entity", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - }, - "examples": { - "application/problem+json": { - "ProblemDetails": { - "type": "https://meAppServer.example.com/rni/v1/probs/too-many-targets", - "title": "Too many targets", - "status": "422", - "detail": "The target area for the request is considered too large", - "instance": "/meAppClient.example.com/77777/msgs/abc" - } - } - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - } - }, - "x-swagger-router-controller": "Default" - } - }, - "/subscriptions/rab_mod/{subscriptionId}": { - "get": { - "description": "Gets a subscription to RAB Modification notifications from Radio Network Information Service", - "operationId": "RabModSubscription_subscriptionsGET", - "produces": [ - "application/json", - "application/problem+json" - ], - "parameters": [ - { - "$ref": "#/parameters/Path.subscrId" - } - ], - "responses": { - "200": { - "description": "Subscription information regarding RAB Modification notifications", - "schema": { - "type": "object", - "required": [ - "RabModSubscription" - ], - "properties": { - "RabModSubscription": { - "$ref": "#/definitions/RabModSubscription" - } - } - }, - "examples": { - "application/json": { - "RabModSubscription": { - "callbackReference": "http://meAppClient.example.com/rni/v1/notifications/rab_mod/77777", - "_links": { - "self": "http://meAppServer.example.com/rni/v1/subscriptions/rab_mod/sub123" - }, - "filterCriteriaAssocQci": { - "appInsId": "app01", - "associateId": { - "type": "1", - "value": "192.0.2.0" - }, - "plmn": { - "mnc": "01", - "mcc": "001" - }, - "cellId": "0x800000B", - "qci": 1 - }, - "expiryDeadline": { - "seconds": 1577836800, - "nanoSeconds": 0 - } - } - } - } - }, - "400": { - "description": "Bad Request", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "403": { - "description": "Forbidden", - "schema": { - "type": "object", - "required": [ - "ProblemDetails" - ], - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "404": { - "description": "Not Found", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "406": { - "description": "Not Acceptable", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - } - } - }, - "put": { - "description": "Updates a subscription to RAB Modification notifications from Radio Network Information Service", - "operationId": "RabModSubscription_subscriptionsPUT", - "produces": [ - "application/json", - "application/problem+json" - ], - "parameters": [ - { - "$ref": "#/parameters/Path.subscrId" - }, - { - "$ref": "#/parameters/Body.RabModSubscription" - } - ], - "responses": { - "200": { - "description": "Successful subscription update to RAB Modification notifications", - "schema": { - "type": "object", - "properties": { - "RabModSubscription": { - "$ref": "#/definitions/RabModSubscription" - } - } - }, - "examples": { - "application/json": { - "RabModSubscription": { - "callbackReference": "http://meAppClient.example.com/rni/v1/notifications/rab_mod/77777", - "_links": { - "self": "http://meAppServer.example.com/rni/v1/subscriptions/rab_mod/sub123" - }, - "filterCriteriaAssocQci": { - "appInsId": "app01", - "associateId": { - "type": "1", - "value": "192.0.2.0" - }, - "plmn": { - "mnc": "01", - "mcc": "001" - }, - "cellId": "0x800000B", - "qci": 1 - }, - "expiryDeadline": { - "seconds": 1577836800, - "nanoSeconds": 0 - } - } - } - } - }, - "400": { - "description": "Bad Request", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "403": { - "description": "Forbidden", - "schema": { - "type": "object", - "required": [ - "ProblemDetails" - ], - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "404": { - "description": "Not Found", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "406": { - "description": "Not Acceptable", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "412": { - "description": "Precondition failed", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "422": { - "description": "Unprocessable Entity", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - }, - "examples": { - "application/problem+json": { - "ProblemDetails": { - "type": "https://meAppServer.example.com/rni/v1/probs/too-many-targets", - "title": "Too many targets", - "status": "422", - "detail": "The target area for the request is considered too large", - "instance": "/meAppClient.example.com/77777/msgs/abc" - } - } - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - } - } - }, - "delete": { - "description": "Method to delete a subscription", - "operationId": "RabMod_subscriptionsSubscrIdDELETE", - "produces": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/Path.subscrId" - } - ], - "responses": { - "204": { - "description": "No Content. Successful deletion of Rab Modification subscription" - } - }, - "x-swagger-router-controller": "Default" - } - }, - "/subscriptions/rab_rel": { - "get": { - "description": "The GET method can be used to request information about the rab_rel subscriptions for this requestor", - "operationId": "SubscriptionLinkList_subscriptions_rr_GET", - "produces": [ - "application/json", - "application/problem+json" - ], - "responses": { - "200": { - "description": "Response body contains the list of links to requestors rab_rel subscriptions.", - "schema": { - "type": "object", - "required": [ - "SubscriptionLinkList" - ], - "properties": { - "SubscriptionLinkList": { - "$ref": "#/definitions/SubscriptionLinkList" - } - } - }, - "examples": { - "application/json": { - "SubscriptionLinkList": { - "_links": { - "self": "http://meAppServer.example.com/rni/v1/subscriptions/rab_rel", - "susbcription": [ - { - "href": "http://meAppClient.example.com/rni/v1/notifications/rab_rel/77777", - "subscriptionType": "RAB_RELEASE" - }, - { - "href": "http://meAppClient.example.com/rni/v1/notifications/rab_rel/77778", - "subscriptionType": "RAB_RELEASE" - } - ] - } - } - } - } - }, - "400": { - "description": "Bad Request", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "403": { - "description": "Forbidden", - "schema": { - "type": "object", - "required": [ - "ProblemDetails" - ], - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "404": { - "description": "Not Found", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "406": { - "description": "Not Acceptable", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - } - }, - "x-swagger-router-controller": "Default" - }, - "post": { - "description": "Creates a subscription to RAB Release notifications from Radio Network Information Service", - "operationId": "RabRelSubscription_subscriptionsPOST", - "produces": [ - "application/json", - "application/problem+json" - ], - "parameters": [ - { - "$ref": "#/parameters/Body.RabRelSubscriptionPost" - } - ], - "responses": { - "201": { - "description": "Successful subscription to RAB Release notifications", - "schema": { - "type": "object", - "properties": { - "RabRelSubscription": { - "$ref": "#/definitions/RabRelSubscription" - } - } - }, - "examples": { - "application/json": { - "RabRelSubscription": { - "callbackReference": "http://meAppClient.example.com/rni/v1/notifications/rab_rel/77777", - "_links": { - "self": "http://meAppServer.example.com/rni/v1/subscriptions/rab_rel/sub123" - }, - "filterCriteriaAssocQci": { - "appInsId": "app01", - "associateId": { - "type": "1", - "value": "192.0.2.0" - }, - "plmn": { - "mnc": "01", - "mcc": "001" - }, - "cellId": "0x800000B", - "qci": 1 - }, - "expiryDeadline": { - "seconds": 1577836800, - "nanoSeconds": 0 - } - } - } - } - }, - "400": { - "description": "Bad Request", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "403": { - "description": "Forbidden", - "schema": { - "type": "object", - "required": [ - "ProblemDetails" - ], - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "404": { - "description": "Not Found", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "406": { - "description": "Not Acceptable", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "415": { - "description": "Unsupported Media Type", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "422": { - "description": "Unprocessable Entity", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - }, - "examples": { - "application/problem+json": { - "ProblemDetails": { - "type": "https://meAppServer.example.com/rni/v1/probs/too-many-targets", - "title": "Too many targets", - "status": "422", - "detail": "The target area for the request is considered too large", - "instance": "/meAppClient.example.com/77777/msgs/abc" - } - } - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - } - }, - "x-swagger-router-controller": "Default" - } - }, - "/subscriptions/rab_rel/{subscriptionId}": { - "get": { - "description": "Gets a subscription to RAB Release notifications from Radio Network Information Service", - "operationId": "RabRelSubscription_subscriptionsGET", - "produces": [ - "application/json", - "application/problem+json" - ], - "parameters": [ - { - "$ref": "#/parameters/Path.subscrId" - } - ], - "responses": { - "200": { - "description": "Subscription information regarding RAB Release notifications", - "schema": { - "type": "object", - "required": [ - "RabRelSubscription" - ], - "properties": { - "RabRelSubscription": { - "$ref": "#/definitions/RabRelSubscription" - } - } - }, - "examples": { - "application/json": { - "RabRelSubscription": { - "callbackReference": "http://meAppClient.example.com/rni/v1/notifications/rab_rel/77777", - "_links": { - "self": "http://meAppServer.example.com/rni/v1/subscriptions/rab_rel/sub123" - }, - "filterCriteriaAssocQci": { - "appInsId": "app01", - "associateId": { - "type": "1", - "value": "192.0.2.0" - }, - "plmn": { - "mnc": "01", - "mcc": "001" - }, - "cellId": "0x800000B", - "qci": 1 - }, - "expiryDeadline": { - "seconds": 1577836800, - "nanoSeconds": 0 - } - } - } - } - }, - "400": { - "description": "Bad Request", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "403": { - "description": "Forbidden", - "schema": { - "type": "object", - "required": [ - "ProblemDetails" - ], - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "404": { - "description": "Not Found", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "406": { - "description": "Not Acceptable", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - } - } - }, - "put": { - "description": "Updates a subscription to RAB Release notifications from Radio Network Information Service", - "operationId": "RabRelSubscription_subscriptionsPUT", - "produces": [ - "application/json", - "application/problem+json" - ], - "parameters": [ - { - "$ref": "#/parameters/Path.subscrId" - }, - { - "$ref": "#/parameters/Body.RabRelSubscription" - } - ], - "responses": { - "200": { - "description": "Successful subscription update to RAB Release notifications", - "schema": { - "type": "object", - "properties": { - "RabRelSubscription": { - "$ref": "#/definitions/RabRelSubscription" - } - } - }, - "examples": { - "application/json": { - "RabRelSubscription": { - "callbackReference": "http://meAppClient.example.com/rni/v1/notifications/rab_rel/77777", - "_links": { - "self": "http://meAppServer.example.com/rni/v1/subscriptions/rab_rel/sub123" - }, - "filterCriteriaAssocQci": { - "appInsId": "app01", - "associateId": { - "type": "1", - "value": "192.0.2.0" - }, - "plmn": { - "mnc": "01", - "mcc": "001" - }, - "cellId": "0x800000B", - "qci": 1 - }, - "expiryDeadline": { - "seconds": 1577836800, - "nanoSeconds": 0 - } - } - } - } - }, - "400": { - "description": "Bad Request", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "403": { - "description": "Forbidden", - "schema": { - "type": "object", - "required": [ - "ProblemDetails" - ], - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "404": { - "description": "Not Found", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "406": { - "description": "Not Acceptable", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "412": { - "description": "Precondition failed", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "422": { - "description": "Unprocessable Entity", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - }, - "examples": { - "application/problem+json": { - "ProblemDetails": { - "type": "https://meAppServer.example.com/rni/v1/probs/too-many-targets", - "title": "Too many targets", - "status": "422", - "detail": "The target area for the request is considered too large", - "instance": "/meAppClient.example.com/77777/msgs/abc" - } - } - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - } - } - }, - "delete": { - "description": "Method to delete a subscription", - "operationId": "RabRel_subscriptionsSubscrIdDELETE", - "produces": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/Path.subscrId" - } - ], - "responses": { - "204": { - "description": "No Content. Successful deletion of Rab Release subscription" - } - }, - "x-swagger-router-controller": "Default" - } - }, - "/subscriptions/ca_reconf": { - "get": { - "description": "The GET method can be used to request information about the ca_reconf subscriptions for this requestor", - "operationId": "SubscriptionLinkList_subscriptions_cr_GET", - "produces": [ - "application/json", - "application/problem+json" - ], - "responses": { - "200": { - "description": "Response body contains the list of links to requestors ca_reconf subscriptions.", - "schema": { - "type": "object", - "required": [ - "SubscriptionLinkList" - ], - "properties": { - "SubscriptionLinkList": { - "$ref": "#/definitions/SubscriptionLinkList" - } - } - }, - "examples": { - "application/json": { - "SubscriptionLinkList": { - "_links": { - "self": "http://meAppServer.example.com/rni/v1/subscriptions/ca_reconf", - "susbcription": [ - { - "href": "http://meAppClient.example.com/rni/v1/notifications/ca_reconf/77777", - "subscriptionType": "CA_RECONF" - }, - { - "href": "http://meAppClient.example.com/rni/v1/notifications/ca_reconf/77778", - "subscriptionType": "CA_RECONF" - } - ] - } - } - } - } - }, - "400": { - "description": "Bad Request", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "403": { - "description": "Forbidden", - "schema": { - "type": "object", - "required": [ - "ProblemDetails" - ], - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "404": { - "description": "Not Found", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "406": { - "description": "Not Acceptable", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - } - }, - "x-swagger-router-controller": "Default" - }, - "post": { - "description": "Creates a subscription to Carrier Aggregation Reconfiguration notifications from Radio Network Information Service", - "operationId": "CaReConfSubscription_subscriptionsPOST", - "produces": [ - "application/json", - "application/problem+json" - ], - "parameters": [ - { - "$ref": "#/parameters/Body.CaReConfSubscriptionPost" - } - ], - "responses": { - "201": { - "description": "Successful subscription to Carrier Aggregation Reconfiguration notifications", - "schema": { - "type": "object", - "properties": { - "CaReConfSubscription": { - "$ref": "#/definitions/CaReConfSubscription" - } - } - }, - "examples": { - "application/json": { - "CaReConfSubscription": { - "callbackReference": "http://meAppClient.example.com/rni/v1/notifications/ca_reconf/77777", - "_links": { - "self": "http://meAppServer.example.com/rni/v1/subscriptions/ca_reconf/sub123" - }, - "filterCriteriaAssoc": { - "appInsId": "app01", - "associateId": { - "type": "1", - "value": "192.0.2.0" - }, - "plmn": { - "mnc": "01", - "mcc": "001" - }, - "cellId": "0x800000B" - }, - "expiryDeadline": { - "seconds": 1577836800, - "nanoSeconds": 0 - } - } - } - } - }, - "400": { - "description": "Bad Request", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "403": { - "description": "Forbidden", - "schema": { - "type": "object", - "required": [ - "ProblemDetails" - ], - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "404": { - "description": "Not Found", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "406": { - "description": "Not Acceptable", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "415": { - "description": "Unsupported Media Type", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "422": { - "description": "Unprocessable Entity", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - }, - "examples": { - "application/problem+json": { - "ProblemDetails": { - "type": "https://meAppServer.example.com/rni/v1/probs/too-many-targets", - "title": "Too many targets", - "status": "422", - "detail": "The target area for the request is considered too large", - "instance": "/meAppClient.example.com/77777/msgs/abc" - } - } - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - } - }, - "x-swagger-router-controller": "Default" - } - }, - "/subscriptions/ca_reconf/{subscriptionId}": { - "get": { - "description": "Gets a subscription to Carrier Aggregation Reconfiguration notifications from Radio Network Information Service", - "operationId": "CaReConfSubscription_subscriptionsGET", - "produces": [ - "application/json", - "application/problem+json" - ], - "parameters": [ - { - "$ref": "#/parameters/Path.subscrId" - } - ], - "responses": { - "200": { - "description": "Subscription information regarding Carrier Aggregation Reconfiguration notifications", - "schema": { - "type": "object", - "required": [ - "CaReConfSubscription" - ], - "properties": { - "CaReConfSubscription": { - "$ref": "#/definitions/CaReConfSubscription" - } - } - }, - "examples": { - "application/json": { - "CaReConfSubscription": { - "callbackReference": "http://meAppClient.example.com/rni/v1/notifications/ca_reconf/77777", - "_links": { - "self": "http://meAppServer.example.com/rni/v1/subscriptions/ca_reconf/sub123" - }, - "filterCriteriaAssoc": { - "appInsId": "app01", - "associateId": { - "type": "1", - "value": "192.0.2.0" - }, - "plmn": { - "mnc": "01", - "mcc": "001" - }, - "cellId": "0x800000B" - }, - "expiryDeadline": { - "seconds": 1577836800, - "nanoSeconds": 0 - } - } - } - } - }, - "400": { - "description": "Bad Request", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "403": { - "description": "Forbidden", - "schema": { - "type": "object", - "required": [ - "ProblemDetails" - ], - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "404": { - "description": "Not Found", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "406": { - "description": "Not Acceptable", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - } - } - }, - "put": { - "description": "Updates a subscription to Carrier Aggregation Reconfiguration notifications from Radio Network Information Service", - "operationId": "CaReConfSubscription_subscriptionsPUT", - "produces": [ - "application/json", - "application/problem+json" - ], - "parameters": [ - { - "$ref": "#/parameters/Path.subscrId" - }, - { - "$ref": "#/parameters/Body.CaReConfSubscription" - } - ], - "responses": { - "200": { - "description": "Successful subscription to Carrier Aggregation Reconfiguration notifications", - "schema": { - "type": "object", - "properties": { - "CaReConfSubscription": { - "$ref": "#/definitions/CaReConfSubscription" - } - } - }, - "examples": { - "application/json": { - "CaReConfSubscription": { - "callbackReference": "http://meAppClient.example.com/rni/v1/notifications/ca_reconf/77777", - "_links": { - "self": "http://meAppServer.example.com/rni/v1/subscriptions/ca_reconf/sub123" - }, - "filterCriteriaAssoc": { - "appInsId": "app01", - "associateId": { - "type": "1", - "value": "192.0.2.0" - }, - "plmn": { - "mnc": "01", - "mcc": "001" - }, - "cellId": "0x800000B" - }, - "expiryDeadline": { - "seconds": 1577836800, - "nanoSeconds": 0 - } - } - } - } - }, - "400": { - "description": "Bad Request", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "403": { - "description": "Forbidden", - "schema": { - "type": "object", - "required": [ - "ProblemDetails" - ], - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "404": { - "description": "Not Found", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "406": { - "description": "Not Acceptable", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "412": { - "description": "Precondition failed", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "422": { - "description": "Unprocessable Entity", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - }, - "examples": { - "application/problem+json": { - "ProblemDetails": { - "type": "https://meAppServer.example.com/rni/v1/probs/too-many-targets", - "title": "Too many targets", - "status": "422", - "detail": "The target area for the request is considered too large", - "instance": "/meAppClient.example.com/77777/msgs/abc" - } - } - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "type": "object", - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - } - } - }, - "delete": { - "description": "Method to delete a subscription", - "operationId": "CaReConf_subscriptionsSubscrIdDELETE", - "produces": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/Path.subscrId" - } - ], - "responses": { - "204": { - "description": "No Content" - } - }, - "x-swagger-router-controller": "Default" - } - } - }, - "definitions": { - "ProblemDetails": { - "type": "object", - "properties": { - "type": { - "$ref": "#/definitions/Problem.type" - }, - "title": { - "$ref": "#/definitions/Problem.title" - }, - "status": { - "$ref": "#/definitions/Problem.status" - }, - "detail": { - "$ref": "#/definitions/Problem.detail" - }, - "instance": { - "$ref": "#/definitions/Problem.instance" - } - } - }, - "Problem.type": { - "type": "string", - "format": "uri", - "description": "A URI reference according to IETF RFC 3986 that identifies the problem type" - }, - "Problem.title": { - "type": "string", - "description": "A short, human-readable summary of the problem type" - }, - "Problem.status": { - "type": "integer", - "format": "uint32", - "description": "The HTTP status code for this occurrence of the problem" - }, - "Problem.detail": { - "type": "string", - "description": "A human-readable explanation specific to this occurrence of the problem" - }, - "Problem.instance": { - "type": "string", - "format": "uri", - "description": "A URI reference that identifies the specific occurrence of the problem" - }, - "PlmnInfo": { - "type": "object", - "required": [ - "appInsId", - "plmn" - ], - "properties": { - "timeStamp": { - "$ref": "#/definitions/TimeStamp" - }, - "appInsId": { - "$ref": "#/definitions/AppInsId" - }, - "plmn": { - "type": "array", - "items": { - "$ref": "#/definitions/Plmn" - } - } - } - }, - "RabInfo": { - "type": "object", - "required": [ - "appInsId", - "requestId" - ], - "properties": { - "timeStamp": { - "$ref": "#/definitions/TimeStamp" - }, - "appInsId": { - "$ref": "#/definitions/AppInsId" - }, - "requestId": { - "$ref": "#/definitions/RequestId" - }, - "cellUserInfo": { - "type": "array", - "items": { - "$ref": "#/definitions/CellUserInfo" - } - } - } - }, - "S1BearerInfo": { - "type": "object", - "required": [ - "s1UeInfo" - ], - "properties": { - "timeStamp": { - "$ref": "#/definitions/TimeStamp" - }, - "s1UeInfo": { - "type": "array", - "items": { - "$ref": "#/definitions/S1UeInfo" - } - } - } - }, - "S1UeInfo": { - "type": "object", - "required": [ - "ecgi", - "s1BearerInfoDetailed" - ], - "properties": { - "tempUeId": { - "type": "array", - "items": { - "$ref": "#/definitions/TempUeId" - } - }, - "associateId": { - "type": "array", - "items": { - "$ref": "#/definitions/AssociateId" - } - }, - "ecgi": { - "type": "array", - "items": { - "$ref": "#/definitions/Ecgi" - } - }, - "s1BearerInfoDetailed": { - "type": "array", - "items": { - "$ref": "#/definitions/S1BearerInfoDetailed" - } - } - }, - "description": "The information on users per cell." - }, - "S1BearerInfoDetailed": { - "type": "object", - "required": [ - "erabId", - "enbInfo", - "sGwInfo" - ], - "properties": { - "erabId": { - "$ref": "#/definitions/ErabId" - }, - "enbInfo": { - "$ref": "#/definitions/S1EnbInfo" - }, - "sGwInfo": { - "$ref": "#/definitions/SGwInfo" - } - }, - "description": "Information on UEs in the specific cell." - }, - "ErabId": { - "type": "integer", - "format": "int32", - "description": "The element that uniquely identifies a S1 bearer for a specific UE, as defined in ETSI TS 136 413", - "example": 10 - }, - "TempUeId": { - "type": "object", - "required": [ - "mmec", - "mtmsi" - ], - "properties": { - "mmec": { - "$ref": "#/definitions/Mmec" - }, - "mtmsi": { - "$ref": "#/definitions/Mtmsi" - } - } - }, - "Mmec": { - "type": "string", - "description": "MMEC as defined in ETSI TS 136 413", - "example": "0" - }, - "Mtmsi": { - "type": "string", - "description": "M-TMSI as defined in ETSI TS 136 413", - "example": "1234" - }, - "S1EnbInfo": { - "type": "object", - "required": [ - "ipAddress", - "tunnelId" - ], - "properties": { - "ipAddress": { - "type": "string", - "description": "eNB transport layer address of this S1 bearer.", - "example": "192.0.2.0" - }, - "tunnelId": { - "type": "string", - "description": "eNB GTP-U TEID of this S1 bearer.", - "example": "1111" - } - } - }, - "SGwInfo": { - "type": "object", - "required": [ - "ipAddress", - "tunnelId" - ], - "properties": { - "ipAddress": { - "type": "string", - "description": "SGW transport layer address of this S1 bearer.", - "example": "192.0.2.1" - }, - "tunnelId": { - "type": "string", - "description": "SGW GTP-U TEID of this S1 bearer.", - "example": "2222" - } - } - }, - "TimeStamp": { - "type": "object", - "required": [ - "nanoSeconds", - "seconds" - ], - "properties": { - "seconds": { - "type": "integer", - "format": "uint32", - "description": "The seconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC", - "example": 1577836800 - }, - "nanoSeconds": { - "type": "integer", - "format": "uint32", - "description": "The nanoseconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC", - "example": 0 - } - } - }, - "AppInsId": { - "type": "string", - "format": "string", - "description": "Unique identifier for the mobile edge application instance", - "example": "01" - }, - "RequestId": { - "type": "string", - "format": "string", - "description": "Unique identifier allocated by the Mobile Edge application for the Information request.", - "example": "01" - }, - "CellUserInfo": { - "type": "object", - "required": [ - "ecgi", - "ueInfo" - ], - "properties": { - "ecgi": { - "$ref": "#/definitions/Ecgi" - }, - "ueInfo": { - "type": "array", - "items": { - "$ref": "#/definitions/UeInfo" - } - } - }, - "description": "The information on users per cell." - }, - "Ecgi": { - "type": "object", - "required": [ - "cellId", - "plmn" - ], - "properties": { - "plmn": { - "$ref": "#/definitions/Plmn" - }, - "cellId": { - "$ref": "#/definitions/CellId" - } - }, - "description": "E-UTRAN CelI Global Identifier as defined in 3GPP TS 36.413" - }, - "Plmn": { - "type": "object", - "required": [ - "mcc", - "mnc" - ], - "properties": { - "mcc": { - "type": "string", - "format": "string", - "description": "The Mobile Country Code part of PLMN Identity as defined in 3GPP TS 36.413", - "example": "001" - }, - "mnc": { - "type": "string", - "format": "string", - "description": "The Mobile Network Code part of PLMN Identity as defined in 3GPP TS 36.413", - "example": "01" - } - } - }, - "CellId": { - "type": "array", - "items": { - "type": "string", - "format": "binary" - }, - "description": "The E-UTRAN Cell Identity as a bit string (size (28)), as defined in 3GPP TS 36.413", - "example": "0x800000A" - }, - "UeInfo": { - "type": "object", - "required": [ - "erabInfo" - ], - "properties": { - "associateId": { - "type": "array", - "items": { - "$ref": "#/definitions/AssociateId" - } - }, - "erabInfo": { - "type": "array", - "items": { - "$ref": "#/definitions/ErabQosParameters" - } - } - }, - "description": "Information on UEs in the specific cell." - }, - "AssociateId": { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "RESERVED", - "UE_IPV4_ADDRESS", - "UE_IPV6_ADDRESS", - "NATED_IP_ADDRESS", - "GTP_TEID" - ], - "description": "Numeric value (0-255) corresponding to specified type of identifier", - "example": "UE_IPV4_ADDRESS" - }, - "value": { - "type": "String", - "format": "String", - "description": "Value for the identifier", - "example": "192.0.0.2" - } - } - }, - "ErabQosParameters": { - "type": "object", - "properties": { - "qci": { - "$ref": "#/definitions/Qci" - }, - "qosInformation": { - "type": "array", - "items": { - "$ref": "#/definitions/QosInformation" - } - } - } - }, - "Qci": { - "type": "integer", - "format": "int32", - "description": "QoS Class Identifier as defined in TS 23.401", - "example": 7 - }, - "QosInformation": { - "type": "object", - "required": [ - "erabGbrDl", - "erabGbrUl", - "erabMbrDl", - "erabMbrUl" - ], - "properties": { - "erabMbrDl": { - "type": "integer", - "format": "int32", - "description": "This IE indicates the maximum downlink E-RAB Bit Rate as defined in TS 23.401 for this bearer.", - "example": 10 - }, - "erabMbrUl": { - "type": "integer", - "format": "int32", - "description": "This IE indicates the maximum uplink E-RAB Bit Rate as defined in TS 23.401 for this bearer.", - "example": 10 - }, - "erabGbrDl": { - "type": "integer", - "format": "int32", - "description": "This IE indicates the guaranteed downlink E-RAB Bit Rate as defined in TS 23.401 for this bearer.", - "example": 10 - }, - "erabGbrUl": { - "type": "integer", - "format": "int32", - "description": "This IE indicates the guaranteed uplink E-RAB Bit Rate as defined in TS 23.401 for this bearer.", - "example": 10 - } - } - }, - "SubscriptionLinkList": { - "type": "object", - "required": [ - "_links" - ], - "properties": { - "_links": { - "$ref": "#/definitions/Link" - }, - "subscription": { - "type": "array", - "items": { - "$ref": "#/definitions/Subscription" - } - } - } - }, - "MeasRepUeSubscriptionPost": { - "type": "object", - "required": [ - "callbackReference", - "filterCriteria" - ], - "properties": { - "callbackReference": { - "$ref": "#/definitions/CallbackReference" - }, - "filterCriteria": { - "$ref": "#/definitions/FilterCriteriaAssocTri" - }, - "expiryDeadline": { - "$ref": "#/definitions/TimeStamp" - } - } - }, - "MeasRepUeSubscription": { - "type": "object", - "required": [ - "callbackReference", - "_links", - "filterCriteria" - ], - "properties": { - "callbackReference": { - "$ref": "#/definitions/CallbackReference" - }, - "_links": { - "$ref": "#/definitions/Link" - }, - "filterCriteria": { - "$ref": "#/definitions/FilterCriteriaAssocTri" - }, - "expiryDeadline": { - "$ref": "#/definitions/TimeStamp" - } - } - }, - "S1BearerSubscriptionPost": { - "type": "object", - "required": [ - "callbackReference", - "s1BearerSubscriptionCriteria" - ], - "properties": { - "callbackReference": { - "$ref": "#/definitions/CallbackReference" - }, - "eventType": { - "$ref": "#/definitions/EventType" - }, - "s1BearerSubscriptionCriteria": { - "$ref": "#/definitions/S1BearerSubscriptionCriteria" - }, - "expiryDeadline": { - "$ref": "#/definitions/TimeStamp" - } - } - }, - "S1BearerSubscription": { - "type": "object", - "required": [ - "callbackReference", - "_links", - "s1BearerSubscriptionCriteria" - ], - "properties": { - "callbackReference": { - "$ref": "#/definitions/CallbackReference" - }, - "_links": { - "$ref": "#/definitions/Link" - }, - "eventType": { - "$ref": "#/definitions/EventType" - }, - "s1BearerSubscriptionCriteria": { - "$ref": "#/definitions/S1BearerSubscriptionCriteria" - }, - "expiryDeadline": { - "$ref": "#/definitions/TimeStamp" - } - } - }, - "RabEstSubscription": { - "type": "object", - "required": [ - "callbackReference", - "_links", - "filterCriteria" - ], - "properties": { - "callbackReference": { - "$ref": "#/definitions/CallbackReference" - }, - "_links": { - "$ref": "#/definitions/Link" - }, - "filterCriteria": { - "$ref": "#/definitions/FilterCriteriaAssocQci" - }, - "expiryDeadline": { - "$ref": "#/definitions/TimeStamp" - } - } - }, - "RabEstSubscriptionPost": { - "type": "object", - "required": [ - "callbackReference", - "filterCriteria" - ], - "properties": { - "callbackReference": { - "$ref": "#/definitions/CallbackReference" - }, - "filterCriteria": { - "$ref": "#/definitions/FilterCriteriaAssocQci" - }, - "expiryDeadline": { - "$ref": "#/definitions/TimeStamp" - } - } - }, - "RabModSubscription": { - "type": "object", - "required": [ - "callbackReference", - "_links", - "filterCriteria" - ], - "properties": { - "callbackReference": { - "$ref": "#/definitions/CallbackReference" - }, - "_links": { - "$ref": "#/definitions/Link" - }, - "filterCriteria": { - "$ref": "#/definitions/FilterCriteriaAssocQci" - }, - "expiryDeadline": { - "$ref": "#/definitions/TimeStamp" - } - } - }, - "RabModSubscriptionPost": { - "type": "object", - "required": [ - "callbackReference", - "filterCriteria" - ], - "properties": { - "callbackReference": { - "$ref": "#/definitions/CallbackReference" - }, - "filterCriteria": { - "$ref": "#/definitions/FilterCriteriaAssocQci" - }, - "expiryDeadline": { - "$ref": "#/definitions/TimeStamp" - } - } - }, - "RabRelSubscription": { - "type": "object", - "required": [ - "callbackReference", - "_links", - "filterCriteria" - ], - "properties": { - "callbackReference": { - "$ref": "#/definitions/CallbackReference" - }, - "_links": { - "$ref": "#/definitions/Link" - }, - "filterCriteria": { - "$ref": "#/definitions/FilterCriteriaAssocQci" - }, - "expiryDeadline": { - "$ref": "#/definitions/TimeStamp" - } - } - }, - "RabRelSubscriptionPost": { - "type": "object", - "required": [ - "callbackReference", - "filterCriteria" - ], - "properties": { - "callbackReference": { - "$ref": "#/definitions/CallbackReference" - }, - "filterCriteria": { - "$ref": "#/definitions/FilterCriteriaAssocQci" - }, - "expiryDeadline": { - "$ref": "#/definitions/TimeStamp" - } - } - }, - "CaReConfSubscription": { - "type": "object", - "required": [ - "callbackReference", - "_links", - "filterCriteria" - ], - "properties": { - "callbackReference": { - "$ref": "#/definitions/CallbackReference" - }, - "_links": { - "$ref": "#/definitions/Link" - }, - "filterCriteria": { - "$ref": "#/definitions/FilterCriteriaAssoc" - }, - "expiryDeadline": { - "$ref": "#/definitions/TimeStamp" - } - } - }, - "CaReConfSubscriptionPost": { - "type": "object", - "required": [ - "callbackReference", - "filterCriteria" - ], - "properties": { - "callbackReference": { - "$ref": "#/definitions/CallbackReference" - }, - "filterCriteria": { - "$ref": "#/definitions/FilterCriteriaAssoc" - }, - "expiryDeadline": { - "$ref": "#/definitions/TimeStamp" - } - } - }, - "CellChangeSubscriptionPost": { - "type": "object", - "required": [ - "callbackReference", - "filterCriteria" - ], - "properties": { - "callbackReference": { - "$ref": "#/definitions/CallbackReference" - }, - "filterCriteria": { - "$ref": "#/definitions/FilterCriteriaAssocHo" - }, - "expiryDeadline": { - "$ref": "#/definitions/TimeStamp" - } - } - }, - "CellChangeSubscription": { - "type": "object", - "required": [ - "callbackReference", - "_links", - "filterCriteria" - ], - "properties": { - "callbackReference": { - "$ref": "#/definitions/CallbackReference" - }, - "_links": { - "$ref": "#/definitions/Link" - }, - "filterCriteria": { - "$ref": "#/definitions/FilterCriteriaAssocHo" - }, - "expiryDeadline": { - "$ref": "#/definitions/TimeStamp" - } - } - }, - "MeasTaSubscriptionPost": { - "type": "object", - "required": [ - "callbackReference", - "filterCriteria" - ], - "properties": { - "callbackReference": { - "$ref": "#/definitions/CallbackReference" - }, - "filterCriteria": { - "$ref": "#/definitions/FilterCriteriaAssoc" - }, - "expiryDeadline": { - "$ref": "#/definitions/TimeStamp" - } - } - }, - "MeasTaSubscription": { - "type": "object", - "required": [ - "callbackReference", - "_links", - "filterCriteria" - ], - "properties": { - "callbackReference": { - "$ref": "#/definitions/CallbackReference" - }, - "_links": { - "$ref": "#/definitions/Link" - }, - "filterCriteria": { - "$ref": "#/definitions/FilterCriteriaAssoc" - }, - "expiryDeadline": { - "$ref": "#/definitions/TimeStamp" - } - } - }, - "CallbackReference": { - "type": "string", - "format": "uri", - "description": "URL selected by the Mobile Edge application to receive notifications on the subscribed RNIS information.", - "example": "http://meAppClient.example.com/rni/v1/" - }, - "Link": { - "type": "object", - "properties": { - "self": { - "$ref": "#/definitions/LinkType" - } - }, - "description": "List of hyperlinks related to the resource" - }, - "LinkType": { - "description": "URI referring to a resource", - "type": "string", - "format": "uri", - "example": "http://meAppClient.example.com/rni/v1/" - }, - "Subscription": { - "type": "object", - "required": [ - "href", - "subscriptionType" - ], - "properties": { - "href": { - "$ref": "#/definitions/LinkType" - }, - "subscriptionType": { - "$ref": "#/definitions/SubscriptionType" - } - }, - "description": "A link to a subscription." - }, - "SubscriptionType": { - "type": "string", - "description": "Numeric value corresponding to specified type of subscription.", - "enum": [ - "RESERVED", - "CELL_CHANGE", - "RAB_ESTABLISHMENT", - "RAB_MODIFICATION", - "RAB_RELEASE", - "MEAS_REPORT_UE", - "MEAS_TIMING_ADVANCE", - "CA_RECONF", - "S1_BEARE" - ], - "example": "CELL_CHANGE" - }, - "FilterCriteriaAssoc": { - "type": "object", - "properties": { - "appInsId": { - "$ref": "#/definitions/AppInsId" - }, - "associateId": { - "$ref": "#/definitions/AssociateId" - }, - "plmn": { - "$ref": "#/definitions/Plmn" - }, - "cellId": { - "$ref": "#/definitions/CellId" - } - }, - "description": "List of filtering criteria for the subscription." - }, - "FilterCriteriaAssocQci": { - "type": "object", - "properties": { - "appInsId": { - "$ref": "#/definitions/AppInsId" - }, - "associateId": { - "$ref": "#/definitions/AssociateId" - }, - "plmn": { - "$ref": "#/definitions/Plmn" - }, - "cellId": { - "$ref": "#/definitions/CellId" - }, - "qci": { - "$ref": "#/definitions/Qci" - } - }, - "description": "List of filtering criteria for the subscription." - }, - "FilterCriteriaAssocHo": { - "type": "object", - "properties": { - "appInsId": { - "$ref": "#/definitions/AppInsId" - }, - "associateId": { - "$ref": "#/definitions/AssociateId" - }, - "plmn": { - "$ref": "#/definitions/Plmn" - }, - "cellId": { - "$ref": "#/definitions/CellId" - }, - "hoStatus": { - "$ref": "#/definitions/HoStatus" - } - }, - "description": "List of filtering criteria for the subscription." - }, - "FilterCriteriaAssocTri": { - "type": "object", - "properties": { - "appInsId": { - "$ref": "#/definitions/AppInsId" - }, - "associateId": { - "$ref": "#/definitions/AssociateId" - }, - "plmn": { - "$ref": "#/definitions/Plmn" - }, - "cellId": { - "$ref": "#/definitions/CellId" - }, - "trigger": { - "$ref": "#/definitions/Trigger" - } - }, - "description": "List of filtering criteria for the subscription." - }, - "S1BearerSubscriptionCriteria": { - "type": "object", - "properties": { - "associateId": { - "$ref": "#/definitions/AssociateId" - }, - "plmn": { - "$ref": "#/definitions/Plmn" - }, - "cellId": { - "$ref": "#/definitions/CellId" - }, - "erabId": { - "$ref": "#/definitions/ErabId" - } - }, - "description": "List of filtering criteria for the subscription." - }, - "HoStatus": { - "type": "string", - "description": "Description of the subscribed to event", - "enum": [ - "RESERVED", - "IN_PREPARATION", - "IN_EXECUTION", - "COMPLETED", - "REJECTED", - "CANCELLED" - ], - "example": "COMPLETED" - }, - "EventType": { - "type": "string", - "description": "Description of the subscribed event.", - "enum": [ - "RESERVED", - "S1_BEARER_ESTABLISH", - "S1_BEARER_MODIFY", - "S1_BEARER_RELEASE" - ], - "example": "S1_BEARER_ESTABLISH" - }, - "Trigger": { - "type": "string", - "description": "Unique identifier for the mobile edge application instance", - "enum": [ - "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" - ], - "example": "EVENT_A3" - } - } -} diff --git a/ttcn/LibMec/TrafficManagementAPI/json/BwManagementApi.json b/ttcn/LibMec/TrafficManagementAPI/json/BwManagementApi.json deleted file mode 100644 index 12010d6..0000000 --- a/ttcn/LibMec/TrafficManagementAPI/json/BwManagementApi.json +++ /dev/null @@ -1,629 +0,0 @@ -{ - "openapi": "3.0.0", - "info": { - "contact": { - "url": "https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api" - }, - "title": "ETSI GS MEC 015 Bandwidth Management API", - "version": "2.1.1", - "description": "The ETSI MEC ISG Bandwidth Management API described using OpenAPI.", - "license": { - "name": "BSD-3-Clause", - "url": "https://forge.etsi.org/legal-matters" - } - }, - "externalDocs": { - "description": "ETSI GS MEC015 V2.1.1 Traffic Management APIs", - "url": "https://www.etsi.org/deliver/etsi_gs/MEC/001_099/015/02.01.01_60/gs_MEC015v020101p.pdf" - }, - "servers": [ - { - "url": "https://localhost/bwm/v1" - } - ], - "tags": [ - { - "name": "bwm" - } - ], - "paths": { - "/bw_allocations": { - "get": { - "tags": [ - "bwm" - ], - "summary": "Retrieve information about a list of bandwidthAllocation resources", - "description": "Retrieves information about a list of bandwidthAllocation resources. Typically used in 'Get configured bandwidth allocation from Bandwidth Management Service' procedure as described in clause 6.2.5.", - "operationId": "bandwidthAllocationListGET", - "parameters": [ - { - "$ref": "#/components/parameters/Query.app_instance_id" - }, - { - "$ref": "#/components/parameters/Query.app_name" - }, - { - "$ref": "#/components/parameters/Query.session_id" - } - ], - "responses": { - "200": { - "description": "Upon success, a response body containing an array of the bandwidthAllocations is returned.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/BwInfo" - } - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - } - } - }, - "post": { - "tags": [ - "bwm" - ], - "summary": "Create a bandwidthAllocation resource", - "description": "Used to create a bandwidthAllocation resource. Typically used in 'Register to Bandwidth Management Service' procedure as described in clause 6.2.1.", - "operationId": "bandwidthAllocationPOST", - "parameters": [], - "requestBody": { - "description": "Entity body in the request contains BwInfo to be created.", - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/BwInfo" - } - } - } - }, - "responses": { - "201": { - "description": "Upon success, the HTTP response shall include a 'Location' HTTP header that contains the resource URI of the created resource.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/BwInfo" - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - } - } - } - }, - "/bw_allocations/{allocationId}": { - "get": { - "tags": [ - "bwm" - ], - "summary": "Retrieve information about a specific bandwidthAllocation", - "description": "Retrieves information about a bandwidthAllocation resource. Typically used in 'Get configured bandwidth allocation from Bandwidth Management Service' procedure as described in clause 6.2.5.", - "operationId": "bandwidthAllocationGET", - "parameters": [ - { - "$ref": "#/components/parameters/Path.allocationId" - } - ], - "responses": { - "200": { - "description": "Used to indicate nonspecific success. The response body contains a representation of the resource.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/BwInfo" - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - } - } - }, - "put": { - "tags": [ - "bwm" - ], - "summary": "Update the information about a specific bandwidthAllocation", - "description": "Updates the information about a bandwidthAllocation resource. As specified in ETSI GS MEC 009 [6], the PUT HTTP method has 'replace' semantics.", - "operationId": "bandwidthAllocationPUT", - "requestBody": { - "description": "BwInfo with updated information is included as entity body of the request.", - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/BwInfo" - } - } - } - }, - "parameters": [ - { - "$ref": "#/components/parameters/Path.allocationId" - } - ], - "responses": { - "200": { - "description": "Used to indicate nonspecific success. The response body contains a representation of the resource.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/BwInfo" - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "412": { - "$ref": "#/components/responses/412" - } - } - }, - "patch": { - "tags": [ - "bwm" - ], - "summary": "Modify the information about a specific existing bandwidthAllocation by sending updates on the data structure", - "description": "Updates the information about a bandwidthAllocation resource. As specified in ETSI GS MEC 009 [6], the PATCH HTTP method updates a resource on top of the existing resource state by just including the changes ('deltas') in the request body.", - "operationId": "bandwidthAllocationPATCH", - "requestBody": { - "description": "Description of the changes to instruct the server how to modify the resource representation.", - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/BwInfoDeltas" - } - } - } - }, - "parameters": [ - { - "$ref": "#/components/parameters/Path.allocationId" - } - ], - "responses": { - "200": { - "description": "Used to indicate nonspecific success. The response body contains a representation of the resource.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/BwInfo" - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "412": { - "$ref": "#/components/responses/412" - } - } - }, - "delete": { - "tags": [ - "bwm" - ], - "summary": "Remove a specific bandwidthAllocation", - "description": "Used in 'Unregister from Bandwidth Management Service' procedure as described in clause 6.2.3.", - "operationId": "bandwidthAllocationDELETE", - "parameters": [ - { - "$ref": "#/components/parameters/Path.allocationId" - } - ], - "responses": { - "204": { - "$ref": "#/components/responses/204" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - } - } - } - } - }, - "components": { - "responses": { - "204": { - "description": "Upon success, a response 204 No Content without any response body is returned." - }, - "400": { - "description": "Bad Request : used to indicate that incorrect parameters were passed to the request.", - "content": { - "application/problem+json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetails" - } - } - } - }, - "403": { - "description": "Forbidden : operation is not allowed given the current status of the resource.", - "content": { - "application/problem+json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetails" - } - } - } - }, - "404": { - "description": "Not Found : used when a client provided a URI that cannot be mapped to a valid resource URI.", - "content": { - "application/problem+json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetails" - } - } - } - }, - "412": { - "description": "Precondition failed : used when a condition has failed during conditional requests, e.g. when using ETags to avoid write conflicts when using PUT", - "content": { - "application/problem+json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetails" - } - } - } - } - }, - "parameters": { - "Path.allocationId": { - "name": "allocationId", - "in": "path", - "description": "Represents a bandwidth allocation instance", - "required": true, - "schema": { - "type": "string" - } - }, - "Query.app_instance_id": { - "name": "app_instance_id", - "in": "query", - "description": "A MEC application instance may use multiple app_instance_ids as an input parameter to query the bandwidth allocation of a list of MEC application instances. See note.", - "required": false, - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "Query.app_name": { - "name": "app_name", - "in": "query", - "description": "A MEC application instance may use multiple app_names as an input parameter to query the bandwidth allocation of a list of MEC application instances. See note.", - "required": false, - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "Query.session_id": { - "name": "session_id", - "in": "query", - "description": "A MEC application instance may use session_id as an input parameter to query the bandwidth allocation of a list of sessions. See note.", - "required": false, - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "schemas": { - "BwInfo": { - "properties": { - "allocationDirection": { - "description": "The direction of the requested BW allocation: 00 = Downlink (towards the UE) 01 = Uplink (towards the application/session) 10 = Symmetrical", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "appInsId": { - "description": "Application instance identifier", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "fixedAllocation": { - "description": "Size of requested fixed BW allocation in [bps]", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "fixedBWPriority": { - "description": "Indicates the allocation priority when dealing with several applications or sessions in parallel. Values are not defined in the present document", - "enum": [ - "SEE_DESCRIPTION" - ], - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Enum" - }, - "requestType": { - "description": "Numeric value (0 - 255) corresponding to specific type of consumer as following: 0 = APPLICATION_SPECIFIC_BW_ALLOCATION 1 = SESSION_SPECIFIC_BW_ALLOCATION", - "type": "integer", - "enum": [ - 0, - 1 - ], - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Enum_inlined" - }, - "sessionFilter": { - "description": "Session filtering criteria, applicable when requestType is set as SESSION_SPECIFIC_BW_ALLOCATION. Any filtering criteria shall define a single session only. In case multiple sessions match sessionFilter the request shall be rejected", - "items": { - "type": "object", - "properties": { - "dstAddress": { - "description": "Destination address identity of session (including range)", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "dstPort": { - "description": "Destination port identity of session", - "items": { - "type": "string" - }, - "minItems": 0, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "String" - }, - "protocol": { - "description": "Protocol number", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "sourceIp": { - "description": "Source address identity of session (including range)", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "sourcePort": { - "description": "Source port identity of session", - "items": { - "type": "string" - }, - "minItems": 0, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "String" - } - } - }, - "minItems": 0, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "Structure (inlined)" - }, - "timeStamp": { - "description": "Time stamp to indicate when the corresponding information elements are sent", - "properties": { - "nanoSeconds": { - "description": "The nanoseconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC", - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Uint32" - }, - "seconds": { - "format": "uint32", - "type": "integer", - "description": "The seconds part of the Time. Time is defined as Unixtime since January 1, 1970, 00:00:00 UTC", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Uint32" - } - }, - "required": [ - "seconds", - "nanoSeconds" - ], - "type": "object", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Structure (inlined)" - } - }, - "required": [ - "appInsId", - "requestType", - "fixedAllocation", - "allocationDirection" - ], - "type": "object", - "x-etsi-ref": "7.2.2" - }, - "BwInfoDeltas": { - "properties": { - "allocationDirection": { - "description": "The direction of the requested BW allocation: 00 = Downlink (towards the UE) 01 = Uplink (towards the application/session) 10 = Symmetrical", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "appInsId": { - "description": "Application instance identifier", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "fixedAllocation": { - "description": "Size of requested fixed BW allocation in [bps]", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "fixedBWPriority": { - "description": "Indicates the allocation priority when dealing with several applications or sessions in parallel. Values are not defined in the present document", - "enum": [ - "SEE DESCRIPTION" - ], - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Enum_inlined" - }, - "requestType": { - "description": "Numeric value (0 - 255) corresponding to specific type of consumer as following: 0 = APPLICATION_SPECIFIC_BW_ALLOCATION 1 = SESSION_SPECIFIC_BW_ALLOCATION", - "type": "string", - "enum": [ - 0, - 1 - ], - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Enum_inlined" - }, - "sessionFilter": { - "description": "Session filtering criteria, applicable when requestType is set as SESSION_SPECIFIC_BW_ALLOCATION. Any filtering criteria shall define a single session only. In case multiple sessions match sessionFilter the request shall be rejected", - "items": { - "type": "object", - "properties": { - "dstAddress": { - "description": "Destination address identity of session (including range)", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "dstPort": { - "description": "Destination port identity of session", - "items": { - "type": "string" - }, - "minItems": 0, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "String" - }, - "protocol": { - "description": "Protocol number", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "sourceIp": { - "description": "Source address identity of session (including range)", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "sourcePort": { - "description": "Source port identity of session ", - "items": { - "type": "string" - }, - "minItems": 0, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "String" - } - } - }, - "minItems": 0, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "Structure (inlined)" - } - }, - "required": [ - "appInsId", - "requestType" - ], - "type": "object", - "x-etsi-ref": "7.2.3" - }, - "ProblemDetails": { - "properties": { - "detail": { - "description": "A human-readable explanation specific to this occurrence of the problem", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "instance": { - "description": "A URI reference that identifies the specific occurrence of the problem", - "format": "uri", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "URI" - }, - "status": { - "description": "The HTTP status code for this occurrence of the problem", - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "title": { - "description": "A short, human-readable summary of the problem type", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "type": { - "description": "A URI reference according to IETF RFC 3986 that identifies the problem type", - "format": "uri", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "URI" - } - }, - "type": "object" - } - } - } -} diff --git a/ttcn/LibMec/TrafficManagementAPI/json/TrafficSteeringApi.json b/ttcn/LibMec/TrafficManagementAPI/json/TrafficSteeringApi.json deleted file mode 100644 index 2a5b292..0000000 --- a/ttcn/LibMec/TrafficManagementAPI/json/TrafficSteeringApi.json +++ /dev/null @@ -1,657 +0,0 @@ -{ - "openapi": "3.0.0", - "info": { - "contact": { - "url": "https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api" - }, - "title": "ETSI GS MEC 015 Multi-access Traffic Steering APIs", - "version": "2.1.1", - "description": "The present document focuses on the Multi-access Traffic Steering multi-access edge service. It describes the related application policy information including authorization and access control, information flows, required information and service aggregation patterns. The present document specifies the necessary API with the data model and data format.", - "license": { - "name": "BSD-3-Clause", - "url": "https://forge.etsi.org/legal-matters" - } - }, - "externalDocs": { - "description": "ETSI GS MEC015 V2.1.1 Traffic Management APIs", - "url": "https://www.etsi.org/deliver/etsi_gs/MEC/001_099/015/02.01.01_60/gs_MEC015v020101p.pdf" - }, - "servers": [ - { - "url": "https://localhost/mts/v1" - } - ], - "tags": [ - { - "name": "mts" - } - ], - "paths": { - "/mts_capability_info": { - "get": { - "tags": [ - "mts" - ], - "summary": "Retrieve the MTS capability informations", - "description": "Used to query information about the MTS information. Typically used in the 'Get MTS service Info from the MTS Service' procedure as described in clause 6.2.6.", - "operationId": "mtsCapabilityInfoGET", - "parameters": [], - "responses": { - "200": { - "description": "Upon success, a response body containing the MTS capability information is returned.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MtsCapabilityInfo" - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - } - } - } - }, - "/mts_sessions": { - "get": { - "tags": [ - "mts" - ], - "summary": "Retrieve information about a list of MTS sessions", - "description": "Retrieves information about a list of MTS sessions. Typically used in the 'Get configured MTS Session Info from the MTS Service' procedure as described in clause 6.2.10.", - "operationId": "mtsSessionsListGET", - "parameters": [ - { - "$ref": "#/components/parameters/Query.app_instance_id" - }, - { - "$ref": "#/components/parameters/Query.app_name" - }, - { - "$ref": "#/components/parameters/Query.session_id" - } - ], - "responses": { - "200": { - "description": "Upon success, a response body containing an array of the MTS sessions is returned.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/MtsSessionInfo" - } - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - } - } - }, - "post": { - "tags": [ - "mts" - ], - "summary": "Create a MTS session", - "description": "Used to create a MTS session. This method is typically used in 'Register application to the MTS Service' procedure as described in clause 6.2.7.", - "operationId": "mtsSessionPOST", - "parameters": [], - "requestBody": { - "description": "Entity body in the request contains MtsSessionInfo to be created.", - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MtsSessionInfo" - } - } - } - }, - "responses": { - "201": { - "description": "Upon success, the HTTP response shall include a 'Location' HTTP header that contains the resource URI of the created resource.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MtsSessionInfo" - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - } - } - } - }, - "/mts_sessions/{sessionId}": { - "get": { - "tags": [ - "mts" - ], - "summary": "Retrieve information about specific MTS session", - "description": "Retrieves information about an individual MTS session. Typically used in the 'Get configured MTS Session Info from the MTS Service' procedure as described in clause 6.2.10.", - "operationId": "mtsSessionGET", - "parameters": [ - { - "$ref": "#/components/parameters/Path.sessionId" - } - ], - "responses": { - "200": { - "description": "Used to indicate nonspecific success. The response body contains a representation of the resource.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MtsSessionInfo" - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - } - } - }, - "put": { - "tags": [ - "mts" - ], - "summary": "Update the information about specific MTS session", - "description": "Updates the information about an individual MTS session. As specified in ETSI GS MEC 009 [6], the PUT HTTP method has 'replace' semantics. ", - "operationId": "mtsSessionPUT", - "parameters": [ - { - "$ref": "#/components/parameters/Path.sessionId" - } - ], - "requestBody": { - "description": "MtsSessionInfo with updated information is included as entity body of the request.", - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MtsSessionInfo" - } - } - } - }, - "responses": { - "200": { - "description": "Used to indicate nonspecific success. The response body contains a representation of the resource.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MtsSessionInfo" - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "412": { - "$ref": "#/components/responses/412" - } - } - }, - "delete": { - "tags": [ - "mts" - ], - "summary": "Remove specific MTS session", - "description": "DELETE method is typically used in 'Unregister from the MTS Service' procedure as described in clause 6.2.8.", - "operationId": "mtsSessionDELETE", - "parameters": [ - { - "$ref": "#/components/parameters/Path.sessionId" - } - ], - "responses": { - "204": { - "$ref": "#/components/responses/204" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - } - } - } - } - }, - "components": { - "responses": { - "204": { - "description": "Upon success, a response 204 No Content without any response body is returned." - }, - "400": { - "description": "Bad Request : used to indicate that incorrect parameters were passed to the request.", - "content": { - "application/problem+json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetails" - } - } - } - }, - "403": { - "description": "Forbidden : operation is not allowed given the current status of the resource.", - "content": { - "application/problem+json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetails" - } - } - } - }, - "404": { - "description": "Not Found : used when a client provided a URI that cannot be mapped to a valid resource URI.", - "content": { - "application/problem+json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetails" - } - } - } - }, - "412": { - "description": "Precondition failed : used when a condition has failed during conditional requests, e.g. when using ETags to avoid write conflicts when using PUT", - "content": { - "application/problem+json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetails" - } - } - } - } - }, - "parameters": { - "Path.sessionId": { - "name": "sessionId", - "in": "path", - "description": "Represents a MTS session instance", - "required": true, - "schema": { - "type": "string" - } - }, - "Query.app_instance_id": { - "name": "app_instance_id", - "in": "query", - "description": "A MEC application instance may use multiple app_instance_ids as an input parameter to query the MTS session of a list of MEC application instances. See note.", - "required": false, - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "Query.app_name": { - "name": "app_name", - "in": "query", - "description": "A MEC application instance may use multiple app_names as an input parameter to query the MTS session of a list of MEC application instances. See note.", - "required": false, - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "Query.session_id": { - "name": "session_id", - "in": "query", - "description": "A MEC application instance may use session_id as an input parameter to query the information of a list of MTS sessions. See note.", - "required": false, - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "schemas": { - "MtsCapabilityInfo": { - "properties": { - "mtsAccessInfo": { - "description": "The information on access network connection as defined below", - "items": { - "type": "object", - "properties": { - "accessId": { - "format": "uint32", - "type": "integer", - "description": "Unique identifier for the access network connection", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Uint32" - }, - "accessType": { - "format": "uint32", - "type": "integer", - "description": "Numeric value (0-255) corresponding to specific type of access network as following: 0 = Unknown 1 = Any IEEE802.11-based WLAN technology 2 = Any 3GPP-based Cellular technology 3 = Any Fixed Access 11 = IEEE802.11 a/b/g WLAN 12 = IEEE 802.11 a/b/g/n WLAN 13 = IEEE 802.11 a/b/g/n/ac WLAN 14 = IEEE 802.11 a/b/g/n/ac/ax WLAN (Wi-Fi 6) 15 = IEEE 802.11 b/g/n WLAN 31 = 3GPP GERAN/UTRA (2G/3G) 32 = 3GPP E-UTRA (4G/LTE) 33 = 3GPP NR (5G)", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Uint32" - }, - "metered": { - "format": "uint32", - "type": "integer", - "description": "Numeric value (0-255) corresponding to the following: 0: the connection is not metered (see note) 1: the connection is metered 2: unknown ", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Uint32" - } - } - }, - "required": [ - "accessId", - "accessType", - "metered" - ], - "minItems": 1, - "type": "array", - "x-etsi-mec-cardinality": "1..N", - "x-etsi-mec-origin-type": "Structure (inlined)" - }, - "mtsMode": { - "description": "Numeric value corresponding to a specific MTS operation supported by the TMS 0 = low cost, i.e. using the unmetered access network connection whenever it is available 1 = low latency, i.e. using the access network connection with lower latency 2 = high throughput, i.e. using the access network connection with higher throughput, or/and multiple access network connection simultaneously if supported 3 = redundancy, i.e. sending duplicated (redundancy) packets over multiple access network connections for highreliability and low-latency applications 4 = QoS, i.e. performing MTS based on the specific QoS requirements from the app", - "items": { - "type": "integer", - "format": "uint32" - }, - "minItems": 1, - "type": "array", - "x-etsi-mec-cardinality": "1..N", - "x-etsi-mec-origin-type": "Uint32" - }, - "timeStamp": { - "description": "Time stamp to indicate when the corresponding information elements are sent", - "properties": { - "nanoSeconds": { - "format": "uint32", - "type": "integer", - "description": "Time in nanoseconds in Unix-time since January 1, 1970, 00:00:00 UTC", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Uint32" - }, - "seconds": { - "description": "Time in seconds in Unix-time since January 1, 1970, 00:00:00 UTC", - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Uint32" - } - }, - "required": [ - "seconds", - "nanoSeconds" - ], - "type": "object", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Structure (inlined)" - } - }, - "required": [ - "mtsAccessInfo", - "mtsMode" - ], - "type": "object", - "x-etsi-notes": "NOTE:\tA metered connection is a network connection that has a maximum data usage in a specific period, e.g. per hour/day/week/month. The user may get billed extra charges if they go over the allotted amount.", - "x-etsi-ref": "7.2.4" - }, - "MtsSessionInfo": { - "properties": { - "appInsId": { - "description": "Application instance identifier", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "flowFilter": { - "description": "Traffic flow filtering criteria, applicable only if when requestType is set as FLOW_SPECIFIC_MTS_SESSION. Any filtering criteria shall define a single session only. In case multiple sessions match flowFilter the request shall be rejected. If the flowFilter field is included, at least one of its subfields shall be included. Any flowFilter subfield that is not included shall be ignored in traffic flow filtering", - "items": { - "type": "object", - "properties": { - "dscp": { - "format": "uint32", - "type": "integer", - "description": "DSCP in the IPv4 header or Traffic Class in the IPv6 header", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dstIp": { - "description": "Destination address identity of session (including range)", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "dstPort": { - "description": "Destination port identity of session", - "items": { - "type": "integer", - "format": "uint32" - }, - "minItems": 0, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "Uint32" - }, - "flowlabel": { - "format": "uint32", - "type": "integer", - "description": "Flow Label in the IPv6 header, applicable only if the flow is IPv6", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "protocol": { - "format": "uint32", - "type": "integer", - "description": "Protocol number", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "sourceIp": { - "description": "Source address identity of session (including range)", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "sourcePort": { - "description": "Source port identity of session", - "items": { - "type": "integer", - "format": "uint32" - }, - "minItems": 0, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "Uint32" - } - } - }, - "minItems": 1, - "type": "array", - "x-etsi-mec-cardinality": "1..N", - "x-etsi-mec-origin-type": "Structure (inlined)" - }, - "mtsMode": { - "format": "uint32", - "type": "integer", - "description": "Numeric value (0 - 255) corresponding to a specific MTS mode of the MTS session: 0 = low cost, i.e. using the unmetered access network connection whenever it is available 1 = low latency, i.e. using the access network connection with lower latency 2 = high throughput, i.e. using the access network connection with higher throughput, or multiple access network connection simultaneously 3 = redundancy, i.e. sending duplicated (redundancy) packets over multiple access network connections for high-reliability and low-latency applications 4 = QoS, i.e. performing MTS based on the QoS requirement (qosD)", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Uint32" - }, - "qosD": { - "description": "QoS requirement description of the MTS session, applicable only if mtsMode = 4 (QoS). If the qosD field is included, at least one of its subfields shall be included. Any qosD subfield that is not included shall be ignored in Multi-access Traffic Steering (MTS)", - "properties": { - "maxJitter": { - "description": "tolerable jitter in [10 nanoseconds]", - "type": "integer", - "format": "uint32", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "maxLatency": { - "description": "tolerable (one-way) delay in [10 nanoseconds]", - "type": "integer", - "format": "uint32", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "maxLoss": { - "description": "tolerable packet loss rate in [1/10^x]", - "type": "integer", - "format": "uint32", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "minTpt": { - "description": "minimal throughput in [kbps]", - "type": "integer", - "format": "uint32", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "priority": { - "description": "numeric value (0 - 255) corresponding to the traffic priority 0: low; 1: medium; 2: high; 3: critical", - "type": "integer", - "format": "uint32", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - } - }, - "type": "object", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Structure" - }, - "requestType": { - "description": "Numeric value (0 - 255) corresponding to specific type of consumer as following: 0 = APPLICATION_SPECIFIC_MTS_SESSION 1 = FLOW_SPECIFIC_MTS_SESSION", - "enum": [ - 0, - 1 - ], - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Enum_inlined" - }, - "timeStamp": { - "description": "Time stamp to indicate when the corresponding information elements are sent ", - "properties": { - "nanoSeconds": { - "format": "uint32", - "type": "integer", - "description": "The nanoseconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Uint32" - }, - "seconds": { - "format": "uint32", - "type": "integer", - "description": "The seconds part of the Time. Time is defined as Unixtime since January 1, 1970, 00:00:00 UTC", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Uint32" - } - }, - "required": [ - "seconds", - "nanoSeconds" - ], - "type": "object", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Structure (inlined)" - }, - "trafficDirection": { - "description": "The direction of the requested MTS session: 00 = Downlink (towards the UE) 01 = Uplink (towards the application/session) 10 = Symmetrical (see note) ", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - } - }, - "required": [ - "appInsId", - "requestType", - "flowFilter", - "qosD", - "mtsMode", - "trafficDirection" - ], - "type": "object", - "x-etsi-notes": "NOTE:\tFor the downlink direction of a symmetrical flow, \"sourceIp\" and \"sourcePort\" in the \"flowFilter\" structure are used for source address and port, respectively; \"dstIp\" and \"dstPort\" are used for destination address and port, respectively. For the uplink direction of a symmetrical flow, \"sourceIp\" and \"sourcePort\" are used for destination address and port, respectively; \"dstIp\" and \"dstPort\" are used for source address and port, respectively.", - "x-etsi-ref": "7.2.5" - }, - "ProblemDetails": { - "properties": { - "detail": { - "description": "A human-readable explanation specific to this occurrence of the problem", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "instance": { - "description": "A URI reference that identifies the specific occurrence of the problem", - "format": "uri", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "URI" - }, - "status": { - "description": "The HTTP status code for this occurrence of the problem", - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "title": { - "description": "A short, human-readable summary of the problem type", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "type": { - "description": "A URI reference according to IETF RFC 3986 that identifies the problem type", - "format": "uri", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "URI" - } - }, - "type": "object" - } - } - } -} diff --git a/ttcn/LibMec/UEAppInterfaceAPI/json/UEAppInterfaceAPI.json b/ttcn/LibMec/UEAppInterfaceAPI/json/UEAppInterfaceAPI.json deleted file mode 100644 index c5ee3fc..0000000 --- a/ttcn/LibMec/UEAppInterfaceAPI/json/UEAppInterfaceAPI.json +++ /dev/null @@ -1,618 +0,0 @@ -{ - "openapi": "3.0.2", - "info": { - "title": "UE Application Interface API", - "version": "1.1.1", - "description": "The ETSI MEC ISG MEC016 UE Application Interface API described using OpenAPI", - "license": { - "name": "ETSI Forge copyright notice", - "url": "https://forge.etsi.org/etsi-forge-copyright-notice.txt" - }, - "contact": { - "email": "cti_support@etsi.org" - } - }, - "externalDocs": { - "description": "ETSI GS MEC016 UE Application Interface API, V1.1.1", - "url": "http://www.etsi.org/deliver/etsi_gs/MEC/001_099/016/01.01.01_60/gs_MEC016v010101p.pdf" - }, - "security": [ - { - "OauthSecurity": [ - "all" - ] - } - ], - "servers": [ - { - "url": "http://127.0.0.1:8081/mx2/v1" - }, - { - "url": "https://127.0.0.1:8081/mx2/v1" - } - ], - "tags": [ - { - "name": "appList" - }, - { - "name": "appContext" - } - ], - "paths": { - "/app_list": { - "get": { - "description": "Used to query information about the available MEC applications.", - "operationId": "AppList_GET", - "tags": [ - "appList" - ], - "parameters": [ - { - "$ref": "#/components/parameters/Query.AppName" - }, - { - "$ref": "#/components/parameters/Query.AppProvider" - }, - { - "$ref": "#/components/parameters/Query.AppSoftVersion" - }, - { - "$ref": "#/components/parameters/Query.ServiceCont" - }, - { - "$ref": "#/components/parameters/Query.VendorId" - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/AppList" - }, - "400": { - "$ref": "#/components/responses/Error.400" - }, - "401": { - "$ref": "#/components/responses/Error.401" - }, - "403": { - "$ref": "#/components/responses/Error.403" - }, - "404": { - "$ref": "#/components/responses/Error.404" - } - } - } - }, - "/app_contexts": { - "post": { - "description": "The POST method can be used to create a new application context. Upon success, the response contains entity body describing the created application context.", - "operationId": "AppContext_POST", - "tags": [ - "appContext" - ], - "requestBody": { - "$ref": "#/components/requestBodies/AppContext" - }, - "responses": { - "201": { - "$ref": "#/components/responses/AppContext" - }, - "400": { - "$ref": "#/components/responses/Error.400" - }, - "401": { - "$ref": "#/components/responses/Error.401" - }, - "403": { - "$ref": "#/components/responses/Error.403" - }, - "404": { - "$ref": "#/components/responses/Error.404" - } - } - } - }, - "/app_contexts/{contextId}": { - "parameters": [ - { - "$ref": "#/components/parameters/Path.ContextId" - } - ], - "put": { - "description": "The PUT method is used to update the callback reference of the existing application context. Upon successful operation, the target resource is updated with new callback reference.", - "operationId": "AppContextId_PUT", - "tags": [ - "appContext" - ], - "requestBody": { - "$ref": "#/components/requestBodies/AppContext" - }, - "responses": { - "204": { - "description": "No Content." - }, - "400": { - "$ref": "#/components/responses/Error.400" - }, - "401": { - "$ref": "#/components/responses/Error.401" - }, - "403": { - "$ref": "#/components/responses/Error.403" - }, - "404": { - "$ref": "#/components/responses/Error.404" - } - } - }, - "delete": { - "description": "The DELETE method is used to delete the resource that represents the existing application context.", - "operationId": "AppContextId_DEL", - "tags": [ - "appContext" - ], - "responses": { - "204": { - "description": "No Content" - }, - "400": { - "$ref": "#/components/responses/Error.400" - }, - "401": { - "$ref": "#/components/responses/Error.401" - }, - "403": { - "$ref": "#/components/responses/Error.403" - }, - "404": { - "$ref": "#/components/responses/Error.404" - } - } - } - } - }, - "components": { - "parameters": { - "Query.AppName": { - "name": "appName", - "in": "query", - "description": "Name to identify the MEC application", - "required": false, - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "Query.AppProvider": { - "name": "appProvider", - "in": "query", - "description": "Provider of the MEC application", - "required": false, - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "Query.AppSoftVersion": { - "name": "appSoftVersion", - "in": "query", - "description": "Software version of the MEC application", - "required": false, - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "Query.ServiceCont": { - "name": "serviceCont", - "in": "query", - "description": "Required service continuity mode for this application", - "required": false, - "schema": { - "type": "string", - "enum": [ - "SERVICE_CONTINUITY_NOT_REQUIRED", - "SERVICE_CONTINUITY_REQUIRED" - ] - } - }, - "Query.VendorId": { - "name": "vendorId", - "in": "query", - "description": "Vendor identifier", - "required": false, - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "Path.ContextId": { - "name": "contextId", - "in": "path", - "description": "Uniquely identifies the application context in the MEC system. It is assigned by the MEC system and included in the response to an AppContext create.", - "required": true, - "schema": { - "type": "string" - } - } - }, - "requestBodies": { - "AppContext": { - "description": "Uniquely identifies the application context in the MEC system. It is assigned by the MEC system and included in the response to an AppContext create.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AppContext" - } - } - }, - "required": true - } - }, - "responses": { - "AppContext": { - "description": "The response body contains the Application Context as it was created by the MEC system", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AppContext" - } - } - } - }, - "AppList": { - "description": "The response body contains the ApplicationList resource available for the querying UE application", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ApplicationList" - } - } - } - }, - "Error.400": { - "description": "Bad Request. It is used to indicate that incorrect parameters were passed to the request.", - "content": { - "application/problem+json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetails" - } - }, - "text/plain": { - "schema": { - "$ref": "#/components/schemas/Empty" - } - } - } - }, - "Error.401": { - "description": "Unauthorized. It is used when the client did not submit the appropriate credentials.", - "content": { - "application/problem+json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetails" - } - }, - "text/plain": { - "schema": { - "$ref": "#/components/schemas/Empty" - } - } - } - }, - "Error.403": { - "description": "Forbidden. The operation is not allowed given the current status of the resource. ", - "content": { - "application/problem+json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetails" - } - } - } - }, - "Error.404": { - "description": "Not Found. It is used when a client provided a URI that cannot be mapped to a valid resource URI.", - "content": { - "application/problem+json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetails" - } - }, - "text/plain": { - "schema": { - "$ref": "#/components/schemas/Empty" - } - } - } - } - }, - "securitySchemes": { - "OauthSecurity": { - "type": "oauth2", - "flows": { - "clientCredentials": { - "tokenUrl": "https://oauth.exampleAPI/token", - "scopes": { - "all": "Single oauth2 scope for API" - } - } - } - } - }, - "schemas": { - "Empty": { - "description": "Empty schema" - }, - "ProblemDetails": { - "type": "object", - "properties": { - "type": { - "$ref": "#/components/schemas/Problem.type" - }, - "title": { - "$ref": "#/components/schemas/Problem.title" - }, - "status": { - "$ref": "#/components/schemas/Problem.status" - }, - "detail": { - "$ref": "#/components/schemas/Problem.detail" - }, - "instance": { - "$ref": "#/components/schemas/Problem.instance" - } - } - }, - "Problem.type": { - "type": "string", - "format": "uri", - "description": "A URI reference according to IETF RFC 3986 that identifies the problem type" - }, - "Problem.title": { - "type": "string", - "description": "A short, human-readable summary of the problem type" - }, - "Problem.status": { - "type": "integer", - "format": "uint32", - "description": "The HTTP status code for this occurrence of the problem" - }, - "Problem.detail": { - "type": "string", - "description": "A human-readable explanation specific to this occurrence of the problem" - }, - "Problem.instance": { - "type": "string", - "format": "uri", - "description": "A URI reference that identifies the specific occurrence of the problem" - }, - "ApplicationList": { - "description": "Information on available applications", - "type": "object", - "properties": { - "appInfo": { - "$ref": "#/components/schemas/AppInfo" - }, - "vendorSpecificExt": { - "$ref": "#/components/schemas/VendorSpecificExt" - } - } - }, - "AppContext": { - "description": "Information on application context created by the MEC system", - "type": "object", - "required": [ - "contextId", - "associateUeAppId", - "appInfo" - ], - "properties": { - "contextId": { - "$ref": "#/components/schemas/ContextId" - }, - "associateUeAppId": { - "$ref": "#/components/schemas/AssociateUeAppId" - }, - "callbackReference": { - "$ref": "#/components/schemas/CallbackReference" - }, - "appInfo": { - "$ref": "#/components/schemas/RequiredAppInfo" - } - } - }, - "NotificationEvent": { - "description": "The parameters used in the method \"Receiving notification events\".", - "type": "object", - "required": [ - "referenceURI" - ], - "properties": { - "referenceURI": { - "$ref": "#/components/schemas/ReferenceURL" - } - } - }, - "VendorSpecificExtList": { - "description": "Extension for vendor specific information.", - "type": "array", - "minItems": 0, - "items": { - "$ref": "#/components/schemas/VendorSpecificExt" - } - }, - "VendorSpecificExt": { - "description": "Extension for vendor-specific information", - "required": [ - "vendorId" - ], - "properties": { - "vendorId": { - "$ref": "#/components/schemas/VendorId" - } - } - }, - "ContextId": { - "description": "Uniquely identifies the application context in the MEC system. Assigned by the MEC system and included in the response. The length of the value shall not exceed 32 characters.", - "type": "string" - }, - "AssociateUeAppId": { - "description": "Uniquely identifies the UE application. Included in the request. The length of the value shall not exceed 32 characters.", - "type": "string" - }, - "VendorId": { - "description": "Vendor identifier. The length of the value shall not exceed 32 characters. The rest of the structure of this vendor specific extension is not defined", - "type": "string" - }, - "AppInfo": { - "description": "User applications available for the UE application", - "type": "array", - "items": { - "$ref": "#/components/schemas/AppInfoList" - } - }, - "AppInfoList": { - "type": "object", - "required": [ - "appName", - "appProvider", - "appDescription" - ], - "properties": { - "appName": { - "$ref": "#/components/schemas/AppName" - }, - "appProvider": { - "$ref": "#/components/schemas/AppProvider" - }, - "appSoftVersion": { - "$ref": "#/components/schemas/AppSoftVersion" - }, - "appDescription": { - "$ref": "#/components/schemas/AppDescription" - }, - "appCharcs": { - "$ref": "#/components/schemas/AppCharcs" - } - } - }, - "RequiredAppInfo": { - "description": "Included in the request", - "type": "object", - "required": [ - "appName", - "appProvider", - "referenceURL" - ], - "properties": { - "appName": { - "$ref": "#/components/schemas/AppName" - }, - "appProvider": { - "$ref": "#/components/schemas/AppProvider" - }, - "appSoftVersion": { - "$ref": "#/components/schemas/AppSoftVersion" - }, - "appDescription": { - "$ref": "#/components/schemas/AppDescription" - }, - "referenceURL": { - "$ref": "#/components/schemas/ReferenceURL" - }, - "appPackageSource": { - "$ref": "#/components/schemas/AppPackageSource" - } - } - }, - "AppCharcs": { - "description": "The application characteristics relate to the system resources consumed by the application. UE application can use this information e.g., for estimating the cost of use of the application or for the expected user experience", - "type": "object", - "properties": { - "memory": { - "$ref": "#/components/schemas/Memory" - }, - "storage": { - "$ref": "#/components/schemas/Storage" - }, - "latency": { - "$ref": "#/components/schemas/Latency" - }, - "bandwidth": { - "$ref": "#/components/schemas/Bandwidth" - }, - "serviceCont": { - "$ref": "#/components/schemas/ServiceCont" - } - } - }, - "Memory": { - "description": "The maximum size in Mbytes of the memory resource reserved for the MEC application instance in the MEC system", - "type": "integer", - "format": "uint32" - }, - "Storage": { - "description": "The maximum size in Mbytes of the storage resource expected to be used by the MEC application instance in the MEC system", - "type": "integer", - "format": "uint32" - }, - "Latency": { - "description": "The target round trip time in milliseconds supported by the MEC system for the MEC application instance", - "type": "integer", - "format": "uint32" - }, - "Bandwidth": { - "description": "The required connection bandwidth in kbit/s for the use of the mobile edge application instance", - "type": "integer", - "format": "uint32" - }, - "ServiceCont": { - "description": "Required service continuity mode for this application.", - "type": "string", - "enum": [ - "SERVICE_CONTINUITY_NOT_REQUIRED", - "SERVICE_CONTINUITY_REQUIRED" - ] - }, - "AppName": { - "description": "Name of the MEC application. The length of the value shall not exceed 32 characters.", - "type": "string" - }, - "AppProvider": { - "description": "Provider of the MEC application. The length of the value shall not exceed 32 characters.", - "type": "string" - }, - "AppSoftVersion": { - "description": "Software version of the MEC application. The length of the value shall not exceed 32 characters.", - "type": "string" - }, - "AppDescription": { - "description": "Human readable description of the MEC application. NOTE the language support may be limited. The length of the value shall not exceed 128 characters.", - "type": "string" - }, - "CallbackReference": { - "description": "URI assigned by the UE application to receive application lifecycle related notifications. Included in the request. This subscription stays alive for the lifetime of the application context.", - "type": "string", - "format": "uri" - }, - "ReferenceURL": { - "description": "Address of the user application. Used as the reference URL for the application. Assigned by the MEC system and included in the response", - "type": "string", - "format": "uri" - }, - "AppPackageSource": { - "description": "URI of the application package. Included in the request if the application is not one in the ApplicationList. appPackageSource enables on-boarding of the application package into the MEC system. The application package shall comply with the definitions in clause 6.2.1.2 of ETSI GS MEC 010-2", - "type": "string", - "format": "uri" - } - } - } -} \ No newline at end of file diff --git a/ttcn/LibMec/UEidentityAPI/json/UEidentityAPI.json b/ttcn/LibMec/UEidentityAPI/json/UEidentityAPI.json deleted file mode 100644 index cc5098e..0000000 --- a/ttcn/LibMec/UEidentityAPI/json/UEidentityAPI.json +++ /dev/null @@ -1,310 +0,0 @@ -{ - "openapi": "3.0.2", - "info": { - "title": "UE Identity API", - "version": "1.1.1", - "description": "The ETSI MEC ISG MEC014 UE Identity API described using OpenAPI", - "license": { - "name": "ETSI Forge copyright notice", - "url": "https://forge.etsi.org/etsi-forge-copyright-notice.txt" - }, - "contact": { - "email": "cti_support@etsi.org" - } - }, - "externalDocs": { - "description": "ETSI GS MEC014 UE Identity API, V1.1.1", - "url": "http://www.etsi.org/deliver/etsi_gs/MEC/001_099/014/01.01.01_60/gs_mec014v010101p.pdf" - }, - "security": [ - { - "OauthSecurity": [ - "all" - ] - } - ], - "servers": [ - { - "url": "http://127.0.0.1:8081/ui/v1" - }, - { - "url": "https://127.0.0.1:8081/ui/v1" - } - ], - "tags": [ - { - "name": "ueIdentityTagInfo" - } - ], - "paths": { - "/{appInstanceId}/ue_identity_tag_info": { - "parameters": [ - { - "$ref": "#/components/parameters/Path.AppInstanceId" - } - ], - "get": { - "description": "Retrieves information about a specific UeIdentityTagInfo resource", - "operationId": "UeIdentityTagInfo_GET", - "tags": [ - "ueIdentityTagInfo" - ], - "parameters": [ - { - "$ref": "#/components/parameters/Query.UeIdentityTag" - } - ], - "responses": { - "200": { - "description": "It is used to indicate nonspecific success. The response body contains a representation of the UeIdentityTagInfo resource.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UeIdentityTagInfo" - } - } - } - }, - "400": { - "$ref": "#/components/responses/Error.400" - }, - "403": { - "$ref": "#/components/responses/Error.403" - }, - "404": { - "$ref": "#/components/responses/Error.404" - } - } - }, - "put": { - "description": "Register/De-register the information about specific a UeIdentityTagInfo resource", - "operationId": "UeIdentityTagInfo_PUT", - "tags": [ - "ueIdentityTagInfo" - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UeIdentityTagInfo" - } - } - }, - "description": "'The updated \"state\" for each included UE Identity tag is included in the entity body of the request'", - "required": true - }, - "responses": { - "200": { - "description": "It is used to indicate success. The response body contains a representation of the UeIdentityTagInfo resource", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UeIdentityTagInfo" - } - } - } - }, - "400": { - "$ref": "#/components/responses/Error.400" - }, - "403": { - "$ref": "#/components/responses/Error.403" - }, - "404": { - "$ref": "#/components/responses/Error.404" - }, - "412": { - "$ref": "#/components/responses/Error.412" - } - } - } - } - }, - "components": { - "parameters": { - "Path.AppInstanceId": { - "name": "appInstanceId", - "in": "path", - "description": "Represents a mobile edge application instance", - "required": true, - "schema": { - "type": "string" - } - }, - "Query.UeIdentityTag": { - "name": "ueIdentityTag", - "in": "query", - "description": "Represents a UE", - "required": true, - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "responses": { - "Error.400": { - "description": "Bad Request. Incorrect parameters were passed in the request.In the returned ProblemDetails structure, the \"detail\" attribute should convey more information about the error.", - "content": { - "application/problem+json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetails" - } - }, - "text/plain": { - "schema": { - "$ref": "#/components/schemas/Empty" - } - } - } - }, - "Error.403": { - "description": "Forbidden. The operation is not allowed given the current status of the resource. More information should be provided in the \"detail\" attribute of the \"ProblemDetails\" structure.", - "content": { - "application/problem+json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetails" - } - } - } - }, - "Error.404": { - "description": "Not Found. The client provided a URI that cannot be mapped to a valid resource URL. In the returned ProblemDetails structure, the \"detail\" attribute should convey more information about the error.", - "content": { - "application/problem+json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetails" - } - }, - "text/plain": { - "schema": { - "$ref": "#/components/schemas/Empty" - } - } - } - }, - "Error.412": { - "description": "Precondition Failed. It is used when a condition has failed during conditional requests, e.g. when using ETags to avoid write conflicts.In the returned ProblemDetails structure, the \"detail\" attribute should convey more information about the error.", - "content": { - "application/problem+json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetails" - } - }, - "text/plain": { - "schema": { - "$ref": "#/components/schemas/Empty" - } - } - } - } - }, - "securitySchemes": { - "OauthSecurity": { - "type": "oauth2", - "flows": { - "clientCredentials": { - "tokenUrl": "https://oauth.exampleAPI/token", - "scopes": { - "all": "Single oauth2 scope for API" - } - } - } - } - }, - "schemas": { - "Empty": { - "description": "Empty schema" - }, - "ProblemDetails": { - "type": "object", - "properties": { - "type": { - "$ref": "#/components/schemas/Problem.type" - }, - "title": { - "$ref": "#/components/schemas/Problem.title" - }, - "status": { - "$ref": "#/components/schemas/Problem.status" - }, - "detail": { - "$ref": "#/components/schemas/Problem.detail" - }, - "instance": { - "$ref": "#/components/schemas/Problem.instance" - } - } - }, - "Problem.type": { - "type": "string", - "format": "uri", - "description": "A URI reference according to IETF RFC 3986 that identifies the problem type" - }, - "Problem.title": { - "type": "string", - "description": "A short, human-readable summary of the problem type" - }, - "Problem.status": { - "type": "integer", - "format": "uint32", - "description": "The HTTP status code for this occurrence of the problem" - }, - "Problem.detail": { - "type": "string", - "description": "A human-readable explanation specific to this occurrence of the problem" - }, - "Problem.instance": { - "type": "string", - "format": "uri", - "description": "A URI reference that identifies the specific occurrence of the problem" - }, - "UeIdentityTagInfo": { - "description": "information of UE identity tag used in UE Identity feature", - "type": "object", - "required": [ - "ueIdentityTags" - ], - "properties": { - "ueIdentityTags": { - "$ref": "#/components/schemas/UeIdentityTags" - } - } - }, - "UeIdentityTags": { - "description": "1 to N tags presented by a ME Application instance to a ME Platform", - "type": "array", - "items": { - "required": [ - "ueIdentityTag", - "state" - ], - "properties": { - "ueIdentityTag": { - "$ref": "#/components/schemas/UeIdentityTag" - }, - "state": { - "$ref": "#/components/schemas/State" - } - } - } - }, - "UeIdentityTag": { - "description": "Specific tag presented by a ME Application instance to a ME Platform", - "type": "string", - "example": "UeTagA" - }, - "State": { - "description": "Status of the resource ueIdentityTagInfo", - "type": "string", - "enum": [ - "UNREGISTERED", - "REGISTERED" - ], - "example": "REGISTERED" - } - } - } -} \ No newline at end of file diff --git a/ttcn/LibMec/V2XInformationServiceAPI/json/MEC030_V2XInformationService.yaml b/ttcn/LibMec/V2XInformationServiceAPI/json/MEC030_V2XInformationService.yaml deleted file mode 100644 index 4dc7cf3..0000000 --- a/ttcn/LibMec/V2XInformationServiceAPI/json/MEC030_V2XInformationService.yaml +++ /dev/null @@ -1,1568 +0,0 @@ -info: - title: "ETSI GS MEC 030 V2X Information Service API" - version: 2.1.1 - description: "ETSI GS MEC 030 V2X Information Service API described using OpenAPI." - contact: - name: ETSI Forge - email: cti_support@etsi.org - url: https://forge.etsi.org/rep/mec/gs030-vis-api - license: - name: BSD-3-Clause - url: 'https://forge.etsi.org/legal-matters' -externalDocs: - description: "ETSI GS MEC 030 V2X Information Service API, v2.1.1" - url: 'https://www.etsi.org/deliver/etsi_gs/MEC/001_099/030/02.01.01_60/gs_mec030v020101p.pdf' -openapi: 3.0.0 -servers: - - url: 'https://localhost/vis/v1' -tags: - - name: queries - description: Queries - - name: subscription - description: Subscription - -paths: - /queries/uu_unicast_provisioning_info: - get: - tags: - - 'queries' - summary: 'Used to query provisioning information for V2X communication over Uu unicast.' - description: 'Used to query provisioning information for V2X communication over Uu unicast.' - operationId: prov_info_uu_unicastGET - parameters: - - in: query - name: location_info - schema: - type: string - required: true - description: 'Comma separated list of locations to identify a cell of a base station or a particular geographical area' - - responses: - '200': - description: 'A response body containing the Uu unicast provisioning information. ' - content: - application/json: - schema: - $ref: '#/components/schemas/UuUnicastProvisioningInfo' - '400': - $ref: '#/components/responses/400' - '401': - $ref: '#/components/responses/401' - '403': - $ref: '#/components/responses/403' - '404': - $ref: '#/components/responses/404' - '406': - $ref: '#/components/responses/406' - '429': - $ref: '#/components/responses/429' - - /queries/uu_mbms_provisioning_info: - get: - tags: - - 'queries' - summary: 'retrieve information required for V2X communication over Uu MBMS.' - description: 'retrieve information required for V2X communication over Uu MBMS.' - operationId: prov_info_uu_mbmsGET - parameters: - - in: query - name: location_info - schema: - type: string - required: true - description: 'omma separated list of locations to identify a cell of a base station or a particular geographical area' - - responses: - '200': - description: 'A response body containing the Uu unicast provisioning information. ' - content: - application/json: - schema: - $ref: '#/components/schemas/UuMbmsProvisioningInfo' - '400': - $ref: '#/components/responses/400' - '401': - $ref: '#/components/responses/401' - '403': - $ref: '#/components/responses/403' - '404': - $ref: '#/components/responses/404' - '406': - $ref: '#/components/responses/406' - '429': - $ref: '#/components/responses/429' - - /queries/pc5_provisioning_info: - get: - tags: - - 'queries' - summary: 'Query provisioning information for V2X communication over PC5.' - description: 'Query provisioning information for V2X communication over PC5.' - operationId: prov_infoGET - parameters: - - in: query - name: location_info - schema: - type: string - required: true - description: 'Comma separated list of locations to identify a cell of a base station or a particular geographical area' - responses: - '200': - description: 'A response body containing the PC5 provisioning information is returned.' - content: - application/json: - schema: - $ref: '#/components/schemas/Pc5ProvisioningInfo' - '400': - $ref: '#/components/responses/400' - '401': - $ref: '#/components/responses/401' - '403': - $ref: '#/components/responses/403' - '404': - $ref: '#/components/responses/404' - '406': - $ref: '#/components/responses/406' - '429': - $ref: '#/components/responses/429' - - /provide_predicted_qos: - post: - tags: - - 'QoS' - summary: 'Request the predicted QoS correspondent to potential routes of a vehicular UE.' - description: 'Request the predicted QoS correspondent to potential routes of a vehicular UE.' - operationId: predicted_qosPOST - requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/PredictedQos' - responses: - '200': - description: 'The response body shall contain the predicted QoS corresponding to potential routes of a vehicular UE' - content: - application/json: - schema: - $ref: '#/components/schemas/PredictedQos' - '400': - $ref: '#/components/responses/400' - '401': - $ref: '#/components/responses/401' - '403': - $ref: '#/components/responses/403' - '404': - $ref: '#/components/responses/404' - - /publish_v2x_message: - post: - tags: - - 'V2X_msg' - summary: 'Used to publish a V2X message.' - description: 'Used to publish a V2X message.' - operationId: v2x_messagePOST - requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/V2xMsgPublication' - responses: - '204': - $ref: '#/components/responses/204' - '400': - $ref: '#/components/responses/400' - '401': - $ref: '#/components/responses/401' - '403': - $ref: '#/components/responses/403' - '404': - $ref: '#/components/responses/404' - '406': - $ref: '#/components/responses/406' - '429': - $ref: '#/components/responses/429' - - /subscriptions: - get: - tags: - - 'subscription' - summary: 'Request information about the subscriptions for this requestor.' - description: 'Request information about the subscriptions for this requestor.' - operationId: subGET - parameters: - - in: query - name: subscription_type - description: 'Query parameter to filter on a specific subscription type. Permitted values: prov_chg_uu_uni: provisioning information change for V2X communication over Uuunicast prov_chg_uu_mbms: provisioning information change for V2X communication over Uu MBMS prov_chg_uu_pc5: provisioning information change for V2X communication over PC5. v2x_msg: V2X interoperability message' - schema: - type: string - required: false - responses: - '200': - description: 'A response body containing the list of links to requestor subscriptions is returned.' - content: - application/json: - schema: - $ref: '#/components/schemas/SubscriptionLinkList' - '400': - $ref: '#/components/responses/400' - '401': - $ref: '#/components/responses/401' - '403': - $ref: '#/components/responses/403' - '404': - $ref: '#/components/responses/404' - '406': - $ref: '#/components/responses/406' - '429': - $ref: '#/components/responses/429' - post: - tags: - - 'subscription' - summary: ' create a new subscription to VIS notifications.' - description: ' create a new subscription to VIS notifications.' - operationId: subPOST - requestBody: - required: true - content: - application/json: - schema: - oneOf: - - $ref: '#/components/schemas/ProvChgUuUniSubscription' - - $ref: '#/components/schemas/ProvChgUuMbmsSubscription' - - $ref: '#/components/schemas/ProvChgPc5Subscription' - - $ref: '#/components/schemas/V2xMsgSubscription' - responses: - '201': - description: 'In the returned NotificationSubscription structure, the created subscription is described using the appropriate data type.' - content: - application/json: - schema: - oneOf: - - $ref: '#/components/schemas/ProvChgUuUniSubscription' - - $ref: '#/components/schemas/ProvChgUuMbmsSubscription' - - $ref: '#/components/schemas/ProvChgPc5Subscription' - - $ref: '#/components/schemas/V2xMsgSubscription' - '400': - $ref: '#/components/responses/400' - '401': - $ref: '#/components/responses/401' - '403': - $ref: '#/components/responses/403' - '404': - $ref: '#/components/responses/404' - '406': - $ref: '#/components/responses/406' - '415': - $ref: '#/components/responses/415' - '422': - $ref: '#/components/responses/422' - '429': - $ref: '#/components/responses/429' - - callbacks: - notification: - '{$request.body#/callbackReference}': - post: - summary: 'Callback POST used to send a notification' - description: 'A notification from VIS.' - operationId: notificationPOST - requestBody: - description: Subscription notification - required: true - content: - application/json: - schema: - oneOf: - - $ref: '#/components/schemas/ProvChgUuUniNotification' - - $ref: '#/components/schemas/ProvChgUuMbmsNotification' - - $ref: '#/components/schemas/ProvChgPc5Notification' - - $ref: '#/components/schemas/V2xMsgNotification' - responses: - '204': - $ref: '#/components/responses/204' - - /subscriptions/{subscriptionId}: - parameters: - - in: path - name: subscriptionId - description: 'Refers to created subscription, where the VIS API allocates a unique resource name for this subscription' - schema: - type: string - required: true - - - get: - tags: - - 'subscription' - summary: 'Retrieve information about this subscription.' - description: 'Retrieve information about this subscription.' - operationId: individualSubscriptionGET - - responses: - '200': - description: 'A response body containing the data type describing the specific RNI event subscription is returned' - content: - application/json: - schema: - oneOf: - - $ref: '#/components/schemas/ProvChgUuUniSubscription' - - $ref: '#/components/schemas/ProvChgUuMbmsSubscription' - - $ref: '#/components/schemas/ProvChgPc5Subscription' - - $ref: '#/components/schemas/V2xMsgSubscription' - '400': - $ref: '#/components/responses/400' - '401': - $ref: '#/components/responses/401' - '403': - $ref: '#/components/responses/403' - '404': - $ref: '#/components/responses/404' - '406': - $ref: '#/components/responses/406' - '429': - $ref: '#/components/responses/429' - - put: - tags: - - 'subscription' - summary: 'Used to update the existing subscription.' - description: 'Used to update the existing subscription.' - operationId: individualSubscriptionPUT - requestBody: - required: true - content: - application/json: - schema: - oneOf: - - $ref: '#/components/schemas/ProvChgUuUniSubscription' - - $ref: '#/components/schemas/ProvChgUuMbmsSubscription' - - $ref: '#/components/schemas/ProvChgPc5Subscription' - - $ref: '#/components/schemas/V2xMsgSubscription' - responses: - '200': - description: 'A response body containing data type describing the updated subscription is returned' - content: - application/json: - schema: - oneOf: - - $ref: '#/components/schemas/ProvChgUuUniSubscription' - - $ref: '#/components/schemas/ProvChgUuMbmsSubscription' - - $ref: '#/components/schemas/ProvChgPc5Subscription' - - $ref: '#/components/schemas/V2xMsgSubscription' - '400': - $ref: '#/components/responses/400' - '401': - $ref: '#/components/responses/401' - - '403': - $ref: '#/components/responses/403' - - '404': - $ref: '#/components/responses/404' - - '406': - $ref: '#/components/responses/406' - - '412': - $ref: '#/components/responses/412' - - '422': - $ref: '#/components/responses/422' - - '429': - $ref: '#/components/responses/429' - delete: - tags: - - 'subscription' - summary: 'Used to cancel the existing subscription.' - description: 'Used to cancel the existing subscription.' - operationId: individualSubscriptionDELETE - responses: - '204': - $ref: '#/components/responses/204' - '401': - $ref: '#/components/responses/401' - '403': - $ref: '#/components/responses/403' - '404': - $ref: '#/components/responses/404' - '429': - $ref: '#/components/responses/429' - - # /notifitication_end_point_provided_by_client - #post: - -components: - schemas: - CellId: - properties: - cellId: - description: E-UTRAN Cell Identity as a bit string (size (28)). - type: string - x-etsi-mec-cardinality: '1' - x-etsi-mec-origin-type: String - required: - - cellId - type: object - x-etsi-ref: 6.6.2 - Earfcn: - properties: - earfcn: - description: E-UTRA Absolute Radio Frequency Channel Number, range (0... 65535) - type: integer - x-etsi-mec-cardinality: '1' - x-etsi-mec-origin-type: Integer - required: - - earfcn - type: object - x-etsi-ref: 6.6.3 - Ecgi: - properties: - cellId: - # description': The E-UTRAN Cell Identity. - # x-etsi-mec-cardinality': '1' - # x-etsi-mec-origin-type': CellId - $ref: '#/components/schemas/CellId' - plmn: - # description': Public Land Mobile Network Identity. - # x-etsi-mec-cardinality': '1' - # x-etsi-mec-origin-type': Plmn - $ref: '#/components/schemas/Plmn' - required: - - plmn - - cellId - type: object - x-etsi-ref: 6.5.5 - FddInfo: - properties: - dlEarfcn: - # description': '' - # x-etsi-mec-cardinality': '1' - # x-etsi-mec-origin-type': Earfcn - $ref: '#/components/schemas/Earfcn' - dlTransmissionBandwidth: - # description': '' - # x-etsi-mec-cardinality': '1' - # x-etsi-mec-origin-type': TransmissionBandwidth - $ref: '#/components/schemas/TransmissionBandwidth' - ulEarfcn: - # description': '' - # x-etsi-mec-cardinality': '1' - # x-etsi-mec-origin-type': Earfcn - $ref: '#/components/schemas/Earfcn' - ulTransmissionBandwidth: - # description': '' - # x-etsi-mec-cardinality': '1' - # x-etsi-mec-origin-type': TransmissionBandwidth - $ref: '#/components/schemas/TransmissionBandwidth' - required: - - ulEarfcn - - dlEarfcn - - ulTransmissionBandwidth - - dlTransmissionBandwidth - type: object - x-etsi-ref: 6.5.6 - - LocationInfo.geoArea: - description: Information of a geographical area. - properties: - latitude: - description: 'Latitude (DATUM = WGS84) -90 to 90 in decimal degree format DDD.ddd' - format: Float - type: number - x-etsi-mec-cardinality: '1' - x-etsi-mec-origin-type: Float - longitude: - description: 'Longitude (DATUM = WGS84)-180 to 180 in decimal degree format DDD.ddd' - format: Float - type: number - x-etsi-mec-cardinality: '1' - x-etsi-mec-origin-type: Float - required: - - latitude - - longitude - type: object - x-etsi-mec-cardinality: 0..1 - - LocationInfo: - properties: - ecgi: - # description': E-UTRAN CelI Global Identifier of the serving cell. - # x-etsi-mec-cardinality': 0..1 - # x-etsi-mec-origin-type': Ecgi - $ref: '#/components/schemas/Ecgi' - geoArea: - $ref: '#/components/schemas/LocationInfo.geoArea' - type: object - x-etsi-notes: "NOTE:\tEither ecgi or geoArea shall be present, but not both." - x-etsi-ref: 6.5.3 - Pc5NeighbourCellInfo: - properties: - ecgi: - # description': E-UTRAN CelI Global Identifier. - # x-etsi-mec-cardinality': '1' - # x-etsi-mec-origin-type': Ecgi - $ref: '#/components/schemas/Ecgi' - plmn: - # description': Public Land Mobile Network Identity. - # x-etsi-mec-cardinality': '1' - # x-etsi-mec-origin-type': Plmn - $ref: '#/components/schemas/Plmn' - siV2xConfig: - description: V2X sidelink communication configuration, as defined in ETSI TS 136 331 [i.11]. - # x-etsi-mec-cardinality': '1' - # x-etsi-mec-origin-type': SystemInformationBlockType21 (as defined in ETSI TS 136 331 [i.11]) - type: string - required: - - plmn - - ecgi - - siV2xConfig - type: object - x-etsi-ref: 6.5.12 - - - Pc5ProvisioningInfo.proInfoPc5: - description: The provisioning information per location as defined below. - - properties: - dstLayer2Id: - description: "For sidelink communication, the Destination Layer-2 ID is set to the ProSe Layer-2 Group ID or Prose UE ID, see ETSI TS\_136\_321 [i.12].\nPLMN operators coordinate to make sure Destination Layer-2 ID(s) for different V2X services are configured in a consistent manner." - type: string - x-etsi-mec-cardinality: '1' - x-etsi-mec-origin-type: String - locationInfo: - # description': Location information to identify a cell of a base station or a particular geographical area. - # x-etsi-mec-cardinality': '1' - # x-etsi-mec-origin-type': LocationInfo - $ref: '#/components/schemas/LocationInfo' - neighbourCellInfo: - description: The information of the neighbour cells in a visiting PLMN that support V2X communication over PC5. - items: - $ref: '#/components/schemas/Pc5NeighbourCellInfo' - minItems: 0 - type: array - x-etsi-mec-cardinality: 0..N - x-etsi-mec-origin-type: Pc5NeighbourCellInfo - required: - - locationInfo - - dstLayer2Id - - Pc5ProvisioningInfo: - properties: - proInfoPc5: - type: array - items: - $ref: '#/components/schemas/Pc5ProvisioningInfo.proInfoPc5' - timeStamp: - # description': Time stamp. - # x-etsi-mec-cardinality': 0..1 - # x-etsi-mec-origin-type': TimeStamp - $ref: '#/components/schemas/TimeStamp' - required: - - proInfoPc5 - type: object - x-etsi-ref: 6.2.4 - - Plmn: - properties: - mcc: - description: The Mobile Country Code part of PLMN Identity. - type: string - x-etsi-mec-cardinality: '1' - x-etsi-mec-origin-type: String - mnc: - description: The Mobile Network Code part of PLMN Identity. - type: string - x-etsi-mec-cardinality: '1' - x-etsi-mec-origin-type: String - required: - - mcc - - mnc - type: object - x-etsi-ref: 6.5.4 - - PredictedQos.routes.routeInfo: - required: - - location - properties: - location: - $ref: '#/components/schemas/LocationInfo' - time: - $ref: '#/components/schemas/TimeStamp' - rsrp: - description: 'Reference Signal Received Quality as defined in ETSI TS 136 214 [i.13]. Shall only be included in the response' - type: integer - format: Uint8 - - rsrq: - description: 'Reference Signal Received Quality as defined in ETSI TS 136 214 [i.13]. Shall only be included in the response' - type: integer - format: Uint8 - - PredictedQos.routes: - properties: - routeinfo: - description: 'Information relating to a specific route. The first structure shall relate to the route origin and the last to the route destination. Intermediate waypoint locations may also be provided. ' - type: array - minItems: 2 - items: - $ref: '#/components/schemas/PredictedQos.routes.routeInfo' - required: - - routeinfo - - PredictedQos: - description: 'predicted QoS of a vehicular UE' - properties: - timeGranularity: - $ref: '#/components/schemas/TimeStamp' - locationGranularity: - description: 'Granularity of visited location. Measured in meters' - type: string - routes: - type: array - items: - $ref: '#/components/schemas/PredictedQos.routes' - required: - - locationGranularity - - routes - type: object - x-etsi-mec-cardinality: 0..1 - - - ProvChgPc5Notification: - properties: - dstLayer2Id: - description: For sidelink communication, the Destination Layer-2 ID is set to the ProSe Layer-2 Group ID or Prose UE ID, see ETSI TS 136 321 [i.12]. - type: string - x-etsi-mec-cardinality: 0..1 - x-etsi-mec-origin-type: String - locationInfo: - # description': Location information to identify a cell of a base station or a particular geographical area. - # x-etsi-mec-cardinality': '1' - # x-etsi-mec-origin-type': LocationInfo - $ref: '#/components/schemas/LocationInfo' - neighbourCellInfo: - description: The information of the neighbour cells in a visiting PLMN that support V2X communication over PC5. - items: - $ref: '#/components/schemas/Pc5NeighbourCellInfo' - minItems: 0 - type: array - x-etsi-mec-cardinality: 0..N - x-etsi-mec-origin-type: Pc5NeighbourCellInfo - notificationType: - description: Shall be set to "ProvChgPc5Notification". - type: string - x-etsi-mec-cardinality: '1' - x-etsi-mec-origin-type: String - timeStamp: - # description': Time stamp. - # x-etsi-mec-cardinality': 0..1 - # x-etsi-mec-origin-type': TimeStamp - $ref: '#/components/schemas/TimeStamp' - required: - - notificationType - - locationInfo - type: object - x-etsi-ref: 6.4.4 - - ProvChgPc5Subscription.links: - description: Hyperlink related to the resource. This shall be only included in the HTTP responses and in HTTP PUT requests. - properties: - self: - # description': Self-referring URI. The URI shall be unique within the VIS API as it acts as an ID for the subscription. - # x-etsi-mec-cardinality': '1' - # x-etsi-mec-origin-type': LinkType - $ref: '#/components/schemas/LinkType' - required: - - self - type: object - x-etsi-mec-cardinality: 0..1 - - ProvChgPc5Subscription.filterCriteria: - description: List of filtering criteria for the subscription. Any filtering criteria from below, which is included in the request, shall also be included in the response. - properties: - dstLayer2Id: - description: For sidelink communication, the Destination Layer-2 ID is set to the ProSe Layer-2 Group ID or Prose UE ID, see ETSI TS 136 321 [i.12]. - type: string - x-etsi-mec-cardinality: '1' - x-etsi-mec-origin-type: String - locationInfo: - # description': Location information to identify a cell of a base station or a particular geographical area. - # x-etsi-mec-cardinality': '1' - # x-etsi-mec-origin-type': LocationInfo - $ref: '#/components/schemas/LocationInfo' - neighbourCellInfo: - description: The information of the neighbour cells in a visiting PLMN that support V2X communication over PC5. - items: - $ref: '#/components/schemas/Pc5NeighbourCellInfo' - minItems: 0 - type: array - x-etsi-mec-cardinality: 0..N - x-etsi-mec-origin-type: Pc5NeighbourCellInfo - required: - - locationInfo - - dstLayer2Id - type: object - x-etsi-mec-cardinality: '1' - ProvChgPc5Subscription: - properties: - _links: - $ref: '#/components/schemas/ProvChgPc5Subscription.links' - callbackReference: - description: URI selected by the service consumer to receive notifications on the subscribed VIS information. This shall be included both in the request and in response. - format: uri - type: string - x-etsi-mec-cardinality: '1' - x-etsi-mec-origin-type: URI - expiryDeadline: - # description': Time stamp. - # x-etsi-mec-cardinality': 0..1 - # x-etsi-mec-origin-type': TimeStamp - $ref: '#/components/schemas/TimeStamp' - filterCriteria: - $ref: '#/components/schemas/ProvChgPc5Subscription.filterCriteria' - subscriptionType: - description: Shall be set to "ProvChgPc5Subscription". - type: string - x-etsi-mec-cardinality: '1' - x-etsi-mec-origin-type: String - required: - - subscriptionType - - callbackReference - - filterCriteria - type: object - x-etsi-ref: 6.3.4 - ProvChgUuMbmsNotification: - properties: - locationInfo: - # description': Location information to identify a cell of a base station or a particular geographical area. - # x-etsi-mec-cardinality': '1' - # x-etsi-mec-origin-type': LocationInfo - $ref: '#/components/schemas/LocationInfo' - neighbourCellInfo: - description: The information of the neighbour cells in a visiting PLMN that support V2X communication over Uu MBMS. - items: - $ref: '#/components/schemas/UuMbmsNeighbourCellInfo' - minItems: 0 - type: array - x-etsi-mec-cardinality: 0..N - x-etsi-mec-origin-type: UuMbmsNeighbourCellInfo - notificationType: - description: Shall be set to "ProvChgUuMbmsNotification". - type: string - x-etsi-mec-cardinality: '1' - x-etsi-mec-origin-type: String - timeStamp: - # description': Time stamp. - # x-etsi-mec-cardinality': 0..1 - # x-etsi-mec-origin-type': TimeStamp - $ref: '#/components/schemas/TimeStamp' - v2xServerUsd: - # description': User Service Description for V2X Application Server is used to configure the UE for receiving local V2X Application Server information when it is provided over MBMS. - # x-etsi-mec-cardinality': 0..1 - # x-etsi-mec-origin-type': V2xServerUsd - $ref: '#/components/schemas/V2xServerUsd' - required: - - notificationType - - locationInfo - type: object - x-etsi-ref: 6.4.3 - ProvChgUuMbmsSubscription.links: - description: Hyperlink related to the resource. This shall be only included in the HTTP responses and in HTTP PUT requests. - properties: - self: - # description': Self-referring URI. The URI shall be unique within the VIS API as it acts as an ID for the subscription. - # x-etsi-mec-cardinality': '1' - # x-etsi-mec-origin-type': LinkType - $ref: '#/components/schemas/LinkType' - required: - - self - type: object - x-etsi-mec-cardinality: 0..1 - - ProvChgUuMbmsSubscription.filterCriteria: - description: List of filtering criteria for the subscription. Any filtering criteria from below, which is included in the request, shall also be included in the response. - properties: - locationInfo: - # description': Location information to identify a cell of a base station or a particular geographical area. - # x-etsi-mec-cardinality': '1' - # x-etsi-mec-origin-type': LocationInfo - $ref: '#/components/schemas/LocationInfo' - neighbourCellInfo: - description: The information of the neighbour cells in a visiting PLMN that support V2X communication over Uu MBMS. - items: - $ref: '#/components/schemas/UuMbmsNeighbourCellInfo' - minItems: 0 - type: array - x-etsi-mec-cardinality: 0..N - x-etsi-mec-origin-type: UuMbmsNeighbourCellInfo - v2xServerUsd: - # description': User Service Description for V2X Application Server is used to configure the UE for receiving local V2X Application Server information when it is provided over MBMS. - # x-etsi-mec-cardinality': '1' - # x-etsi-mec-origin-type': V2xServerUsd - $ref: '#/components/schemas/V2xServerUsd' - required: - - locationInfo - - v2xServerUsd - type: object - x-etsi-mec-cardinality: '1' - - ProvChgUuMbmsSubscription: - properties: - _links: - $ref: '#/components/schemas/ProvChgUuMbmsSubscription.links' - callbackReference: - description: URI selected by the service consumer to receive notifications on the subscribed VIS information. This shall be included both in the request and in response. - format: uri - type: string - x-etsi-mec-cardinality: '1' - x-etsi-mec-origin-type: URI - expiryDeadline: - # description': Time stamp. - # x-etsi-mec-cardinality': 0..1 - # x-etsi-mec-origin-type': TimeStamp - $ref: '#/components/schemas/TimeStamp' - filterCriteria: - $ref: '#/components/schemas/ProvChgUuMbmsSubscription.filterCriteria' - subscriptionType: - description: Shall be set to "ProvChgUuMbmsSubscription". - type: string - x-etsi-mec-cardinality: '1' - x-etsi-mec-origin-type: String - required: - - subscriptionType - - callbackReference - - filterCriteria - type: object - x-etsi-ref: 6.3.3 - ProvChgUuUniNotification: - properties: - locationInfo: - # description': Location information to identify a cell of a base station or a particular geographical area. - # x-etsi-mec-cardinality': '1' - # x-etsi-mec-origin-type': LocationInfo - $ref: '#/components/schemas/LocationInfo' - neighbourCellInfo: - description: The information of the neighbour cells in a visiting PLMN that support V2X communication over Uu unicast. - items: - $ref: '#/components/schemas/UuUniNeighbourCellInfo' - minItems: 0 - type: array - x-etsi-mec-cardinality: 0..N - x-etsi-mec-origin-type: UuUniNeighbourCellInfo - notificationType: - description: Shall be set to "ProvChgUuUniNotification". - type: string - x-etsi-mec-cardinality: '1' - x-etsi-mec-origin-type: String - timeStamp: - # description': Time stamp. - # x-etsi-mec-cardinality': 0..1 - # x-etsi-mec-origin-type': TimeStamp - $ref: '#/components/schemas/TimeStamp' - v2xApplicationServer: - # description': V2X Application Server address (consisting of IP address and UDP port) for unicast. - # x-etsi-mec-cardinality': 0..1 - # x-etsi-mec-origin-type': V2xApplicationServer - $ref: '#/components/schemas/V2xApplicationServer' - required: - - notificationType - - locationInfo - type: object - x-etsi-ref: 6.4.2 - ProvChgUuUniSubscription.links: - description: Hyperlink related to the resource. This shall be only included in the HTTP responses and in HTTP PUT requests. - properties: - self: - # description': Self-referring URI. The URI shall be unique within the VIS API as it acts as an ID for the subscription. - # x-etsi-mec-cardinality': '1' - # x-etsi-mec-origin-type': LinkType - $ref: '#/components/schemas/LinkType' - required: - - self - type: object - x-etsi-mec-cardinality: 0..1 - - ProvChgUuUniSubscription.filterCriteria: - description: List of filtering criteria for the subscription. Any filtering criteria from below, which is included in the request, shall also be included in the response. - properties: - locationInfo: - # description': Location information to identify a cell of a base station or a particular geographical area. - # x-etsi-mec-cardinality': '1' - # x-etsi-mec-origin-type': LocationInfo - $ref: '#/components/schemas/LocationInfo' - neighbourCellInfo: - description: The information of the neighbour cells in a visiting PLMN that support V2X communication over Uu unicast. - items: - $ref: '#/components/schemas/UuUniNeighbourCellInfo' - minItems: 0 - type: array - x-etsi-mec-cardinality: 0..N - x-etsi-mec-origin-type: UuUniNeighbourCellInfo - v2xApplicationServer: - # description': V2X Application Server address (consisting of IP address and UDP port) for unicast. - # x-etsi-mec-cardinality': '1' - # x-etsi-mec-origin-type': V2xApplicationServer - $ref: '#/components/schemas/V2xApplicationServer' - required: - - locationInfo - - v2xApplicationServer - type: object - x-etsi-mec-cardinality: '1' - - ProvChgUuUniSubscription: - properties: - _links: - $ref: '#/components/schemas/ProvChgUuUniSubscription.links' - callbackReference: - description: URI selected by the service consumer to receive notifications on the subscribed VIS information. This shall be included both in the request and in response. - format: uri - type: string - x-etsi-mec-cardinality: '1' - x-etsi-mec-origin-type: URI - expiryDeadline: - # description': Time stamp. - # x-etsi-mec-cardinality': 0..1 - # x-etsi-mec-origin-type': TimeStamp - $ref: '#/components/schemas/TimeStamp' - filterCriteria: - $ref: '#/components/schemas/ProvChgUuUniSubscription.filterCriteria' - subscriptionType: - description: Shall be set to "ProvChgUuUniSubscription". - type: string - x-etsi-mec-cardinality: '1' - x-etsi-mec-origin-type: String - required: - - subscriptionType - - callbackReference - - filterCriteria - type: object - x-etsi-ref: 6.3.2 - - SubscriptionLinkList.links.subscriptions: - description: "The service consumer\u2019s subscriptions." - properties: - href: - description: The URI referring to the subscription. - format: uri - type: string - x-etsi-mec-cardinality: '1' - x-etsi-mec-origin-type: URI - subscriptionType: - description: Type of the subscription. The values are as defined in the \"subscriptionType\" attribute for each different V2X information event subscription data type. - type: string - x-etsi-mec-cardinality: '1' - x-etsi-mec-origin-type: String - required: - - href - - subscriptionType - x-etsi-mec-cardinality: 0..N - - SubscriptionLinkList.links: - description: List of hyperlinks related to the resource. - properties: - self: - # description': URI of this resource. - # x-etsi-mec-cardinality': '1' - # x-etsi-mec-origin-type': LinkType - $ref: '#/components/schemas/LinkType' - subscriptions: - type: array - items: - $ref: '#/components/schemas/SubscriptionLinkList.links.subscriptions' - type: object - required: - - self - x-etsi-mec-cardinality: '1' - - SubscriptionLinkList: - properties: - _links: - $ref: '#/components/schemas/SubscriptionLinkList.links' - required: - - _links - type: object - x-etsi-ref: 6.3.6 - - TddInfo: - properties: - earfcn: - # description': '' - # x-etsi-mec-cardinality': '1' - # x-etsi-mec-origin-type': Earfcn - $ref: '#/components/schemas/Earfcn' - subframeAssignment: - description: Uplink-downlink subframe configuration information. - type: string - x-etsi-mec-cardinality: '1' - x-etsi-mec-origin-type: String - transmissionBandwidth: - # description': '' - # x-etsi-mec-cardinality': '1' - # x-etsi-mec-origin-type': TransmissionBandwidth - $ref: '#/components/schemas/TransmissionBandwidth' - required: - - earfcn - - transmissionBandwidth - - subframeAssignment - type: object - x-etsi-ref: 6.5.7 - TimeStamp: - properties: - nanoSeconds: - description: The nanoseconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC. - format: Uint32 - type: integer - x-etsi-mec-cardinality: '1' - x-etsi-mec-origin-type: Uint32 - seconds: - description: The seconds part of the time. Time is defined as Unixtime since January 1, 1970, 00:00:00 UTC. - format: Uint32 - type: integer - x-etsi-mec-cardinality: '1' - x-etsi-mec-origin-type: Uint32 - required: - - seconds - - nanoSeconds - type: object - x-etsi-ref: 6.5.2 - TransmissionBandwidth.transmissionBandwidth: - description: 'Numeric value corresponding to the transmission bandwidth expressed in units of resource blocks as follows:1 = bw6 (6 resource blocks)2 = bw15 (15 resource blocks) 3 = bw25 (25 resource blocks) 4 = bw50 (50 resource blocks) 5 = bw75 (75 resource blocks) 6 = bw100 (100 resource blocks)' - enum: - - 1 - - 2 - - 3 - - 4 - - 5 - - 6 - type: integer - x-etsi-mec-cardinality: '1' - x-etsi-mec-origin-type: Enum - - TransmissionBandwidth: - properties: - transmissionBandwidth: - $ref: '#/components/schemas/TransmissionBandwidth.transmissionBandwidth' - required: - - transmissionBandwidth - type: object - x-etsi-ref: 6.6.4 - UuMbmsNeighbourCellInfo: - properties: - ecgi: - # description': E-UTRAN CelI Global Identifier. - # x-etsi-mec-cardinality': '1' - # x-etsi-mec-origin-type': Ecgi - $ref: '#/components/schemas/Ecgi' - fddInfo: - # description': Information for FDD operation. - # x-etsi-mec-cardinality': '1' - # x-etsi-mec-origin-type': FddInfo - $ref: '#/components/schemas/FddInfo' - mbmsServiceAreaIdentity: - description: Supported MBMS Service Area Identities in the cell. - items: - type: string - minItems: 1 - type: array - x-etsi-mec-cardinality: 1..N - x-etsi-mec-origin-type: String - pci: - description: Physical Cell Identifier. - type: integer - x-etsi-mec-cardinality: '1' - x-etsi-mec-origin-type: Integer - plmn: - # description': Public Land Mobile Network Identity. - # x-etsi-mec-cardinality': '1' - # x-etsi-mec-origin-type': Plmn - $ref: '#/components/schemas/Plmn' - tddInfo: - # description': Information for TDD operation. - # x-etsi-mec-cardinality': '1' - # x-etsi-mec-origin-type': TddInfo - $ref: '#/components/schemas/TddInfo' - required: - - plmn - - ecgi - - pci - - fddInfo - - tddInfo - - mbmsServiceAreaIdentity - type: object - x-etsi-ref: 6.5.11 - - UuMbmsProvisioningInfo.proInfoUuMbms: - description: The provisioning information per location as defined below. - properties: - locationInfo: - # description': Location information to identify a cell of a base station or a particular geographical area. - # x-etsi-mec-cardinality': '1' - # x-etsi-mec-origin-type': LocationInfo - $ref: '#/components/schemas/LocationInfo' - neighbourCellInfo: - description: The information of the neighbour cells in a visiting PLMN that support V2X communication over Uu MBMS. - type: array - items: - $ref: '#/components/schemas/UuMbmsNeighbourCellInfo' - minItems: 0 - - x-etsi-mec-cardinality: 0..N - x-etsi-mec-origin-type: UuMbmsNeighbourCellInfo - v2xServerUsd: - # description': User Service Description for V2X Application Server is used to configure the UE for receiving local V2X Application Server information when it is provided over MBMS. - # x-etsi-mec-cardinality': '1' - # x-etsi-mec-origin-type': V2xServerUsd - $ref: '#/components/schemas/V2xServerUsd' - required: - - locationInfo - - v2xServerUsd - - UuMbmsProvisioningInfo: - properties: - proInfoUuMbms: - $ref: '#/components/schemas/UuMbmsProvisioningInfo.proInfoUuMbms' - timeStamp: - # description': Time stamp. - # x-etsi-mec-cardinality': 0..1 - # x-etsi-mec-origin-type': TimeStamp - $ref: '#/components/schemas/TimeStamp' - required: - - proInfoUuMbms - type: object - x-etsi-ref: 6.2.3 - - UuUniNeighbourCellInfo: - properties: - ecgi: - # description': E-UTRAN CelI Global Identifier. - # x-etsi-mec-cardinality': '1' - # x-etsi-mec-origin-type': Ecgi - $ref: '#/components/schemas/Ecgi' - fddInfo: - # description': Information for FDD operation. - # x-etsi-mec-cardinality': '1' - # x-etsi-mec-origin-type': FddInfo - $ref: '#/components/schemas/FddInfo' - pci: - description: Physical Cell Identifier. - type: integer - x-etsi-mec-cardinality: '1' - x-etsi-mec-origin-type: Integer - plmn: - # description': Public Land Mobile Network Identity. - # x-etsi-mec-cardinality': '1' - # x-etsi-mec-origin-type': Plmn - $ref: '#/components/schemas/Plmn' - tddInfo: - # description': Information for TDD operation. - # x-etsi-mec-cardinality': '1' - # x-etsi-mec-origin-type': TddInfo - $ref: '#/components/schemas/TddInfo' - required: - - plmn - - ecgi - - pci - - fddInfo - - tddInfo - type: object - x-etsi-ref: 6.5.9 - - UuUnicastProvisioningInfo.proInfoUuUnicast: - description: The provisioning information per location as defined below. - properties: - locationInfo: - # description': Location information to identify a cell of a base station or a particular geographical area. - # x-etsi-mec-cardinality': '1' - # x-etsi-mec-origin-type': LocationInfo - $ref: '#/components/schemas/LocationInfo' - neighbourCellInfo: - description: The information of the neighbour cells in a visiting PLMN that support V2X communication over Uu unicast. - items: - $ref: '#/components/schemas/UuUniNeighbourCellInfo' - minItems: 0 - type: array - x-etsi-mec-cardinality: 0..N - x-etsi-mec-origin-type: UuUniNeighbourCellInfo - v2xApplicationServer: - # description': V2X Application Server address (consisting of IP address and UDP port) for unicast. - # x-etsi-mec-cardinality': '1' - # x-etsi-mec-origin-type': V2xApplicationServer - $ref: '#/components/schemas/V2xApplicationServer' - required: - - locationInfo - - v2xApplicationServer - x-etsi-mec-cardinality: 1..N - UuUnicastProvisioningInfo: - properties: - proInfoUuUnicast: - type: array - items: - $ref: '#/components/schemas/UuUnicastProvisioningInfo.proInfoUuUnicast' - timeStamp: - # description': Time stamp. - # x-etsi-mec-cardinality': 0..1 - # x-etsi-mec-origin-type': TimeStamp - $ref: '#/components/schemas/TimeStamp' - required: - - proInfoUuUnicast - type: object - x-etsi-ref: 6.2.2 - V2xApplicationServer: - properties: - ipAddress: - description: '' - type: string - x-etsi-mec-cardinality: '1' - x-etsi-mec-origin-type: String - udpPort: - description: '' - type: string - x-etsi-mec-cardinality: '1' - x-etsi-mec-origin-type: String - required: - - ipAddress - - udpPort - type: object - x-etsi-ref: 6.5.8 - - - msgType: - description: '− denm(1): Decentralized Environmental Notification Message (DENM) as specified in ETSI EN 302 637-3 [i.3], − cam(2): Cooperative Awareness Message (CAM) as specified in ETSI EN 302 637-2 [i.2], − poi(3): Point of Interest message as specified in ETSI TS 101 556-1 [i.11], − spat(4): Signal Phase And Timing (SPAT) message as specified in SAE J2735 [i.12], − map(5): MAP message as specified in SAE J2735 [i.12], − ivi(6): In Vehicle Information (IVI) message as defined in ISO TS 19321 [i.13], − ev-rsr(7): Electric vehicle recharging spot reservation message, as defined in ETSI TS 101 556-3 [i.14], ' - enum: - - 1 - - 2 - - 3 - - 4 - - 5 - - 6 - - 7 - type: integer - x-etsi-mec-cardinality: '1' - x-etsi-mec-origin-type: Enum - - V2xMsgPublication: - properties: - msgContent: - description: Published V2X message content. Its format is defined by the standardization organization indicated by the attribute stdOrganization. - type: string - x-etsi-mec-cardinality: '1' - x-etsi-mec-origin-type: String - msgEncodeFormat: - description: The encode format of the V2X message, for example base64. - type: string - x-etsi-mec-cardinality: '1' - x-etsi-mec-origin-type: String - msgType: - $ref: '#/components/schemas/msgType' - #x-etsi-mec-origin-type: Enum - stdOrganization: - description: "Standardization organization which defines the published V2X message type: \nETSI: European Telecommunications Standards Institute. \nSee note 1." - enum: - - ETSI - type: string - x-etsi-mec-cardinality: '1' - #-etsi-mec-origin-type: Enum - required: - - stdOrganization - - msgType - - msgEncodeFormat - - msgContent - type: object - x-etsi-notes: "NOTE 1: Other standardization organizations could be added as needed.NOTE 2:The V2X message types of ETSI shall be used as specified in ETSI TS 102 894-2 [6], clause A.114." - x-etsi-ref: 6.2.6 - - V2xMsgSubscription.links: - description: Hyperlink related to the resource. This shall be only included in the HTTP responses and in HTTP PUT requests. - properties: - self: - # description': Self-referring URI. The URI shall be unique within the VIS API as it acts as an ID for the subscription. - # x-etsi-mec-cardinality': '1' - # x-etsi-mec-origin-type': LinkType - $ref: '#/components/schemas/LinkType' - required: - - self - type: object - x-etsi-mec-cardinality: 0..1 - - V2xMsgSubscription.filterCriteria: - description: List of filtering criteria for the subscription. Any filtering criteria from below, which is included in the request, shall also be included in the response. - properties: - msgType: - description: Subscribed V2X message type. Its value is defined by the standardization organization indicated by the attribute stdOrganization. See note 2. - items: - type: string - minItems: 0 - type: array - x-etsi-mec-cardinality: 0..N - x-etsi-mec-origin-type: Enum - stdOrganization: - description: "Standardization organization which defines the subscribed V2X message type: \nETSI: European Telecommunications Standards Institute. \nSee note 1." - enum: - - ETSI - type: string - x-etsi-mec-cardinality: '1' - x-etsi-mec-origin-type: Enum - required: - - stdOrganization - type: object - x-etsi-mec-cardinality: '1' - - V2xMsgSubscription: - properties: - _links: - $ref: '#/components/schemas/V2xMsgSubscription.links' - callbackReference: - description: URI selected by the service consumer to receive notifications on the subscribed V2X message. This shall be included both in the request and in response. - format: uri - type: string - x-etsi-mec-cardinality: '1' - x-etsi-mec-origin-type: URI - expiryDeadline: - # description': Time stamp. - # x-etsi-mec-cardinality': 0..1 - # x-etsi-mec-origin-type': TimeStamp - $ref: '#/components/schemas/TimeStamp' - filterCriteria: - $ref: '#/components/schemas/V2xMsgSubscription.filterCriteria' - subscriptionType: - description: Shall be set to "V2xMsgSubscription". - type: string - x-etsi-mec-cardinality: '1' - x-etsi-mec-origin-type: String - required: - - subscriptionType - - callbackReference - - filterCriteria - type: object - x-etsi-notes: "NOTE 1:\tOther standardization organizations could be added as needed.\nNOTE 2:\tThe V2X message types of ETSI shall be used as specified in ETSI TS 102 894-2 [6], clause A.114." - x-etsi-ref: 6.3.5 - - - V2xMsgNotification.links: - description: 'Links to resources related to this notification.' - properties: - subscription: - # description': Self-referring URI. The URI shall be unique within the VIS API as it acts as an ID for the subscription. - # x-etsi-mec-cardinality': '1' - # x-etsi-mec-origin-type': LinkType - $ref: '#/components/schemas/LinkType' - required: - - subscription - type: object - x-etsi-mec-cardinality: 0..1 - - V2xMsgNotification: - properties: - notificationType: - description: Shall be set to "V2xMsgNotification". - type: string - x-etsi-mec-cardinality: '1' - x-etsi-mec-origin-type: String - timeStamp: - # description': Time stamp. - # x-etsi-mec-cardinality': 0..1 - # x-etsi-mec-origin-type': TimeStamp - $ref: '#/components/schemas/TimeStamp' - stdOrganization: - description: 'Standardization organization which defines the published V2X message type ETSI: European Telecommunications Standards Institute. See note 1.' - enum: - - "ETSI" - type: string - msgType: - $ref: '#/components/schemas/msgType' - msgEncodeFormat: - description: 'The encode format of the V2X message, for example base64 ' - type: string - msgContent: - description: 'Published V2X message content. The format of the string is defined by the standardization organization indicated by the attribute stdOrganization.' - type: string - _links: - $ref: '#/components/schemas/V2xMsgNotification.links' - required: - - notificationType - - timeStamp - - stdOrganization - - msgType - - msgEncodeFormat - - msgContent - - _links - type: object - x-etsi-notes: "NOTE 1: Other standardization organizations could be added as needed. NOTE 2: The V2X message types of ETSI shall be used as specified in ETSI TS 102 894-2 [6], clause A.114" - - V2xServerUsd.sdpInfo: - description: SDP with IP multicast address and port number used for V2X communication via MBMS. - properties: - ipMulticastAddress: - description: '' - type: string - x-etsi-mec-cardinality: '1' - x-etsi-mec-origin-type: String - portNumber: - description: '' - type: string - x-etsi-mec-cardinality: '1' - x-etsi-mec-origin-type: String - required: - - ipMulticastAddress - - portNumber - type: object - x-etsi-mec-cardinality: '1' - V2xServerUsd.tmgi: - description: Temporary Mobile Group Identity (TMGI), which is used within MBMS to uniquely identify Multicast and Broadcast bearer services. - properties: - mbmsServiceId: - description: MBMS Service ID consisting of three octets. - type: string - x-etsi-mec-cardinality: '1' - x-etsi-mec-origin-type: String - mcc: - description: The Mobile Country Code part of PLMN Identity. - type: string - x-etsi-mec-cardinality: '1' - x-etsi-mec-origin-type: String - mnc: - description: The Mobile Network Code part of PLMN Identity. - type: string - x-etsi-mec-cardinality: '1' - x-etsi-mec-origin-type: String - required: - - mbmsServiceId - - mcc - - mnc - type: object - x-etsi-mec-cardinality: '' - - V2xServerUsd: - properties: - sdpInfo: - $ref: '#/components/schemas/V2xServerUsd.sdpInfo' - serviceAreaIdentifier: - description: A list of service area identifier for the applicable MBMS broadcast area. - items: - type: string - minItems: 1 - type: array - x-etsi-mec-cardinality: 1..N - x-etsi-mec-origin-type: String - tmgi: - $ref: '#/components/schemas/V2xServerUsd.tmgi' - required: - - tmgi - - serviceAreaIdentifier - - sdpInfo - type: object - x-etsi-ref: 6.5.10 - - LinkType: - description: >- - 'This data type represents a type of link' - type: object - required: - - href - properties: - href: - $ref: '#/components/schemas/Href' - Href: - description: >- - The URI referring to the subscription. - type: string - format: uri - ProblemDetails: - properties: - detail: - description: A human-readable explanation specific to this occurrence of the problem - type: string - x-etsi-mec-cardinality: 0..1 - x-etsi-mec-origin-type: String - instance: - description: A URI reference that identifies the specific occurrence of the problem - format: uri - type: string - x-etsi-mec-cardinality: 0..1 - x-etsi-mec-origin-type: URI - status: - description: The HTTP status code for this occurrence of the problem - format: uint32 - type: integer - x-etsi-mec-cardinality: 0..1 - x-etsi-mec-origin-type: Uint32 - title: - description: A short, human-readable summary of the problem type - type: string - x-etsi-mec-cardinality: 0..1 - x-etsi-mec-origin-type: String - type: - description: A URI reference according to IETF RFC 3986 that identifies the problem type - format: uri - type: string - x-etsi-mec-cardinality: 0..1 - x-etsi-mec-origin-type: URI - type: object - responses: - 204: - description: No Content - 206: - description: Partial content - 400: - description: 'Bad Request : used to indicate that incorrect parameters were passed to the request.' - content: - application/json: - schema: - $ref: '#/components/schemas/ProblemDetails' - 401: - description: 'Unauthorized : used when the client did not submit credentials.' - content: - application/json: - schema: - $ref: '#/components/schemas/ProblemDetails' - 403: - description: 'Forbidden : operation is not allowed given the current status of the resource.' - content: - application/json: - schema: - $ref: '#/components/schemas/ProblemDetails' - 404: - description: 'Not Found : used when a client provided a URI that cannot be mapped to a valid resource URI.' - content: - application/json: - schema: - $ref: '#/components/schemas/ProblemDetails' - 406: - description: 'Not Acceptable : used to indicate that the server cannot provide the any of the content formats supported by the client.' - content: - application/json: - schema: - $ref: '#/components/schemas/ProblemDetails' - 409: - description: 'Conflict : The operation cannot be executed currently, due to a conflict with the state of the resource' - content: - application/json: - schema: - $ref: '#/components/schemas/ProblemDetails' - 412: - description: 'Precondition failed : used when a condition has failed during conditional requests, e.g. when using ETags to avoid write conflicts when using PUT' - content: - application/json: - schema: - $ref: '#/components/schemas/ProblemDetails' - 415: - description: 'Unsupported Media Type : used to indicate that the server or the client does not support the content type of the entity body.' - content: - application/json: - schema: - $ref: '#/components/schemas/ProblemDetails' - 422: - description: 'Unprocessable Entity : used to indicate that the server understands the content type of the request entity and that the syntax of the request entity is correct but that the server is unable to process the contained instructions. This error condition can occur if an JSON request body is syntactically correct but semantically incorrect, for example if the target area for the request is considered too large. This error condition can also occur if the capabilities required by the request are not supported.' - content: - application/json: - schema: - $ref: '#/components/schemas/ProblemDetails' - 429: - description: 'Too Many Requests : used when a rate limiter has triggered.' - content: - application/json: - schema: - $ref: '#/components/schemas/ProblemDetails' diff --git a/ttcn/LibMec/WlanInformationAPI/json/WlanInformationAPI.json b/ttcn/LibMec/WlanInformationAPI/json/WlanInformationAPI.json deleted file mode 100644 index 73fd348..0000000 --- a/ttcn/LibMec/WlanInformationAPI/json/WlanInformationAPI.json +++ /dev/null @@ -1,2701 +0,0 @@ -{ - "openapi": "3.0.0", - "info": { - "contact": { - "url": "https://forge.etsi.org/rep/mec/gs028-wai-api" - }, - "title": "ETSI GS MEC 028 - WLAN Access Information API", - "version": "2.1.1", - "description": "The ETSI MEC ISG MEC028 WLAN Access Information API described using OpenAPI", - "license": { - "name": "BSD-3-Clause", - "url": "https://forge.etsi.org/legal-matters" - } - }, - "externalDocs": { - "description": "ETSI MEC028 V2.1.1 WLAN Information API", - "url": "http://www.etsi.org/deliver/etsi_gs/MEC/001_099/028/02.01.01_60/gs_mec028v020101p.pdf" - }, - "servers": [ - { - "url": "https://localhost/wai/v2" - } - ], - "tags": [ - { - "name": "wai" - } - ], - "paths": { - "/queries/ap/ap_information": { - "get": { - "tags": [ - "wai" - ], - "summary": "Retrieve information on existing Access Points", - "description": "Queries information about existing WLAN Access Points", - "operationId": "apInfoGET", - "parameters": [ - { - "$ref": "#/components/parameters/Query.Filter" - }, - { - "$ref": "#/components/parameters/Query.AllFields" - }, - { - "$ref": "#/components/parameters/Query.Fields" - }, - { - "$ref": "#/components/parameters/Query.ExcludeFields" - }, - { - "$ref": "#/components/parameters/Query.ExcludeDefault" - } - ], - "responses": { - "200": { - "description": "Successful response to ap_info request", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ApInfo" - } - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "406": { - "$ref": "#/components/responses/406" - }, - "429": { - "$ref": "#/components/responses/429" - } - } - } - }, - "/queries/sta/sta_information": { - "get": { - "tags": [ - "wai" - ], - "summary": "Retrieve information on existing Stations", - "description": "Queries information about existing WLAN stations", - "operationId": "staInfoGET", - "parameters": [ - { - "$ref": "#/components/parameters/Query.Filter" - }, - { - "$ref": "#/components/parameters/Query.AllFields" - }, - { - "$ref": "#/components/parameters/Query.Fields" - }, - { - "$ref": "#/components/parameters/Query.ExcludeFields" - }, - { - "$ref": "#/components/parameters/Query.ExcludeDefault" - } - ], - "responses": { - "200": { - "description": "Successful response to sta_info request", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/StaInfo" - } - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "406": { - "$ref": "#/components/responses/406" - }, - "429": { - "$ref": "#/components/responses/429" - } - } - } - }, - "/subscriptions": { - "get": { - "tags": [ - "wai" - ], - "summary": "Retrieve information on subscriptions for notifications", - "description": "Queries information on subscriptions for notifications", - "operationId": "subscriptionLinkList_subscriptionsGET", - "parameters": [ - { - "$ref": "#/components/parameters/Query.SubscriptionType" - } - ], - "responses": { - "200": { - "description": "Response body contains the list of links to requestors subscriptions.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SubscriptionLinkList" - }, - "example": { - "_links": { - "self": { - "href": "http://meAppServer.example.com/wai/v2/subscriptions" - } - }, - "subscription": [ - { - "_links": { - "self": { - "href": "http://meAppServer.example.com/wai/v2/subscriptions/sub123" - } - }, - "callbackReference": "http://my.callback.com/wai/assocStaSubscription/some-id", - "subscriptionType": "AssocStaSubscription" - } - ] - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "406": { - "$ref": "#/components/responses/406" - }, - "429": { - "$ref": "#/components/responses/429" - } - } - }, - "post": { - "tags": [ - "wai" - ], - "summary": "Create a new subscription", - "description": "Creates a new subscription to WLAN Access Information notifications", - "operationId": "subscriptionsPOST", - "requestBody": { - "description": "Subscription to be created", - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InlineSubscription" - }, - "example": { - "subscriptionType": "AssocStaSubscription", - "callbackReference": "http://meAppClient.example.com/wai/v2/notifications/1", - "expiryDeadline": { - "seconds": 1977836800, - "nanoSeconds": 0 - }, - "apId": { - "macId": "005C0A0A0A0A", - "ssid": "myNetworkSsid", - "ipAddress": "10.10.100.1" - } - } - } - } - }, - "responses": { - "201": { - "description": "Successful subscription response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InlineSubscription" - }, - "example": { - "subscriptionType": "AssocStaSubscription", - "callbackReference": "http://meAppClient.example.com/wai/v2/notifications/1", - "_links": { - "self": { - "href": "http://meAppServer.example.com/wai/v2/subscriptions/sub123" - } - }, - "expiryDeadline": { - "seconds": 1977836800, - "nanoSeconds": 0 - }, - "apId": { - "macId": "005C0A0A0A0A", - "ssid": "myNetworkSsid", - "ipAddress": "10.10.100.1" - } - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "406": { - "$ref": "#/components/responses/406" - }, - "415": { - "$ref": "#/components/responses/415" - }, - "422": { - "$ref": "#/components/responses/422" - }, - "429": { - "$ref": "#/components/responses/429" - } - }, - "callbacks": { - "notification": { - "{$request.body#/callbackReference}": { - "post": { - "summary": "Callback POST used to send a notification", - "description": "Notification from WAIS, content based on subscription type", - "operationId": "notificationPOST", - "requestBody": { - "description": "Subscription notification", - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InlineNotification" - }, - "example": { - "notificationType": "AssocStaNotification", - "timeStamp": { - "seconds": 1977836800, - "nanoseconds": 0 - }, - "apId": { - "macId": "005C0A0A0A0A", - "ssid": "myNetworkSsid", - "ipAddress": "10.10.100.1" - }, - "staId": { - "macId": "005C01111111", - "ssid": [ - "myNetworkSsid", - "myOtherNetworkSsid" - ], - "aid": "1122", - "ipAddress": "10.10.1.255" - } - } - } - } - }, - "responses": { - "204": { - "$ref": "#/components/responses/204" - } - } - } - } - } - } - } - }, - "/subscriptions/{subscriptionId}": { - "get": { - "tags": [ - "wai" - ], - "summary": "Retrieve information on current specific subscription", - "description": "Queries information about an existing subscription, identified by its self-referring URI returned on creation (initial POST)", - "operationId": "subscriptionsGET", - "parameters": [ - { - "$ref": "#/components/parameters/Path.subscrId" - } - ], - "responses": { - "200": { - "description": "Subscription information regarding subscription notifications", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InlineSubscription" - }, - "example": { - "subscriptionType": "AssocStaSubscription", - "callbackReference": "http://meAppClient.example.com/wai/v2/notifications/1", - "_links": { - "self": { - "href": "http://meAppServer.example.com/wai/v2/subscriptions/sub123" - } - }, - "expiryDeadline": { - "seconds": 1977836800, - "nanoSeconds": 0 - }, - "apId": { - "macId": "005C0A0A0A0A", - "ssid": "myNetworkSsid", - "ipAddress": "10.10.100.1" - } - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "406": { - "$ref": "#/components/responses/406" - }, - "429": { - "$ref": "#/components/responses/429" - } - } - }, - "put": { - "tags": [ - "wai" - ], - "summary": "Modify an existing subscription", - "description": "Updates an existing subscription, identified by its self-referring URI returned on creation (initial POST)", - "operationId": "subscriptionsPUT", - "requestBody": { - "description": "Subscription to be modified", - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InlineSubscription" - }, - "example": { - "subscriptionType": "AssocStaSubscription", - "callbackReference": "http://meAppClient.example.com/wai/v2/notifications/1", - "_links": { - "self": { - "href": "http://meAppServer.example.com/wai/v2/subscriptions/sub123" - } - }, - "expiryDeadline": { - "seconds": 1977836800, - "nanoSeconds": 0 - }, - "apId": { - "macId": "005C0A0A0A0A", - "ssid": "myNetworkSsid", - "ipAddress": "10.10.100.1" - } - } - } - } - }, - "parameters": [ - { - "$ref": "#/components/parameters/Path.subscrId" - } - ], - "responses": { - "200": { - "description": "Successful subscription modification", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InlineSubscription" - }, - "example": { - "_links": { - "self": { - "href": "http://[hostIP]/sbox-xyz123/wai/v2/subscriptions/sub123" - } - }, - "callbackReference": "http://my.callback.com/wai/some-id", - "apId": { - "macId": "005C0A0A0A0A" - } - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "406": { - "$ref": "#/components/responses/406" - }, - "412": { - "$ref": "#/components/responses/412" - }, - "422": { - "$ref": "#/components/responses/422" - }, - "429": { - "$ref": "#/components/responses/429" - } - } - }, - "delete": { - "tags": [ - "wai" - ], - "summary": "Cancel an existing subscription", - "description": "Cancels an existing subscription, identified by its self-referring URI returned on creation (initial POST)", - "operationId": "subscriptionsDELETE", - "parameters": [ - { - "$ref": "#/components/parameters/Path.subscrId" - } - ], - "responses": { - "204": { - "$ref": "#/components/responses/204" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "429": { - "$ref": "#/components/responses/429" - } - } - } - } - }, - "components": { - "responses": { - "200": { - "description": "OK" - }, - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request : used to indicate that incorrect parameters were passed to the request.", - "content": { - "application/problem+json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetails" - } - } - } - }, - "401": { - "description": "Unauthorized : used when the client did not submit credentials.", - "content": { - "application/problem+json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetails" - } - } - } - }, - "403": { - "description": "Forbidden : operation is not allowed given the current status of the resource.", - "content": { - "application/problem+json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetails" - } - } - } - }, - "404": { - "description": "Not Found : used when a client provided a URI that cannot be mapped to a valid resource URI.", - "content": { - "application/problem+json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetails" - } - } - } - }, - "406": { - "description": "Not Acceptable : used to indicate that the server cannot provide the any of the content formats supported by the client.", - "content": { - "application/problem+json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetails" - } - } - } - }, - "412": { - "description": "Precondition failed : used when a condition has failed during conditional requests, e.g. when using ETags to avoid write conflicts when using PUT", - "content": { - "application/problem+json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetails" - } - } - } - }, - "415": { - "description": "Unsupported Media Type : used to indicate that the server or the client does not support the content type of the entity body.", - "content": { - "application/problem+json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetails" - } - } - } - }, - "422": { - "description": "Unprocessable Entity : used to indicate that the server understands the content type of the request entity and that the syntax of the request entity is correct but that the server is unable to process the contained instructions. This error condition can occur if an JSON request body is syntactically correct but semantically incorrect, for example if the target area for the request is considered too large. This error condition can also occur if the capabilities required by the request are not supported.", - "content": { - "application/problem+json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetails" - }, - "example": { - "application/problem+json": { - "type": "https://meAppServer.example.com/wai/v2/probs/too-many targets", - "title": "Too many targets", - "status": "422", - "detail": "The target area for the request is considered too large", - "instance": "/meAppClient.example.com/77777/msgs/abc" - } - } - } - } - }, - "429": { - "description": "Too Many Requests : used when a rate limiter has triggered.", - "content": { - "application/problem+json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetails" - } - } - } - } - }, - "parameters": { - "Path.subscrId": { - "name": "subscriptionId", - "in": "path", - "description": "Subscription Id, specifically the \"self\" returned in the subscription request", - "required": true, - "schema": { - "type": "string", - "format": "uri" - } - }, - "Query.Filter": { - "name": "filter", - "in": "query", - "description": "Attribute-based filtering expression according to clause 6.19 of ETSI GS MEC 009. .", - "required": false, - "schema": { - "type": "string" - } - }, - "Query.AllFields": { - "name": "all_fields", - "in": "query", - "description": "Include all complex attributes in the response. See clause 6.18 of ETSI GS MEC 009 for details.", - "required": false, - "schema": { - "type": "string" - } - }, - "Query.Fields": { - "name": "fields", - "in": "query", - "description": "Complex attributes to be included into the response. See clause 6.18 of ETSI GS MEC 009 for details.", - "required": false, - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "Query.ExcludeFields": { - "name": "exclude_fields", - "in": "query", - "description": "Complex attributes to be excluded from the response. See clause 6.18 of ETSI GS MEC 009 for details.", - "required": false, - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "Query.ExcludeDefault": { - "name": "exclude_default", - "in": "query", - "description": "Indicates to exclude the following complex attributes from the response. See clause 6.18 of ETSI GS MEC 009 for details. The following attributes shall be excluded from the structure in the response body if this parameter is provided, or none of the parameters \"all_fields\", \"fields\", \"exclude_fields\", \"exclude_default\" are provided: Not applicable", - "required": false, - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "Query.SubscriptionType": { - "name": "subscription_type", - "in": "query", - "description": "Filter on a specific subscription type. Permitted values: assoc_sta, sta_data_rate.", - "required": false, - "schema": { - "type": "string" - } - } - }, - "schemas": { - "ApAssociated": { - "properties": { - "assocId": { - "description": "Unique number which identifies a particular association between the station and Access Point.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "ipAddress": { - "description": "IPv4 or IPv6 address allocated for the Access Point.", - "items": { - "type": "string" - }, - "minItems": 0, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "string" - }, - "macId": { - "description": "Unique identifier assigned to the Access Point (as network interface controller) for communications at the data link layer of a network segment.", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "string" - }, - "ssid": { - "description": "Service Set Identifier to identify logical networks.", - "items": { - "type": "string" - }, - "minItems": 0, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "String" - } - }, - "required": [ - "macId" - ], - "type": "object", - "x-etsi-ref": "6.5.12" - }, - "ApIdentity": { - "properties": { - "ipAddress": { - "description": "IPv4 or IPv6 address allocated for the Access Point.", - "items": { - "type": "string" - }, - "minItems": 0, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "String" - }, - "macId": { - "description": "Unique Identifier assigned to an Access Point (as network interface controller) for communications at the data link layer of a network segment.", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "ssid": { - "description": "Service Set Identifier to identify logical networks including Basic Service Set and Extended Service Set.", - "items": { - "type": "string" - }, - "minItems": 0, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "String" - } - }, - "required": [ - "macId" - ], - "type": "object", - "x-etsi-ref": "6.5.3" - }, - "ApInfo": { - "properties": { - "apId": { - "$ref": "#/components/schemas/ApIdentity" - }, - "apLocation": { - "$ref": "#/components/schemas/ApLocation" - }, - "apNeighbor": { - "$ref": "#/components/schemas/NeighborReport" - }, - "bssLoad": { - "$ref": "#/components/schemas/BssLoad" - }, - "channel": { - "description": "Channel configured for the Access Point.", - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "extBssLoad": { - "$ref": "#/components/schemas/ExtBssLoad" - }, - "timeStamp": { - "$ref": "#/components/schemas/TimeStamp" - }, - "wanMetrics": { - "$ref": "#/components/schemas/WanMetrics" - }, - "wlanCap": { - "$ref": "#/components/schemas/WlanCapabilities" - } - }, - "required": [ - "apId" - ], - "type": "object", - "x-etsi-ref": "6.2.2" - }, - "ApLocation": { - "properties": { - "civicLocation": { - "$ref": "#/components/schemas/CivicLocation" - }, - "geolocation": { - "$ref": "#/components/schemas/GeoLocation" - } - }, - "type": "object", - "x-etsi-ref": "6.5.9" - }, - "AssocStaNotification": { - "properties": { - "apId": { - "$ref": "#/components/schemas/ApIdentity" - }, - "notificationType": { - "description": "Shall be set to \"AssocStaNotification\".", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "staId": { - "description": "Identifier(s) to uniquely specify the client station(s) associated.", - "items": { - "$ref": "#/components/schemas/StaIdentity" - }, - "minItems": 0, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "StaIdentity" - }, - "timeStamp": { - "$ref": "#/components/schemas/TimeStamp" - } - }, - "required": [ - "notificationType", - "apId" - ], - "type": "object", - "x-etsi-ref": "6.4.2" - }, - "AssocStaSubscription": { - "properties": { - "_links": { - "description": "Hyperlink related to the resource. This shall be only included in the HTTP responses and in HTTP PUT requests.", - "properties": { - "self": { - "$ref": "#/components/schemas/LinkType" - } - }, - "required": [ - "self" - ], - "type": "object", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Structure (inlined)" - }, - "apId": { - "$ref": "#/components/schemas/ApIdentity" - }, - "callbackReference": { - "description": "URI selected by the service consumer to receive notifications on the subscribed WLAN information. This shall be included both in the request and in response.", - "format": "uri", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "URI" - }, - "expiryDeadline": { - "$ref": "#/components/schemas/TimeStamp" - }, - "subscriptionType": { - "description": "Shall be set to \"AssocStaSubscription\".", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - } - }, - "required": [ - "subscriptionType", - "callbackReference", - "apId" - ], - "type": "object", - "x-etsi-ref": "6.3.2" - }, - "AssociatedStations": { - "properties": { - "assocId": { - "description": "Unique number which identifies a particular association between an Access Point and a station.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "ipAddress": { - "description": "IPv4 or IPv6 address allocated for the station associated with the Access Point.", - "items": { - "type": "string" - }, - "minItems": 0, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "string" - }, - "macId": { - "description": "Unique identifier assigned to a station (as network interface controller) for communications at the data link layer of a network segment.", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "string" - } - }, - "required": [ - "macId" - ], - "type": "object", - "x-etsi-ref": "6.5.5" - }, - "BeaconReport": { - "properties": { - "bssId": { - "description": "The BSSID field indicates the BSSID of the BSS(s) for which a beacon report has been received.", - "items": { - "type": "string" - }, - "minItems": 1, - "type": "array", - "x-etsi-mec-cardinality": "1..N", - "x-etsi-mec-origin-type": "String" - }, - "channelId": { - "description": "Channel number where the beacon was received.", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Integer" - }, - "measurementId": { - "description": "Measurement ID of the Measurement configuration applied to this Beacon Report.", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "reportingCondition": { - "description": "As in table T9-89 of IEEE 802.11-2012 [8].", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Integer" - }, - "ssId": { - "description": "(Optional) The SSID subelement indicates the ESS(s) or IBSS(s) for which a beacon report is received.", - "items": { - "type": "string" - }, - "minItems": 1, - "type": "array", - "x-etsi-mec-cardinality": "1..N", - "x-etsi-mec-origin-type": "String" - }, - "staId": { - "$ref": "#/components/schemas/StaIdentity" - } - }, - "required": [ - "staId", - "measurementId", - "channelId", - "bssId", - "ssId", - "reportingCondition" - ], - "type": "object", - "x-etsi-ref": "6.5.27" - }, - "BeaconRequestConfig": { - "properties": { - "bssId": { - "description": "The BSSID field indicates the BSSID of the BSS(s) for which a beacon report is requested. When requesting beacon reports for all BSSs on the channel, the BSSID field contains the wildcard BSSID.", - "items": { - "type": "string" - }, - "minItems": 1, - "type": "array", - "x-etsi-mec-cardinality": "1..N", - "x-etsi-mec-origin-type": "String" - }, - "channelId": { - "description": "Channel number to scan. A Channel Number of 0 indicates a request to make iterative measurements for all supported channels in the Operating Class where the measurement is permitted on the channel and the channel is valid for the current regulatory domain. A Channel Number of 255 indicates a request to make iterative measurements for all supported channels in the current Operating Class listed in the latest AP Channel Report received from the serving AP.", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Integer" - }, - "measurementMode": { - "description": "0 for passive.\n1 for active.\n2 for beacon table.", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Integer" - }, - "reportingCondition": { - "description": "As in table T9-89 of IEEE 802.11-2012 [8].", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Integer" - }, - "ssId": { - "description": "(Optional) The SSID subelement indicates the ESS(s) or IBSS(s) for which a beacon report is requested.", - "items": { - "type": "string" - }, - "minItems": 1, - "type": "array", - "x-etsi-mec-cardinality": "1..N", - "x-etsi-mec-origin-type": "String" - }, - "staId": { - "$ref": "#/components/schemas/StaIdentity" - } - }, - "required": [ - "staId", - "channelId", - "measurementMode", - "bssId", - "ssId", - "reportingCondition" - ], - "type": "object", - "x-etsi-ref": "6.5.25" - }, - "BssLoad": { - "properties": { - "availAdmCap": { - "description": "Available Admission Capacity that specifies the remaining amount of medium time available via explicit admission control, in units of 32 s/s.", - "format": "uint16", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Uint16" - }, - "channelUtilization": { - "description": "The percentage of time, linearly scaled with 255 representing 100 %, that the AP sensed the medium was busy, as indicated by either the physical or virtual Carrier Sense (CS) mechanism.", - "format": "uint8", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "UInt8" - }, - "staCount": { - "description": "An unsigned integer that indicates the total number of STAs currently associated with this BSS.", - "format": "uint16", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "UInt16" - } - }, - "required": [ - "staCount", - "channelUtilization", - "availAdmCap" - ], - "type": "object", - "x-etsi-ref": "6.5.7" - }, - "ChannelLoadConfig": { - "properties": { - "apId": { - "$ref": "#/components/schemas/ApIdentity" - }, - "cChannelId": { - "description": "Channel number which load is reported", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Integer" - }, - "channelLoad": { - "description": "Channel load as per IEEE 802.11-2012 [8], section 11.11.9.3", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Integer" - } - }, - "required": [ - "apId", - "cChannelId", - "channelLoad" - ], - "type": "object", - "x-etsi-ref": "6.5.24" - }, - "CivicLocation": { - "properties": { - "ca0": { - "description": "Language", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "ca1": { - "description": "National subdivisions (state, canton, region,province, prefecture) ", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "ca128": { - "description": "Script", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "ca16": { - "description": "Leading street direction", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "ca17": { - "description": "Trailing street suffix", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "ca18": { - "description": "Street suffix or type", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "ca19": { - "description": "House number", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "ca2": { - "description": "County, parish, gun (JP), district (IN)", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "ca20": { - "description": "House number suffix", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "ca21": { - "description": "Landmark of vanity address", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "ca22": { - "description": "Additional location information", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "ca23": { - "description": "Name (residence and office occupant)", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "ca24": { - "description": "Postal/zip code", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "ca25": { - "description": "Building (structure)", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "ca26": { - "description": "Unit (apartment/suite)", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "ca27": { - "description": "Floor", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "ca28": { - "description": "Room", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "ca29": { - "description": "Type of place", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "ca3": { - "description": "City, township, shi (JP)", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "ca30": { - "description": "Postal community name", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "ca31": { - "description": "Post office box", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "ca32": { - "description": "Additional code", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "ca33": { - "description": "Seat (desk.cubicle, workstation)", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "ca34": { - "description": "Primary road name", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "ca35": { - "description": "Road section", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "ca36": { - "description": "Branch road name", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "ca37": { - "description": "Sub-branch road name", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "ca38": { - "description": "Street name pre-modifier", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "ca39": { - "description": "Street name post-modifier", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "ca4": { - "description": "City division, borough, city district, ward, chou (JP)", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "ca5": { - "description": "Neighborhood, block", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "ca6": { - "description": "Group of streets below the neighborhood level ", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "country": { - "description": "The two-letter ISO 3166 [i.9] country code in capital ASCII letters, e.g. DE or US, as per ISO 3166 [i.9]", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - } - }, - "required": [ - "country" - ], - "type": "object", - "x-etsi-ref": "6.5.20" - }, - "DmgCapabilities": { - "properties": { - "ExtScMcsCap": { - "description": "Extended SC MCS capabilities as defined in draft IEEE P802.11/D4.0 [i.11]", - "format": "uint8", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Uint8" - }, - "dmgApOrPcpCapInfo": { - "description": "DMG AP or PCP capabilities information as defined in draft IEEE P802.11/D4.0 [i.11]", - "format": "uint16", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Uint16" - }, - "dmgStaBeamTrackTimeLimit": { - "description": "DMG station beam tracking time limit as defined in draft IEEE P802.11/D4.0 [i.11]", - "format": "uint16", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Uint16" - }, - "dmgStaCapInfo": { - "description": "DMG station capabilities information as defined in draft IEEE P802.11/D4.0 [i.11]", - "format": "int64", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Uint64" - }, - "maxNrBasicAmsduSubframes": { - "description": "Number of basic A-MSDU subframes in A-MSDU as defined in draft IEEE P802.11/D4.0 [i.11]", - "format": "uint8", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Uint8" - }, - "maxNrShortAmsduSubframes": { - "description": "Number of short A-MSDU subframes in A-MSDU as defined in draft IEEE P802.11/D4.0 [i.11]", - "format": "uint8", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Uint8" - }, - "sarCap": { - "description": "SAR capabilities as defined in draft IEEE P802.11/D4.0 [i.11]", - "format": "uint8", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Uint8" - }, - "tddCap": { - "description": "TDD capabilities as defined in draft IEEE P802.11/D4.0 [i.11]", - "format": "uint16", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Uint16" - } - }, - "required": [ - "dmgStaCapInfo", - "dmgApOrPcpCapInfo", - "dmgStaBeamTrackTimeLimit", - "ExtScMcsCap", - "maxNrBasicAmsduSubframes", - "maxNrShortAmsduSubframes", - "tddCap", - "sarCap" - ], - "type": "object", - "x-etsi-ref": "6.5.17" - }, - "EdmgCapabilities": { - "properties": { - "ampduParameters": { - "description": "A-MPDU parameters as defined in draft IEEE P802.11/D4.0 [i.11]", - "format": "uint8", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Uint8" - }, - "reserved": { - "description": "", - "format": "uint8", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint8" - }, - "supportedMcs": { - "description": "Supported MCS as defined in draft IEEE P802.11/D4.0 [i.11]", - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Uint32" - }, - "trnParameters": { - "description": "Training parameters as defined in draft IEEE P802.11/D4.0 [i.11]", - "format": "uint16", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Uint16" - } - }, - "required": [ - "ampduParameters", - "trnParameters", - "supportedMcs" - ], - "type": "object", - "x-etsi-ref": "6.5.18" - }, - "ExtBssLoad": { - "properties": { - "muMimoStaCount": { - "description": "Indicates the total number of STAs currently associated with this BSS that have a 1 in the MU Beamformee Capable field of their VHT Capabilities element.", - "format": "uint16", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "UInt16" - }, - "obsSec20MhzUtil": { - "description": "Observable loading on each of the secondary 20 MHz channel.", - "format": "uint8", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Uint8" - }, - "obsSec40MhzUtil": { - "description": "Observable loading on each of the secondary 40 MHz channel.", - "format": "uint8", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Uint8" - }, - "obsSec80MhzUtil": { - "description": "Observable loading on each of the secondary 80 MHz channel.", - "format": "uint8", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Uint8" - }, - "spatStreamUnderUtil": { - "description": "The percentage of time, linearly scaled with 255 representing 100 %, that the AP has underutilized spatial domain resources for given busy time of the medium.", - "format": "uint8", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "UInt8" - } - }, - "required": [ - "muMimoStaCount", - "spatStreamUnderUtil", - "obsSec20MhzUtil", - "obsSec40MhzUtil", - "obsSec80MhzUtil" - ], - "type": "object", - "x-etsi-ref": "6.5.8" - }, - "GeoLocation": { - "properties": { - "altitude": { - "description": "The altitude value of location as defined in IETF RFC 6225 [6]", - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "altitudeType": { - "description": "The type description for altitude information e.g. floors or meters as defined in IETF RFC 6225 [6]", - "format": "uint8", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint8" - }, - "altitudeUncertainty": { - "description": "The uncertainty for altitude information as defined in IETF RFC 6225 [6]", - "format": "uint8", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint8" - }, - "datum": { - "description": "The datum value to express how coordinates are organized and related to real world as defined in IETF RFC 6225 [6]", - "format": "uint8", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Uint8" - }, - "lat": { - "description": "The latitude value of location as defined in IETF RFC 6225 [6]", - "format": "int64", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Uint64" - }, - "latUncertainty": { - "description": "The uncertainty for Latitude information as defined in IETF RFC 6225 [6]", - "format": "uint8", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Uint8" - }, - "long": { - "description": "The longitude value of location as defined in IETF RFC 6225 [6]", - "format": "int64", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Uint64" - }, - "longUncertainty": { - "description": "The uncertainty for Longitude information as defined in IETF RFC 6225 [6]", - "format": "uint8", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Uint8" - } - }, - "required": [ - "latUncertainty", - "lat", - "longUncertainty", - "long", - "datum" - ], - "type": "object", - "x-etsi-ref": "6.5.19" - }, - "HeCapabilities": { - "properties": { - "heMacCapInfo": { - "description": "MAC capabilities of an Access Point.", - "format": "uint8", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Uint8" - }, - "hePhyCapinfo": { - "description": "PHY capabilities of an Access Point.", - "format": "uint8", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Uint8" - }, - "ppeThresholds": { - "description": "PPE Threshold determines the nominal packet padding value for a HE PPDU.", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "not defined" - }, - "supportedHeMcsNssSet": { - "description": "Supported MCS and NSS Set.", - "format": "uint8", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Uint8" - } - }, - "required": [ - "heMacCapInfo", - "hePhyCapinfo", - "supportedHeMcsNssSet" - ], - "type": "object", - "x-etsi-ref": "6.5.16" - }, - "HtCapabilities": { - "properties": { - "ampduParameters": { - "description": "A-MPDU parameters as defined in IEEE 802.11-2016 [8].", - "format": "uint8", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "UInt8" - }, - "aselCap": { - "description": "ASEL capabilities as defined in IEEE 802.11-2016 [8].", - "format": "uint8", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "UInt8" - }, - "htCapabilityInfo": { - "description": "HT Capability Information as defined in IEEE 802.11-2016 [8].", - "format": "uint16", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "UInt16" - }, - "htExtendedCap": { - "description": "Extended HT Capabilities as defined in IEEE 802.11-2016 [8].", - "format": "uint16", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "UInt16" - }, - "supportedMcsSet": { - "description": "Supported MCS set as defined in IEEE 802.11-2016 [8].", - "format": "uint128", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Uint128" - }, - "txBeamFormCap": { - "description": "Transmit Beamforming Capabilities as defined in IEEE 802.11-2016 [8].", - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "UInt32" - } - }, - "required": [ - "htCapabilityInfo", - "ampduParameters", - "supportedMcsSet", - "htExtendedCap", - "txBeamFormCap", - "aselCap" - ], - "type": "object", - "x-etsi-ref": "6.5.14" - }, - "InlineNotification": { - "oneOf": [ - { - "$ref": "#/components/schemas/AssocStaNotification" - }, - { - "$ref": "#/components/schemas/StaDataRateNotification" - } - ], - "discriminator": { - "propertyName": "notificationType" - } - }, - "InlineSubscription": { - "oneOf": [ - { - "$ref": "#/components/schemas/AssocStaSubscription" - }, - { - "$ref": "#/components/schemas/StaDataRateSubscription" - } - ], - "discriminator": { - "propertyName": "subscriptionType" - } - }, - "LinkType": { - "properties": { - "href": { - "description": "URI referring to a resource", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - } - }, - "required": [ - "href" - ], - "type": "object", - "x-etsi-ref": "6.5.23" - }, - "MeasurementConfig": { - "properties": { - "beaconRequest": { - "$ref": "#/components/schemas/BeaconRequestConfig" - }, - "channelLoad": { - "$ref": "#/components/schemas/ChannelLoadConfig" - }, - "measurementDuration": { - "description": "Duration of the measurement, shall be lower than Maximum Measurement Duration in TU as defined in section 11.11.4 of IEEE 802.11 [8].", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Integer" - }, - "measurementId": { - "description": "Identifier of this measurement configuration.", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "randomnInterval": { - "description": "Random interval to be used for starting the measurement. In units of TU as specifed in section 11.11.3 of IEEE 802.11 [8].", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Integer" - }, - "staStatistics": { - "$ref": "#/components/schemas/StaStatisticsConfig" - } - }, - "required": [ - "measurementId", - "measurementDuration", - "randomnInterval" - ], - "type": "object", - "x-etsi-notes": "NOTE:\tThis element enables the configuration of the channelLoad, beaconRequest and staStatistics in a single resource data type, although only one of each measurement. Multiple measurement configurations of each kind are not allowed.", - "x-etsi-ref": "6.2.4" - }, - "NeighborReport": { - "properties": { - "bssid": { - "description": "BSS Id of the Access Point that is being reported.", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "bssidInfo": { - "description": "Additional information related to Access Point that is being reported such as AP reachability, security, key scope, Mobility Domain, HT/VHT capability and Fine Time Measurements.", - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "UInt32" - }, - "channel": { - "description": "The channel currently used by this Access Point.", - "format": "uint8", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Uint8" - }, - "operatingClass": { - "description": "The channel set of the AP indicated by this BSSID.", - "format": "uint8", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Uint8" - }, - "phyType": { - "description": "PHY type of the AP indicated by this BSSID. It is an integer value coded according to the value of the dot11PHYType.", - "format": "uint8", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Uint8" - } - }, - "required": [ - "bssid", - "bssidInfo", - "operatingClass", - "channel", - "phyType" - ], - "type": "object", - "x-etsi-ref": "6.5.10" - }, - "ProblemDetails": { - "properties": { - "detail": { - "description": "A human-readable explanation specific to this occurrence of the problem", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "instance": { - "description": "A URI reference that identifies the specific occurrence of the problem", - "format": "uri", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "URI" - }, - "status": { - "description": "The HTTP status code for this occurrence of the problem", - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "title": { - "description": "A short, human-readable summary of the problem type", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "type": { - "description": "A URI reference according to IETF RFC 3986 that identifies the problem type", - "format": "uri", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "URI" - } - }, - "type": "object" - }, - "Rssi": { - "properties": { - "rssi": { - "description": "The Received Signal Strength Indicator from a station", - "format": "uint8", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Uint8" - } - }, - "required": [ - "rssi" - ], - "type": "object", - "x-etsi-ref": "6.5.21" - }, - "StaDataRate": { - "properties": { - "staId": { - "$ref": "#/components/schemas/StaIdentity" - }, - "staLastDataDownlinkRate": { - "description": "The data transmit rate in kbps that was most recently used for transmission of data PPDUs from the access point to the station.", - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "staLastDataUplinkRate": { - "description": "The data transmit rate in Kbps that was most recently used for transmission of data PPDUs from the associated station to the access point.", - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - } - }, - "type": "object", - "x-etsi-ref": "6.5.22" - }, - "StaDataRateNotification": { - "properties": { - "notificationType": { - "description": "Shall be set to \"StaDataRateNotification\".", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "staDataRate": { - "description": "Data rates of a client station.", - "items": { - "$ref": "#/components/schemas/StaDataRate" - }, - "minItems": 0, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "StaDataRate" - }, - "timeStamp": { - "$ref": "#/components/schemas/TimeStamp" - } - }, - "required": [ - "notificationType" - ], - "type": "object", - "x-etsi-ref": "6.4.3" - }, - "StaDataRateSubscription": { - "properties": { - "_links": { - "description": "Hyperlink related to the resource. This shall be only included in the HTTP responses and in HTTP PUT requests.", - "properties": { - "self": { - "$ref": "#/components/schemas/LinkType" - } - }, - "required": [ - "self" - ], - "type": "object", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Structure (inlined)" - }, - "callbackReference": { - "description": "URI selected by the service consumer to receive notifications on the subscribed WLAN Access Information Service. This shall be included both in the request and in response.", - "format": "uri", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "URI" - }, - "expiryDeadline": { - "$ref": "#/components/schemas/TimeStamp" - }, - "staId": { - "description": "Identifier(s) to uniquely specify the target client station(s) for the subscription", - "items": { - "$ref": "#/components/schemas/StaIdentity" - }, - "minItems": 1, - "type": "array", - "x-etsi-mec-cardinality": "1..N", - "x-etsi-mec-origin-type": "StaIdentity" - }, - "subscriptionType": { - "description": "Shall be set to \"StaDataRateSubscription\".", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - } - }, - "required": [ - "subscriptionType", - "callbackReference", - "staId" - ], - "type": "object", - "x-etsi-ref": "6.3.3" - }, - "StaIdentity": { - "properties": { - "aid": { - "description": "Number which identifies a particular association between a station and an Access Point ", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "ipAddress": { - "description": "IPv4 or IPv6 address allocated for the station.", - "items": { - "type": "string" - }, - "minItems": 0, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "String" - }, - "macId": { - "description": "Unique identifier assigned to station (as network interface controller) for communications at the data link layer of a network segment.", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "ssid": { - "description": "Service Set Identifier to identify logical networks.", - "items": { - "type": "string" - }, - "minItems": 0, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "String" - } - }, - "required": [ - "macId" - ], - "type": "object", - "x-etsi-ref": "6.5.11" - }, - "StaInfo": { - "properties": { - "apAssociated": { - "$ref": "#/components/schemas/ApAssociated" - }, - "beaconReport": { - "$ref": "#/components/schemas/BeaconReport" - }, - "channel": { - "description": "Channel currently used by the station.", - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "rssi": { - "$ref": "#/components/schemas/Rssi" - }, - "staDataRate": { - "$ref": "#/components/schemas/StaDataRate" - }, - "staId": { - "$ref": "#/components/schemas/StaIdentity" - }, - "staStatistics": { - "$ref": "#/components/schemas/StaStatistics" - }, - "timeStamp": { - "$ref": "#/components/schemas/TimeStamp" - } - }, - "required": [ - "staId" - ], - "type": "object", - "x-etsi-ref": "6.2.3" - }, - "StaStatistics": { - "properties": { - "groupIdentity": { - "description": "Indicates the requested statistics group describing the Statistics Group Data according to table 9-114 of IEEE 802.11-2016 [8].", - "format": "uint8", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "UInt8" - }, - "md": { - "description": "Measurement Duration.", - "format": "uint16", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "UInt16" - }, - "statisticsGroupData": { - "$ref": "#/components/schemas/StatisticsGroupData", - "description": "Statistics Group Data as defined in Annex C of IEEE 802.112016 [8].", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "not specified" - } - }, - "required": [ - "md", - "groupIdentity", - "statisticsGroupData" - ], - "type": "object", - "x-etsi-ref": "6.5.13" - }, - "StaStatisticsConfig": { - "properties": { - "groupIdentity": { - "description": "As per table T 9-114 of IEEE 802.11-2012 [8].", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Integer" - }, - "staId": { - "$ref": "#/components/schemas/StaIdentity" - }, - "triggerCondition": { - "type": "integer" - }, - "triggerTimeout": { - "description": "The Trigger Timeout field contains a value in units of 100 TUs during which a measuring STA does not generate further triggered STA Statistics Reports after a trigger condition has been met.", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Integer" - }, - "triggeredReport": { - "type": "boolean" - } - }, - "required": [ - "staId", - "groupIdentity", - "triggeredReport", - "triggerTimeout", - "triggerCondition" - ], - "type": "object", - "x-etsi-ref": "6.5.26" - }, - "StatisticsGroupData": { - "properties": { - "dot11AMPDUDelimiterCRCErrorCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11AMPDUReceivedCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11AMSDUAckFailureCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11AckFailureCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11BeamformingFrameCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11ChannelWidthSwitchCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11DualCTSFailureCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11DualCTSSuccessCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11ExplicitBARFailureCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11FCSErrorCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11FailedAMSDUCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11FailedCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11FortyMHzFrameReceivedCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11FortyMHzFrameTransmittedCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11FrameDuplicateCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11GrantedRDGUnusedCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11GrantedRDGUsedCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11GroupReceivedFrameCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11GroupTransmittedFrameCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11ImplicitBARFailureCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11MPDUInReceivedAMPDUCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11MultipleRetryAMSDUCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11MultipleRetryCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11PSMPUTTGrantDuration": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11PSMPUTTUsedDuration": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11QosAckFailureCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11QosDiscardedFrameCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11QosFailedCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11QosFrameDuplicateCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11QosMPDUsReceivedCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11QosMultipleRetryCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11QosRTSFailureCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11QosRTSSuccessCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11QosReceivedFragmentCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11QosRetriesReceivedCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11QosRetryCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11QosTransmittedFragmentCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11QosTransmittedFrameCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11RSNAStatsBIPMICErrors": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11RSNAStatsCCMPDecryptErrors": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11RSNAStatsCCMPReplays": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11RSNAStatsCMACReplays": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11RSNAStatsRobustMgmtCCMPReplays": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11RSNAStatsTKIPICVErrors": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11RSNAStatsTKIPReplays": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11RTSFailureCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11RTSLSIGFailureCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11RTSLSIGSuccessCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11RTSSuccessCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11ReceivedAMSDUCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11ReceivedFragmentCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11ReceivedOctetsInAMPDUCount": { - "format": "int64", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint64" - }, - "dot11ReceivedOctetsInAMSDUCount": { - "format": "int64", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint64" - }, - "dot11RetryAMSDUCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11RetryCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11STAStatisticsAPAverageAccessDelay": { - "format": "uint8", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint8" - }, - "dot11STAStatisticsAverageAccessDelayBackGround": { - "format": "uint8", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint8" - }, - "dot11STAStatisticsAverageAccessDelayBestEffort": { - "format": "uint8", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint8" - }, - "dot11STAStatisticsAverageAccessDelayVideo": { - "format": "uint8", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint8" - }, - "dot11STAStatisticsAverageAccessDelayVoice": { - "format": "uint8", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint8" - }, - "dot11STAStatisticsChannelUtilization": { - "format": "uint8", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint8" - }, - "dot11STAStatisticsStationCount": { - "format": "uint8", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint8" - }, - "dot11STBCCTSFailureCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11STBCCTSSuccessCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11TransmittedAMPDUCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11TransmittedAMSDUCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11TransmittedFragmentCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11TransmittedFrameCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11TransmittedFramesInGrantedRDGCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11TransmittedMPDUsInAMPDUCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11TransmittedOctetsInAMPDUCount": { - "format": "int64", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint64" - }, - "dot11TransmittedOctetsInAMSDUCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11TransmittedOctetsInGrantedRDGCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11TwentyMHzFrameReceivedCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11TwentyMHzFrameTransmittedCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11nonSTBCCTSFailureCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11nonSTBCCTSSuccessCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - } - }, - "type": "object" - }, - "SubscriptionLinkList": { - "properties": { - "_links": { - "description": "Hyperlink related to the resource. This shall be only included in the HTTP responses and in HTTP PUT requests.", - "properties": { - "self": { - "$ref": "#/components/schemas/LinkType" - } - }, - "type": "object", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Structure (inlined)" - }, - "assocStaSubscription": { - "items": { - "$ref": "#/components/schemas/AssocStaSubscription" - }, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "AssocStaSubscription" - }, - "staDataRateSubscription": { - "items": { - "$ref": "#/components/schemas/StaDataRateSubscription" - }, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "StaDataRateSubscription" - } - }, - "required": [ - "_links" - ], - "type": "object" - }, - "TimeStamp": { - "properties": { - "nanoSeconds": { - "description": "The nanoseconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC.", - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Uint32" - }, - "seconds": { - "description": "The seconds part of the time. Time is defined as Unixtime since January 1, 1970, 00:00:00 UTC.", - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Uint32" - } - }, - "required": [ - "seconds", - "nanoSeconds" - ], - "type": "object", - "x-etsi-ref": "6.5.2" - }, - "VhtCapabilities": { - "properties": { - "vhtCapInfo": { - "description": "VHT capabilities Info as defined in IEEE 802.11-2016 [8].", - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "UInt32" - }, - "vhtMcsNss": { - "description": "Supported VHT-MCS and NSS Set as defined in IEEE 802.11-2016 [8].", - "format": "int64", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "UInt64" - } - }, - "required": [ - "vhtCapInfo", - "vhtMcsNss" - ], - "type": "object", - "x-etsi-ref": "6.5.15" - }, - "WanMetrics": { - "properties": { - "downlinkLoad": { - "description": "1-octet positive integer representing the current percentage loading of the downlink WAN connection, scaled linearly with 255 representing 100 %, as measured over an interval the duration of which is reported in Load Measurement Duration. In cases where the downlink load is unknown to the AP, the value is set to zero.", - "format": "uint8", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "UInt8" - }, - "downlinkSpeed": { - "description": "4-octet positive integer whose value is an estimate of the WAN Backhaul link current downlink speed in kilobits per second.", - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Uint32" - }, - "lmd": { - "description": "The LMD (Load Measurement Duration) field is a 2-octet positive integer representing the duration over which the Downlink Load and Uplink Load have been measured, in tenths of a second. When the actual load measurement duration is greater than the maximum value, the maximum value will be reported. The value of the LMD field is set to 0 when neither the uplink nor downlink load can be computed. When the uplink and downlink loads are computed over different intervals, the maximum interval is reported.", - "format": "uint16", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Uint16" - }, - "uplinkLoad": { - "description": "1-octet positive integer representing the current percentage loading of the uplink WAN connection, scaled linearly with 255 representing 100 %, as measured over an interval, the duration of which is reported in Load Measurement Duration. In cases where the uplink load is unknown to the AP, the value is set to zero.", - "format": "uint8", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Uint8" - }, - "uplinkSpeed": { - "description": "4-octet positive integer whose value is an estimate of the WAN Backhaul link's current uplink speed in kilobits per second.", - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "UInt32" - }, - "wanInfo": { - "description": "Info about WAN link status, link symmetricity and capacity currently used.", - "format": "uint8", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Uint8" - } - }, - "required": [ - "wanInfo", - "downlinkSpeed", - "uplinkSpeed", - "downlinkLoad", - "uplinkLoad", - "lmd" - ], - "type": "object", - "x-etsi-ref": "6.5.6" - }, - "WlanCapabilities": { - "properties": { - "dmg": { - "$ref": "#/components/schemas/DmgCapabilities" - }, - "edmg": { - "$ref": "#/components/schemas/EdmgCapabilities" - }, - "he": { - "$ref": "#/components/schemas/HeCapabilities" - }, - "ht": { - "$ref": "#/components/schemas/HtCapabilities" - }, - "vht": { - "$ref": "#/components/schemas/VhtCapabilities" - } - }, - "type": "object", - "x-etsi-ref": "6.5.4" - } - } - } -} diff --git a/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Functions.ttcn b/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Functions.ttcn index 39cee60..cbab7d1 100644 --- a/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Functions.ttcn +++ b/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Functions.ttcn @@ -38,7 +38,8 @@ module WlanInformationAPI_Functions { import from LibMec_Pixits all; function f_create_assoc_sta_subscription( - out AssocStaSubscription p_assoc_sta_subscription + out AssocStaSubscription p_assoc_sta_subscription, + out Json.String p_subscription_id ) runs on HttpComponent { var Headers v_headers; var HttpMessage v_response; @@ -47,7 +48,7 @@ module WlanInformationAPI_Functions { httpPort.send( m_http_request( m_http_request_post( - PICS_ROOT_API & PX_ME_WLAN_URI & "/subscriptions", + PICS_ROOT_API & PX_ME_WLAN_URI_SUB, v_headers, m_http_message_body_json( m_body_json_assoc_sta_subscription( @@ -61,7 +62,7 @@ module WlanInformationAPI_Functions { -, m_time_stamp( f_get_current_timestamp_utc() / 1000 + 30 // Expiry time: T + 30 seconds - ))))))); + ))))))); tc_ac.start; alt { @@ -75,11 +76,21 @@ module WlanInformationAPI_Functions { -, -, -, ? - )))))) -> value v_response { + )))))) -> value v_response { tc_ac.stop; + // Extract HTTP Location header + var charstring_list v_subscription_id; + f_get_header(v_response.response.header, "Location", v_subscription_id); + // Extract HTTP subssription id + p_subscription_id := regexp( + v_subscription_id[0], + "?+" & PX_ME_WLAN_URI_SUB & "/(?*)", + 0 + ); p_assoc_sta_subscription := v_response.response.body.json_body.assocStaSubscription; log("f_create_assoc_sta_subscription: INFO: IUT successfully responds to the subscription: ", p_assoc_sta_subscription); + log("f_create_assoc_sta_subscription: INFO: p_subscription_id: ", p_subscription_id); } [] tc_ac.timeout { log("f_create_assoc_sta_subscription: INCONC: Expected message not received"); @@ -89,29 +100,25 @@ module WlanInformationAPI_Functions { } // End of function "f_create_assoc_sta_subscription function f_delete_assoc_sta_subscription( - in AssocStaSubscription p_assoc_sta_subscription + in Json.String p_subscription_id ) runs on HttpComponent { var Headers v_headers; - var charstring v_uri := regexp( - oct2char(unichar2oct(p_assoc_sta_subscription.links.self_.href)), - "?+(" & PX_ME_WLAN_URI & "?*)", - 0 - ); + f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( m_http_request_delete( - PICS_ROOT_API & v_uri, + PICS_ROOT_API & PX_ME_WLAN_URI & p_subscription_id, v_headers - ))); + ))); tc_ac.start; alt { [] httpPort.receive( mw_http_response( mw_http_response_204_no_content - )) { + )) { tc_ac.stop; } [] tc_ac.timeout { @@ -147,7 +154,7 @@ module WlanInformationAPI_Functions { }, PX_MEASUREMENT_ID, m_measurement_info(1000, 10) - )))))); + )))))); tc_ac.start; alt { @@ -158,7 +165,7 @@ module WlanInformationAPI_Functions { mw_body_json_wlan_measurement_config( mw_measurement_config( ? - )))))) -> value v_response { + )))))) -> value v_response { tc_ac.stop; p_measurement_config := v_response.response.body.json_body.measurementConfig; @@ -188,14 +195,14 @@ module WlanInformationAPI_Functions { 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 { diff --git a/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Templates.ttcn b/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Templates.ttcn index 3806442..d4c9abc 100644 --- a/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Templates.ttcn +++ b/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Templates.ttcn @@ -271,6 +271,22 @@ module WlanInformationAPI_Templates { subscription := p_subscription } // End of template mw_subscription_link_list + template (value) Subscription_ m_subscription( + in Json.AnyURI p_href, + in Json.String p_subscriptionType + ) := { + href := p_href, + subscriptionType := p_subscriptionType + } // End of template m_subscription + + template (present) Subscription_ mw_subscription( + template (present) Json.AnyURI p_href := ?, + template (present) Json.String p_subscriptionType := ? + ) := { + href := p_href, + subscriptionType := p_subscriptionType + } // End of template mw_subscription + template (omit) ApIdentity m_ap_identity( in Json.String p_bssid, in template (omit) SsidList p_ssid := omit, diff --git a/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn b/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn index 0b42a5b..699134c 100644 --- a/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn +++ b/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn @@ -1,46 +1,48 @@ module LibMec_Pixits { - modulepar charstring PX_ME_APP_Q_ZONE_ID_URI := "/location/v3/queries/zones"; + modulepar charstring PX_ME_APP_Q_ZONE_ID_URI := "location/v3/queries/zones"; - modulepar charstring PX_ME_APP_Q_USERS_LIST_URI := "/location/v3/queries/users"; + modulepar charstring PX_ME_APP_Q_USERS_LIST_URI := "location/v3/queries/users"; - modulepar charstring PX_LOC_API_USERS_SUB_URI := "/location/v3/subscriptions/users"; + modulepar charstring PX_LOC_API_USERS_SUB_URI := "location/v3/subscriptions/users"; - modulepar charstring PX_LOC_API_ZONES_SUB_URI := "/location/v3/subscriptions/zones"; + modulepar charstring PX_LOC_API_ZONES_SUB_URI := "location/v3/subscriptions/zones"; - modulepar charstring PX_LOC_API_AREA_SUB_URI := "/location/v3/subscriptions/area"; + modulepar charstring PX_LOC_API_AREA_SUB_URI := "location/v3/subscriptions/area"; - modulepar charstring PX_LOC_API_DISTANCE_SUB_URI := "/location/v3/subscriptions/distance"; + modulepar charstring PX_LOC_API_DISTANCE_SUB_URI := "location/v3/subscriptions/distance"; - modulepar charstring PX_ME_APP_Q_UE_IDENTITY_ID_URI := "/ui/v1/"; + modulepar charstring PX_ME_APP_Q_UE_IDENTITY_ID_URI := "ui/v1/"; modulepar charstring PX_SVC_MGMT_TRANS_URI := "mec_service_mgmt/v1/transports"; modulepar charstring PX_SVC_MGMT_APP_URI := "mec_service_mgmt/v1/application"; - modulepar charstring PX_RNIS_SUBSCRITIONS_URI := "/rni/v2/subscriptions"; + modulepar charstring PX_RNIS_SUBSCRITIONS_URI := "rni/v2/subscriptions"; - modulepar charstring PX_RNIS_QUERIES_URI := "/rni/v2/queries"; + modulepar charstring PX_RNIS_QUERIES_URI := "rni/v2/queries"; - modulepar charstring PX_ME_BWM_URI := "/bwm/v1/bw_allocations"; + modulepar charstring PX_ME_BWM_URI := "bwm/v1/bw_allocations"; - modulepar charstring PX_ME_MTS_INFO_URI := "/mts/v1/mts_info"; + modulepar charstring PX_ME_MTS_INFO_URI := "mts/v1/mts_info"; - modulepar charstring PX_ME_MTS_SESSIONS_URI := "/mts/v1/mts_sessions"; + modulepar charstring PX_ME_MTS_SESSIONS_URI := "mts/v1/mts_sessions"; - modulepar charstring PX_ME_WLAN_QUERIES_URI := "/wai/v2/queries"; + modulepar charstring PX_ME_WLAN_QUERIES_URI := "wai/v2/queries"; - modulepar charstring PX_ME_WLAN_URI := "/wai/v2"; + modulepar charstring PX_ME_WLAN_URI := "wai/v2"; - modulepar charstring PX_ME_V2X_URI := "/vis/v1"; + modulepar charstring PX_ME_WLAN_URI_SUB := "wai/v2/subscriptions"; + + modulepar charstring PX_ME_V2X_URI := "vis/v1"; modulepar charstring PX_ME_V2X_QUERIES_URI := "/vis/v1/queries"; - modulepar charstring PX_ME_DEVICE_APP_URI := "/dev_app/v1"; + modulepar charstring PX_ME_DEVICE_APP_URI := "dev_app/v1"; - modulepar charstring PX_ME_APP_AMS_URI := "/amsi/v1/appMobilityServices" + modulepar charstring PX_ME_APP_AMS_URI := "amsi/v1/appMobilityServices" - modulepar charstring PX_ME_APP_AMS_SUBS := "/amsi/v1/subscriptions"; + modulepar charstring PX_ME_APP_AMS_SUBS := "amsi/v1/subscriptions"; modulepar charstring PX_MEO_GRANT_URI := "granting/v1/grants"; @@ -60,9 +62,9 @@ module LibMec_Pixits { modulepar charstring PX_MEX_LCM_OP_OCC_URI := "app_lcm/v1/app_lcm_op_occs"; - modulepar charstring PX_UE_APP_CTX_URI := "/mx2/v1/app_contexts"; + modulepar charstring PX_UE_APP_CTX_URI := "mx2/v1/app_contexts"; - modulepar charstring PX_UE_APPS_URI := "/mx2/v1/app_list"; + modulepar charstring PX_UE_APPS_URI := "mx2/v1/app_list"; modulepar charstring PX_MEC_SVC_MGMT_APPS_URI := "mec_app_support/v2/registrations"; @@ -76,17 +78,17 @@ module LibMec_Pixits { modulepar charstring PX_ME_APP_SUPPORT_TIMING_CAPS_URI := "mec_app_support/v2/timing/timing_caps"; - modulepar charstring PX_FAI_FA_INFO_URI := "/fai/v1/fa_info"; + modulepar charstring PX_FAI_FA_INFO_URI := "fai/v1/fa_info"; - modulepar charstring PX_FAI_DEVICE_INFO_URI:= "/fai/v1/device_info"; + modulepar charstring PX_FAI_DEVICE_INFO_URI:= "fai/v1/device_info"; - modulepar charstring PX_FAI_CABLE_LINE_INFO_URI := "/fai/v1/cable_line_info"; + modulepar charstring PX_FAI_CABLE_LINE_INFO_URI := "fai/v1/cable_line_info"; - modulepar charstring PX_FAI_OPTICAL_NW_INFO_URI := "/fai/v1/optical_network_info"; + modulepar charstring PX_FAI_OPTICAL_NW_INFO_URI := "fai/v1/optical_network_info"; - modulepar charstring PX_FAI_SUB_URI := "/fai/v1/optical_network_info"; + modulepar charstring PX_FAI_SUB_URI := "fai/v1/optical_network_info"; - modulepar charstring PX_UE_ZONAL_TRAF_SUB_URI := "/fai/v1/optical_network_info"; + modulepar charstring PX_UE_ZONAL_TRAF_SUB_URI := "fai/v1/optical_network_info"; modulepar charstring PX_FED_API_LIST_SYSTEM_INFO := "fed_enablement/v1/fed_resources/system_info"; -- GitLab From 6b2662a41859b1343061a03248c1eea9583c09f6 Mon Sep 17 00:00:00 2001 From: garciay Date: Wed, 10 Jan 2024 14:37:59 +0100 Subject: [PATCH 62/99] TTF T027: Finalyze review MEC-028 --- .../AtsMec_FederationEnablement_Mockoon.cf_ | 81 +++++ etc/AtsMec_IoT/AtsMec_IoT_Mockoon.cf_ | 81 +++++ .../AtsMec_WlanInformationAPI_TestCases.ttcn | 293 ++++-------------- ...AtsMec_WlanInformationAPI_TestControl.ttcn | 14 + .../ttcn/WlanInformationAPI_Functions.ttcn | 21 +- ttcn/LibMec/ttcn/LibMec_Pixits.ttcn | 2 + 6 files changed, 241 insertions(+), 251 deletions(-) create mode 100644 etc/AtsMec_FederationEnablement/AtsMec_FederationEnablement_Mockoon.cf_ create mode 100644 etc/AtsMec_IoT/AtsMec_IoT_Mockoon.cf_ diff --git a/etc/AtsMec_FederationEnablement/AtsMec_FederationEnablement_Mockoon.cf_ b/etc/AtsMec_FederationEnablement/AtsMec_FederationEnablement_Mockoon.cf_ new file mode 100644 index 0000000..a53911e --- /dev/null +++ b/etc/AtsMec_FederationEnablement/AtsMec_FederationEnablement_Mockoon.cf_ @@ -0,0 +1,81 @@ +[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; + +LibHttp_Pics.PICS_HEADER_HOST := "try-mec.etsi.org" #"192.168.1.39" + +LibHttp_Pics.PICS_HEADER_CONTENT_TYPE := "application/json" +LibHttp_Pics.PICS_USE_TOKEN_HEADER := true +#LibHttp_Pics.PICS_TOKEN_HEADER := "Basic WrongToken" + +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 + + +[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 | TESTCASE +#ConsoleMask := ERROR | WARNING | USER | MATCHING | EXECUTOR_RUNTIME | VERDICTOP | PORTEVENT | TESTCASE +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=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=80,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 + + +[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_IoT/AtsMec_IoT_Mockoon.cf_ b/etc/AtsMec_IoT/AtsMec_IoT_Mockoon.cf_ new file mode 100644 index 0000000..a53911e --- /dev/null +++ b/etc/AtsMec_IoT/AtsMec_IoT_Mockoon.cf_ @@ -0,0 +1,81 @@ +[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; + +LibHttp_Pics.PICS_HEADER_HOST := "try-mec.etsi.org" #"192.168.1.39" + +LibHttp_Pics.PICS_HEADER_CONTENT_TYPE := "application/json" +LibHttp_Pics.PICS_USE_TOKEN_HEADER := true +#LibHttp_Pics.PICS_TOKEN_HEADER := "Basic WrongToken" + +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 + + +[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 | TESTCASE +#ConsoleMask := ERROR | WARNING | USER | MATCHING | EXECUTOR_RUNTIME | VERDICTOP | PORTEVENT | TESTCASE +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=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=80,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 + + +[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/ttcn/AtsMec_WlanInformation/AtsMec_WlanInformationAPI_TestCases.ttcn b/ttcn/AtsMec_WlanInformation/AtsMec_WlanInformationAPI_TestCases.ttcn index ff317d9..dcaab23 100644 --- a/ttcn/AtsMec_WlanInformation/AtsMec_WlanInformationAPI_TestCases.ttcn +++ b/ttcn/AtsMec_WlanInformation/AtsMec_WlanInformationAPI_TestCases.ttcn @@ -455,7 +455,7 @@ module AtsMec_WlanInformationAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - PICS_ROOT_API & PX_ME_WLAN_URI & "/subscriptions?subscription_type=assoc_sta", + PICS_ROOT_API & PX_ME_WLAN_URI_SUB & "subscription_type=assoc_sta", v_headers ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -770,7 +770,7 @@ module AtsMec_WlanInformationAPI_TestCases { httpPort.send( m_http_request( m_http_request_post( - PICS_ROOT_API & PX_ME_WLAN_URI & "/subscriptions&filter=(eq,ap/macId,00:01:02:03:04:04)", + PICS_ROOT_API & PX_ME_WLAN_URI_SUB & "&filter=(eq,ap/macId,00:01:02:03:04:04)", v_headers, m_http_message_body_json( m_body_json_assoc_sta_subscription( @@ -1319,9 +1319,7 @@ module AtsMec_WlanInformationAPI_TestCases { m_http_request_get( PICS_ROOT_API & PX_ME_WLAN_QUERIES_URI & "/queries/measurements", v_headers - ) - ) - ); + ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -1332,7 +1330,7 @@ module AtsMec_WlanInformationAPI_TestCases { mw_http_response_ok( mw_http_message_body_json( mw_body_json_wlan_measurement_config_link_list - )))) -> value v_response { + )))) -> value v_response { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of measurement config ***"); @@ -1348,125 +1346,14 @@ module AtsMec_WlanInformationAPI_TestCases { 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; + var Json.String v_measurement_config_id; // Test control if (not(PICS_MEC_PLAT) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { @@ -1485,7 +1372,7 @@ module AtsMec_WlanInformationAPI_TestCases { httpPort.send( m_http_request( m_http_request_post( - PICS_ROOT_API & PX_ME_WLAN_URI & "/measurements", + PICS_ROOT_API & PX_ME_WLAN_URI_MEAS, v_headers, m_http_message_body_json( m_body_json_wlan_measurement_config( @@ -1501,7 +1388,7 @@ module AtsMec_WlanInformationAPI_TestCases { }, PX_MEASUREMENT_ID, m_measurement_info(1000, 10) - )))))); + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -1521,9 +1408,14 @@ module AtsMec_WlanInformationAPI_TestCases { )}, PX_MEASUREMENT_ID, mw_measurement_info - )))))) -> value v_response { + )))))) -> value v_response { tc_ac.stop; + v_measurement_config_id := regexp( + oct2char(unichar2oct(v_response.response.body.json_body.measurementConfig.links.self_.href)), + "?+" & PX_ME_WLAN_URI_MEAS & "/" & "(?*)", + 0 + ); log("*** " & testcasename() & ": PASS: IUT successfully responds with the new measurement config ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } @@ -1534,14 +1426,12 @@ module AtsMec_WlanInformationAPI_TestCases { } // End of 'alt' statement // Postamble - f_delete_measurement_config(v_response.response.body.json_body.measurementConfig); + f_delete_measurement_config(v_measurement_config_id); 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 @@ -1564,7 +1454,7 @@ module AtsMec_WlanInformationAPI_TestCases { httpPort.send( m_http_request( m_http_request_post( - PICS_ROOT_API & PX_ME_WLAN_URI & "/measurements", + PICS_ROOT_API & PX_ME_WLAN_URI_MEAS, v_headers, m_http_message_body_json( m_body_json_wlan_measurement_config( @@ -1580,7 +1470,7 @@ module AtsMec_WlanInformationAPI_TestCases { }, PX_MEASUREMENT_ID, m_measurement_info(1000, 10) - )))))); + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -1589,7 +1479,7 @@ module AtsMec_WlanInformationAPI_TestCases { [] httpPort.receive( mw_http_response( mw_http_response_400_bad_request - )) { + )) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully with the correct error code ***"); @@ -1605,83 +1495,14 @@ module AtsMec_WlanInformationAPI_TestCases { 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; + var Json.String v_measurement_config_id; // Test control if (not(PICS_MEC_PLAT) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { @@ -1696,16 +1517,14 @@ module AtsMec_WlanInformationAPI_TestCases { // Test adapter configuration // Preamble - f_create_measurement_config(v_measurement_config); + f_create_measurement_config(v_measurement_config, v_measurement_config_id); 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, + PICS_ROOT_API & PX_ME_WLAN_QUERIES_URI & "/measurements" & "/" & v_measurement_config_id, v_headers - ) - ) - ); + ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -1728,7 +1547,7 @@ module AtsMec_WlanInformationAPI_TestCases { }, PX_MEASUREMENT_ID, mw_measurement_info - )))))) -> value v_response { + )))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with the new measurement config ***"); @@ -1741,19 +1560,18 @@ module AtsMec_WlanInformationAPI_TestCases { } // End of 'alt' statement // Postamble - f_delete_measurement_config(v_response.response.body.json_body.measurementConfig); + f_delete_measurement_config(v_measurement_config_id); 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; + var Json.String v_measurement_config_id; // Test control if (not(PICS_MEC_PLAT) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { @@ -1768,16 +1586,14 @@ module AtsMec_WlanInformationAPI_TestCases { // Test adapter configuration // Preamble - f_create_measurement_config(v_measurement_config); + f_create_measurement_config(v_measurement_config, v_measurement_config_id); 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", + PICS_ROOT_API & PX_ME_WLAN_QUERIES_URI & "/measurements"& "/" & v_measurement_config_id & "_Invalid", v_headers - ) - ) - ); + ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -1786,7 +1602,7 @@ module AtsMec_WlanInformationAPI_TestCases { [] httpPort.receive( mw_http_response( mw_http_response_404_not_found - )) { + )) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT responds with the correct error code ***"); @@ -1799,20 +1615,18 @@ module AtsMec_WlanInformationAPI_TestCases { } // End of 'alt' statement // Postamble - f_delete_measurement_config(v_measurement_config); + f_delete_measurement_config(v_measurement_config_id); 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; + var Json.String v_measurement_config_id; // Test control if (not(PICS_MEC_PLAT) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { @@ -1827,12 +1641,12 @@ module AtsMec_WlanInformationAPI_TestCases { // Test adapter configuration // Preamble - f_create_measurement_config(v_measurement_config); + f_create_measurement_config(v_measurement_config, v_measurement_config_id); 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, + PICS_ROOT_API & PX_ME_WLAN_URI_MEAS & "/" & v_measurement_config_id, v_headers, m_http_message_body_json( m_body_json_wlan_measurement_config( @@ -1848,7 +1662,7 @@ module AtsMec_WlanInformationAPI_TestCases { }, PX_MEASUREMENT_ID, m_measurement_info(2000, 20) - )))))); + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -1869,7 +1683,7 @@ module AtsMec_WlanInformationAPI_TestCases { )}, 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 ***"); @@ -1882,19 +1696,18 @@ module AtsMec_WlanInformationAPI_TestCases { } // End of 'alt' statement // Postamble - f_delete_measurement_config(v_response.response.body.json_body.measurementConfig); + f_delete_measurement_config(v_measurement_config_id); 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; + var Json.String v_measurement_config_id; // Test control if (not(PICS_MEC_PLAT) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { @@ -1909,12 +1722,12 @@ module AtsMec_WlanInformationAPI_TestCases { // Test adapter configuration // Preamble - f_create_measurement_config(v_measurement_config); + f_create_measurement_config(v_measurement_config, v_measurement_config_id); 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", + PICS_ROOT_API & PX_ME_WLAN_URI_MEAS & "/" & v_measurement_config_id & "_Invalid", v_headers, m_http_message_body_json( m_body_json_wlan_measurement_config( @@ -1930,7 +1743,7 @@ module AtsMec_WlanInformationAPI_TestCases { }, PX_MEASUREMENT_ID, m_measurement_info(2000, 20) - )))))); + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -1939,7 +1752,7 @@ module AtsMec_WlanInformationAPI_TestCases { [] 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 ***"); @@ -1952,19 +1765,18 @@ module AtsMec_WlanInformationAPI_TestCases { } // End of 'alt' statement // Postamble - f_delete_measurement_config(v_measurement_config); + f_delete_measurement_config(v_measurement_config_id); 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; + var Json.String v_measurement_config_id; // Test control if (not(PICS_MEC_PLAT) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { @@ -1979,14 +1791,14 @@ module AtsMec_WlanInformationAPI_TestCases { // Test adapter configuration // Preamble - f_create_measurement_config(v_measurement_config); + f_create_measurement_config(v_measurement_config, v_measurement_config_id); 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, + PICS_ROOT_API & PX_ME_WLAN_URI_MEAS & "/" & v_measurement_config_id, v_headers - ))); + ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -1995,7 +1807,7 @@ module AtsMec_WlanInformationAPI_TestCases { [] 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 ***"); @@ -2013,13 +1825,12 @@ module AtsMec_WlanInformationAPI_TestCases { /** * @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; + var Json.String v_measurement_config_id; // Test control if (not(PICS_MEC_PLAT) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { @@ -2034,14 +1845,14 @@ module AtsMec_WlanInformationAPI_TestCases { // Test adapter configuration // Preamble - f_create_measurement_config(v_measurement_config); + f_create_measurement_config(v_measurement_config, v_measurement_config_id); 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", + PICS_ROOT_API & PX_ME_WLAN_URI_MEAS & "/" & v_measurement_config_id & "_invalid", v_headers - ))); + ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -2050,7 +1861,7 @@ module AtsMec_WlanInformationAPI_TestCases { [] 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 ***"); @@ -2063,7 +1874,7 @@ module AtsMec_WlanInformationAPI_TestCases { } // End of 'alt' statement // Postamble - f_delete_measurement_config(v_measurement_config); + f_delete_measurement_config(v_measurement_config_id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC028_SRV_WAI_016_NF diff --git a/ttcn/AtsMec_WlanInformation/AtsMec_WlanInformationAPI_TestControl.ttcn b/ttcn/AtsMec_WlanInformation/AtsMec_WlanInformationAPI_TestControl.ttcn index 7f33626..d66759b 100644 --- a/ttcn/AtsMec_WlanInformation/AtsMec_WlanInformationAPI_TestControl.ttcn +++ b/ttcn/AtsMec_WlanInformation/AtsMec_WlanInformationAPI_TestControl.ttcn @@ -40,6 +40,20 @@ module AtsMec_WlanInformationAPI_TestControl { execute(TC_MEC_MEC028_SRV_WAI_010_NF()); execute(TC_MEC_MEC028_SRV_WAI_011_OK()); + + execute(TC_MEC_MEC028_SRV_WAI_012_OK()); + + execute(TC_MEC_MEC028_SRV_WAI_013_OK()); + execute(TC_MEC_MEC028_SRV_WAI_013_BR()); + + execute(TC_MEC_MEC028_SRV_WAI_014_OK()); + execute(TC_MEC_MEC028_SRV_WAI_014_NF()); + + execute(TC_MEC_MEC028_SRV_WAI_015_OK()); + execute(TC_MEC_MEC028_SRV_WAI_015_NF()); + + execute(TC_MEC_MEC028_SRV_WAI_016_OK()); + execute(TC_MEC_MEC028_SRV_WAI_016_NF()); } } // End of 'control' statement diff --git a/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Functions.ttcn b/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Functions.ttcn index cbab7d1..c97ae00 100644 --- a/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Functions.ttcn +++ b/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Functions.ttcn @@ -129,7 +129,8 @@ module WlanInformationAPI_Functions { } // End of function f_delete_assoc_sta_subscription function f_create_measurement_config( - out MeasurementConfig p_measurement_config + out MeasurementConfig p_measurement_config, + out Json.String p_measurement_config_id ) runs on HttpComponent { var Headers v_headers; var HttpMessage v_response; @@ -138,7 +139,7 @@ module WlanInformationAPI_Functions { httpPort.send( m_http_request( m_http_request_post( - PICS_ROOT_API & PX_ME_WLAN_URI & "/measurements", + PICS_ROOT_API & PX_ME_WLAN_URI_MEAS, v_headers, m_http_message_body_json( m_body_json_wlan_measurement_config( @@ -169,7 +170,13 @@ module WlanInformationAPI_Functions { tc_ac.stop; p_measurement_config := v_response.response.body.json_body.measurementConfig; + p_measurement_config_id := regexp( + oct2char(unichar2oct(p_measurement_config.links.self_.href)), + "?+" & PX_ME_WLAN_URI_MEAS & "/" & "(?*)", + 0 + ); log("f_create_measurement_config: INFO: IUT successfully responds to the subscription: ", p_measurement_config); + log("f_create_measurement_config: INFO: p_measurement_config_id = ", p_measurement_config_id); } [] tc_ac.timeout { log("f_create_measurement_config: INCONC: Expected message not received"); @@ -179,21 +186,15 @@ module WlanInformationAPI_Functions { } // End of function "f_create_measurement_config function f_delete_measurement_config( - in MeasurementConfig p_measurement_config + in Json.String p_measurement_config_id ) 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, + PICS_ROOT_API & PX_ME_WLAN_URI_MEAS & "/" & p_measurement_config_id, v_headers ))); diff --git a/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn b/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn index 699134c..397652b 100644 --- a/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn +++ b/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn @@ -34,6 +34,8 @@ module LibMec_Pixits { modulepar charstring PX_ME_WLAN_URI_SUB := "wai/v2/subscriptions"; + modulepar charstring PX_ME_WLAN_URI_MEAS := "wai/v2/measurements"; + modulepar charstring PX_ME_V2X_URI := "vis/v1"; modulepar charstring PX_ME_V2X_QUERIES_URI := "/vis/v1/queries"; -- GitLab From 38258b5ca7a272d1d74134a799111e08eadae32b Mon Sep 17 00:00:00 2001 From: garciay Date: Thu, 11 Jan 2024 08:14:55 +0100 Subject: [PATCH 63/99] TTF T027: Finalyze review MEC-015 --- ...AtsMec_TrafficManagementAPI_TestCases.ttcn | 1965 +++++++++-------- ...sMec_TrafficManagementAPI_TestControl.ttcn | 30 +- .../ttcn/TrafficManagementAPI_Functions.ttcn | 18 +- .../ttcn/TrafficManagementAPI_Pixits.ttcn | 17 +- .../ttcn/TrafficManagementAPI_Templates.ttcn | 4 + .../TrafficManagementAPI_TypesAndValues.ttcn | 3 +- 6 files changed, 1098 insertions(+), 939 deletions(-) diff --git a/ttcn/AtsMec_TrafficManagement/AtsMec_TrafficManagementAPI_TestCases.ttcn b/ttcn/AtsMec_TrafficManagement/AtsMec_TrafficManagementAPI_TestCases.ttcn index 9a4a577..f3b601d 100644 --- a/ttcn/AtsMec_TrafficManagement/AtsMec_TrafficManagementAPI_TestCases.ttcn +++ b/ttcn/AtsMec_TrafficManagement/AtsMec_TrafficManagementAPI_TestCases.ttcn @@ -7,7 +7,7 @@ * No part may be reproduced except as authorized by written permission. * The copyright and the foregoing restriction extend to reproduction in all media. * All rights reserved. - * @see ETSI GS MEC 015, Draft ETSI GS MEC 015 V2.1.1 (2020-06) + * @see ETSI GS MEC 015, Draft ETSI GS MEC 015 V2.2.1 (2020-06) */ module AtsMec_TrafficManagementAPI_TestCases { @@ -42,692 +42,387 @@ module AtsMec_TrafficManagementAPI_TestCases { group me_app_role { /** - * @desc Check that the IUT responds with the list of configured bandwidth allocations when queried by a MEC Application - * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/TrafficManagement.tplan2 - * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml + * @desc Check that the IUT responds with the list of configured bandwidth allocations when queried by a MEC Application - none */ - testcase TC_MEC_MEC015_SRV_TM_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_BWMANAGEMENT_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Test adapter configuration - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_get( - PX_ME_BWM_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_bw_info_list - )))) -> value v_response { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of BwInfo ***"); - 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_MEC015_SRV_TM_001_OK - - /** - * @desc Check that the IUT responds with a configured bandwidth allocation when queried by a MEC Application - * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/TrafficManagement.tplan2 - * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml - */ - testcase TC_MEC_MEC015_SRV_TM_002_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_BWMANAGEMENT_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Test adapter configuration - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_get( - PX_ME_BWM_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_bw_info( - mw_bw_info( - PX_APP_INSTANCE_ID - )))))) -> value v_response { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a BwInfo ***"); - 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_MEC015_SRV_TM_002_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/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/TrafficManagement.tplan2 - * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml - */ - testcase TC_MEC_MEC015_SRV_TM_002_BR() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Test adapter configuration - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_get( - PX_ME_BWM_URI & "/app_instance_id=" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")), // 'app_instance_id=' is a wrong parameter - 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( - mw_http_message_body_json( - mw_body_json_problem_details( - mw_problem_details( - -, -, 400 - )))))) { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error message ***"); - 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_MEC015_SRV_TM_002_BR - - /** - * @desc Check that the IUT responds with an error when a request with an unknown resource URI is sent by a MEC Application - * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/TrafficManagement.tplan2 - * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml - */ - testcase TC_MEC_MEC015_SRV_TM_002_NF() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; + testcase TC_MEC_MEC015_SRV_TM_001_OK_01() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_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_BWM_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_bw_info_list + )))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of BwInfo ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } - - // Test component configuration - f_cf_01_http_up(); - - // Test adapter configuration - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_get( - PX_ME_BWM_URI & "/" & oct2char(unichar2oct(PX_UNKNOWN_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( - mw_http_message_body_json( - mw_body_json_problem_details( - mw_problem_details( - -, -, 404 - )))))) { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error message ***"); - 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_MEC015_SRV_TM_002_NF - - /** - * @desc Check that the IUT responds with a registration and initialisation approval for the requested bandwidth requirements sent by a MEC Application - * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/TrafficManagement.tplan2 - * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml - */ - testcase TC_MEC_MEC015_SRV_TM_003_OK_01() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - var Json.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("001")); - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } - - // 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( - PX_ME_BWM_URI, - v_headers, - m_http_message_body_json( - m_body_json_bw_info( - m_bw_info( - v_app_instance_id, - APPLICATION_SPECIFIC_BW_ALLOCATION, // Request type - "1024", // FixedAllocation - Downlink // AllocationDirection - ) - ) - ) - ) - ) - ); - 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_bw_info( - mw_bw_info( - v_app_instance_id - )))))) -> 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 { - var charstring_list v_bw_allocation_id; - f_get_header(valueof(v_response.response.header), "Location", v_bw_allocation_id); - log("*** " & testcasename() & ": PASS: IUT successfully responds with a BwInfo, BWAllocationID: ", v_bw_allocation_id[0], " ***"); - 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_MEC015_SRV_TM_003_OK_01 + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC015_SRV_TM_001_OK /** - * @desc Check that the IUT responds with a registration and initialisation approval for the requested bandwidth requirements sent by a MEC Application - * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/TrafficManagement.tplan2 - * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml + * @desc Check that the IUT responds with a configured bandwidth allocation when queried by a MEC Application - app_instance_id */ - testcase TC_MEC_MEC015_SRV_TM_003_OK_02() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - var Json.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("002")); - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; + testcase TC_MEC_MEC015_SRV_TM_001_OK_02() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_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_BWM_URI & "?app_instance_id=" & PX_APP_INSTANCE_ID, + 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_bw_info( + mw_bw_info( + PX_APP_INSTANCE_ID + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with the required BwInfo ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } - - // 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( - PX_ME_BWM_URI, - v_headers, - m_http_message_body_json( - m_body_json_bw_info( - m_bw_info( - v_app_instance_id, - SESSION_SPECIFIC_BW_ALLOCATION, // Request type - "1024", // FixedAllocation - Downlink // AllocationDirection - //{ m_session_filter("10.10.10.10", 1010) } - ) - ) - ) - ) - ) - ); - 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_bw_info( - mw_bw_info( - v_app_instance_id, - SESSION_SPECIFIC_BW_ALLOCATION, // Request type - "1024", // FixedAllocation - Downlink // AllocationDirection - //{ mw_session_filter } - )))))) -> 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 { - var charstring_list v_bw_allocation_id; - f_get_header(valueof(v_response.response.header), "Location", v_bw_allocation_id); - log("*** " & testcasename() & ": PASS: IUT successfully responds with a BwInfo, BWAllocationID: ", v_bw_allocation_id[0], " ***"); - 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_MEC015_SRV_TM_003_OK_02 - - /** - * @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/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/TrafficManagement.tplan2 - * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml - */ - testcase TC_MEC_MEC015_SRV_TM_003_BR_01() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } - - // 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( - PX_ME_BWM_URI, - v_headers, - m_http_message_body_json( - m_body_json_bw_info( - m_bw_info( - PX_APP_INSTANCE_ID, - APPLICATION_SPECIFIC_BW_ALLOCATION, // Request type - "Invalid", // FixedAllocation - Downlink // AllocationDirection - ) - ) - ) - ) - ) - ); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body - tc_ac.start; - 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 - )))))) { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error message ***"); - 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_MEC015_SRV_TM_003_BR_01 + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC015_SRV_TM_001_OK_02 /** - * @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/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/TrafficManagement.tplan2 - * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml + * @desc Check that the IUT responds with a configured bandwidth allocation when queried by a MEC Application - app_name */ - testcase TC_MEC_MEC015_SRV_TM_003_BR_02() 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_BWMANAGEMENT_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; + testcase TC_MEC_MEC015_SRV_TM_001_OK_03() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_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_BWM_URI & "?app_name=" & PX_APP_NAME, + 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_bw_info( + mw_bw_info( + PX_APP_INSTANCE_ID, + -, -, -, + PX_APP_NAME + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with the required BwInfo ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } - - // 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( - PX_ME_BWM_URI, - v_headers, - m_http_message_body_json( - m_body_json_bw_info( - m_bw_info( - PX_APP_INSTANCE_ID, - APPLICATION_SPECIFIC_BW_ALLOCATION, // Request type - "1024", // FixedAllocation - Downlink // AllocationDirection - //{ m_session_filter("10.10.10.10", 1010) } // MEC015 Clause 7.2.2 Type: BwInfo Table 7.2.2-1: Elements of BwInfo, sessionFilter shall be omit - ) - ) - ) - ) - ) - ); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body - tc_ac.start; - 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 - )))))) { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error message ***"); - 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_MEC015_SRV_TM_003_BR_02 - - /** - * @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/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/TrafficManagement.tplan2 - * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml - */ - testcase TC_MEC_MEC015_SRV_TM_003_BR_03() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } - - // 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( - PX_ME_BWM_URI, - v_headers, - m_http_message_body_json( - m_body_json_bw_info( - m_bw_info( - PX_APP_INSTANCE_ID, - SESSION_SPECIFIC_BW_ALLOCATION, // Request type - "1024", // FixedAllocation - Downlink // AllocationDirection - // MEC015 Clause 7.2.2 Type: BwInfo Table 7.2.2-1: Elements of BwInfo, sessionFilter shall be present - ) - ) - ) - ) - ) - ); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body - tc_ac.start; - 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 - )))))) { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error message ***"); - 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_MEC015_SRV_TM_003_BR_03 + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC015_SRV_TM_001_OK_03 /** - * @desc Check that the IUT responds with the configured bandwidth allocation when queried by a MEC Application - * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/TrafficManagement.tplan2 - * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml + * @desc Check that the IUT responds with a configured bandwidth allocation when queried by a MEC Application - session_id */ - testcase TC_MEC_MEC015_SRV_TM_004_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - var charstring v_bw_allocation_id; - var BwInfo v_bw_info; - var Json.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("001")); - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_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_bw_allocation_resource(v_app_instance_id, v_bw_allocation_id, v_bw_info); - if (v_bw_allocation_id == "") { - f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); - } else { - f_selfOrClientSyncAndVerdict(c_prDone, e_success); + testcase TC_MEC_MEC015_SRV_TM_001_OK_04() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_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_BWM_URI & "?session_id=" & PX_APP_ALLOCATION_ID, + 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_bw_info( + mw_bw_info( + PX_APP_INSTANCE_ID, + -, -, -, + PX_APP_NAME, + PX_APP_ALLOCATION_ID + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with the required BwInfo ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } - - // Test Body - httpPort.send( - m_http_request( - m_http_request_get( - PX_ME_BWM_URI & "/" & v_bw_allocation_id, - v_headers - ) - ) - ); - tc_ac.start; - alt { - [] httpPort.receive( - mw_http_response( - mw_http_response_ok( - mw_http_message_body_json( - mw_body_json_bw_info( - mw_bw_info( - v_app_instance_id - )))))) -> value v_response { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a BwInfo ***"); - f_delete_bw_allocation_resource(v_app_instance_id, v_bw_allocation_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 - - // Postamble - f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC015_SRV_TM_004_OK + [] 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_MEC015_SRV_TM_001_OK_04 /** - * @desc Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application - * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/TrafficManagement.tplan2 - * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml + * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - app_instance_id */ - testcase TC_MEC_MEC015_SRV_TM_004_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC015_SRV_TM_001_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_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_BWM_URI & "?appInstId=" & PX_APP_INSTANCE_ID, + 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_MEC015_SRV_TM_001_BR + + /** + * @desc Check that the IUT responds with an error when a request with an unknown resource URI is sent by a MEC Application - app_instance_id + */ + testcase TC_MEC_MEC015_SRV_TM_001_NF_01() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_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_BWM_URI & "?app_instance_id=" & PX_UNKNOWN_APP_INSTANCE_ID, + 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_MEC015_SRV_TM_001_NF_01 + + /** + * @desc Check that the IUT responds with an error when a request with an unknown resource URI is sent by a MEC Application - app_name + */ + testcase TC_MEC_MEC015_SRV_TM_001_NF_02() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_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_BWM_URI & "?app_name=" & PX_UNKNOWN_APP_NAME, + 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_MEC015_SRV_TM_001_NF_02 + + /** + * @desc Check that the IUT responds with an error when a request with an unknown resource URI is sent by a MEC Application - session_id + */ + testcase TC_MEC_MEC015_SRV_TM_001_NF_03() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; - var charstring v_bw_allocation_id; - var BwInfo v_bw_info; - var Json.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("001")); // Test control if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { @@ -743,30 +438,24 @@ module AtsMec_TrafficManagementAPI_TestCases { // Preamble f_init_default_headers_list(-, -, v_headers); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body httpPort.send( m_http_request( m_http_request_get( - PX_ME_BWM_URI & "/Unknown_bw_allocation_id", + PICS_ROOT_API & PX_ME_BWM_URI & "?session_id=" & PX_UNKNOWN_APP_ALLOCATION_ID, v_headers - ) - ) - ); + ))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body tc_ac.start; alt { [] httpPort.receive( mw_http_response( - mw_http_response_404_not_found( - mw_http_message_body_json( - mw_body_json_problem_details( - mw_problem_details( - -, -, 404 - )))))) { + mw_http_response_404_not_found + )) { tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error message ***"); + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct error code ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -777,20 +466,586 @@ module AtsMec_TrafficManagementAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC015_SRV_TM_004_NF + } // End of testcase TC_MEC_MEC015_SRV_TM_001_NF_03 + + /** + * @desc Check that the IUT acknowledges a creation of a bandwidthAllocation resource + */ + testcase TC_MEC_MEC015_SRV_TM_002_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var charstring v_bw_allocation_id; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_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_BWM_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")), + v_headers, + m_http_message_body_json( + m_body_json_bw_info( + m_bw_info( + PX_APP_INSTANCE_ID, + APPLICATION_SPECIFIC_BW_ALLOCATION, + "1024", + Downlink, + PX_APP_NAME, + PX_APP_ALLOCATION_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_bw_info( + mw_bw_info( + PX_APP_INSTANCE_ID, + -, -, -, + PX_APP_NAME, + PX_APP_ALLOCATION_ID + )))))) -> value v_response { + tc_ac.stop; + + // Check HTTP Location header + if (f_check_headers(v_response.response.header) == false) { + log("*** " & testcasename() & ": FAIL: IUT failed in Area subscription ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_error); + } else { + var charstring_list v_header_location; + f_get_header(v_response.response.header, "Location", v_header_location); + v_bw_allocation_id := regexp( + v_header_location[0], + "?+" & PX_ME_BWM_URI & "/(?*)", + 0 + ); + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a BwInfo, CreationID: ", v_bw_allocation_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 + + // Postamble + f_delete_bw_allocation_resource(PX_APP_INSTANCE_ID, v_bw_allocation_id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC015_SRV_TM_002_OK + + /** + * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - sessionFilter shall be omitted + */ + testcase TC_MEC_MEC015_SRV_TM_002_BR_01() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_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_BWM_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")), + v_headers, + m_http_message_body_json( + m_body_json_bw_info( + m_bw_info( + PX_APP_INSTANCE_ID, + APPLICATION_SPECIFIC_BW_ALLOCATION, + "1024", + Downlink, + PX_APP_NAME, + PX_APP_ALLOCATION_ID, + { m_session_filter("10.10.10.10", 1010) } // FIXME Use PIXITs + )))))); + 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_MEC015_SRV_TM_002_BR_01 + /** + * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - sessionFilter shall be present + */ + testcase TC_MEC_MEC015_SRV_TM_002_BR_02() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_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_BWM_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")), + v_headers, + m_http_message_body_json( + m_body_json_bw_info( + m_bw_info( + PX_APP_INSTANCE_ID, + SESSION_SPECIFIC_BW_ALLOCATION, + "1024", + Downlink, + PX_APP_NAME, + PX_APP_ALLOCATION_ID, + - // Session shall be present + )))))); + 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_MEC015_SRV_TM_002_BR_02 + + /** + * @desc Check that the IUT responds with the configured bandwidth allocation when queried by a MEC Application + */ + testcase TC_MEC_MEC015_SRV_TM_003_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var charstring v_bw_allocation_id; + var BwInfo v_bw_info; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_bw_allocation_resource(PX_APP_INSTANCE_ID, v_bw_allocation_id, v_bw_info); + if (v_bw_allocation_id == "") { + f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); + } + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_BWM_URI & "/" & v_bw_allocation_id, + 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_bw_info( + mw_bw_info( + PX_APP_INSTANCE_ID, + -, -, -, + v_bw_allocation_id + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct BwInfo ***"); + 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_bw_allocation_resource(PX_APP_INSTANCE_ID, v_bw_allocation_id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC015_SRV_TM_003_OK + + /** + * @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_MEC015_SRV_TM_003_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_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_BWM_URI & "/" & PX_UNKNOWN_BW_ALLOCATION_ID, + 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_MEC015_SRV_TM_003_NF + /** * @desc Check that the IUT updates the requested bandwidth requirements when commanded by a MEC Application - * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/TrafficManagement.tplan2 - * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml + */ + testcase TC_MEC_MEC015_SRV_TM_004_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var charstring v_bw_allocation_id; + var BwInfo v_bw_info; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_bw_allocation_resource(PX_APP_INSTANCE_ID, v_bw_allocation_id, v_bw_info); + if (v_bw_allocation_id == "") { + f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); + } + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_put( + PICS_ROOT_API & PX_ME_BWM_URI & "/" & v_bw_allocation_id, + v_headers, + m_http_message_body_json( + m_body_json_bw_info( + m_bw_info( + PX_APP_INSTANCE_ID, + APPLICATION_SPECIFIC_BW_ALLOCATION, // Request type + "2048", // FixedAllocation + Downlink // AllocationDirection + )))))); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_bw_info( + mw_bw_info( + PX_APP_INSTANCE_ID, + APPLICATION_SPECIFIC_BW_ALLOCATION, // Request type + "2048", // FixedAllocation + Downlink // AllocationDirection + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with an updated BwInfo ***"); + 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_bw_allocation_resource(PX_APP_INSTANCE_ID, v_bw_allocation_id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC015_SRV_TM_004_OK + + /** + * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - sessionFilter shall be omitted + */ + testcase TC_MEC_MEC015_SRV_TM_004_BR_01() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var charstring v_bw_allocation_id; + var BwInfo v_bw_info; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_bw_allocation_resource(PX_APP_INSTANCE_ID, v_bw_allocation_id, v_bw_info); + if (v_bw_allocation_id == "") { + f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); + } + f_init_default_headers_list(-, -, v_headers); + v_bw_info.sessionFilter := { valueof(m_session_filter("10.10.10.10", 1010)) }; // FIXME Use PIXITs + httpPort.send( + m_http_request( + m_http_request_put( + PICS_ROOT_API & PX_ME_BWM_URI & "/" & v_bw_allocation_id, + v_headers, + m_http_message_body_json( + m_body_json_bw_info( + v_bw_info + ))))); + + // 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_delete_bw_allocation_resource(PX_APP_INSTANCE_ID, v_bw_allocation_id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC015_SRV_TM_004_BR_01 + + /** + * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - sessionFilter shall be present + */ + testcase TC_MEC_MEC015_SRV_TM_004_BR_02() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var charstring v_bw_allocation_id; + var BwInfo v_bw_info; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_bw_allocation_resource(PX_APP_INSTANCE_ID, v_bw_allocation_id, v_bw_info); + if (v_bw_allocation_id == "") { + f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); + } + f_init_default_headers_list(-, -, v_headers); + v_bw_info.requestType := SESSION_SPECIFIC_BW_ALLOCATION; + httpPort.send( + m_http_request( + m_http_request_put( + PICS_ROOT_API & PX_ME_BWM_URI & "/" & v_bw_allocation_id, + v_headers, + m_http_message_body_json( + m_body_json_bw_info( + v_bw_info + ))))); + + // 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_delete_bw_allocation_resource(PX_APP_INSTANCE_ID, v_bw_allocation_id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC015_SRV_TM_004_BR_02 + + /** + * @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_MEC015_SRV_TM_004_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + httpPort.send( + m_http_request( + m_http_request_put( + PICS_ROOT_API & PX_ME_BWM_URI & "/" & PX_UNKNOWN_BW_ALLOCATION_ID, + v_headers, + m_http_message_body_json( + m_body_json_bw_info( + m_bw_info( + PX_APP_INSTANCE_ID, + APPLICATION_SPECIFIC_BW_ALLOCATION, + "2048", // FixedAllocation + Downlink + )))))); + + // 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_MEC015_SRV_TM_004_NF + + /** + * @desc Check that the IUT when provided with just the changes (deltas) updates the requested bandwidth requirements when commanded by a MEC Application */ testcase TC_MEC_MEC015_SRV_TM_005_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; - var HttpMessage v_response; var charstring v_bw_allocation_id; var BwInfo v_bw_info; - var Json.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("002")); // Test control if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { @@ -805,33 +1060,24 @@ module AtsMec_TrafficManagementAPI_TestCases { // Test adapter configuration // Preamble - f_init_default_headers_list(-, -, v_headers); - f_create_bw_allocation_resource(v_app_instance_id, v_bw_allocation_id, v_bw_info); + f_create_bw_allocation_resource(PX_APP_INSTANCE_ID, v_bw_allocation_id, v_bw_info); if (v_bw_allocation_id == "") { f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); - } else { - f_selfOrClientSyncAndVerdict(c_prDone, e_success); } - - // Test Body + f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( - m_http_request_put( - PX_ME_BWM_URI & "/" & v_bw_allocation_id, - v_headers, - m_http_message_body_json( - m_body_json_bw_info( - m_bw_info( - v_app_instance_id, - APPLICATION_SPECIFIC_BW_ALLOCATION, // Request type - "2048", // FixedAllocation - Downlink // AllocationDirection - ) - ) - ) - ) - ) - ); + m_http_request_patch( + PICS_ROOT_API & PX_ME_BWM_URI & "/" & v_bw_allocation_id, + v_headers, + m_http_message_body_json( + m_body_json_bw_info_deltas( + m_bw_info_deltas( + PX_APP_INSTANCE_ID, + APPLICATION_SPECIFIC_BW_ALLOCATION + )))))); + + // Test Body tc_ac.start; alt { [] httpPort.receive( @@ -840,15 +1086,14 @@ module AtsMec_TrafficManagementAPI_TestCases { mw_http_message_body_json( mw_body_json_bw_info( mw_bw_info( - v_app_instance_id, + PX_APP_INSTANCE_ID, APPLICATION_SPECIFIC_BW_ALLOCATION, // Request type - "2048", // FixedAllocation + "5096", // FixedAllocation Downlink // AllocationDirection - )))))) -> value v_response { + )))))) { tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with an updated BwInfo ***"); - f_delete_bw_allocation_resource(v_app_instance_id, v_bw_allocation_id); + log("*** " & testcasename() & ": PASS: IUT successfully responds with a patched BwInfo ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -858,20 +1103,18 @@ module AtsMec_TrafficManagementAPI_TestCases { } // End of 'alt' statement // Postamble + f_delete_bw_allocation_resource(PX_APP_INSTANCE_ID, v_bw_allocation_id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC015_SRV_TM_005_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/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/TrafficManagement.tplan2 - * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml + * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - sessionFilter shall be omitted */ - testcase TC_MEC_MEC015_SRV_TM_005_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC015_SRV_TM_005_BR_01() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var charstring v_bw_allocation_id; var BwInfo v_bw_info; - var Json.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("002")); // Test control if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { @@ -886,33 +1129,26 @@ module AtsMec_TrafficManagementAPI_TestCases { // Test adapter configuration // Preamble - f_init_default_headers_list(-, -, v_headers); - f_create_bw_allocation_resource(v_app_instance_id, v_bw_allocation_id, v_bw_info); + f_create_bw_allocation_resource(PX_APP_INSTANCE_ID, v_bw_allocation_id, v_bw_info); if (v_bw_allocation_id == "") { f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); - } else { - f_selfOrClientSyncAndVerdict(c_prDone, e_success); } - - // Test Body - httpPort.send( + f_init_default_headers_list(-, -, v_headers); + httpPort.send( m_http_request( - m_http_request_put( - PX_ME_BWM_URI & "/" & v_bw_allocation_id, - v_headers, - m_http_message_body_json( - m_body_json_bw_info( - m_bw_info( - v_app_instance_id, - APPLICATION_SPECIFIC_BW_ALLOCATION, // Request type - "Invalid", // FixedAllocation - Downlink // AllocationDirection - ) - ) - ) - ) - ) - ); + m_http_request_patch( + PICS_ROOT_API & PX_ME_BWM_URI & "/" & v_bw_allocation_id, + v_headers, + m_http_message_body_json( + m_body_json_bw_info_deltas( + m_bw_info_deltas( + PX_APP_INSTANCE_ID, + APPLICATION_SPECIFIC_BW_ALLOCATION, + v_bw_info.allocationId, + { m_session_filter("10.10.10.10", 1010) } // FIXME Use PIXITs + )))))); + + // Test Body tc_ac.start; alt { [] httpPort.receive( @@ -922,81 +1158,10 @@ module AtsMec_TrafficManagementAPI_TestCases { mw_body_json_problem_details( mw_problem_details( -, -, 400 - )))))) { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error message ***"); - f_delete_bw_allocation_resource(v_app_instance_id, v_bw_allocation_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 - - // Postamble - f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC015_SRV_TM_005_BR - - /** - * @desc Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application - * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/TrafficManagement.tplan2 - * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml - */ - testcase TC_MEC_MEC015_SRV_TM_005_NF() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var Json.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("003")); - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_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_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body - httpPort.send( - m_http_request( - m_http_request_put( - PX_ME_BWM_URI & "/InvalidAllocationId", - v_headers, - m_http_message_body_json( - m_body_json_bw_info( - m_bw_info( - v_app_instance_id, - APPLICATION_SPECIFIC_BW_ALLOCATION, // Request type - "2048", // FixedAllocation - Downlink // AllocationDirection - ) - ) - ) - ) - ) - ); - tc_ac.start; - 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 - )))))) { + )))))) { tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error message ***"); + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct error message ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -1006,21 +1171,18 @@ module AtsMec_TrafficManagementAPI_TestCases { } // End of 'alt' statement // Postamble + f_delete_bw_allocation_resource(PX_APP_INSTANCE_ID, v_bw_allocation_id); f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC015_SRV_TM_005_NF + } // End of testcase TC_MEC_MEC015_SRV_TM_005_BR_01 /** - * @desc Check that the IUT when provided with just the changes (deltas) updates the requested bandwidth requirements when commanded by a MEC Application - * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/TrafficManagement.tplan2 - * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml + * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - sessionFilter shall be present */ - testcase TC_MEC_MEC015_SRV_TM_006_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC015_SRV_TM_005_BR_02() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; - var HttpMessage v_response; var charstring v_bw_allocation_id; var BwInfo v_bw_info; - var Json.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("004")); // Test control if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { @@ -1035,48 +1197,39 @@ module AtsMec_TrafficManagementAPI_TestCases { // Test adapter configuration // Preamble - f_init_default_headers_list(-, -, v_headers); - f_create_bw_allocation_resource(v_app_instance_id, v_bw_allocation_id, v_bw_info); + f_create_bw_allocation_resource(PX_APP_INSTANCE_ID, v_bw_allocation_id, v_bw_info); if (v_bw_allocation_id == "") { f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); - } else { - f_selfOrClientSyncAndVerdict(c_prDone, e_success); } - - // Test Body - httpPort.send( + f_init_default_headers_list(-, -, v_headers); + httpPort.send( m_http_request( m_http_request_patch( - PX_ME_BWM_URI & "/" & v_bw_allocation_id, + PICS_ROOT_API & PX_ME_BWM_URI & "/" & v_bw_allocation_id, v_headers, m_http_message_body_json( m_body_json_bw_info_deltas( m_bw_info_deltas( - v_app_instance_id, - APPLICATION_SPECIFIC_BW_ALLOCATION // Request type - ) - ) - ) - ) - ) - ); + PX_APP_INSTANCE_ID, + SESSION_SPECIFIC_BW_ALLOCATION, + v_bw_info.allocationId + //{ m_session_filter("10.10.10.10", 1010) } sessionFilter shall be present + )))))); + + // Test Body tc_ac.start; alt { [] httpPort.receive( mw_http_response( - mw_http_response_ok( - mw_http_message_body_json( - mw_body_json_bw_info( - mw_bw_info( - v_app_instance_id, - APPLICATION_SPECIFIC_BW_ALLOCATION, // Request type - "5096", // FixedAllocation - Downlink // AllocationDirection - )))))) -> value v_response { + mw_http_response_400_bad_request( + mw_http_message_body_json( + mw_body_json_problem_details( + mw_problem_details( + -, -, 400 + )))))) { tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with a patched BwInfo ***"); - f_delete_bw_allocation_resource(v_app_instance_id, v_bw_allocation_id); + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct error message ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -1086,20 +1239,16 @@ module AtsMec_TrafficManagementAPI_TestCases { } // End of 'alt' statement // Postamble + f_delete_bw_allocation_resource(PX_APP_INSTANCE_ID, v_bw_allocation_id); f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC015_SRV_TM_006_OK + } // End of testcase TC_MEC_MEC015_SRV_TM_005_BR_02 /** - * @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/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/TrafficManagement.tplan2 - * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml + * @desc Check that the IUT when provided with just the changes (deltas) updates the requested bandwidth requirements when commanded by a MEC Application */ - testcase TC_MEC_MEC015_SRV_TM_006_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC015_SRV_TM_005_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; - var charstring v_bw_allocation_id; - var BwInfo v_bw_info; - var Json.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("004")); // Test control if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { @@ -1115,44 +1264,28 @@ module AtsMec_TrafficManagementAPI_TestCases { // Preamble f_init_default_headers_list(-, -, v_headers); - f_create_bw_allocation_resource(v_app_instance_id, v_bw_allocation_id, v_bw_info); - if (v_bw_allocation_id == "") { - f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); - } else { - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - } - - // Test Body httpPort.send( m_http_request( m_http_request_patch( - PX_ME_BWM_URI & "/" & v_bw_allocation_id, + PICS_ROOT_API & PX_ME_BWM_URI & "/" & PX_UNKNOWN_BW_ALLOCATION_ID, v_headers, m_http_message_body_json( m_body_json_bw_info_deltas( m_bw_info_deltas( - v_app_instance_id, - APPLICATION_SPECIFIC_BW_ALLOCATION // Request type - ) - ) - ) - ) - ) - ); + PX_APP_INSTANCE_ID, + APPLICATION_SPECIFIC_BW_ALLOCATION + )))))); + + // Test Body tc_ac.start; 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 a correct error message ***"); - f_delete_bw_allocation_resource(v_app_instance_id, v_bw_allocation_id); + log("*** " & testcasename() & ": PASS: IUT successfully responds with a patched BwInfo ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -1163,19 +1296,16 @@ module AtsMec_TrafficManagementAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC015_SRV_TM_006_BR + } // End of testcase TC_MEC_MEC015_SRV_TM_005_NF /** - * @desc Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application - * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/TrafficManagement.tplan2 - * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml + * @desc Check that the IUT unregisters from the Bandwidth Management Service when commanded by a MEC Application */ - testcase TC_MEC_MEC015_SRV_TM_006_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC015_SRV_TM_006_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var charstring v_bw_allocation_id; var BwInfo v_bw_info; - var Json.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("004")); // Test control if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { @@ -1190,39 +1320,30 @@ module AtsMec_TrafficManagementAPI_TestCases { // Test adapter configuration // Preamble + f_create_bw_allocation_resource(PX_APP_INSTANCE_ID, v_bw_allocation_id, v_bw_info); + if (v_bw_allocation_id == "") { + f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); + } f_init_default_headers_list(-, -, v_headers); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body httpPort.send( m_http_request( - m_http_request_patch( - PX_ME_BWM_URI & "/" & v_bw_allocation_id, - v_headers, - m_http_message_body_json( - m_body_json_bw_info_deltas( - m_bw_info_deltas( - v_app_instance_id, - APPLICATION_SPECIFIC_BW_ALLOCATION // Request type - ) - ) - ) - ) + m_http_request_delete( + PICS_ROOT_API & PX_ME_BWM_URI & "/" & v_bw_allocation_id, + v_headers + ) ) ); + + // Test Body tc_ac.start; alt { [] httpPort.receive( mw_http_response( - mw_http_response_404_not_found( - mw_http_message_body_json( - mw_body_json_problem_details( - mw_problem_details( - -, -, 404 - )))))) { + mw_http_response_204_no_content + )) { tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error message ***"); + log("*** " & testcasename() & ": PASS: IUT successfully responds to deletion ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -1233,19 +1354,16 @@ module AtsMec_TrafficManagementAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC015_SRV_TM_006_NF + } // End of testcase TC_MEC_MEC015_SRV_TM_006_OK /** - * @desc Check that the IUT unregisters from the Bandwidth Management Service when commanded by a MEC Application - * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/TrafficManagement.tplan2 - * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml + * @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_MEC015_SRV_TM_007_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC015_SRV_TM_006_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var charstring v_bw_allocation_id; var BwInfo v_bw_info; - var Json.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("005")); // Test control if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { @@ -1260,29 +1378,25 @@ module AtsMec_TrafficManagementAPI_TestCases { // Test adapter configuration // Preamble - f_init_default_headers_list(-, -, v_headers); - f_create_bw_allocation_resource(v_app_instance_id, v_bw_allocation_id, v_bw_info); + f_create_bw_allocation_resource(PX_APP_INSTANCE_ID, v_bw_allocation_id, v_bw_info); if (v_bw_allocation_id == "") { f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); - } else { - f_selfOrClientSyncAndVerdict(c_prDone, e_success); } - - // Test Body + f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( m_http_request_delete( - PX_ME_BWM_URI & "/" & v_bw_allocation_id, + PICS_ROOT_API & PX_ME_BWM_URI & "/" & PX_UNKNOWN_BW_ALLOCATION_ID, v_headers - ) - ) - ); + ))); + + // 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 to deletion ***"); @@ -1295,8 +1409,9 @@ module AtsMec_TrafficManagementAPI_TestCases { } // End of 'alt' statement // Postamble + f_delete_bw_allocation_resource(PX_APP_INSTANCE_ID, v_bw_allocation_id); f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC015_SRV_TM_007_OK + } // End of testcase TC_MEC_MEC015_SRV_TM_006_NF } // End of group me_app_role diff --git a/ttcn/AtsMec_TrafficManagement/AtsMec_TrafficManagementAPI_TestControl.ttcn b/ttcn/AtsMec_TrafficManagement/AtsMec_TrafficManagementAPI_TestControl.ttcn index 430b965..df71fa7 100644 --- a/ttcn/AtsMec_TrafficManagement/AtsMec_TrafficManagementAPI_TestControl.ttcn +++ b/ttcn/AtsMec_TrafficManagement/AtsMec_TrafficManagementAPI_TestControl.ttcn @@ -12,10 +12,34 @@ module AtsMec_TrafficManagementAPI_TestControl { control { if (PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED) { - execute(TC_MEC_MEC015_SRV_TM_001_OK()); + execute(TC_MEC_MEC015_SRV_TM_001_OK_01()); + execute(TC_MEC_MEC015_SRV_TM_001_OK_02()); + execute(TC_MEC_MEC015_SRV_TM_001_OK_03()); + execute(TC_MEC_MEC015_SRV_TM_001_OK_04()); + execute(TC_MEC_MEC015_SRV_TM_001_BR()); + execute(TC_MEC_MEC015_SRV_TM_001_NF_01()); + execute(TC_MEC_MEC015_SRV_TM_001_NF_02()); + execute(TC_MEC_MEC015_SRV_TM_001_NF_03()); + execute(TC_MEC_MEC015_SRV_TM_002_OK()); - execute(TC_MEC_MEC015_SRV_TM_002_BR()); - execute(TC_MEC_MEC015_SRV_TM_002_NF()); + execute(TC_MEC_MEC015_SRV_TM_002_BR_01()); + execute(TC_MEC_MEC015_SRV_TM_002_BR_02()); + + execute(TC_MEC_MEC015_SRV_TM_003_OK()); + execute(TC_MEC_MEC015_SRV_TM_003_NF()); + + execute(TC_MEC_MEC015_SRV_TM_004_OK()); + execute(TC_MEC_MEC015_SRV_TM_004_BR_01()); + execute(TC_MEC_MEC015_SRV_TM_004_BR_02()); + execute(TC_MEC_MEC015_SRV_TM_004_NF()); + + execute(TC_MEC_MEC015_SRV_TM_005_OK()); + execute(TC_MEC_MEC015_SRV_TM_005_BR_01()); + execute(TC_MEC_MEC015_SRV_TM_005_BR_02()); + execute(TC_MEC_MEC015_SRV_TM_005_NF()); + + execute(TC_MEC_MEC015_SRV_TM_006_OK()); + execute(TC_MEC_MEC015_SRV_TM_006_NF()); } } // End of 'control' statement diff --git a/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Functions.ttcn b/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Functions.ttcn index 6e92be6..63f2cf7 100644 --- a/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Functions.ttcn +++ b/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Functions.ttcn @@ -40,7 +40,7 @@ module TrafficManagementAPI_Functions { httpPort.send( m_http_request( m_http_request_post( - PX_ME_BWM_URI, + PICS_ROOT_API & PX_ME_BWM_URI, v_headers, m_http_message_body_json( m_body_json_bw_info( @@ -60,16 +60,18 @@ module TrafficManagementAPI_Functions { mw_bw_info( p_app_instance_id )))))) -> value v_response { - var charstring_list v_bw_allocation_id; + var charstring_list v_header_location; tc_ac.stop; log("f_create_bw_allocation_resource: BwInfo resource created: ", v_response); - f_get_header(valueof(v_response.response.header), "Location", v_bw_allocation_id); - if (lengthof(v_bw_allocation_id) != 0) { - p_bw_allocation_id := v_bw_allocation_id[0]; - p_bw_info := v_response.response.body.json_body.bwInfo; - } + f_get_header(valueof(v_response.response.header), "Location", v_header_location); + p_bw_allocation_id := regexp( + v_header_location[0], + "?+" & PX_ME_BWM_URI & "/(?*)", + 0 + ); + p_bw_info := v_response.response.body.json_body.bwInfo; } [] tc_ac.timeout { log("f_create_bw_allocation_resource: Expected message not received"); @@ -87,7 +89,7 @@ module TrafficManagementAPI_Functions { httpPort.send( m_http_request( m_http_request_delete( - PX_ME_BWM_URI & "/" & p_bw_allocation_id, + PICS_ROOT_API & PX_ME_BWM_URI & "/" & p_bw_allocation_id, v_headers ))); tc_ac.start; diff --git a/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Pixits.ttcn b/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Pixits.ttcn index 352ca84..2b915be 100644 --- a/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Pixits.ttcn +++ b/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Pixits.ttcn @@ -1,5 +1,8 @@ module TrafficManagementAPI_Pixits { + // JSON + import from Json all; + // LibCommon import from LibCommon_BasicTypesAndValues all; @@ -8,9 +11,19 @@ module TrafficManagementAPI_Pixits { // LibMec/LocationAPI import from LocationAPI_TypesAndValues all; - modulepar Address PX_APP_INSTANCE_ID := "appInst01"; + modulepar Json.String PX_APP_INSTANCE_ID := "appInst01"; + + modulepar Json.String PX_APP_ALLOCATION_ID := "appAllocationId01"; + + modulepar Json.String PX_APP_NAME := "appName01"; + + modulepar Json.String PX_UNKNOWN_APP_INSTANCE_ID := "appInst99"; + + modulepar Json.String PX_UNKNOWN_APP_NAME := "appName99"; + + modulepar Json.String PX_UNKNOWN_APP_ALLOCATION_ID := "appAllocationId99"; - modulepar Address PX_UNKNOWN_APP_INSTANCE_ID := "appInst99"; + modulepar Json.String PX_UNKNOWN_BW_ALLOCATION_ID := "bwAllocationId99"; modulepar ResourceURL PX_RESOURCE_URL := "http://example.com/exampleAPI/location/v2/users?address:acr:192.0.0.1"; diff --git a/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Templates.ttcn b/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Templates.ttcn index 2fd17bf..7eb39f0 100644 --- a/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Templates.ttcn +++ b/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Templates.ttcn @@ -18,6 +18,7 @@ module TrafficManagementAPI_Templates { in BwRequestType p_requestType, in FixedAllocation p_fixedAllocation, in AllocationDirection p_allocationDirection, + in template (omit) Json.String p_appName := omit, in template (omit) AllocationId p_allocationId := omit, in template (omit) SessionFilter p_sessionFilter := omit, in template (omit) FixedBWPriority p_fixedBWPriority := omit @@ -25,6 +26,7 @@ module TrafficManagementAPI_Templates { allocationId := p_allocationId, timeStamp := omit, appInsId := p_appInsId, + appName := p_appName, requestType := p_requestType, sessionFilter := p_sessionFilter, fixedBWPriority := p_fixedBWPriority, @@ -37,6 +39,7 @@ module TrafficManagementAPI_Templates { template (present) BwRequestType p_requestType := ?, template (present) FixedAllocation p_fixedAllocation := ?, template (present) AllocationDirection p_allocationDirection := ?, + template Json.String p_appName := *, template AllocationId p_allocationId := *, template SessionFilter p_sessionFilter := *, template FixedBWPriority p_fixedBWPriority := * @@ -44,6 +47,7 @@ module TrafficManagementAPI_Templates { allocationId := p_allocationId, timeStamp := *, appInsId := p_appInsId, + appName := p_appName, requestType := p_requestType, sessionFilter := p_sessionFilter, fixedBWPriority := p_fixedBWPriority, diff --git a/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_TypesAndValues.ttcn b/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_TypesAndValues.ttcn index 3800d40..8ce3821 100644 --- a/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_TypesAndValues.ttcn @@ -21,7 +21,8 @@ module TrafficManagementAPI_TypesAndValues { type record BwInfo { AllocationId allocationId optional, TimeStamp timeStamp optional, - AppInsId appInsId, + AppInsId appInsId optional, + Json.String appName, BwRequestType requestType, SessionFilter sessionFilter optional, FixedBWPriority fixedBWPriority optional, -- GitLab From 6c086fab28ea9482ffd5c901ba176cc8ed03867e Mon Sep 17 00:00:00 2001 From: garciay Date: Thu, 11 Jan 2024 15:56:20 +0100 Subject: [PATCH 64/99] TTF T027: Finalyze review MEC-015/MTS --- ..._MultiAccessSteeringInfoAPI_TestCases.ttcn | 744 ++++++++++++------ ...sMec_TrafficManagementAPI_TestControl.ttcn | 25 + ..._V2XInformationServiceAPI_TestControl.ttcn | 1 + .../ttcn/TrafficManagementAPI_Functions.ttcn | 12 +- .../ttcn/TrafficManagementAPI_Pics.ttcn | 5 + .../ttcn/TrafficManagementAPI_Pixits.ttcn | 2 + .../TrafficManagementAPI_TypesAndValues.ttcn | 4 +- ttcn/LibMec/ttcn/LibMec_Pixits.ttcn | 2 +- 8 files changed, 529 insertions(+), 266 deletions(-) diff --git a/ttcn/AtsMec_TrafficManagement/AtsMec_MultiAccessSteeringInfoAPI_TestCases.ttcn b/ttcn/AtsMec_TrafficManagement/AtsMec_MultiAccessSteeringInfoAPI_TestCases.ttcn index 96b574c..1026770 100644 --- a/ttcn/AtsMec_TrafficManagement/AtsMec_MultiAccessSteeringInfoAPI_TestCases.ttcn +++ b/ttcn/AtsMec_TrafficManagement/AtsMec_MultiAccessSteeringInfoAPI_TestCases.ttcn @@ -43,17 +43,14 @@ module AtsMec_MultiAccessSteeringInfoAPI_TestCases { /** * @desc Check that the IUT responds with the Multi-access Traffic Steering information when queried by a MEC Application - * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/MultiAccessTrafficSteering.tplan2 - * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml */ testcase TC_MEC_MEC015_SRV_MTS_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_BWMANAGEMENT_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); + if (not(PICS_MEC_PLAT) or not(PICS_MULTI_ACCESS_TRAFFIC_STEERING_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_MULTI_ACCESS_TRAFFIC_STEERING_API_SUPPORTED required for executing the TC ***"); setverdict(inconc); stop; } @@ -68,11 +65,9 @@ module AtsMec_MultiAccessSteeringInfoAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - PX_ME_MTS_INFO_URI, + PICS_ROOT_API & PX_ME_MTS_INFO_URI, v_headers - ) - ) - ); + ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -84,7 +79,7 @@ module AtsMec_MultiAccessSteeringInfoAPI_TestCases { mw_http_message_body_json( mw_body_json_mts_capability_info( mw_mts_capability_info - ))))) -> value v_response { + ))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of MtsCapabilityInfo ***"); @@ -101,18 +96,17 @@ module AtsMec_MultiAccessSteeringInfoAPI_TestCases { } // End of testcase TC_MEC_MEC015_SRV_MTS_001_OK /** - * @desc Check that the IUT responds with the list of configured Multi-access Traffic Steering when queried by a MEC Application - * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/MultiAccessTrafficSteering.tplan2 - * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml + * @desc Check that the IUT responds with the list of configured Multi-access Traffic Steering when queried by a MEC Application - none */ - testcase TC_MEC_MEC015_SRV_MTS_002_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC015_SRV_MTS_002_OK_01() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; - var HttpMessage v_response; + var charstring v_mts_session_id_1, v_mts_session_id_2; + var MtsSessionInfo v_mts_session_info_1, v_mts_session_info_2; // Test control - if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); + if (not(PICS_MEC_PLAT) or not(PICS_MULTI_ACCESS_TRAFFIC_STEERING_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_MULTI_ACCESS_TRAFFIC_STEERING_API_SUPPORTED required for executing the TC ***"); setverdict(inconc); stop; } @@ -123,15 +117,89 @@ module AtsMec_MultiAccessSteeringInfoAPI_TestCases { // Test adapter configuration // Preamble + f_create_mts_session_info_resource(PX_APP_INSTANCE_ID, v_mts_session_id_1, v_mts_session_info_1); + f_create_mts_session_info_resource(PX_APP_INSTANCE_ID_2, v_mts_session_id_2, v_mts_session_info_2); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( m_http_request_get( - PX_ME_MTS_SESSIONS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")), + PICS_ROOT_API & PX_ME_MTS_SESSIONS_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_mts_session_info_list( + { + *, + mw_mts_session_info( + v_mts_session_info_1.appInsId, + v_mts_session_info_1.requestType, + -, -, -, + v_mts_session_info_1.sessionId + ), + mw_mts_session_info( + v_mts_session_info_2.appInsId, + v_mts_session_info_2.requestType, + -, -, -, + v_mts_session_info_2.sessionId + ), + * + } + ))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with an MtsSessionInfo 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 + + // Postamble + f_delete_mts_session_info_resource(PX_APP_INSTANCE_ID, v_mts_session_id_1); + f_delete_mts_session_info_resource(PX_APP_INSTANCE_ID_2, v_mts_session_id_2); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC015_SRV_MTS_002_OK_01 + + /** + * @desc Check that the IUT responds with the list of configured Multi-access Traffic Steering when queried by a MEC Application - app_instance_id + */ + testcase TC_MEC_MEC015_SRV_MTS_002_OK_02() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var charstring v_mts_session_id + var MtsSessionInfo v_mts_session_info; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_MULTI_ACCESS_TRAFFIC_STEERING_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_MULTI_ACCESS_TRAFFIC_STEERING_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_mts_session_info_resource(PX_APP_INSTANCE_ID, v_mts_session_id, v_mts_session_info); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_MTS_SESSIONS_URI & "?app_instance_id=" & oct2char(unichar2oct(v_mts_session_info.appInsId, "UTF-8")), + v_headers + ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -141,8 +209,13 @@ module AtsMec_MultiAccessSteeringInfoAPI_TestCases { mw_http_response( mw_http_response_ok( mw_http_message_body_json( - mw_body_json_mts_session_info_list - )))) -> value v_response { + mw_body_json_mts_session_info( + mw_mts_session_info( + v_mts_session_info.appInsId, + v_mts_session_info.requestType, + -, -, -, + v_mts_session_id + )))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with an MtsSessionInfo list ***"); @@ -155,21 +228,146 @@ module AtsMec_MultiAccessSteeringInfoAPI_TestCases { } // End of 'alt' statement // Postamble + f_delete_mts_session_info_resource(PX_APP_INSTANCE_ID, v_mts_session_id); f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC015_SRV_MTS_002_OK + } // End of testcase TC_MEC_MEC015_SRV_MTS_002_OK_02 + + /** + * @desc Check that the IUT responds with the list of configured Multi-access Traffic Steering when queried by a MEC Application - app_name + */ + testcase TC_MEC_MEC015_SRV_MTS_002_OK_03() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var charstring v_mts_session_id + var MtsSessionInfo v_mts_session_info; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_MULTI_ACCESS_TRAFFIC_STEERING_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_MULTI_ACCESS_TRAFFIC_STEERING_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_mts_session_info_resource(PX_APP_INSTANCE_ID, v_mts_session_id, v_mts_session_info); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_MTS_SESSIONS_URI & "?app_name=" & oct2char(unichar2oct(v_mts_session_info.appName, "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_mts_session_info( + mw_mts_session_info( + v_mts_session_info.appInsId, + v_mts_session_info.requestType, + -, -, -, + v_mts_session_id, + v_mts_session_info.appName + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with an MtsSessionInfo 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 + + // Postamble + f_delete_mts_session_info_resource(PX_APP_INSTANCE_ID, v_mts_session_id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC015_SRV_MTS_002_OK_03 + + /** + * @desc Check that the IUT responds with the list of configured Multi-access Traffic Steering when queried by a MEC Application - sessionId + */ + testcase TC_MEC_MEC015_SRV_MTS_002_OK_04() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var charstring v_mts_session_id + var MtsSessionInfo v_mts_session_info; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_MULTI_ACCESS_TRAFFIC_STEERING_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_MULTI_ACCESS_TRAFFIC_STEERING_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_mts_session_info_resource(PX_APP_INSTANCE_ID, v_mts_session_id, v_mts_session_info); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_MTS_SESSIONS_URI & "?session_id=" & oct2char(unichar2oct(v_mts_session_info.sessionId, "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_mts_session_info( + mw_mts_session_info( + v_mts_session_info.appInsId, + v_mts_session_info.requestType, + -, -, -, + v_mts_session_info.sessionId, + v_mts_session_info.appName + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with an MtsSessionInfo 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 + + // Postamble + f_delete_mts_session_info_resource(PX_APP_INSTANCE_ID, v_mts_session_id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC015_SRV_MTS_002_OK_04 /** * @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/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/MultiAccessTrafficSteering.tplan2 - * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml */ testcase TC_MEC_MEC015_SRV_MTS_002_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; // Test control - if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); + if (not(PICS_MEC_PLAT) or not(PICS_MULTI_ACCESS_TRAFFIC_STEERING_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_MULTI_ACCESS_TRAFFIC_STEERING_API_SUPPORTED required for executing the TC ***"); setverdict(inconc); stop; } @@ -184,11 +382,9 @@ module AtsMec_MultiAccessSteeringInfoAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - PX_ME_MTS_SESSIONS_URI & "/app_instance_id=" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")), // 'app_instance_id=' is a wrong parameter + PICS_ROOT_API & PX_ME_MTS_SESSIONS_URI & "?appInsId=" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")), // 'appInsId=' is a wrong parameter v_headers - ) - ) - ); + ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -201,10 +397,10 @@ module AtsMec_MultiAccessSteeringInfoAPI_TestCases { mw_body_json_problem_details( mw_problem_details( -, -, 400 - )))))) { + )))))) { tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error message ***"); + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct error code ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -219,16 +415,16 @@ module AtsMec_MultiAccessSteeringInfoAPI_TestCases { /** * @desc Check that the IUT responds with an error when a request with an unknown resource URI is sent by a MEC Application - * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/MultiAccessTrafficSteering.tplan2 - * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml */ testcase TC_MEC_MEC015_SRV_MTS_002_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; + var charstring v_mts_session_id + var MtsSessionInfo v_mts_session_info; // Test control - if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); + if (not(PICS_MEC_PLAT) or not(PICS_MULTI_ACCESS_TRAFFIC_STEERING_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_MULTI_ACCESS_TRAFFIC_STEERING_API_SUPPORTED required for executing the TC ***"); setverdict(inconc); stop; } @@ -239,15 +435,14 @@ module AtsMec_MultiAccessSteeringInfoAPI_TestCases { // Test adapter configuration // Preamble + f_create_mts_session_info_resource(PX_APP_INSTANCE_ID, v_mts_session_id, v_mts_session_info); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( m_http_request_get( - PX_ME_MTS_SESSIONS_URI & "/" & oct2char(unichar2oct(PX_UNKNOWN_APP_INSTANCE_ID, "UTF-8")), + PICS_ROOT_API & PX_ME_MTS_SESSIONS_URI & "?app_instance_id=" & oct2char(unichar2oct(PX_UNKNOWN_APP_INSTANCE_ID, "UTF-8")), v_headers - ) - ) - ); + ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -259,11 +454,11 @@ module AtsMec_MultiAccessSteeringInfoAPI_TestCases { mw_http_message_body_json( mw_body_json_problem_details( mw_problem_details( - -, -, 404 - )))))) { + -, -, 404 + )))))) { tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error message ***"); + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct error code ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -273,22 +468,22 @@ module AtsMec_MultiAccessSteeringInfoAPI_TestCases { } // End of 'alt' statement // Postamble + f_delete_mts_session_info_resource(PX_APP_INSTANCE_ID, v_mts_session_id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC015_SRV_MTS_002_NF /** - * @desc Check that the IUT responds with a registration and initialisation approval for the requested MTS session requirements sent by a MEC Application - * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/MultiAccessTrafficSteering.tplan2 - * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml + * @desc Check that the IUT creates a MTS session when queried by a MEC Application */ - testcase TC_MEC_MEC015_SRV_MTS_003_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC015_SRV_MTS_003_OK_01() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; + var charstring v_mts_session_id; // Test control - if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); + if (not(PICS_MEC_PLAT) or not(PICS_MULTI_ACCESS_TRAFFIC_STEERING_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_MULTI_ACCESS_TRAFFIC_STEERING_API_SUPPORTED required for executing the TC ***"); setverdict(inconc); stop; } @@ -303,13 +498,13 @@ module AtsMec_MultiAccessSteeringInfoAPI_TestCases { httpPort.send( m_http_request( m_http_request_post( - PX_ME_MTS_SESSIONS_URI, + PICS_ROOT_API & PX_ME_MTS_SESSIONS_URI, v_headers, m_http_message_body_json( m_body_json_mts_session_info( m_mts_session_info( PX_APP_INSTANCE_ID, - APPLICATION_SPECIFIC_MTS_ALLOCATION, // Request type + APPLICATION_SPECIFIC_MTS_SESSION, // Request type m_qosd, // QoS LowCost, // MtsMode Downlink // TrafficDirection @@ -326,16 +521,103 @@ module AtsMec_MultiAccessSteeringInfoAPI_TestCases { mw_body_json_mts_session_info( mw_mts_session_info( PX_APP_INSTANCE_ID - )))))) -> value v_response { + )))))) -> 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 { + var charstring_list v_header_location; + f_get_header(valueof(v_response.response.header), "Location", v_header_location); + v_mts_session_id := regexp( + v_header_location[0], + "?+" & PX_ME_MTS_SESSIONS_URI & "/(?*)", + 0 + ); + log("*** " & testcasename() & ": PASS: IUT successfully responds with a MtsSessionInfo, v_mts_session_id: ", v_mts_session_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 + + // Postamble + f_delete_mts_session_info_resource(PX_APP_INSTANCE_ID, v_mts_session_id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC015_SRV_MTS_003_OK_01 + + /** + * @desc Check that the IUT creates a MTS session when queried by a MEC Application + */ + testcase TC_MEC_MEC015_SRV_MTS_003_OK_02() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var charstring v_mts_session_id; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_MULTI_ACCESS_TRAFFIC_STEERING_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_MULTI_ACCESS_TRAFFIC_STEERING_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_MTS_SESSIONS_URI, + v_headers, + m_http_message_body_json( + m_body_json_mts_session_info( + m_mts_session_info( + PX_APP_INSTANCE_ID, + FLOW_SPECIFIC_MTS_SESSION, // Request type + m_qosd, // QoS + LowCost, // MtsMode + Downlink, // TrafficDirection + -, -, + { m_flow_filter("10.10.10.10", 1010) } // FIXME Use PIXITs + + )))))); + 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_mts_session_info( + mw_mts_session_info( + PX_APP_INSTANCE_ID, + FLOW_SPECIFIC_MTS_SESSION + )))))) -> 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 { - var charstring_list v_mts_session_id; - f_get_header(valueof(v_response.response.header), "Location", v_mts_session_id); - log("*** " & testcasename() & ": PASS: IUT successfully responds with a MtsSessionInfo, MtsSessionInfoId: ", v_mts_session_id[0], " ***"); + var charstring_list v_header_location; + f_get_header(valueof(v_response.response.header), "Location", v_header_location); + v_mts_session_id := regexp( + v_header_location[0], + "?+" & PX_ME_MTS_SESSIONS_URI & "/(?*)", + 0 + ); + log("*** " & testcasename() & ": PASS: IUT successfully responds with a MtsSessionInfo, v_mts_session_id: ", v_mts_session_id, " ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } @@ -346,21 +628,20 @@ module AtsMec_MultiAccessSteeringInfoAPI_TestCases { } // End of 'alt' statement // Postamble + f_delete_mts_session_info_resource(PX_APP_INSTANCE_ID, v_mts_session_id); f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC015_SRV_MTS_003_OK + } // End of testcase TC_MEC_MEC015_SRV_MTS_003_OK_02 /** * @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/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/MultiAccessTrafficSteering.tplan2 - * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml */ testcase TC_MEC_MEC015_SRV_MTS_003_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; // Test control - if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); + if (not(PICS_MEC_PLAT) or not(PICS_MULTI_ACCESS_TRAFFIC_STEERING_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_MULTI_ACCESS_TRAFFIC_STEERING_API_SUPPORTED required for executing the TC ***"); setverdict(inconc); stop; } @@ -375,16 +656,19 @@ module AtsMec_MultiAccessSteeringInfoAPI_TestCases { httpPort.send( m_http_request( m_http_request_post( - PX_ME_MTS_SESSIONS_URI, + PICS_ROOT_API & PX_ME_MTS_SESSIONS_URI, v_headers, m_http_message_body_json( m_body_json_mts_session_info( m_mts_session_info( PX_APP_INSTANCE_ID, - APPLICATION_SPECIFIC_MTS_ALLOCATION, // Request type + APPLICATION_SPECIFIC_MTS_SESSION, // Request type m_qosd, // QoS LowCost, // MtsMode - Downlink // TrafficDirection + Downlink, // TrafficDirection + -, -, + { m_flow_filter("10.10.10.10", 1010) } // // MEC015 Clause 7.2.5 Type: MtsSessionInfo Table 7.2.5-1: Elements of MtsSessionInfo, flowFilter shall be omit + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -393,15 +677,11 @@ module AtsMec_MultiAccessSteeringInfoAPI_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 a correct error message ***"); + + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct error code ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -415,21 +695,17 @@ module AtsMec_MultiAccessSteeringInfoAPI_TestCases { } // End of testcase TC_MEC_MEC015_SRV_MTS_003_BR /** - * @desc Check that the IUT responds with a configured Multi-access Traffic Steering when queried by a MEC Application - * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/MultiAccessTrafficSteering.tplan2 - * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml + * @desc Check that the IUT responds with a configured Multi-access Traffic Steering session when queried by a MEC Application */ testcase TC_MEC_MEC015_SRV_MTS_004_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; - var HttpMessage v_response; var charstring v_mts_session_id; var MtsSessionInfo v_mts_session_info; - var Json.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("001")); // Test control - if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); + if (not(PICS_MEC_PLAT) or not(PICS_MULTI_ACCESS_TRAFFIC_STEERING_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_MULTI_ACCESS_TRAFFIC_STEERING_API_SUPPORTED required for executing the TC ***"); setverdict(inconc); stop; } @@ -440,19 +716,76 @@ module AtsMec_MultiAccessSteeringInfoAPI_TestCases { // Test adapter configuration // Preamble + f_create_mts_session_info_resource(PX_APP_INSTANCE_ID, v_mts_session_id, v_mts_session_info); f_init_default_headers_list(-, -, v_headers); - f_create_mts_session_info_resource(v_app_instance_id, v_mts_session_id, v_mts_session_info); - if (v_mts_session_id == "") { - f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); - } else { - f_selfOrClientSyncAndVerdict(c_prDone, e_success); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_MTS_SESSIONS_URI & "/" & v_mts_session_id, + v_headers + ))); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_mts_session_info( + mw_mts_session_info( + v_mts_session_info.appInsId, + v_mts_session_info.requestType, + -, -, -, + v_mts_session_info.sessionId + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a BwInfo ***"); + 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_mts_session_info_resource(PX_APP_INSTANCE_ID, v_mts_session_id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC015_SRV_MTS_004_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_MEC015_SRV_MTS_004_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var charstring v_mts_session_id; + var MtsSessionInfo v_mts_session_info; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_MULTI_ACCESS_TRAFFIC_STEERING_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_MULTI_ACCESS_TRAFFIC_STEERING_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; } + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_mts_session_info_resource(PX_APP_INSTANCE_ID, v_mts_session_id, v_mts_session_info); + f_init_default_headers_list(-, -, v_headers); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + // Test Body httpPort.send( m_http_request( m_http_request_get( - PX_ME_MTS_SESSIONS_URI & "/" & v_mts_session_id, + PICS_ROOT_API & "mts/v0/mts_sessions/" & PX_UNKNOWN_APP_INSTANCE_ID, // Wrong version number v_headers ) ) @@ -461,16 +794,15 @@ module AtsMec_MultiAccessSteeringInfoAPI_TestCases { alt { [] httpPort.receive( mw_http_response( - mw_http_response_ok( - mw_http_message_body_json( - mw_body_json_bw_info( - mw_bw_info( - PX_APP_INSTANCE_ID - )))))) -> value v_response { + mw_http_response_404_not_found( + mw_http_message_body_json( + mw_body_json_problem_details( + mw_problem_details( + -, -, 404 + )))))) { tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with a BwInfo ***"); - f_delete_mts_session_info_resource(v_app_instance_id, v_mts_session_id); + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct error code ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -480,24 +812,22 @@ module AtsMec_MultiAccessSteeringInfoAPI_TestCases { } // End of 'alt' statement // Postamble + f_delete_mts_session_info_resource(PX_APP_INSTANCE_ID, v_mts_session_id); f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC015_SRV_MTS_004_OK + } // End of testcase TC_MEC_MEC015_SRV_MTS_004_BR /** - * @desc Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application - * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/MultiAccessTrafficSteering.tplan2 - * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml + * @desc Check that the IUT responds with an error when a request with an unknown resource URI is sent by a MEC Application */ testcase TC_MEC_MEC015_SRV_MTS_004_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var charstring v_mts_session_id; var MtsSessionInfo v_mts_session_info; - var Json.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("001")); // Test control - if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); + if (not(PICS_MEC_PLAT) or not(PICS_MULTI_ACCESS_TRAFFIC_STEERING_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_MULTI_ACCESS_TRAFFIC_STEERING_API_SUPPORTED required for executing the TC ***"); setverdict(inconc); stop; } @@ -508,6 +838,7 @@ module AtsMec_MultiAccessSteeringInfoAPI_TestCases { // Test adapter configuration // Preamble + f_create_mts_session_info_resource(PX_APP_INSTANCE_ID, v_mts_session_id, v_mts_session_info); f_init_default_headers_list(-, -, v_headers); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -515,7 +846,7 @@ module AtsMec_MultiAccessSteeringInfoAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - PX_ME_MTS_SESSIONS_URI & "/Unknown_bw_allocation_id", + PICS_ROOT_API & PX_ME_MTS_SESSIONS_URI & "/" & PX_UNKNOWN_APP_INSTANCE_ID, v_headers ) ) @@ -532,7 +863,7 @@ module AtsMec_MultiAccessSteeringInfoAPI_TestCases { )))))) { tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error message ***"); + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct error code ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -542,25 +873,22 @@ module AtsMec_MultiAccessSteeringInfoAPI_TestCases { } // End of 'alt' statement // Postamble + f_delete_mts_session_info_resource(PX_APP_INSTANCE_ID, v_mts_session_id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC015_SRV_MTS_004_NF /** - * @desc - * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/MultiAccessTrafficSteering.tplan2 - * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml + * @desc Check that the IUT updates the information about an individual MTS session when commanded by a MEC Application */ testcase TC_MEC_MEC015_SRV_MTS_005_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; - var HttpMessage v_response; var charstring v_mts_session_id; var MtsSessionInfo v_mts_session_info; - var Json.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("002")); // Test control - if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); + if (not(PICS_MEC_PLAT) or not(PICS_MULTI_ACCESS_TRAFFIC_STEERING_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_MULTI_ACCESS_TRAFFIC_STEERING_API_SUPPORTED required for executing the TC ***"); setverdict(inconc); stop; } @@ -571,47 +899,41 @@ module AtsMec_MultiAccessSteeringInfoAPI_TestCases { // Test adapter configuration // Preamble + f_create_mts_session_info_resource(PX_APP_INSTANCE_ID, v_mts_session_id, v_mts_session_info); f_init_default_headers_list(-, -, v_headers); - f_create_mts_session_info_resource(v_app_instance_id, v_mts_session_id, v_mts_session_info); - if (v_mts_session_id == "") { - f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); - } else { - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - } - - // Test Body httpPort.send( m_http_request( m_http_request_put( - PX_ME_MTS_SESSIONS_URI & "/" & v_mts_session_id, + PICS_ROOT_API & PX_ME_MTS_SESSIONS_URI & "/" & v_mts_session_id, v_headers, m_http_message_body_json( m_body_json_mts_session_info( m_mts_session_info( PX_APP_INSTANCE_ID, - APPLICATION_SPECIFIC_MTS_ALLOCATION, // Request type + APPLICATION_SPECIFIC_MTS_SESSION, // Request type m_qosd_1, // QoS LowCost, // MtsMode Downlink // TrafficDirection )))))); + + // Test Body tc_ac.start; alt { [] httpPort.receive( mw_http_response( - mw_http_response_201_created( - mw_http_message_body_json( - mw_body_json_mts_session_info( - mw_mts_session_info( - PX_APP_INSTANCE_ID, - APPLICATION_SPECIFIC_MTS_ALLOCATION, // Request type - mw_qosd_1, // QoS - LowCost, // MtsMode - Downlink // TrafficDirection - )))))) -> value v_response { + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_mts_session_info( + mw_mts_session_info( + PX_APP_INSTANCE_ID, + APPLICATION_SPECIFIC_MTS_SESSION, // Request type + mw_qosd_1, // QoS + LowCost, // MtsMode + Downlink // TrafficDirection + )))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with an updated MtsSessionInfo ***"); - f_delete_mts_session_info_resource(v_app_instance_id, v_mts_session_id); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -621,24 +943,22 @@ module AtsMec_MultiAccessSteeringInfoAPI_TestCases { } // End of 'alt' statement // Postamble + f_delete_mts_session_info_resource(PX_APP_INSTANCE_ID, v_mts_session_id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC015_SRV_MTS_005_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/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/MultiAccessTrafficSteering.tplan2 - * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml */ testcase TC_MEC_MEC015_SRV_MTS_005_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var charstring v_mts_session_id; var MtsSessionInfo v_mts_session_info; - var Json.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("002")); // Test control - if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); + if (not(PICS_MEC_PLAT) or not(PICS_MULTI_ACCESS_TRAFFIC_STEERING_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_MULTI_ACCESS_TRAFFIC_STEERING_API_SUPPORTED required for executing the TC ***"); setverdict(inconc); stop; } @@ -649,29 +969,24 @@ module AtsMec_MultiAccessSteeringInfoAPI_TestCases { // Test adapter configuration // Preamble + f_create_mts_session_info_resource(PX_APP_INSTANCE_ID, v_mts_session_id, v_mts_session_info); f_init_default_headers_list(-, -, v_headers); - f_create_mts_session_info_resource(v_app_instance_id, v_mts_session_id, v_mts_session_info); - if (v_mts_session_id == "") { - f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); - } else { - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - } - - // Test Body httpPort.send( m_http_request( m_http_request_put( - PX_ME_MTS_SESSIONS_URI & "/" & v_mts_session_id, + PICS_ROOT_API & PX_ME_MTS_SESSIONS_URI & "/" & v_mts_session_id, v_headers, m_http_message_body_json( m_body_json_mts_session_info( - m_mts_session_info( + m_mts_session_info( // MEC015 Clause 7.2.5 Type: MtsSessionInfo Table 7.2.5-1: Elements of MtsSessionInfo, flowFilter shall be omit PX_APP_INSTANCE_ID, - APPLICATION_SPECIFIC_MTS_ALLOCATION, // Request type + FLOW_SPECIFIC_MTS_SESSION, // Request type m_qosd_1, // QoS LowCost, // MtsMode Downlink // TrafficDirection )))))); + + // Test Body tc_ac.start; alt { [] httpPort.receive( @@ -684,8 +999,7 @@ module AtsMec_MultiAccessSteeringInfoAPI_TestCases { )))))) { tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error message ***"); - f_delete_mts_session_info_resource(v_app_instance_id, v_mts_session_id); + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct error code ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -695,22 +1009,20 @@ module AtsMec_MultiAccessSteeringInfoAPI_TestCases { } // End of 'alt' statement // Postamble + f_delete_mts_session_info_resource(PX_APP_INSTANCE_ID, v_mts_session_id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC015_SRV_MTS_005_BR /** - * @desc Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application - * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/MultiAccessTrafficSteering.tplan2 - * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml + * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application */ testcase TC_MEC_MEC015_SRV_MTS_005_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; - var Json.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("003")); // Test control - if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); + if (not(PICS_MEC_PLAT) or not(PICS_MULTI_ACCESS_TRAFFIC_STEERING_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_MULTI_ACCESS_TRAFFIC_STEERING_API_SUPPORTED required for executing the TC ***"); setverdict(inconc); stop; } @@ -728,13 +1040,13 @@ module AtsMec_MultiAccessSteeringInfoAPI_TestCases { httpPort.send( m_http_request( m_http_request_put( - PX_ME_MTS_SESSIONS_URI & "/InvalidAllocationId", + PICS_ROOT_API & PX_ME_MTS_SESSIONS_URI & "/PX_UNKNOWN_APP_INSTANCE_ID", v_headers, m_http_message_body_json( m_body_json_mts_session_info( m_mts_session_info( PX_APP_INSTANCE_ID, - APPLICATION_SPECIFIC_MTS_ALLOCATION, // Request type + APPLICATION_SPECIFIC_MTS_SESSION, // Request type m_qosd_1, // QoS LowCost, // MtsMode Downlink // TrafficDirection @@ -751,7 +1063,7 @@ module AtsMec_MultiAccessSteeringInfoAPI_TestCases { )))))) { tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error message ***"); + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct error code ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -766,19 +1078,16 @@ module AtsMec_MultiAccessSteeringInfoAPI_TestCases { /** * @desc Check that the IUT deregisters a MTS session when commanded by a MEC Application - * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/MultiAccessTrafficSteering.tplan2 - * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml */ testcase TC_MEC_MEC015_SRV_MTS_006_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var charstring v_mts_session_id; var MtsSessionInfo v_mts_session_info; - var Json.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("005")); // Test control - if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); + if (not(PICS_MEC_PLAT) or not(PICS_MULTI_ACCESS_TRAFFIC_STEERING_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_MULTI_ACCESS_TRAFFIC_STEERING_API_SUPPORTED required for executing the TC ***"); setverdict(inconc); stop; } @@ -789,29 +1098,22 @@ module AtsMec_MultiAccessSteeringInfoAPI_TestCases { // Test adapter configuration // Preamble + f_create_mts_session_info_resource(PX_APP_INSTANCE_ID, v_mts_session_id, v_mts_session_info); f_init_default_headers_list(-, -, v_headers); - f_create_mts_session_info_resource(v_app_instance_id, v_mts_session_id, v_mts_session_info); - if (v_mts_session_id == "") { - f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); - } else { - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - } - - // Test Body httpPort.send( m_http_request( m_http_request_delete( - PX_ME_MTS_SESSIONS_URI & "/" & v_mts_session_id, + PICS_ROOT_API & PX_ME_MTS_SESSIONS_URI & "/" & v_mts_session_id, v_headers - ) - ) - ); + ))); + + // 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 to deletion ***"); @@ -828,20 +1130,17 @@ module AtsMec_MultiAccessSteeringInfoAPI_TestCases { } // End of testcase TC_MEC_MEC015_SRV_MTS_006_OK /** - * @desc Check that the IUT responds with an error when commanded by a MEC Application - * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/MultiAccessTrafficSteering.tplan2 - * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml + * @desc Check that the IUT responds with an error when a request with an unknown resource URI is sent by a MEC Application */ - testcase TC_MEC_MEC015_SRV_MTS_006_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC015_SRV_MTS_006_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var charstring v_mts_session_id; var MtsSessionInfo v_mts_session_info; - var Json.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("005")); // Test control - if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); + if (not(PICS_MEC_PLAT) or not(PICS_MULTI_ACCESS_TRAFFIC_STEERING_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_MULTI_ACCESS_TRAFFIC_STEERING_API_SUPPORTED required for executing the TC ***"); setverdict(inconc); stop; } @@ -852,92 +1151,22 @@ module AtsMec_MultiAccessSteeringInfoAPI_TestCases { // Test adapter configuration // Preamble + f_create_mts_session_info_resource(PX_APP_INSTANCE_ID, v_mts_session_id, v_mts_session_info); f_init_default_headers_list(-, -, v_headers); - f_create_mts_session_info_resource(v_app_instance_id, v_mts_session_id, v_mts_session_info); - if (v_mts_session_id == "") { - f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); - } else { - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - } - - // Test Body httpPort.send( m_http_request( m_http_request_delete( - PX_ME_MTS_SESSIONS_URI & "/" & v_mts_session_id, + PICS_ROOT_API & PX_ME_MTS_SESSIONS_URI & "/" & PX_UNKNOWN_APP_INSTANCE_ID, v_headers - ) - ) - ); - tc_ac.start; - alt { - [] httpPort.receive( - mw_http_response( - mw_http_response_400_bad_request - )) { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds to deletion ***"); - 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_MEC015_SRV_MTS_006_BR - - /** - * @desc Check that the IUT deregisters a MTS session when commanded by a MEC Application - * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/MultiAccessTrafficSteering.tplan2 - * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml - */ - testcase TC_MEC_MEC015_SRV_MTS_006_NF() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var charstring v_mts_session_id; - var MtsSessionInfo v_mts_session_info; - var Json.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("005")); - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_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_mts_session_info_resource(v_app_instance_id, v_mts_session_id, v_mts_session_info); - if (v_mts_session_id == "") { - f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); - } else { - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - } + ))); // Test Body - httpPort.send( - m_http_request( - m_http_request_delete( - PX_ME_MTS_SESSIONS_URI & "/" & v_mts_session_id, - v_headers - ) - ) - ); tc_ac.start; alt { [] httpPort.receive( mw_http_response( mw_http_response_404_not_found - )) { + )) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds to deletion ***"); @@ -950,6 +1179,7 @@ module AtsMec_MultiAccessSteeringInfoAPI_TestCases { } // End of 'alt' statement // Postamble + f_delete_mts_session_info_resource(PX_APP_INSTANCE_ID, v_mts_session_id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC015_SRV_MTS_006_NF diff --git a/ttcn/AtsMec_TrafficManagement/AtsMec_TrafficManagementAPI_TestControl.ttcn b/ttcn/AtsMec_TrafficManagement/AtsMec_TrafficManagementAPI_TestControl.ttcn index df71fa7..842fd6f 100644 --- a/ttcn/AtsMec_TrafficManagement/AtsMec_TrafficManagementAPI_TestControl.ttcn +++ b/ttcn/AtsMec_TrafficManagement/AtsMec_TrafficManagementAPI_TestControl.ttcn @@ -41,6 +41,31 @@ module AtsMec_TrafficManagementAPI_TestControl { execute(TC_MEC_MEC015_SRV_TM_006_OK()); execute(TC_MEC_MEC015_SRV_TM_006_NF()); } + if (PICS_MEC_PLAT and PICS_MULTI_ACCESS_TRAFFIC_STEERING_API_SUPPORTED) { + execute(TC_MEC_MEC015_SRV_MTS_001_OK()); + + execute(TC_MEC_MEC015_SRV_MTS_002_OK_01()); + execute(TC_MEC_MEC015_SRV_MTS_002_OK_02()); + execute(TC_MEC_MEC015_SRV_MTS_002_OK_03()); + execute(TC_MEC_MEC015_SRV_MTS_002_OK_04()); + execute(TC_MEC_MEC015_SRV_MTS_002_BR()); + execute(TC_MEC_MEC015_SRV_MTS_002_NF()); + + execute(TC_MEC_MEC015_SRV_MTS_003_OK_01()); + execute(TC_MEC_MEC015_SRV_MTS_003_OK_02()); + execute(TC_MEC_MEC015_SRV_MTS_003_BR()); + + execute(TC_MEC_MEC015_SRV_MTS_004_OK()); + execute(TC_MEC_MEC015_SRV_MTS_004_BR()); + execute(TC_MEC_MEC015_SRV_MTS_004_NF()); + + execute(TC_MEC_MEC015_SRV_MTS_005_OK()); + execute(TC_MEC_MEC015_SRV_MTS_005_BR()); + execute(TC_MEC_MEC015_SRV_MTS_005_NF()); + + execute(TC_MEC_MEC015_SRV_MTS_006_OK()); + execute(TC_MEC_MEC015_SRV_MTS_006_NF()); + } } // End of 'control' statement } // End of module AtsMec_TrafficManagementAPI_TestControl diff --git a/ttcn/AtsMec_V2XInformationService/AtsMec_V2XInformationServiceAPI_TestControl.ttcn b/ttcn/AtsMec_V2XInformationService/AtsMec_V2XInformationServiceAPI_TestControl.ttcn index ee7c702..8561c3f 100644 --- a/ttcn/AtsMec_V2XInformationService/AtsMec_V2XInformationServiceAPI_TestControl.ttcn +++ b/ttcn/AtsMec_V2XInformationService/AtsMec_V2XInformationServiceAPI_TestControl.ttcn @@ -12,6 +12,7 @@ module AtsMec_V2XInformationServiceAPI_TestControl { control { if (PICS_MEC_PLAT and PICS_SERVICES) { + execute(TC_MEC_MEC030_SRV_V2X_001_OK_01()); } } // End of 'control' statement diff --git a/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Functions.ttcn b/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Functions.ttcn index 63f2cf7..c678558 100644 --- a/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Functions.ttcn +++ b/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Functions.ttcn @@ -119,13 +119,13 @@ module TrafficManagementAPI_Functions { httpPort.send( m_http_request( m_http_request_post( - PX_ME_MTS_SESSIONS_URI, + PICS_ROOT_API & PX_ME_MTS_SESSIONS_URI, v_headers, m_http_message_body_json( m_body_json_mts_session_info( m_mts_session_info( PX_APP_INSTANCE_ID, - APPLICATION_SPECIFIC_MTS_ALLOCATION, // Request type + APPLICATION_SPECIFIC_MTS_SESSION, // Request type m_qosd, // QoS LowCost, // MtsMode Downlink // TrafficDirection @@ -158,16 +158,16 @@ module TrafficManagementAPI_Functions { } // End of function f_create_mts_session_info_resource function f_delete_mts_session_info_resource( - in Json.String p_app_instance_id, - in charstring p_mts_session_id - ) runs on HttpComponent { + in Json.String p_app_instance_id, + in charstring p_mts_session_id + ) runs on HttpComponent { var Headers v_headers; f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( m_http_request_delete( - PX_ME_MTS_SESSIONS_URI & "/" & p_mts_session_id, + PICS_ROOT_API & PX_ME_MTS_SESSIONS_URI & "/" & p_mts_session_id, v_headers ))); tc_ac.start; diff --git a/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Pics.ttcn b/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Pics.ttcn index fa8cf88..7250495 100644 --- a/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Pics.ttcn +++ b/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Pics.ttcn @@ -5,4 +5,9 @@ module TrafficManagementAPI_Pics { */ modulepar boolean PICS_BWMANAGEMENT_API_SUPPORTED := true; + /** + * @desc Does the IUT support Multi-access Traffic Steering API? + */ + modulepar boolean PICS_MULTI_ACCESS_TRAFFIC_STEERING_API_SUPPORTED := true; + } // End of module TrafficManagementAPI_Pics diff --git a/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Pixits.ttcn b/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Pixits.ttcn index 2b915be..02851fd 100644 --- a/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Pixits.ttcn +++ b/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Pixits.ttcn @@ -13,6 +13,8 @@ module TrafficManagementAPI_Pixits { modulepar Json.String PX_APP_INSTANCE_ID := "appInst01"; + modulepar Json.String PX_APP_INSTANCE_ID_2 := "appInst02"; + modulepar Json.String PX_APP_ALLOCATION_ID := "appAllocationId01"; modulepar Json.String PX_APP_NAME := "appName01"; diff --git a/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_TypesAndValues.ttcn b/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_TypesAndValues.ttcn index 8ce3821..52fde89 100644 --- a/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_TypesAndValues.ttcn @@ -80,8 +80,8 @@ module TrafficManagementAPI_TypesAndValues { * @see ETSI GS MEC 015 V2.2.1 (2022-12) 7.2.5 Type: MtsSessionInfo */ type enumerated MtsRequestType { - APPLICATION_SPECIFIC_MTS_ALLOCATION (0), - SESSION_SPECIFIC_MTS_ALLOCATION (1) + APPLICATION_SPECIFIC_MTS_SESSION (0), + FLOW_SPECIFIC_MTS_SESSION (1) } with { variant "JSON: as number" } diff --git a/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn b/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn index 397652b..539f67d 100644 --- a/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn +++ b/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn @@ -24,7 +24,7 @@ module LibMec_Pixits { modulepar charstring PX_ME_BWM_URI := "bwm/v1/bw_allocations"; - modulepar charstring PX_ME_MTS_INFO_URI := "mts/v1/mts_info"; + modulepar charstring PX_ME_MTS_INFO_URI := "mts/v1/mts_capability_info"; modulepar charstring PX_ME_MTS_SESSIONS_URI := "mts/v1/mts_sessions"; -- GitLab From 0ea0cc0877395198c27077595eb6bf71f4b47b69 Mon Sep 17 00:00:00 2001 From: garciay Date: Fri, 12 Jan 2024 15:06:22 +0100 Subject: [PATCH 65/99] TTF T027: Start review MEC-030 --- ...ec_V2XInformationServiceAPI_TestCases.ttcn | 4962 +++++++++-------- ..._V2XInformationServiceAPI_TestControl.ttcn | 54 + .../V2XInformationServiceAPI_Functions.ttcn | 194 +- .../ttcn/V2XInformationServiceAPI_Pixits.ttcn | 10 + .../V2XInformationServiceAPI_Templates.ttcn | 110 + ...XInformationServiceAPI_TypesAndValues.ttcn | 4 +- ttcn/LibMec/ttcn/LibMec_Pixits.ttcn | 6 +- .../ttcn/LibHttp_JsonMessageBodyTypes.ttcn | 2 + .../ttcn/LibHttp_JsonTemplates.ttcn | 24 + 9 files changed, 3053 insertions(+), 2313 deletions(-) diff --git a/ttcn/AtsMec_V2XInformationService/AtsMec_V2XInformationServiceAPI_TestCases.ttcn b/ttcn/AtsMec_V2XInformationService/AtsMec_V2XInformationServiceAPI_TestCases.ttcn index 75e8df8..7dc6bc0 100644 --- a/ttcn/AtsMec_V2XInformationService/AtsMec_V2XInformationServiceAPI_TestCases.ttcn +++ b/ttcn/AtsMec_V2XInformationService/AtsMec_V2XInformationServiceAPI_TestCases.ttcn @@ -43,2316 +43,1292 @@ module AtsMec_V2XInformationServiceAPI_TestCases { /** * @desc Check that the IUT responds with a configured provisioning information over Uu unicast when queried by a MEC Application - * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 */ testcase TC_MEC_MEC030_SRV_V2X_001_OK_01() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_V2X_QUERIES_URI & "/uu_unicast_provisioning_info?location_info=" & PX_V2X_ECGI, + v_headers + ))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_uu_unicast_provisioning_info( + mw_uu_unicast_provisioning_info + ))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a UuUnicastProvisioningInfo ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } - - // 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_V2X_QUERIES_URI & "/uu_unicast_provisioning_info?location_info=" & PX_V2X_ECGI, - v_headers - ) - ) - ); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body - tc_ac.start; - alt { - [] httpPort.receive( - mw_http_response( - mw_http_response_ok( - mw_http_message_body_json( - mw_body_json_uu_unicast_provisioning_info( - mw_uu_unicast_provisioning_info - ))))) -> value v_response { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a UuUnicastProvisioningInfo ***"); - f_selfOrClientSyncAndVerdict(c_tbDone, e_success); - } - [] tc_ac.timeout { - log("*** " & testcasename() & ": INCONC: Expected message not received ***"); - f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); - } - } // End of 'alt' statement - - // Postamble - f_cf_01_http_down(); + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC030_SRV_V2X_001_OK_01 /** * @desc Check that the IUT responds with a configured provisioning information over Uu unicast when queried by a MEC Application - * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 */ testcase TC_MEC_MEC030_SRV_V2X_001_OK_02() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_V2X_QUERIES_URI & "/uu_unicast_provisioning_info?location_info=" & PX_V2X_LATITUDE, + v_headers + ))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_uu_unicast_provisioning_info( + mw_uu_unicast_provisioning_info + ))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a UuUnicastProvisioningInfo ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } - - // 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_V2X_QUERIES_URI & "/uu_unicast_provisioning_info?location_info=" & PX_V2X_LATITUDE, - v_headers - ) - ) - ); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body - tc_ac.start; - alt { - [] httpPort.receive( - mw_http_response( - mw_http_response_ok( - mw_http_message_body_json( - mw_body_json_uu_unicast_provisioning_info( - mw_uu_unicast_provisioning_info - ))))) -> value v_response { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a UuUnicastProvisioningInfo ***"); - f_selfOrClientSyncAndVerdict(c_tbDone, e_success); - } - [] tc_ac.timeout { - log("*** " & testcasename() & ": INCONC: Expected message not received ***"); - f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); - } - } // End of 'alt' statement - - // Postamble - f_cf_01_http_down(); + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC030_SRV_V2X_001_OK_02 /** * @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/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 */ testcase TC_MEC_MEC030_SRV_V2X_001_BR() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_V2X_QUERIES_URI & "/invalid_uu_unicast_provisioning_info?location_info=" & PX_V2X_LATITUDE, + 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 correct error message ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } - - // 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_V2X_QUERIES_URI & "/invalid_uu_unicast_provisioning_info?location_info=" & PX_V2X_LATITUDE, - 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 correct error message ***"); - 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(); + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC030_SRV_V2X_001_BR /** * @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/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 */ testcase TC_MEC_MEC030_SRV_V2X_001_NF() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_V2X_QUERIES_URI & "/uu_unicast_provisioning_info?location_info=" & PX_V2X_UNKNOWN_ECGI, + 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 correct error message ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } - - // 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_V2X_QUERIES_URI & "/uu_unicast_provisioning_info?location_info=" & PX_V2X_UNKNOWN_ECGI, - 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 correct error message ***"); - 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(); + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC030_SRV_V2X_001_NF /** - * @desc Check that the IUT responds with a configured provisioning information over Uu mbms when queried by a MEC Application - * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + * @desc Check that the IUT responds with a configured provisioning information over Uu MBMS when queried by a MEC Application */ testcase TC_MEC_MEC030_SRV_V2X_002_OK_01() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_V2X_QUERIES_URI & "/uu_mbms_provisioning_info?location_info=" & PX_V2X_ECGI, + v_headers + ))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_uu_mbms_provisioning_info( + mw_uu_mbms_provisioning_info + ))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a UuMbmsProvisioningInfo ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } - - // 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_V2X_QUERIES_URI & "/uu_mbms_provisioning_info?location_info=" & PX_V2X_ECGI, - v_headers - ) - ) - ); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body - tc_ac.start; - alt { - [] httpPort.receive( - mw_http_response( - mw_http_response_ok( - mw_http_message_body_json( - mw_body_json_uu_mbms_provisioning_info( - mw_uu_mbms_provisioning_info - ))))) -> value v_response { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a UuMbmsProvisioningInfo ***"); - 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(); + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC030_SRV_V2X_002_OK_01 /** - * @desc Check that the IUT responds with a configured provisioning information over Uu mbms when queried by a MEC Application - * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + * @desc Check that the IUT responds with a configured provisioning information over Uu MBMS when queried by a MEC Application */ testcase TC_MEC_MEC030_SRV_V2X_002_OK_02() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_V2X_QUERIES_URI & "/uu_mbms_provisioning_info?location_info=" & PX_V2X_LATITUDE, + v_headers + ))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_uu_mbms_provisioning_info( + mw_uu_mbms_provisioning_info + ))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a UuMbmsProvisioningInfo ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } - - // 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_V2X_QUERIES_URI & "/uu_mbms_provisioning_info?location_info=" & PX_V2X_LATITUDE, - v_headers - ) - ) - ); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body - tc_ac.start; - alt { - [] httpPort.receive( - mw_http_response( - mw_http_response_ok( - mw_http_message_body_json( - mw_body_json_uu_mbms_provisioning_info( - mw_uu_mbms_provisioning_info - ))))) -> value v_response { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a UuMbmsProvisioningInfo ***"); - f_selfOrClientSyncAndVerdict(c_tbDone, e_success); - } - [] tc_ac.timeout { - log("*** " & testcasename() & ": INCONC: Expected message not received ***"); - f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); - } - } // End of 'alt' statement - - // Postamble - f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC030_SRV_V2X_002_OK_02 + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_002_OK_02 /** * @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/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 */ testcase TC_MEC_MEC030_SRV_V2X_002_BR() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_V2X_QUERIES_URI & "/invalid_uu_mbms_provisioning_info?location_info=" & PX_V2X_LATITUDE, + 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 correct error message ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } - - // 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_V2X_QUERIES_URI & "/invalid_uu_mbms_provisioning_info?location_info=" & PX_V2X_LATITUDE, - 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 correct error message ***"); - 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(); + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC030_SRV_V2X_002_BR /** * @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/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 */ testcase TC_MEC_MEC030_SRV_V2X_002_NF() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_V2X_QUERIES_URI & "/uu_mbms_provisioning_info?location_info=" & PX_V2X_UNKNOWN_ECGI, + 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 correct error message ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } - - // 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_V2X_QUERIES_URI & "/uu_mbms_provisioning_info?location_info=" & PX_V2X_UNKNOWN_ECGI, - 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 correct error message ***"); - 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(); + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC030_SRV_V2X_002_NF /** * @desc Check that the IUT responds with a configured provisioning information over PC5 when queried by a MEC Application - * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 */ testcase TC_MEC_MEC030_SRV_V2X_003_OK_01() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_V2X_QUERIES_URI & "/pc5_provisioning_info?location_info=" & PX_V2X_ECGI, + v_headers + ))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_pc5_provisioning_info( + mw_pc5_provisioning_info + ))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a Pc5ProvisioningInfo ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } - - // 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_V2X_QUERIES_URI & "/pc5_provisioning_info?location_info=" & PX_V2X_ECGI, - v_headers - ) - ) - ); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body - tc_ac.start; - alt { - [] httpPort.receive( - mw_http_response( - mw_http_response_ok( - mw_http_message_body_json( - mw_body_json_pc5_provisioning_info( - mw_pc5_provisioning_info - ))))) -> value v_response { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a Pc5ProvisioningInfo ***"); - 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(); + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC030_SRV_V2X_003_OK_01 /** * @desc Check that the IUT responds with a configured provisioning information over PC5 when queried by a MEC Application - * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 */ testcase TC_MEC_MEC030_SRV_V2X_003_OK_02() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_V2X_QUERIES_URI & "/pc5_provisioning_info?location_info=" & PX_V2X_LATITUDE, + 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_pc5_provisioning_info( + mw_pc5_provisioning_info + ))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a Pc5ProvisioningInfo ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } - - // 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_V2X_QUERIES_URI & "/pc5_provisioning_info?location_info=" & PX_V2X_LATITUDE, - 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_pc5_provisioning_info( - mw_pc5_provisioning_info - ))))) -> value v_response { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a Pc5ProvisioningInfo ***"); - 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(); + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC030_SRV_V2X_003_OK_02 /** * @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/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 */ testcase TC_MEC_MEC030_SRV_V2X_003_BR() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_V2X_QUERIES_URI & "/invalid_pc5_provisioning_info?location_info=" & PX_V2X_LATITUDE, + 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 correct error message ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } - - // 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_V2X_QUERIES_URI & "/invalid_pc5_provisioning_info?location_info=" & PX_V2X_LATITUDE, - 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 correct error message ***"); - 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(); + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC030_SRV_V2X_003_BR /** * @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/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 */ testcase TC_MEC_MEC030_SRV_V2X_003_NF() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_V2X_QUERIES_URI & "/pc5_provisioning_info?location_info=" & PX_V2X_UNKNOWN_ECGI, + 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 correct error message ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } - - // 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_V2X_QUERIES_URI & "/pc5_provisioning_info?location_info=" & PX_V2X_UNKNOWN_ECGI, - 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 correct error message ***"); - f_selfOrClientSyncAndVerdict(c_tbDone, e_success); - } - [] tc_ac.timeout { - log("*** " & testcasename() & ": INCONC: Expected message not received ***"); - f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); - } - } // End of 'alt' statement - - // Postamble - f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC030_SRV_V2X_003_NF + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_003_NF /** - * @desc Check that the IUT sends a request about QoS information for a vehicular UE when queried by a MEC Application - * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + * @desc Check that the IUT processes properly a request to information of V2X Message Distribution servers */ testcase TC_MEC_MEC030_SRV_V2X_004_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_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_ME_V2X_URI & "/provide_v2x_msg_distribution_server_info", + v_headers, + m_http_message_body_json( + m_body_json_v2x_msg_distribution_server_info( + m_v2x_msg_distribution_server_info( + m_v2x_msg_distribution_server( + m_info_protocol + ))))))); + 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_v2x_msg_distribution_server_info( + mw_v2x_msg_distribution_server_info( + mw_v2x_msg_distribution_server( + mw_info_protocol, + mw_info_connection + ))))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct connection information ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } - - // 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_V2X_URI & "/provide_predicted_qos", - v_headers, - m_http_message_body_json( - m_body_json_v2x_predicted_qos( - m_predicted_qos( - -, - PX_LOC_GRANULARITY, - m_qos( - { - m_stream({ m_qos_kpi("", ""), m_qos_kpi("", "") }), // FIXME To be refined - m_stream({ m_qos_kpi("", ""), m_qos_kpi("", "") }), - m_stream({ m_qos_kpi("", ""), m_qos_kpi("", "") }) - } - )/*, - { - m_predicted_qos_routes( - { - m_route_info( - m_location_info( - m_ecgi( - PX_CELL_ID, - m_plmn(PX_MCC, PX_MNC) - ), - m_location_info_geo_area(43.72, 10.41) - ), - -, - 128, - 128 - ), - m_route_info( - m_location_info( - m_ecgi( - PX_CELL_ID, - m_plmn(PX_MCC, PX_MNC) - ), - m_location_info_geo_area(43.75, 10.5) - ), - -, - 128, - 128 - ) - } - ) - }*/ - )))))); - 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_v2x_predicted_qos( - mw_predicted_qos( - -, - PX_LOC_GRANULARITY - )))))) -> value v_response { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a PredictedQos ***"); - 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(); + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC030_SRV_V2X_004_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/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + * @desc Check that the IUT processes properly a request to information of V2X Message Distribution servers */ testcase TC_MEC_MEC030_SRV_V2X_004_BR() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_ME_V2X_URI & "/provide_v2x_msg_distribution_server_info", + v_headers, + m_http_message_body_json( + m_body_json_v2x_msg_distribution_server_info( + m_v2x_msg_distribution_server_info( + m_v2x_msg_distribution_server( + m_info_protocol, + m_info_connection( // Wrong field value: Shall only be included in the response + PX_V2X_MSG_DISTRIBUTION_SERVER_IP_ADDRESS, + PX_V2X_MSG_DISTRIBUTION_SERVER_PORT + )))))))); + 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); } - - // 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_V2X_URI & "/provide_predicted_qos", - v_headers, - m_http_message_body_json( - m_body_json_v2x_predicted_qos( - m_predicted_qos( - -, - PX_LOC_GRANULARITY & "InvalidSemantic", - m_qos( - { - m_stream({ m_qos_kpi("", ""), m_qos_kpi("", "") }), // FIXME To be refined - m_stream({ m_qos_kpi("", ""), m_qos_kpi("", "") }), - m_stream({ m_qos_kpi("", ""), m_qos_kpi("", "") }) - } - )/*, - { - m_predicted_qos_routes( - { - m_route_info( - m_location_info( - m_ecgi( - PX_CELL_ID, - m_plmn(PX_MCC, PX_MNC) - ), - m_location_info_geo_area(43.72, 10.41) - ), - -, - 128, - 128 - ), - m_route_info( - m_location_info( - m_ecgi( - PX_CELL_ID, - m_plmn(PX_MCC, PX_MNC) - ), - m_location_info_geo_area(43.75, 10.5) - ), - -, - 128, - 128 - ) - } - ) - }*/ - )))))); - 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_cf_01_http_down(); + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC030_SRV_V2X_004_BR /** - * @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/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + * @desc Check that the IUT processes properly a request to information of V2X Message Distribution servers */ testcase TC_MEC_MEC030_SRV_V2X_004_NF() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_ME_V2X_URI & "/provide_v2x_msg_distribution_server_info", + v_headers, + m_http_message_body_json( + m_body_json_v2x_msg_distribution_server_info( + m_v2x_msg_distribution_server_info( + m_v2x_msg_distribution_server( + m_info_protocol(MQTT_SN) + ))))))); + 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); } - - // 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_V2X_URI & "/provide_predicted_qos", - v_headers, - m_http_message_body_json( - m_body_json_v2x_predicted_qos( - m_predicted_qos( - -, - PX_LOC_GRANULARITY, - m_qos( - { - m_stream({ m_qos_kpi("", ""), m_qos_kpi("", "") }), // FIXME To be refined - m_stream({ m_qos_kpi("", ""), m_qos_kpi("", "") }), - m_stream({ m_qos_kpi("", ""), m_qos_kpi("", "") }) - } - )/*, - { - m_predicted_qos_routes( - { - m_route_info( - m_location_info( - m_ecgi( - PX_UNKNOWN_CELL_ID, - m_plmn(PX_MCC, PX_MNC) - ), - m_location_info_geo_area(43.72, 10.41) - ), - -, - 128, - 128 - ), - m_route_info( - m_location_info( - m_ecgi( - PX_CELL_ID, - m_plmn(PX_UNKNOWN_MCC, PX_UNKNOWN_MNC) - ), - m_location_info_geo_area(43.75, 10.5) - ), - -, - 128, - 128 - ) - } - ) - }*/ - )))))); - 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 - - // Postamble - f_cf_01_http_down(); + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC030_SRV_V2X_004_NF /** - * @desc Check that the IUT processes properly a request to publish a V2X message - * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + * @desc Check that the IUT sends a request about QoS information for a vehicular UE when queried by a MEC Application */ testcase TC_MEC_MEC030_SRV_V2X_005_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_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_ME_V2X_URI & "/provide_predicted_qos", + v_headers, + m_http_message_body_json( + m_body_json_v2x_predicted_qos( + m_predicted_qos( + -, + PX_LOC_GRANULARITY, + m_qos( + { + m_stream({ m_qos_kpi("", ""), m_qos_kpi("", "") }), // FIXME To be refined + m_stream({ m_qos_kpi("", ""), m_qos_kpi("", "") }), + m_stream({ m_qos_kpi("", ""), m_qos_kpi("", "") }) + } + )/*, + { + m_predicted_qos_routes( + { + m_route_info( + m_location_info( + m_ecgi( + PX_CELL_ID, + m_plmn(PX_MCC, PX_MNC) + ), + m_location_info_geo_area(43.72, 10.41) + ), + -, + 128, + 128 + ), + m_route_info( + m_location_info( + m_ecgi( + PX_CELL_ID, + m_plmn(PX_MCC, PX_MNC) + ), + m_location_info_geo_area(43.75, 10.5) + ), + -, + 128, + 128 + ) + } + ) + }*/ + )))))); + 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_v2x_predicted_qos( + mw_predicted_qos( + -, + PX_LOC_GRANULARITY + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a PredictedQos ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } - - // 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_V2X_URI & "/publish_v2x_message", - v_headers, - m_http_message_body_json( - m_body_json_v2x_message( - m_v2x_message( - m_v2x_msg_properties_values( - -, -, -, - m_location_info( - m_ecgi( - PX_CELL_ID, - m_plmn(PX_MCC, PX_MNC) - ), - m_location_info_geo_area(43.72, 10.41) - )))))))); - 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 correct status ***"); - 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(); + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC030_SRV_V2X_005_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/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 */ testcase TC_MEC_MEC030_SRV_V2X_005_BR() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_ME_V2X_URI & "/provide_predicted_qos", + v_headers, + m_http_message_body_json( + m_body_json_v2x_predicted_qos( + m_predicted_qos( + -, + PX_LOC_GRANULARITY & "InvalidSemantic", + m_qos( + { + m_stream({ m_qos_kpi("", ""), m_qos_kpi("", "") }), // FIXME To be refined + m_stream({ m_qos_kpi("", ""), m_qos_kpi("", "") }), + m_stream({ m_qos_kpi("", ""), m_qos_kpi("", "") }) + } + )/*, + { + m_predicted_qos_routes( + { + m_route_info( + m_location_info( + m_ecgi( + PX_CELL_ID, + m_plmn(PX_MCC, PX_MNC) + ), + m_location_info_geo_area(43.72, 10.41) + ), + -, + 128, + 128 + ), + m_route_info( + m_location_info( + m_ecgi( + PX_CELL_ID, + m_plmn(PX_MCC, PX_MNC) + ), + m_location_info_geo_area(43.75, 10.5) + ), + -, + 128, + 128 + ) + } + ) + }*/ + )))))); + 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); } - - // 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_V2X_URI & "/publish_v2x_message", - v_headers, - m_http_message_body_json( - m_body_json_v2x_message( - m_v2x_message( - m_v2x_msg_properties_values( - -, -, -, - m_location_info( - m_ecgi( - PX_CELL_ID, - m_plmn(PX_MCC, PX_MNC) - ), - m_location_info_geo_area(43.72, 10.41) - )), - "UnknownEncodeFormat" - )))))); - 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 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(); + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC030_SRV_V2X_005_BR /** - * @desc Check that the IUT responds with the requested list of subscription when queried by a MEC Application - * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application */ - testcase TC_MEC_MEC030_SRV_V2X_006_OK_01() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; + testcase TC_MEC_MEC030_SRV_V2X_005_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_ME_V2X_URI & "/provide_predicted_qos", + v_headers, + m_http_message_body_json( + m_body_json_v2x_predicted_qos( + m_predicted_qos( + -, + PX_LOC_GRANULARITY, + m_qos( + { + m_stream({ m_qos_kpi("", ""), m_qos_kpi("", "") }), // FIXME To be refined + m_stream({ m_qos_kpi("", ""), m_qos_kpi("", "") }), + m_stream({ m_qos_kpi("", ""), m_qos_kpi("", "") }) + } + )/*, + { + m_predicted_qos_routes( + { + m_route_info( + m_location_info( + m_ecgi( + PX_UNKNOWN_CELL_ID, + m_plmn(PX_MCC, PX_MNC) + ), + m_location_info_geo_area(43.72, 10.41) + ), + -, + 128, + 128 + ), + m_route_info( + m_location_info( + m_ecgi( + PX_CELL_ID, + m_plmn(PX_UNKNOWN_MCC, PX_UNKNOWN_MNC) + ), + m_location_info_geo_area(43.75, 10.5) + ), + -, + 128, + 128 + ) + } + ) + }*/ + )))))); + 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 correct error code ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } - - // 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_V2X_URI & "/subscriptions/prov_chg_uu_uni", - 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_v2x_subscription_link_list - )))) { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of SubscriptionLinks ***"); - f_selfOrClientSyncAndVerdict(c_tbDone, e_success); - } - [] tc_ac.timeout { - log("*** " & testcasename() & ": INCONC: Expected message not received ***"); - f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); - } - } // End of 'alt' statement - - // postamble - f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC030_SRV_V2X_006_OK_01 - - /** - * @desc Check that the IUT responds with the requested list of subscription when queried by a MEC Application - * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 - */ - testcase TC_MEC_MEC030_SRV_V2X_006_OK_02() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } - - // 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_V2X_URI & "/subscriptions/prov_chg_uu_mbms", - 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_v2x_subscription_link_list - )))) { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of SubscriptionLinks ***"); - f_selfOrClientSyncAndVerdict(c_tbDone, e_success); - } - [] tc_ac.timeout { - log("*** " & testcasename() & ": INCONC: Expected message not received ***"); - f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); - } - } // End of 'alt' statement - - // postamble - f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC030_SRV_V2X_006_OK_02 + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_005_NF /** - * @desc Check that the IUT responds with the requested list of subscription when queried by a MEC Application - * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + * @desc Check that the IUT processes properly a request to publish a V2X message */ - testcase TC_MEC_MEC030_SRV_V2X_006_OK_03() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; + testcase TC_MEC_MEC030_SRV_V2X_006_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_ME_V2X_URI & "/publish_v2x_message", + v_headers, + m_http_message_body_json( + m_body_json_v2x_message( + m_v2x_message( + m_v2x_msg_properties_values( + -, -, -, + m_location_info( + m_ecgi( + PX_CELL_ID, + m_plmn(PX_MCC, PX_MNC) + ), + m_location_info_geo_area(43.72, 10.41) // FIXME Use PIXITs + )))))))); + 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 correct status code ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } - - // 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_V2X_URI & "/subscriptions/prov_chg_pc5", - 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_v2x_subscription_link_list - )))) { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of SubscriptionLinks ***"); - f_selfOrClientSyncAndVerdict(c_tbDone, e_success); - } - [] tc_ac.timeout { - log("*** " & testcasename() & ": INCONC: Expected message not received ***"); - f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); - } - } // End of 'alt' statement - - // postamble - f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC030_SRV_V2X_006_OK_03 - - /** - * @desc Check that the IUT responds with the requested list of subscription when queried by a MEC Application - * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 - */ - testcase TC_MEC_MEC030_SRV_V2X_006_OK_04() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } - - // 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_V2X_URI & "/subscriptions/v2x_msg", - 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_v2x_subscription_link_list - )))) { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of SubscriptionLinks ***"); - f_selfOrClientSyncAndVerdict(c_tbDone, e_success); - } - [] tc_ac.timeout { - log("*** " & testcasename() & ": INCONC: Expected message not received ***"); - f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); - } - } // End of 'alt' statement - - // postamble - f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC030_SRV_V2X_006_OK_04 + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_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/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 */ testcase TC_MEC_MEC030_SRV_V2X_006_BR() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_ME_V2X_URI & "/publish_v2x_message", + v_headers, + m_http_message_body_json( + m_body_json_v2x_message( + m_v2x_message( + m_v2x_msg_properties_values( + -, -, -, + m_location_info( + m_ecgi( + PX_CELL_ID, + m_plmn(PX_MCC, PX_MNC) + ), + m_location_info_geo_area(43.72, 10.41) + )), + "UnknownEncodeFormat" + )))))); + 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 correct error code ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } - - // 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_V2X_URI & "/subscriptions/_prov_chg_uu_uni_", // Invalid subscription type - 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 list of SubscriptionLink ***"); - 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(); + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC030_SRV_V2X_006_BR /** - * @desc Check that the IUT responds with the requested to create a subscription - * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + * @desc Check that the IUT responds with the requested list of subscription when queried by a MEC Application - prov_chg_uu_uni */ testcase TC_MEC_MEC030_SRV_V2X_007_OK_01() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; + // Local variables + var Headers v_headers; + var ProvChgUuUniSubscription v_prov_chg_uu_uni_subscription; + var charstring v_subscription_id; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_prov_uu_uni_subscription(v_prov_chg_uu_uni_subscription, v_subscription_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_V2X_URI_SUB & "?subscription_type=prov_chg_uu_uni", + 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_v2x_subscription_link_list + )))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of SubscriptionLinks ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } - - // 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_V2X_URI & "/subscriptions/prov_chg_uu_uni", - v_headers, - m_http_message_body_json( - m_body_json_prov_chg_uu_uni_subscription( - m_prov_chg_uu_uni_subscription( - m_prov_chg_uu_uni_filter_criteria( - m_location_info( - m_ecgi( - PX_CELL_ID,m_plmn(PX_MCC, PX_MNC) - ), - m_location_info_geo_area( - 43.72, - 10.41 - )), - m_v2x_application_server( - oct2char(unichar2oct(PX_V2X_SERVER_IP_ADDRESS, "UTF-8")), - oct2char(unichar2oct(PX_V2X_SERVER_UDP_PORT, "UTF-8")) - )), - PX_PROV_UU_UNI_SUB_CALLBACK - )))))); - 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_prov_chg_uu_uni_subscription( - mw_prov_chg_uu_uni_subscription( - -, - PX_PROV_UU_UNI_SUB_CALLBACK, - ? - )))))) { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully registers 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 - - // postamble - f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC030_SRV_V2X_007_OK_01 - - /** - * @desc Check that the IUT responds with the requested to create a subscription - * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 - */ - testcase TC_MEC_MEC030_SRV_V2X_007_OK_02() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Test adapter configuration - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_post( - PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/prov_chg_uu_mbms", - v_headers, - m_http_message_body_json( - m_body_json_prov_chg_uu_mbms_subscription( - m_prov_chg_uu_mbms_subscription( - m_prov_chg_uu_mbms_filter_criteria( - m_location_info( - m_ecgi( - PX_CELL_ID,m_plmn(PX_MCC, PX_MNC) - ), - m_location_info_geo_area( - 43.72, - 10.41 - )), - m_v2x_server_usd( - { PX_V2X_MBMS_SERVICE_ID }, - m_sdp_info( - PX_V2X_MC_SERVER, - PX_V2X_MC_PORT - ), - m_tmgi( - PX_V2X_SERVICE_AREA_ID, - PX_MCC, - PX_MNC - ))), - PX_PROV_UU_MBMS_SUB_CALLBACK - )))))); - 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_prov_chg_uu_mbms_subscription( - mw_prov_chg_uu_mbms_subscription( - -, - PX_PROV_UU_MBMS_SUB_CALLBACK, - ? - )))))) { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully registers 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 - - // postamble - f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC030_SRV_V2X_007_OK_02 - - /** - * @desc Check that the IUT responds with the requested to create a subscription - * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 - */ - testcase TC_MEC_MEC030_SRV_V2X_007_OK_03() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Test adapter configuration - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_post( - PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/prov_chg_pc5", - v_headers, - m_http_message_body_json( - m_body_json_prov_chg_pc5_subscription( - m_prov_chg_pc5_subscription( - m_filter_criteria( - PX_V2X_DST_LAYER_2_ID, - m_location_info( - m_ecgi( - PX_CELL_ID,m_plmn(PX_MCC, PX_MNC) - ), - m_location_info_geo_area( - 43.72, - 10.41 - ))), - PX_PROV_PC5_SUB_CALLBACK - )))))); - 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_prov_chg_pc5_subscription( - mw_prov_chg_pc5_subscription( - -, - PX_PROV_PC5_SUB_CALLBACK, - ? - )))))) { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully registers 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 - - // postamble - f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC030_SRV_V2X_007_OK_03 - - /** - * @desc Check that the IUT responds with the requested to create a subscription - * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 - */ - testcase TC_MEC_MEC030_SRV_V2X_007_OK_04() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Test adapter configuration - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_post( - PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/V2xMsgSubscription", - v_headers, - m_http_message_body_json( - m_body_json_v2x_msg_subscription( - m_v2x_msg_subscription( - m_v2x_msg_subscription_filter_criteria, - PX_PROV_V2X_SUB_CALLBACK - )))))); - 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_v2x_msg_subscription( - mw_v2x_msg_subscription( - -, - PX_PROV_V2X_SUB_CALLBACK, - ? - )))))) { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully registers 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 - - // postamble - f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC030_SRV_V2X_007_OK_04 - - /** - * @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/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 - */ - testcase TC_MEC_MEC030_SRV_V2X_007_BR() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Test adapter configuration - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_post( - PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/prov_chg_uu_uni", - v_headers, - m_http_message_body_json( - m_body_json_prov_chg_uu_uni_subscription( - m_prov_chg_uu_uni_subscription_invalid( - m_prov_chg_uu_uni_filter_criteria( - m_location_info( - m_ecgi( - PX_CELL_ID,m_plmn(PX_MCC, PX_MNC) - ), - m_location_info_geo_area( - 43.72, - 10.41 - )), - m_v2x_application_server( - oct2char(unichar2oct(PX_V2X_SERVER_IP_ADDRESS, "UTF-8")), - oct2char(unichar2oct(PX_V2X_SERVER_UDP_PORT, "UTF-8")) - )), - PX_PROV_UU_UNI_SUB_CALLBACK - )))))); - 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 registers 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 - - // postamble - f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC030_SRV_V2X_007_BR - - /** - * @desc Check that the IUT responds with the requested of subscription information when queried by a MEC Application - * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 - */ - testcase TC_MEC_MEC030_SRV_V2X_008_OK_01() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - var ProvChgUuUniSubscription v_prov_chg_uu_uni_subscription; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Test adapter configuration - - // Preamble - f_create_prov_uu_uni_subscription(v_prov_chg_uu_uni_subscription); - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_get( - PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & v_prov_chg_uu_uni_subscription.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_prov_chg_uu_uni_subscription( - mw_prov_chg_uu_uni_subscription( - -, - PX_PROV_UU_UNI_SUB_CALLBACK, - ? - )))))) { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully registers 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 - - // postamble - f_delete_prov_uu_uni_subscription(v_prov_chg_uu_uni_subscription); - f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC030_SRV_V2X_008_OK_01 - - /** - * @desc Check that the IUT responds with the requested of subscription information when queried by a MEC Application - * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 - */ - testcase TC_MEC_MEC030_SRV_V2X_008_OK_02() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - var ProvChgUuMbmsSubscription v_prov_chg_uu_mbms_subscription; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Test adapter configuration - - // Preamble - f_create_prov_uu_mbms_subscription(v_prov_chg_uu_mbms_subscription); - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_get( - PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & v_prov_chg_uu_mbms_subscription.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_prov_chg_uu_mbms_subscription( - mw_prov_chg_uu_mbms_subscription( - -, - PX_PROV_UU_MBMS_SUB_CALLBACK, - ? - )))))) { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully registers 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 - - // postamble - f_delete_prov_uu_mbms_subscription(v_prov_chg_uu_mbms_subscription); - f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC030_SRV_V2X_008_OK_02 - - /** - * @desc Check that the IUT responds with the requested of subscription information when queried by a MEC Application - * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 - */ - testcase TC_MEC_MEC030_SRV_V2X_008_OK_03() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - var ProvChgPc5Subscription v_prov_chg_pc5_subscription; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Test adapter configuration - - // Preamble - f_create_prov_pc5_subscription(v_prov_chg_pc5_subscription); - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_get( - PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & v_prov_chg_pc5_subscription.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_prov_chg_pc5_subscription( - mw_prov_chg_pc5_subscription( - -, - PX_PROV_PC5_SUB_CALLBACK, - ? - )))))) { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully registers 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 - - // postamble - f_delete_prov_pc5_subscription(v_prov_chg_pc5_subscription); - f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC030_SRV_V2X_008_OK_03 - - /** - * @desc Check that the IUT responds with the requested of subscription information when queried by a MEC Application - * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 - */ - testcase TC_MEC_MEC030_SRV_V2X_008_OK_04() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - var V2xMsgSubscription v_v2x_msg_subscription; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Test adapter configuration - - // Preamble - f_create_v2x_msg_subscription(v_v2x_msg_subscription); - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_get( - PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & v_v2x_msg_subscription.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_v2x_msg_subscription( - mw_v2x_msg_subscription( - -, - PX_PROV_V2X_SUB_CALLBACK, - ? - )))))) { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully registers 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 - - // postamble - f_delete_v2x_msg_subscription(v_v2x_msg_subscription); - f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC030_SRV_V2X_008_OK_04 - - /** - * @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/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 - */ - testcase TC_MEC_MEC030_SRV_V2X_008_BR() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - var V2xMsgSubscription v_v2x_msg_subscription; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Test adapter configuration - - // Preamble - f_create_v2x_msg_subscription(v_v2x_msg_subscription); - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_get( - PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & v_v2x_msg_subscription.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_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 - - // postamble - f_delete_v2x_msg_subscription(v_v2x_msg_subscription); - f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC030_SRV_V2X_008_BR - - /** - * @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/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 - */ - testcase TC_MEC_MEC030_SRV_V2X_008_NF() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Test adapter configuration - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_get( - PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/invalid_links", - 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 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_MEC030_SRV_V2X_008_NF - - /** - * @desc Check that the IUT responds with the request of updating subscription information when queried by a MEC Application - * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 - */ - testcase TC_MEC_MEC030_SRV_V2X_009_OK_01() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - var ProvChgUuUniSubscription v_prov_chg_uu_uni_subscription; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Test adapter configuration - - // Preamble - f_create_prov_uu_uni_subscription(v_prov_chg_uu_uni_subscription); - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_put( - PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & v_prov_chg_uu_uni_subscription.links.self_.href, - v_headers, - m_http_message_body_json( - m_body_json_prov_chg_uu_uni_subscription( - m_prov_chg_uu_uni_subscription( - m_prov_chg_uu_uni_filter_criteria( - m_location_info( - m_ecgi( - PX_CELL_ID,m_plmn(PX_MCC, PX_MNC) - ), - m_location_info_geo_area( - 43.77, - 10.46 - )), - m_v2x_application_server( - oct2char(unichar2oct(PX_V2X_SERVER_IP_ADDRESS, "UTF-8")), - oct2char(unichar2oct(PX_V2X_SERVER_UDP_PORT, "UTF-8")) - )), - PX_PROV_UU_UNI_SUB_CALLBACK, - v_prov_chg_uu_uni_subscription.links - )))))); - 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_prov_chg_uu_uni_subscription( - mw_prov_chg_uu_uni_subscription( - -, - PX_PROV_UU_UNI_SUB_CALLBACK, - v_prov_chg_uu_uni_subscription.links - )))))) { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully registers 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 - - // postamble - f_delete_prov_uu_uni_subscription(v_prov_chg_uu_uni_subscription); - f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC030_SRV_V2X_009_OK_01 - - /** - * @desc Check that the IUT responds with the request of updating subscription information when queried by a MEC Application - * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 - */ - testcase TC_MEC_MEC030_SRV_V2X_009_OK_02() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - var ProvChgUuMbmsSubscription v_prov_chg_uu_mbms_subscription; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } - - // Test component configuration - f_cf_01_http_up(); - - // Test adapter configuration - - // Preamble - f_create_prov_uu_mbms_subscription(v_prov_chg_uu_mbms_subscription); - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_put( - PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & v_prov_chg_uu_mbms_subscription.links.self_.href, - v_headers, - m_http_message_body_json( - m_body_json_prov_chg_uu_mbms_subscription( - m_prov_chg_uu_mbms_subscription( - m_prov_chg_uu_mbms_filter_criteria( - m_location_info( - m_ecgi( - PX_CELL_ID,m_plmn(PX_MCC, PX_MNC) - ), - m_location_info_geo_area( - 43.77, - 10.46 - )), - m_v2x_server_usd( - { PX_V2X_MBMS_SERVICE_ID }, - m_sdp_info( - PX_V2X_MC_SERVER, - PX_V2X_MC_PORT - ), - m_tmgi( - PX_V2X_SERVICE_AREA_ID, - PX_MCC, - PX_MNC - ))), - PX_PROV_UU_MBMS_SUB_CALLBACK, - v_prov_chg_uu_mbms_subscription.links -)))))); - 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_prov_chg_uu_mbms_subscription( - mw_prov_chg_uu_mbms_subscription( - -, - PX_PROV_UU_MBMS_SUB_CALLBACK, - v_prov_chg_uu_mbms_subscription.links - )))))) { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully registers 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 - - // postamble - f_delete_prov_uu_mbms_subscription(v_prov_chg_uu_mbms_subscription); - f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC030_SRV_V2X_009_OK_02 + } // End of 'alt' statement + + // postamble + f_delete_prov_uu_uni_subscription(v_subscription_id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_007_OK_01 /** - * @desc Check that the IUT responds with the request of updating subscription information when queried by a MEC Application - * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + * @desc Check that the IUT responds with the requested list of subscription when queried by a MEC Application - prov_chg_uu_mbms */ - testcase TC_MEC_MEC030_SRV_V2X_009_OK_03() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC030_SRV_V2X_007_OK_02() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; - var HttpMessage v_response; - var ProvChgPc5Subscription v_prov_chg_pc5_subscription; + var ProvChgUuMbmsSubscription v_prov_chg_uu_mbms_subscription; + var charstring v_subscription_id; // Test control if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; } // Test component configuration @@ -2361,29 +1337,14 @@ module AtsMec_V2XInformationServiceAPI_TestCases { // Test adapter configuration // Preamble - f_create_prov_pc5_subscription(v_prov_chg_pc5_subscription); + f_create_prov_uu_mbms_subscription(v_prov_chg_uu_mbms_subscription, v_subscription_id); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( - m_http_request_put( - PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & v_prov_chg_pc5_subscription.links.self_.href, - v_headers, - m_http_message_body_json( - m_body_json_prov_chg_pc5_subscription( - m_prov_chg_pc5_subscription( - m_filter_criteria( - PX_V2X_DST_LAYER_2_ID, - m_location_info( - m_ecgi( - PX_CELL_ID,m_plmn(PX_MCC, PX_MNC) - ), - m_location_info_geo_area( - 43.77, - 10.46 - ))), - PX_PROV_PC5_SUB_CALLBACK, - v_prov_chg_pc5_subscription.links - )))))); + m_http_request_get( + PICS_ROOT_API & PX_ME_V2X_URI_SUB & "?subscription_type=prov_chg_uu_mbms", + v_headers + ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -2393,15 +1354,11 @@ module AtsMec_V2XInformationServiceAPI_TestCases { mw_http_response( mw_http_response_ok( mw_http_message_body_json( - mw_body_json_prov_chg_pc5_subscription( - mw_prov_chg_pc5_subscription( - -, - PX_PROV_PC5_SUB_CALLBACK, - v_prov_chg_pc5_subscription.links - )))))) { + mw_body_json_v2x_subscription_link_list + )))) { tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully registers subscription ***"); + log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of SubscriptionLinks ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -2411,85 +1368,1540 @@ module AtsMec_V2XInformationServiceAPI_TestCases { } // End of 'alt' statement // postamble - f_delete_prov_pc5_subscription(v_prov_chg_pc5_subscription); + f_delete_prov_uu_mbms_subscription(v_subscription_id); f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC030_SRV_V2X_009_OK_03 + } // End of testcase TC_MEC_MEC030_SRV_V2X_007_OK_02 /** - * @desc Check that the IUT responds with the request of updating subscription information when queried by a MEC Application - * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + * @desc Check that the IUT responds with the requested list of subscription when queried by a MEC Application - prov_chg_pc5 */ - testcase TC_MEC_MEC030_SRV_V2X_009_OK_04() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - var V2xMsgSubscription v_v2x_msg_subscription; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; + testcase TC_MEC_MEC030_SRV_V2X_007_OK_03() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var ProvChgPc5Subscription v_prov_chg_pc5_subscription; + var charstring v_subscription_id; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_prov_pc5_subscription(v_prov_chg_pc5_subscription, v_subscription_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_V2X_URI_SUB & "?subscription_type=prov_chg_pc5", + 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_v2x_subscription_link_list + )))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of SubscriptionLinks ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } - - // Test component configuration - f_cf_01_http_up(); - - // Test adapter configuration - - // Preamble - f_create_v2x_msg_subscription(v_v2x_msg_subscription); - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_put( - PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & v_v2x_msg_subscription.links.self_.href, - v_headers, - m_http_message_body_json( - m_body_json_v2x_msg_subscription( - m_v2x_msg_subscription( - m_v2x_msg_subscription_filter_criteria, - PX_PROV_V2X_SUB_CALLBACK, - v_v2x_msg_subscription.links - )))))); - f_selfOrClientSyncAndVerdict(c_prDone, 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_prov_pc5_subscription(v_subscription_id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_007_OK_03 - // Test Body - tc_ac.start; - alt { - [] httpPort.receive( - mw_http_response( - mw_http_response_ok( - mw_http_message_body_json( - mw_body_json_v2x_msg_subscription( - mw_v2x_msg_subscription( - -, - PX_PROV_V2X_SUB_CALLBACK, - v_v2x_msg_subscription.links - )))))) { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully registers subscription ***"); - f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + /** + * @desc Check that the IUT responds with the requested list of subscription when queried by a MEC Application - v2x_msg + */ + testcase TC_MEC_MEC030_SRV_V2X_007_OK_04() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var V2xMsgSubscription v_v2x_msg_subscription; + var charstring v_subscription_id; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_v2x_msg_subscription(v_v2x_msg_subscription, v_subscription_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_V2X_URI_SUB & "?subscription_type=v2x_msg", + 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_v2x_subscription_link_list + )))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of SubscriptionLinks ***"); + 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_v2x_msg_subscription(v_subscription_id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_007_OK_04 + + /** + * @desc Check that the IUT responds with the requested list of subscription when queried by a MEC Application - pred_qos + */ + testcase TC_MEC_MEC030_SRV_V2X_007_OK_05() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var PredQosSubscription v_pred_qos; + var charstring v_subscription_id; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_pred_qos_subscription(v_pred_qos, v_subscription_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_V2X_URI_SUB & "?subscription_type=pred_qos", + 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_v2x_subscription_link_list + )))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of SubscriptionLinks ***"); + 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_pred_qos_subscription(v_subscription_id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_007_OK_05 + + /** + * @desc Check that the IUT responds with the requested list of subscription when queried by a MEC Application + */ + testcase TC_MEC_MEC030_SRV_V2X_007_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/_prov_chg_uu_uni_", // Invalid subscription type + 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 list of SubscriptionLink ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_007_BR + + /** + * @desc Check that the IUT responds with the requested to create a subscription - ProvChgUuUniSubscription + */ + testcase TC_MEC_MEC030_SRV_V2X_008_OK_01() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var charstring v_subscription_id; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_ME_V2X_URI_SUB, + v_headers, + m_http_message_body_json( + m_body_json_prov_chg_uu_uni_subscription( + m_prov_chg_uu_uni_subscription( + m_prov_chg_uu_uni_filter_criteria( + m_location_info( + m_ecgi( + PX_CELL_ID,m_plmn(PX_MCC, PX_MNC) + ), + m_location_info_geo_area( + 43.72, + 10.41 + )), + m_v2x_application_server( + oct2char(unichar2oct(PX_V2X_SERVER_IP_ADDRESS, "UTF-8")), + oct2char(unichar2oct(PX_V2X_SERVER_UDP_PORT, "UTF-8")) + )), + PX_PROV_UU_UNI_SUB_CALLBACK + )))))); + 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_prov_chg_uu_uni_subscription( + mw_prov_chg_uu_uni_subscription( + -, + PX_PROV_UU_UNI_SUB_CALLBACK, + ? + )))))) { + tc_ac.stop; + + // Check HTTP Location header + if (f_check_headers(v_response.response.header) == false) { + log("*** " & testcasename() & ": FAIL: IUT failed in Area subscription ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_error); + } else { + var charstring_list v_header_location; + f_get_header(v_response.response.header, "Location", v_header_location); + v_subscription_id := regexp( + v_header_location[0], + "?+" & PX_ME_V2X_URI_SUB & "/(?*)", + 0 + ); + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a provChgUuUniSubscription, SubscriptionId: ", v_subscription_id," ***"); } - [] tc_ac.timeout { - log("*** " & testcasename() & ": INCONC: Expected message not received ***"); - 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_delete_prov_uu_uni_subscription(v_subscription_id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_008_OK_01 + + /** + * @desc Check that the IUT responds with the requested to create a subscription - ProvChgUuMbmsSubscription + */ + testcase TC_MEC_MEC030_SRV_V2X_008_OK_02() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var charstring v_subscription_id; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_ME_V2X_URI_SUB, + v_headers, + m_http_message_body_json( + m_body_json_prov_chg_uu_mbms_subscription( + m_prov_chg_uu_mbms_subscription( + m_prov_chg_uu_mbms_filter_criteria( + m_location_info( + m_ecgi( + PX_CELL_ID,m_plmn(PX_MCC, PX_MNC) + ), + m_location_info_geo_area( + 43.72, + 10.41 + )), + m_v2x_server_usd( + { PX_V2X_MBMS_SERVICE_ID }, + m_sdp_info( + PX_V2X_MC_SERVER, + PX_V2X_MC_PORT + ), + m_tmgi( + PX_V2X_SERVICE_AREA_ID, + PX_MCC, + PX_MNC + ))), + PX_PROV_UU_MBMS_SUB_CALLBACK + )))))); + 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_prov_chg_uu_mbms_subscription( + mw_prov_chg_uu_mbms_subscription( + -, + PX_PROV_UU_MBMS_SUB_CALLBACK, + ? + )))))) { + tc_ac.stop; + + // Check HTTP Location header + if (f_check_headers(v_response.response.header) == false) { + log("*** " & testcasename() & ": FAIL: IUT failed in Area subscription ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_error); + } else { + var charstring_list v_header_location; + f_get_header(v_response.response.header, "Location", v_header_location); + v_subscription_id := regexp( + v_header_location[0], + "?+" & PX_ME_V2X_URI_SUB & "/(?*)", + 0 + ); + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a provChgUuMbmsSubscription, SubscriptionId: ", v_subscription_id," ***"); } - } // End of 'alt' statement - - // postamble - f_delete_v2x_msg_subscription(v_v2x_msg_subscription); - f_cf_01_http_down(); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // postamble + f_delete_prov_uu_mbms_subscription(v_subscription_id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_008_OK_02 + + /** + * @desc Check that the IUT responds with the requested to create a subscription - + */ + testcase TC_MEC_MEC030_SRV_V2X_008_OK_03() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var charstring v_subscription_id; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configurationProvChgPc5Subscription + 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_V2X_URI_SUB, + v_headers, + m_http_message_body_json( + m_body_json_prov_chg_pc5_subscription( + m_prov_chg_pc5_subscription( + m_filter_criteria( + PX_V2X_DST_LAYER_2_ID, + m_location_info( + m_ecgi( + PX_CELL_ID,m_plmn(PX_MCC, PX_MNC) + ), + m_location_info_geo_area( + 43.72, + 10.41 + ))), + PX_PROV_PC5_SUB_CALLBACK + )))))); + 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_prov_chg_pc5_subscription( + mw_prov_chg_pc5_subscription( + -, + PX_PROV_PC5_SUB_CALLBACK, + ? + )))))) { + tc_ac.stop; + + // Check HTTP Location header + if (f_check_headers(v_response.response.header) == false) { + log("*** " & testcasename() & ": FAIL: IUT failed in Area subscription ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_error); + } else { + var charstring_list v_header_location; + f_get_header(v_response.response.header, "Location", v_header_location); + v_subscription_id := regexp( + v_header_location[0], + "?+" & PX_ME_V2X_URI_SUB & "/(?*)", + 0 + ); + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a provChgPc5Subscription, SubscriptionId: ", v_subscription_id," ***"); + } + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // postamble + f_delete_prov_pc5_subscription(v_subscription_id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_0078_OK_03 + + /** + * @desc Check that the IUT responds with the requested to create a subscription - V2xMsgSubscription + */ + testcase TC_MEC_MEC030_SRV_V2X_008_OK_04() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var charstring v_subscription_id; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_ME_V2X_URI_SUB, + v_headers, + m_http_message_body_json( + m_body_json_v2x_msg_subscription( + m_v2x_msg_subscription( + m_v2x_msg_subscription_filter_criteria, + PX_PROV_V2X_SUB_CALLBACK + )))))); + 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_v2x_msg_subscription( + mw_v2x_msg_subscription( + -, + PX_PROV_V2X_SUB_CALLBACK, + ? + )))))) { + tc_ac.stop; + + // Check HTTP Location header + if (f_check_headers(v_response.response.header) == false) { + log("*** " & testcasename() & ": FAIL: IUT failed in Area subscription ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_error); + } else { + var charstring_list v_header_location; + f_get_header(v_response.response.header, "Location", v_header_location); + v_subscription_id := regexp( + v_header_location[0], + "?+" & PX_ME_V2X_URI_SUB & "/(?*)", + 0 + ); + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a v2xMsgSubscription, SubscriptionId: ", v_subscription_id," ***"); + } + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // postamble + f_delete_v2x_msg_subscription(v_subscription_id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_008_OK_04 + + /** + * @desc Check that the IUT responds with the requested to create a subscription - PredQosSubscription + */ + testcase TC_MEC_MEC030_SRV_V2X_008_OK_05() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var charstring v_subscription_id; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_ME_V2X_URI_SUB, + v_headers, + m_http_message_body_json( + m_body_json_pred_qos_subscription( + m_pred_qos_subscription( + m_qos_pred_filter_criteria, + PX_PRED_QOS_SUB_CALLBACK + )))))); + 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_pred_qos_subscription( + mw_pred_qos_subscription( + -, + PX_PRED_QOS_SUB_CALLBACK, + ? + )))))) { + tc_ac.stop; + + // Check HTTP Location header + if (f_check_headers(v_response.response.header) == false) { + log("*** " & testcasename() & ": FAIL: IUT failed in Area subscription ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_error); + } else { + var charstring_list v_header_location; + f_get_header(v_response.response.header, "Location", v_header_location); + v_subscription_id := regexp( + v_header_location[0], + "?+" & PX_ME_V2X_URI_SUB & "/(?*)", + 0 + ); + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a predQosSubscription, SubscriptionId: ", v_subscription_id," ***"); + } + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // postamble + f_delete_pred_qos_subscription(v_subscription_id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_008_OK_05 + + /** + * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application + */ + testcase TC_MEC_MEC030_SRV_V2X_008_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_ME_V2X_URI_SUB, + v_headers, + m_http_message_body_json( + m_body_json_prov_chg_uu_uni_subscription( + m_prov_chg_uu_uni_subscription_invalid( + m_prov_chg_uu_uni_filter_criteria( + m_location_info( + m_ecgi( + PX_CELL_ID,m_plmn(PX_MCC, PX_MNC) + ), + m_location_info_geo_area( + 43.72, + 10.41 + )), + m_v2x_application_server( + oct2char(unichar2oct(PX_V2X_SERVER_IP_ADDRESS, "UTF-8")), + oct2char(unichar2oct(PX_V2X_SERVER_UDP_PORT, "UTF-8")) + )), + PX_PROV_UU_UNI_SUB_CALLBACK + )))))); + 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 registers 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 + + // postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_008_BR + + /** + * @desc Check that the IUT responds with the requested of subscription information when queried by a MEC Application - ProvChgUuUniSubscription + */ + testcase TC_MEC_MEC030_SRV_V2X_009_OK_01() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var ProvChgUuUniSubscription v_prov_chg_uu_uni_subscription; + var charstring v_subscription_id; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_prov_uu_uni_subscription(v_prov_chg_uu_uni_subscription, v_subscription_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_V2X_URI_SUB & "/" & v_subscription_id, + 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_prov_chg_uu_uni_subscription( + mw_prov_chg_uu_uni_subscription( + -, + PX_PROV_UU_UNI_SUB_CALLBACK, + ? + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully retrieves the provChgUuUniSubscription ***"); + 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_prov_uu_uni_subscription(v_subscription_id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_009_OK_01 + + /** + * @desc Check that the IUT responds with the requested of subscription information when queried by a MEC Application - ProvChgUuMbmsSubscription + */ + testcase TC_MEC_MEC030_SRV_V2X_009_OK_02() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var ProvChgUuMbmsSubscription v_prov_chg_uu_mbms_subscription; + var charstring v_subscription_id; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_prov_uu_mbms_subscription(v_prov_chg_uu_mbms_subscription, v_subscription_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_V2X_URI_SUB & "/" & v_subscription_id, + 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_prov_chg_uu_mbms_subscription( + mw_prov_chg_uu_mbms_subscription( + -, + PX_PROV_UU_MBMS_SUB_CALLBACK, + ? + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully retrives the provChgUuMbmsSubscription ***"); + 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_prov_uu_mbms_subscription(v_subscription_id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_009_OK_02 + + /** + * @desc Check that the IUT responds with the requested of subscription information when queried by a MEC Application - ProvChgPc5Subscription + */ + testcase TC_MEC_MEC030_SRV_V2X_009_OK_03() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var ProvChgPc5Subscription v_prov_chg_pc5_subscription; + var charstring v_subscription_id; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_prov_pc5_subscription(v_prov_chg_pc5_subscription, v_subscription_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_V2X_URI_SUB & "/" & v_subscription_id, + 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_prov_chg_pc5_subscription( + mw_prov_chg_pc5_subscription( + -, + PX_PROV_PC5_SUB_CALLBACK, + ? + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully retrives the provChgPc5Subscriptions ***"); + 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_prov_pc5_subscription(v_subscription_id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_009_OK_03 + + /** + * @desc Check that the IUT responds with the requested of subscription information when queried by a MEC Application - V2xMsgSubscription + */ + testcase TC_MEC_MEC030_SRV_V2X_009_OK_04() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var V2xMsgSubscription v_v2x_msg_subscription; + var charstring v_subscription_id; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_v2x_msg_subscription(v_v2x_msg_subscription, v_subscription_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_V2X_URI_SUB & "/" & v_subscription_id, + 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_v2x_msg_subscription( + mw_v2x_msg_subscription( + -, + PX_PROV_V2X_SUB_CALLBACK, + ? + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully retrieves the v2xMsgSubscription ***"); + 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_v2x_msg_subscription(v_subscription_id); + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC030_SRV_V2X_009_OK_04 + /** + * @desc Check that the IUT responds with the requested of subscription information when queried by a MEC Application - PredQosSubscription + */ + testcase TC_MEC_MEC030_SRV_V2X_009_OK_05() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var PredQosSubscription v_pred_qos_subscription; + var charstring v_subscription_id; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_pred_qos_subscription(v_pred_qos_subscription, v_subscription_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_V2X_URI_SUB & "/" & v_subscription_id, + 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_pred_qos_subscription( + mw_pred_qos_subscription( + -, + PX_PRED_QOS_SUB_CALLBACK, + ? + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully retrieves the predQosSubscription ***"); + 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_pred_qos_subscription(v_subscription_id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_009_OK_05 + + /** + * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application + */ + testcase TC_MEC_MEC030_SRV_V2X_009_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var V2xMsgSubscription v_v2x_msg_subscription; + var charstring v_subscription_id; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_v2x_msg_subscription(v_v2x_msg_subscription, v_subscription_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & "/vis/v2/subs/" & v_subscription_id, // Wrong URL + 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 + + // postamble + f_delete_v2x_msg_subscription(v_subscription_id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_009_BR + + /** + * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application + */ + testcase TC_MEC_MEC030_SRV_V2X_009_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var V2xMsgSubscription v_v2x_msg_subscription; + var charstring v_subscription_id; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_v2x_msg_subscription(v_v2x_msg_subscription, v_subscription_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_V2X_URI_SUB & "/" & PX_NON_EXISTENT_SUBSCRIPTION_ID, + 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 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_v2x_msg_subscription(v_subscription_id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_009_NF + + /** + * @desc Check that the IUT responds with the requested of updating subscription when queried by a MEC Application - ProvChgUuUniSubscription + */ + testcase TC_MEC_MEC030_SRV_V2X_010_OK_01() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var ProvChgUuUniSubscription v_prov_chg_uu_uni_subscription; + var charstring v_subscription_id; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_prov_uu_uni_subscription(v_prov_chg_uu_uni_subscription, v_subscription_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_put( + PICS_ROOT_API & PX_ME_V2X_URI_SUB & "/" & v_subscription_id, + v_headers, + m_http_message_body_json( + m_body_json_prov_chg_uu_uni_subscription( + m_prov_chg_uu_uni_subscription( + m_prov_chg_uu_uni_filter_criteria( + m_location_info( + m_ecgi( + PX_CELL_ID,m_plmn(PX_MCC, PX_MNC) + ), + m_location_info_geo_area( + 43.77, + 10.46 + )), + m_v2x_application_server( + oct2char(unichar2oct(PX_V2X_SERVER_IP_ADDRESS, "UTF-8")), + oct2char(unichar2oct(PX_V2X_SERVER_UDP_PORT, "UTF-8")) + )), + PX_PROV_UU_UNI_SUB_CALLBACK, + v_prov_chg_uu_uni_subscription.links + )))))); + 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_prov_chg_uu_uni_subscription( + mw_prov_chg_uu_uni_subscription( + -, + PX_PROV_UU_UNI_SUB_CALLBACK, + v_prov_chg_uu_uni_subscription.links + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully updates 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 + + // postamble + f_delete_prov_uu_uni_subscription(v_subscription_id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_010_OK_01 + + /** + * @desc Check that the IUT responds with the requested of updating subscription when queried by a MEC Application - ProvChgUuMbmsSubscription + */ + testcase TC_MEC_MEC030_SRV_V2X_010_OK_02() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var ProvChgUuMbmsSubscription v_prov_chg_uu_mbms_subscription; + var charstring v_subscription_id; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_prov_uu_mbms_subscription(v_prov_chg_uu_mbms_subscription, v_subscription_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_put( + PICS_ROOT_API & PX_ME_V2X_URI_SUB & "/" & v_subscription_id, + v_headers, + m_http_message_body_json( + m_body_json_prov_chg_uu_mbms_subscription( + m_prov_chg_uu_mbms_subscription( + m_prov_chg_uu_mbms_filter_criteria( + m_location_info( + m_ecgi( + PX_CELL_ID,m_plmn(PX_MCC, PX_MNC) + ), + m_location_info_geo_area( + 43.77, + 10.46 + )), + m_v2x_server_usd( + { PX_V2X_MBMS_SERVICE_ID }, + m_sdp_info( + PX_V2X_MC_SERVER, + PX_V2X_MC_PORT + ), + m_tmgi( + PX_V2X_SERVICE_AREA_ID, + PX_MCC, + PX_MNC + ))), + PX_PROV_UU_MBMS_SUB_CALLBACK, + v_prov_chg_uu_mbms_subscription.links + )))))); + 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_prov_chg_uu_mbms_subscription( + mw_prov_chg_uu_mbms_subscription( + -, + PX_PROV_UU_MBMS_SUB_CALLBACK, + v_prov_chg_uu_mbms_subscription.links + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully updates 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 + + // postamble + f_delete_prov_uu_mbms_subscription(v_subscription_id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_010_OK_02 + + /** + * @desc Check that the IUT responds with the requested of updating subscription when queried by a MEC Application - ProvChgPc5Subscription + */ + testcase TC_MEC_MEC030_SRV_V2X_010_OK_03() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var ProvChgPc5Subscription v_prov_chg_pc5_subscription; + var charstring v_subscription_id; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_prov_pc5_subscription(v_prov_chg_pc5_subscription, v_subscription_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_put( + PICS_ROOT_API & PX_ME_V2X_URI_SUB & "/" & v_subscription_id, + v_headers, + m_http_message_body_json( + m_body_json_prov_chg_pc5_subscription( + m_prov_chg_pc5_subscription( + m_filter_criteria( + PX_V2X_DST_LAYER_2_ID, + m_location_info( + m_ecgi( + PX_CELL_ID,m_plmn(PX_MCC, PX_MNC) + ), + m_location_info_geo_area( + 43.77, + 10.46 + ))), + PX_PROV_PC5_SUB_CALLBACK, + v_prov_chg_pc5_subscription.links + )))))); + 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_prov_chg_pc5_subscription( + mw_prov_chg_pc5_subscription( + -, + PX_PROV_PC5_SUB_CALLBACK, + v_prov_chg_pc5_subscription.links + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully updates 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 + + // postamble + f_delete_prov_pc5_subscription(v_subscription_id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_010_OK_03 + + /** + * @desc Check that the IUT responds with the requested of updating subscription when queried by a MEC Application - V2xMsgSubscription + */ + testcase TC_MEC_MEC030_SRV_V2X_010_OK_04() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var V2xMsgSubscription v_v2x_msg_subscription; + var charstring v_subscription_id; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_v2x_msg_subscription(v_v2x_msg_subscription, v_subscription_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_put( + PICS_ROOT_API & PX_ME_V2X_URI_SUB & "/" & v_subscription_id, + v_headers, + m_http_message_body_json( + m_body_json_v2x_msg_subscription( + m_v2x_msg_subscription( + m_v2x_msg_subscription_filter_criteria, + PX_PROV_V2X_SUB_CALLBACK, + v_v2x_msg_subscription.links + )))))); + 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_v2x_msg_subscription( + mw_v2x_msg_subscription( + -, + PX_PROV_V2X_SUB_CALLBACK, + v_v2x_msg_subscription.links + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully updates 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 + + // postamble + f_delete_v2x_msg_subscription(v_subscription_id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_010_OK_04 + + /** + * @desc Check that the IUT responds with the requested of updating subscription when queried by a MEC Application - PredQosSubscription + */ + testcase TC_MEC_MEC030_SRV_V2X_010_OK_05() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var PredQosSubscription v_pred_qos_subscription; + var charstring v_subscription_id; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_pred_qos_subscription(v_pred_qos_subscription, v_subscription_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_put( + PICS_ROOT_API & PX_ME_V2X_URI_SUB & "/" & v_subscription_id, + v_headers, + m_http_message_body_json( + m_body_json_pred_qos_subscription( + m_pred_qos_subscription( + m_qos_pred_filter_criteria, + PX_PRED_QOS_SUB_CALLBACK, + v_pred_qos_subscription.links + )))))); + 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_pred_qos_subscription( + mw_pred_qos_subscription( + -, + PX_PRED_QOS_SUB_CALLBACK, + ? + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully udates the predQosSubscription ***"); + 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_pred_qos_subscription(v_subscription_id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_010_OK_05 + /** * @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/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 */ - testcase TC_MEC_MEC030_SRV_V2X_009_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC030_SRV_V2X_010_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var ProvChgUuUniSubscription v_prov_chg_uu_uni_subscription; @@ -2556,14 +2968,14 @@ module AtsMec_V2XInformationServiceAPI_TestCases { // postamble f_delete_prov_uu_uni_subscription(v_prov_chg_uu_uni_subscription); f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC030_SRV_V2X_009_BR + } // End of testcase TC_MEC_MEC030_SRV_V2X_010_BR /** * @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/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 */ - testcase TC_MEC_MEC030_SRV_V2X_009_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC030_SRV_V2X_010_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var ProvChgUuUniSubscription v_prov_chg_uu_uni_subscription; @@ -2630,14 +3042,14 @@ module AtsMec_V2XInformationServiceAPI_TestCases { // postamble f_delete_prov_uu_uni_subscription(v_prov_chg_uu_uni_subscription); f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC030_SRV_V2X_009_NF + } // End of testcase TC_MEC_MEC030_SRV_V2X_010_NF /** * @desc Check that the IUT responds with the request of removing subscription information when queried by a MEC Application * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 */ - testcase TC_MEC_MEC030_SRV_V2X_010_OK_01() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC030_SRV_V2X_011_OK_01() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -2686,14 +3098,14 @@ module AtsMec_V2XInformationServiceAPI_TestCases { // postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC030_SRV_V2X_010_OK_01 + } // End of testcase TC_MEC_MEC030_SRV_V2X_011_OK_01 /** * @desc Check that the IUT responds with the request of removing subscription information when queried by a MEC Application * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 */ - testcase TC_MEC_MEC030_SRV_V2X_010_OK_02() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC030_SRV_V2X_011_OK_02() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -2742,14 +3154,14 @@ module AtsMec_V2XInformationServiceAPI_TestCases { // postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC030_SRV_V2X_010_OK_02 + } // End of testcase TC_MEC_MEC030_SRV_V2X_011_OK_02 /** * @desc Check that the IUT responds with the request of removing subscription information when queried by a MEC Application * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 */ - testcase TC_MEC_MEC030_SRV_V2X_010_OK_03() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC030_SRV_V2X_011_OK_03() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -2798,14 +3210,14 @@ module AtsMec_V2XInformationServiceAPI_TestCases { // postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC030_SRV_V2X_010_OK_03 + } // End of testcase TC_MEC_MEC030_SRV_V2X_011_OK_03 /** * @desc Check that the IUT responds with the request of removing subscription information when queried by a MEC Application * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 */ - testcase TC_MEC_MEC030_SRV_V2X_010_OK_04() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC030_SRV_V2X_011_OK_04() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -2854,14 +3266,14 @@ module AtsMec_V2XInformationServiceAPI_TestCases { // postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC030_SRV_V2X_010_OK_04 + } // End of testcase TC_MEC_MEC030_SRV_V2X_011_OK_04 /** * @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/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 */ - testcase TC_MEC_MEC030_SRV_V2X_010_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC030_SRV_V2X_011_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var ProvChgUuUniSubscription v_prov_chg_uu_uni_subscription; @@ -2908,7 +3320,7 @@ module AtsMec_V2XInformationServiceAPI_TestCases { // postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC030_SRV_V2X_010_NF + } // End of testcase TC_MEC_MEC030_SRV_V2X_011_NF } // End of group me_app_role diff --git a/ttcn/AtsMec_V2XInformationService/AtsMec_V2XInformationServiceAPI_TestControl.ttcn b/ttcn/AtsMec_V2XInformationService/AtsMec_V2XInformationServiceAPI_TestControl.ttcn index 8561c3f..f8dccdf 100644 --- a/ttcn/AtsMec_V2XInformationService/AtsMec_V2XInformationServiceAPI_TestControl.ttcn +++ b/ttcn/AtsMec_V2XInformationService/AtsMec_V2XInformationServiceAPI_TestControl.ttcn @@ -13,6 +13,60 @@ module AtsMec_V2XInformationServiceAPI_TestControl { if (PICS_MEC_PLAT and PICS_SERVICES) { execute(TC_MEC_MEC030_SRV_V2X_001_OK_01()); + execute(TC_MEC_MEC030_SRV_V2X_001_OK_02()); + execute(TC_MEC_MEC030_SRV_V2X_001_BR()); + execute(TC_MEC_MEC030_SRV_V2X_001_NF()); + + execute(TC_MEC_MEC030_SRV_V2X_002_OK_01()); + execute(TC_MEC_MEC030_SRV_V2X_002_OK_02()); + execute(TC_MEC_MEC030_SRV_V2X_002_BR()); + execute(TC_MEC_MEC030_SRV_V2X_002_NF()); + + execute(TC_MEC_MEC030_SRV_V2X_003_OK_01()); + execute(TC_MEC_MEC030_SRV_V2X_003_OK_02()); + execute(TC_MEC_MEC030_SRV_V2X_003_BR()); + execute(TC_MEC_MEC030_SRV_V2X_003_NF()); + + execute(TC_MEC_MEC030_SRV_V2X_004_OK()); + execute(TC_MEC_MEC030_SRV_V2X_004_BR()); + execute(TC_MEC_MEC030_SRV_V2X_004_NF()); + + execute(TC_MEC_MEC030_SRV_V2X_005_OK()); + execute(TC_MEC_MEC030_SRV_V2X_005_BR()); + execute(TC_MEC_MEC030_SRV_V2X_005_NF()); + + execute(TC_MEC_MEC030_SRV_V2X_006_OK()); + execute(TC_MEC_MEC030_SRV_V2X_006_BR()); + + execute(TC_MEC_MEC030_SRV_V2X_007_OK_01()); + execute(TC_MEC_MEC030_SRV_V2X_007_OK_02()); + execute(TC_MEC_MEC030_SRV_V2X_007_OK_03()); + execute(TC_MEC_MEC030_SRV_V2X_007_OK_04()); + execute(TC_MEC_MEC030_SRV_V2X_007_OK_05()); + execute(TC_MEC_MEC030_SRV_V2X_007_BR()); + + execute(TC_MEC_MEC030_SRV_V2X_008_OK_01()); + execute(TC_MEC_MEC030_SRV_V2X_008_OK_02()); + execute(TC_MEC_MEC030_SRV_V2X_008_OK_03()); + execute(TC_MEC_MEC030_SRV_V2X_008_OK_04()); + execute(TC_MEC_MEC030_SRV_V2X_008_OK_05()); + execute(TC_MEC_MEC030_SRV_V2X_008_BR()); + + execute(TC_MEC_MEC030_SRV_V2X_009_OK_01()); + execute(TC_MEC_MEC030_SRV_V2X_009_OK_02()); + execute(TC_MEC_MEC030_SRV_V2X_009_OK_03()); + execute(TC_MEC_MEC030_SRV_V2X_009_OK_04()); + execute(TC_MEC_MEC030_SRV_V2X_009_OK_05()); + execute(TC_MEC_MEC030_SRV_V2X_009_BR()); + execute(TC_MEC_MEC030_SRV_V2X_009_NF()); + + execute(TC_MEC_MEC030_SRV_V2X_010_OK_01()); + execute(TC_MEC_MEC030_SRV_V2X_010_OK_02()); + execute(TC_MEC_MEC030_SRV_V2X_010_OK_03()); + execute(TC_MEC_MEC030_SRV_V2X_010_OK_04()); + execute(TC_MEC_MEC030_SRV_V2X_010_OK_05()); + execute(TC_MEC_MEC030_SRV_V2X_010_BR()); + execute(TC_MEC_MEC030_SRV_V2X_010_NF()); } } // End of 'control' statement diff --git a/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Functions.ttcn b/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Functions.ttcn index 8953fac..2a9abbb 100644 --- a/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Functions.ttcn +++ b/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Functions.ttcn @@ -38,7 +38,8 @@ module V2XInformationServiceAPI_Functions { import from LibMec_Pixits all; function f_create_prov_uu_uni_subscription( - out ProvChgUuUniSubscription p_prov_chg_uu_uni_subscription + out ProvChgUuUniSubscription p_prov_chg_uu_uni_subscription, + out charstring p_subscription_id ) runs on HttpComponent { var Headers v_headers; var HttpMessage v_response; @@ -47,7 +48,7 @@ module V2XInformationServiceAPI_Functions { httpPort.send( m_http_request( m_http_request_post( - PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/prov_chg_uu_uni", + PICS_ROOT_API & PX_ME_V2X_URI_SUB, v_headers, m_http_message_body_json( m_body_json_prov_chg_uu_uni_subscription( @@ -66,7 +67,7 @@ module V2XInformationServiceAPI_Functions { oct2char(unichar2oct(PX_V2X_SERVER_UDP_PORT, "UTF-8")) )), PX_PROV_UU_UNI_SUB_CALLBACK - )))))); + )))))); tc_ac.start; alt { @@ -79,11 +80,21 @@ module V2XInformationServiceAPI_Functions { -, PX_PROV_UU_UNI_SUB_CALLBACK, ? - )))))) -> value v_response { + )))))) -> value v_response { tc_ac.stop; + // Extract HTTP Location header + var charstring_list v_subscription_id; + f_get_header(v_response.response.header, "Location", v_subscription_id); + // Extract HTTP subssription id + p_subscription_id := regexp( + v_subscription_id[0], + "?+" & PX_ME_V2X_URI_SUB & "/(?*)", + 0 + ); p_prov_chg_uu_uni_subscription := v_response.response.body.json_body.provChgUuUniSubscription; - log("f_create_prov_uu_uni_subscription: IUT successfully registers subscription: ", p_prov_chg_uu_uni_subscription); + log("f_create_prov_uu_uni_subscription: INFO: IUT successfully registers subscription: ", p_prov_chg_uu_uni_subscription); + log("f_create_prov_uu_uni_subscription: INFO: p_subscription_id: ", p_subscription_id); } [] tc_ac.timeout { log("f_create_prov_uu_uni_subscription: Expected message not received"); @@ -93,7 +104,7 @@ module V2XInformationServiceAPI_Functions { } // End of function f_create_prov_uu_uni_subscription function f_delete_prov_uu_uni_subscription( - in ProvChgUuUniSubscription p_prov_chg_uu_uni_subscription + in charstring p_subscription_id ) runs on HttpComponent { var Headers v_headers; @@ -101,16 +112,16 @@ module V2XInformationServiceAPI_Functions { httpPort.send( m_http_request( m_http_request_delete( - PICS_ROOT_API & p_prov_chg_uu_uni_subscription.links.self_.href, + PICS_ROOT_API & PX_ME_V2X_URI_SUB & "/" & p_subscription_id, v_headers - ))); + ))); tc_ac.start; alt { [] httpPort.receive( mw_http_response( mw_http_response_204_no_content - )) { + )) { tc_ac.stop; } [] tc_ac.timeout { @@ -121,7 +132,8 @@ module V2XInformationServiceAPI_Functions { } // End of function f_delete_prov_uu_uni_subscription function f_create_prov_uu_mbms_subscription( - out ProvChgUuMbmsSubscription p_prov_chg_uu_mbms_subscription + out ProvChgUuMbmsSubscription p_prov_chg_uu_mbms_subscription, + out charstring p_subscription_id ) runs on HttpComponent { var Headers v_headers; var HttpMessage v_response; @@ -130,7 +142,7 @@ module V2XInformationServiceAPI_Functions { httpPort.send( m_http_request( m_http_request_post( - PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/prov_chg_uu_mbms", + PICS_ROOT_API & PX_ME_V2X_URI_SUB, v_headers, m_http_message_body_json( m_body_json_prov_chg_uu_mbms_subscription( @@ -157,7 +169,7 @@ module V2XInformationServiceAPI_Functions { ) )), PX_PROV_UU_MBMS_SUB_CALLBACK - )))))); + )))))); tc_ac.start; alt { @@ -173,8 +185,18 @@ module V2XInformationServiceAPI_Functions { )))))) -> value v_response { tc_ac.stop; + // Extract HTTP Location header + var charstring_list v_subscription_id; + f_get_header(v_response.response.header, "Location", v_subscription_id); + // Extract HTTP subssription id + p_subscription_id := regexp( + v_subscription_id[0], + "?+" & PX_ME_V2X_URI_SUB & "/(?*)", + 0 + ); p_prov_chg_uu_mbms_subscription := v_response.response.body.json_body.provChgUuMbmsSubscription; log("f_create_prov_uu_mbms_subscription: IUT successfully registers subscription: ", p_prov_chg_uu_mbms_subscription); + log("f_create_prov_uu_mbms_subscription: INFO: p_subscription_id: ", p_subscription_id); } [] tc_ac.timeout { log("f_create_prov_uu_mbms_subscription: Expected message not received"); @@ -184,15 +206,15 @@ module V2XInformationServiceAPI_Functions { } // End of function f_create_prov_uu_mbms_subscription function f_delete_prov_uu_mbms_subscription( - in ProvChgUuMbmsSubscription p_prov_chg_uu_mbms_subscription - ) runs on HttpComponent { + in charstring p_subscription_id + ) 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_ME_V2X_URI & "/subscriptions/" & p_prov_chg_uu_mbms_subscription.links.self_.href, + PICS_ROOT_API & PX_ME_V2X_URI_SUB & "/" & p_subscription_id, v_headers ))); @@ -201,7 +223,7 @@ module V2XInformationServiceAPI_Functions { [] httpPort.receive( mw_http_response( mw_http_response_204_no_content - )) { + )) { tc_ac.stop; } [] tc_ac.timeout { @@ -212,7 +234,8 @@ module V2XInformationServiceAPI_Functions { } // End of function f_delete_prov_uu_mbms_subscription function f_create_prov_pc5_subscription( - out ProvChgPc5Subscription p_prov_chg_pc5_subscription + out ProvChgPc5Subscription p_prov_chg_pc5_subscription, + out charstring p_subscription_id ) runs on HttpComponent { var Headers v_headers; var HttpMessage v_response; @@ -221,7 +244,7 @@ module V2XInformationServiceAPI_Functions { httpPort.send( m_http_request( m_http_request_post( - PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/prov_chg_pc5", + PICS_ROOT_API & PX_ME_V2X_URI_SUB, v_headers, m_http_message_body_json( m_body_json_prov_chg_pc5_subscription( @@ -237,7 +260,7 @@ module V2XInformationServiceAPI_Functions { 10.41 ))), PX_PROV_PC5_SUB_CALLBACK - )))))); + )))))); tc_ac.start; alt { @@ -250,11 +273,21 @@ module V2XInformationServiceAPI_Functions { -, PX_PROV_PC5_SUB_CALLBACK, ? - )))))) -> value v_response { + )))))) -> value v_response { tc_ac.stop; + // Extract HTTP Location header + var charstring_list v_subscription_id; + f_get_header(v_response.response.header, "Location", v_subscription_id); + // Extract HTTP subssription id + p_subscription_id := regexp( + v_subscription_id[0], + "?+" & PX_ME_V2X_URI_SUB & "/(?*)", + 0 + ); p_prov_chg_pc5_subscription := v_response.response.body.json_body.provChgPc5Subscription; - log("f_create_prov_pc5_subscription: IUT successfully registers subscription: ", p_prov_chg_pc5_subscription); + log("f_create_prov_pc5_subscription: INFO: IUT successfully registers subscription: ", p_prov_chg_pc5_subscription); + log("f_create_prov_pc5_subscription: INFO: p_subscription_id: ", p_subscription_id); } [] tc_ac.timeout { log("f_create_prov_pc5_subscription: Expected message not received"); @@ -264,7 +297,7 @@ module V2XInformationServiceAPI_Functions { } // End of function f_create_prov_pc5_subscription function f_delete_prov_pc5_subscription( - in ProvChgPc5Subscription p_prov_chg_pc5_subscription + in charstring p_subscription_id ) runs on HttpComponent { var Headers v_headers; @@ -272,16 +305,16 @@ module V2XInformationServiceAPI_Functions { httpPort.send( m_http_request( m_http_request_delete( - PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & p_prov_chg_pc5_subscription.links.self_.href, + PICS_ROOT_API & PX_ME_V2X_URI_SUB & "/" & p_subscription_id, v_headers - ))); + ))); tc_ac.start; alt { [] httpPort.receive( mw_http_response( mw_http_response_204_no_content - )) { + )) { tc_ac.stop; } [] tc_ac.timeout { @@ -292,7 +325,8 @@ module V2XInformationServiceAPI_Functions { } // End of function f_delete_prov_pc5_subscription function f_create_v2x_msg_subscription( - out V2xMsgSubscription p_v2x_msg_subscription + out V2xMsgSubscription p_v2x_msg_subscription, + out charstring p_subscription_id ) runs on HttpComponent { var Headers v_headers; var HttpMessage v_response; @@ -301,14 +335,14 @@ module V2XInformationServiceAPI_Functions { httpPort.send( m_http_request( m_http_request_post( - PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/V2xMsgSubscription", + PICS_ROOT_API & PX_ME_V2X_URI_SUB, v_headers, m_http_message_body_json( m_body_json_v2x_msg_subscription( m_v2x_msg_subscription( m_v2x_msg_subscription_filter_criteria, PX_PROV_V2X_SUB_CALLBACK - )))))); + )))))); tc_ac.start; alt { @@ -321,11 +355,21 @@ module V2XInformationServiceAPI_Functions { -, PX_PROV_V2X_SUB_CALLBACK, ? - )))))) -> value v_response { + )))))) -> value v_response { tc_ac.stop; + // Extract HTTP Location header + var charstring_list v_subscription_id; + f_get_header(v_response.response.header, "Location", v_subscription_id); + // Extract HTTP subssription id + p_subscription_id := regexp( + v_subscription_id[0], + "?+" & PX_ME_V2X_URI_SUB & "/(?*)", + 0 + ); p_v2x_msg_subscription := v_response.response.body.json_body.v2xMsgSubscription; - log("f_create_v2x_msg_subscription: IUT successfully registers subscription: ", p_v2x_msg_subscription); + log("f_create_v2x_msg_subscription: INFO: IUT successfully registers subscription: ", p_v2x_msg_subscription); + log("f_create_v2x_msg_subscription: INFO: p_subscription_id: ", p_subscription_id); } [] tc_ac.timeout { log("f_create_v2x_msg_subscription: Expected message not received"); @@ -335,7 +379,7 @@ module V2XInformationServiceAPI_Functions { } // End of function f_create_v2x_msg_subscription function f_delete_v2x_msg_subscription( - in V2xMsgSubscription p_v2x_msg_subscription + in charstring p_subscription_id ) runs on HttpComponent { var Headers v_headers; @@ -343,16 +387,16 @@ module V2XInformationServiceAPI_Functions { httpPort.send( m_http_request( m_http_request_delete( - PICS_ROOT_API & p_v2x_msg_subscription.links.self_.href, + PICS_ROOT_API & PX_ME_V2X_URI_SUB & "/" & p_subscription_id, v_headers - ))); + ))); tc_ac.start; alt { [] httpPort.receive( mw_http_response( mw_http_response_204_no_content - )) { + )) { tc_ac.stop; } [] tc_ac.timeout { @@ -362,4 +406,86 @@ module V2XInformationServiceAPI_Functions { } // End of function f_delete_v2x_msg_subscription + function f_create_pred_qos_subscription( + out PredQosSubscription p_pred_qos_subscription, + out charstring p_subscription_id + ) 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_V2X_URI_SUB, + v_headers, + m_http_message_body_json( + m_body_json_pred_qos_subscription( + m_pred_qos_subscription( + m_qos_pred_filter_criteria, + PX_PRED_QOS_SUB_CALLBACK + )))))); + + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_201_created( + mw_http_message_body_json( + mw_body_json_pred_qos_subscription( + mw_pred_qos_subscription( + -, + PX_PRED_QOS_SUB_CALLBACK, + ? + )))))) -> value v_response { + tc_ac.stop; + + // Extract HTTP Location header + var charstring_list v_subscription_id; + f_get_header(v_response.response.header, "Location", v_subscription_id); + // Extract HTTP subssription id + p_subscription_id := regexp( + v_subscription_id[0], + "?+" & PX_ME_V2X_URI_SUB & "/(?*)", + 0 + ); + p_pred_qos_subscription := v_response.response.body.json_body.predQosSubscription; + log("f_create_pred_qos_subscription: INFO: IUT successfully registers subscription: ", p_pred_qos_subscription); + log("f_create_pred_qos_subscription: INFO: p_subscription_id: ", p_subscription_id); + } + [] tc_ac.timeout { + log("f_create_pred_qos_subscription: Expected message not received"); + } + } // End of 'alt' statement + + } // End of function f_create_pred_qos_subscription + + function f_delete_pred_qos_subscription( + in charstring p_subscription_id + ) 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_ME_V2X_URI_SUB & "/" & p_subscription_id, + 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_pred_qos_subscription: Expected message not received"); + } + } // End of 'alt' statement + + } // End of function f_delete_pred_qos_subscription + } // End of module V2XInformationServiceAPI_Functions diff --git a/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Pixits.ttcn b/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Pixits.ttcn index fb98a4a..0d6601f 100644 --- a/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Pixits.ttcn +++ b/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Pixits.ttcn @@ -26,6 +26,8 @@ module V2XInformationServiceAPI_Pixits { modulepar charstring PX_UNKNOWN_MNC := "796"; + modulepar charstring PX_NON_EXISTENT_SUBSCRIPTION_ID := "subscription0666"; + modulepar Json.AnyURI PX_PROV_UU_UNI_SUB_CALLBACK := ""; modulepar Json.AnyURI PX_PROV_UU_MBMS_SUB_CALLBACK := ""; @@ -34,6 +36,8 @@ module V2XInformationServiceAPI_Pixits { modulepar Json.AnyURI PX_PROV_V2X_SUB_CALLBACK := ""; + modulepar Json.AnyURI PX_PRED_QOS_SUB_CALLBACK := ""; + modulepar charstring PX_V2X_SERVER_IP_ADDRESS := ""; modulepar charstring PX_V2X_SERVER_UDP_PORT := ""; @@ -48,4 +52,10 @@ module V2XInformationServiceAPI_Pixits { modulepar charstring PX_V2X_DST_LAYER_2_ID := ""; + modulepar charstring PX_PROT_IMPLEMENTATION := ""; + + modulepar Json.String PX_V2X_MSG_DISTRIBUTION_SERVER_IP_ADDRESS := "10.8.0.1"; + + modulepar Json.UInt16 PX_V2X_MSG_DISTRIBUTION_SERVER_PORT := 12345; + } // End of module V2XInformationServiceAPI_Pixits diff --git a/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Templates.ttcn b/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Templates.ttcn index 72e6485..63a5bb4 100644 --- a/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Templates.ttcn +++ b/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Templates.ttcn @@ -71,6 +71,70 @@ module V2XInformationServiceAPI_Templates { proInfoPc5 := p_proInfoPc5 } // End of template mw_pc5_provisioning_info + template (omit) V2xMsgDistributionServerInfo m_v2x_msg_distribution_server_info( + in template (value) V2xMsgDistributionServer p_v2xMsgDistributionServer, + in template (omit) LocationInfo p_locationInfo := omit + ) := { + v2xMsgDistributionServer := p_v2xMsgDistributionServer, + locationInfo := p_locationInfo + } // End of template m_v2x_msg_distribution_server_info + + template (present) V2xMsgDistributionServerInfo mw_v2x_msg_distribution_server_info( + template (present) V2xMsgDistributionServer p_v2xMsgDistributionServer := ?, + template LocationInfo p_locationInfo := * + ) := { + v2xMsgDistributionServer := p_v2xMsgDistributionServer, + locationInfo := p_locationInfo + } // End of template mw_v2x_msg_distribution_server_info + + template (omit) V2xMsgDistributionServer m_v2x_msg_distribution_server( + in template (value) InfoProtocol p_infoProtocol, + in template (omit) InfoConnection p_infoConnection := omit + ) := { + infoProtocol := p_infoProtocol, + infoConnection := p_infoConnection + } // End of template m_v2x_msg_distribution_server + + template (present) V2xMsgDistributionServer mw_v2x_msg_distribution_server( + template (present) InfoProtocol p_infoProtocol := ?, + template InfoConnection p_infoConnection := * + ) := { + infoProtocol := p_infoProtocol, + infoConnection := p_infoConnection + } // End of template mw_v2x_msg_distribution_server + + template (value) InfoProtocol m_info_protocol( + in MsgProtocol p_msgProtocol := MQTT_v3_1_1, + in Json.String p_protImplementation := PX_PROT_IMPLEMENTATION + ) := { + msgProtocol := p_msgProtocol, + protImplementation := p_protImplementation + } // End of template m_info_protocol + + template (present) InfoProtocol mw_info_protocol( + template (present) MsgProtocol p_msgProtocol := MQTT_v3_1_1, + template (present) Json.String p_protImplementation := PX_PROT_IMPLEMENTATION + ) := { + msgProtocol := p_msgProtocol, + protImplementation := p_protImplementation + } // End of template mw_info_protocol + + template (value) InfoConnection m_info_connection( + in Json.String p_ipAddress, + in Json.UInt16 p_port_number + ) := { + ipAddress := p_ipAddress, + port_number := p_port_number + } // End of template m_info_connection + + template (present) InfoConnection mw_info_connection( + template (present) Json.String p_ipAddress := ?, + template (present) Json.UInt16 p_port_number := ? + ) := { + ipAddress := p_ipAddress, + port_number := p_port_number + } // End of template mw_info_connection + template (omit) PredictedQos m_predicted_qos( in template (value) PredictionTarget p_predictionTarget := E2E_APPLICATION_INSTANCE_PREDICTION, in template (value) Json.String p_locationGranularity, @@ -582,4 +646,50 @@ module V2XInformationServiceAPI_Templates { locationInfo := p_locationInfo } // End of template mw_v2x_msg_subscription_filter_criteria + template (omit) PredQosSubscription m_pred_qos_subscription( + in template (value) QosPredFilterCriteria p_filterCriteria, + in template (omit) Json.AnyURI p_callbackReference := omit, + in template (omit) Links p_links := omit, + in template (omit) Json.Bool p_requestTestNotification := omit, + in template (omit) WebsockNotifConfig p_websockNotifConfig := omit, + in template (omit) TimeStamp p_expiryDeadline := omit + ) := { + subscriptionType := "PredQosSubscription", + callbackReference := p_callbackReference, + requestTestNotification := p_requestTestNotification, + websockNotifConfig := p_websockNotifConfig, + links := p_links, + filterCriteria := p_filterCriteria, + expiryDeadline := p_expiryDeadline + } // End of template m_pred_qos_subscription + + template (present) PredQosSubscription mw_pred_qos_subscription( + template (present) QosPredFilterCriteria p_filterCriteria := ?, + template Json.AnyURI p_callbackReference := *, + template Links p_links := *, + template Json.Bool p_requestTestNotification := *, + template WebsockNotifConfig p_websockNotifConfig := *, + template TimeStamp p_expiryDeadline := * + ) := { + subscriptionType := "PredQosSubscription", + callbackReference := p_callbackReference, + requestTestNotification := p_requestTestNotification, + websockNotifConfig := p_websockNotifConfig, + links := p_links, + filterCriteria := p_filterCriteria, + expiryDeadline := p_expiryDeadline + } // End of template mw_pred_qos_subscription + + template (omit) QosPredFilterCriteria m_qos_pred_filter_criteria( + in template (omit) Json.String p_streamId := omit + ) := { + streamId := p_streamId + } // End of template m_filterCriteria + + template QosPredFilterCriteria mw_qos_pred_filter_criteria( + template Json.String p_streamId := * + ) := { + streamId := p_streamId + } // End of template mw_filterCriteria + } // End of module V2XInformationServiceAPI_Templates diff --git a/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_TypesAndValues.ttcn b/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_TypesAndValues.ttcn index 3521625..b39391d 100644 --- a/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_TypesAndValues.ttcn @@ -798,7 +798,7 @@ module V2XInformationServiceAPI_TypesAndValues { /** * @desc Specifics of the application layer protocol of V2X Message Distribution Server * @member msgProtocol Numerical value corresponding to the application layer protocol supported by the service consumer - * @member Implementation specifics of application layer protocol, e.g. programming language + * @member protImplementation Implementation specifics of application layer protocol, e.g. programming language * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.5.16-1: Attributes of the V2xMsgDistributionServer */ type record InfoProtocol { @@ -837,7 +837,7 @@ module V2XInformationServiceAPI_TypesAndValues { * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.5.17-1: Attributes of the QosPredFilterCriteria */ type record QosPredFilterCriteria { - Json.String streamId + Json.String streamId optional } /** diff --git a/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn b/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn index 539f67d..7aa9929 100644 --- a/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn +++ b/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn @@ -36,9 +36,11 @@ module LibMec_Pixits { modulepar charstring PX_ME_WLAN_URI_MEAS := "wai/v2/measurements"; - modulepar charstring PX_ME_V2X_URI := "vis/v1"; + modulepar charstring PX_ME_V2X_URI := "vis/v2"; - modulepar charstring PX_ME_V2X_QUERIES_URI := "/vis/v1/queries"; + modulepar charstring PX_ME_V2X_URI_SUB := "vis/v2/subscriptions"; + + modulepar charstring PX_ME_V2X_QUERIES_URI := "vis/v2/queries"; modulepar charstring PX_ME_DEVICE_APP_URI := "dev_app/v1"; diff --git a/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn b/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn index 957ee15..24c1189 100644 --- a/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn +++ b/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn @@ -154,7 +154,9 @@ module LibHttp_JsonMessageBodyTypes { ProvChgUuUniSubscription provChgUuUniSubscription, ProvChgUuMbmsSubscription provChgUuMbmsSubscription, ProvChgPc5Subscription provChgPc5Subscription, + V2xMsgDistributionServerInfo v2xMsgDistributionServerInfo, // ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.2.5-1: Attributes of the V2xMsgDistributionServerInfo V2xMsgSubscription v2xMsgSubscription, + PredQosSubscription predQosSubscription, // ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.3.6-1: Attributes of the PredQosSubscription ProvChgUuUniNotification provChgUuUniNotification, ProvChgUuMbmsNotification provChgUuMbmsNotification, ProvChgPc5Notification provChgPc5Notification, diff --git a/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn b/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn index b504dd6..3f31307 100644 --- a/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn +++ b/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn @@ -1358,6 +1358,18 @@ module LibHttp_JsonTemplates { provChgPc5Subscription := p_provChgPc5Subscription } // End of template mw_body_json_prov_pc5_subscription + template (value) JsonBody m_body_json_v2x_msg_distribution_server_info( + in template (value) V2xMsgDistributionServerInfo p_v2xMsgDistributionServerInfo + ) := { + v2xMsgDistributionServerInfo := p_v2xMsgDistributionServerInfo + } // End of template m_body_json_v2x_msg_distribution_server_info + + template (present) JsonBody mw_body_json_v2x_msg_distribution_server_info( + template (present) V2xMsgDistributionServerInfo p_v2xMsgDistributionServerInfo := ? + ) := { + v2xMsgDistributionServerInfo := p_v2xMsgDistributionServerInfo + } // End of template mw_body_json_v2x_msg_distribution_server_info + template (value) JsonBody m_body_json_v2x_msg_subscription( in template (value) V2xMsgSubscription p_v2xMsgSubscription ) := { @@ -1370,6 +1382,18 @@ module LibHttp_JsonTemplates { v2xMsgSubscription := p_v2xMsgSubscription } // End of template mw_body_json_v2x_msg_subscription + template (value) JsonBody m_body_json_pred_qos_subscription( + in template (value) PredQosSubscription p_predQosSubscription + ) := { + predQosSubscription := p_predQosSubscription + } // End of template m_body_json_pred_qos_subscription + + template (present) JsonBody mw_body_json_pred_qos_subscription( + template (present) PredQosSubscription p_predQosSubscription := ? + ) := { + predQosSubscription := p_predQosSubscription + } // End of template mw_body_json_pred_qos_subscription + template (value) JsonBody m_body_json_prov_chg_uu_uni_notification( in template (value) ProvChgUuUniNotification p_provChgUuUniNotification ) := { -- GitLab From 4940e0792a3f6e6c3e6a5495feccd0bf03a9628d Mon Sep 17 00:00:00 2001 From: garciay Date: Sun, 14 Jan 2024 16:00:10 +0100 Subject: [PATCH 66/99] TTF T027: Start review MEC-030 --- config.mk | 2 +- ...ec_V2XInformationServiceAPI_TestCases.ttcn | 817 +++++++++--------- ..._V2XInformationServiceAPI_TestControl.ttcn | 7 + 3 files changed, 440 insertions(+), 386 deletions(-) diff --git a/config.mk b/config.mk index d5d4014..b8bb114 100644 --- a/config.mk +++ b/config.mk @@ -1,5 +1,5 @@ TTCN3_COMPILER_OPTIONS := -b -d -e -f -g -l -L -M -n -O -r -R -U none -x -X -TTCN3_DIR := $(HOME)/frameworks/titan/titan.core/Install +#TTCN3_DIR := $(HOME)/frameworks/titan/titan.core/Install #WPCAP_DLL_PATH := /cygdrive/c/windows/system32/npcap/wpcap.dll #NPCAP_INCLUDE := /cygdrive/c/PROGRA~1/Npcap/sdk/include T3Q_PATH=./tools/t3q-v2.0.0b30 diff --git a/ttcn/AtsMec_V2XInformationService/AtsMec_V2XInformationServiceAPI_TestCases.ttcn b/ttcn/AtsMec_V2XInformationService/AtsMec_V2XInformationServiceAPI_TestCases.ttcn index 7dc6bc0..c698320 100644 --- a/ttcn/AtsMec_V2XInformationService/AtsMec_V2XInformationServiceAPI_TestCases.ttcn +++ b/ttcn/AtsMec_V2XInformationService/AtsMec_V2XInformationServiceAPI_TestCases.ttcn @@ -2897,429 +2897,476 @@ module AtsMec_V2XInformationServiceAPI_TestCases { } // End of testcase TC_MEC_MEC030_SRV_V2X_010_OK_05 /** - * @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/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + * @desc Check that the IUT responds with the requested of updating subscription when queried by a MEC Application */ testcase TC_MEC_MEC030_SRV_V2X_010_BR() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var ProvChgUuUniSubscription v_prov_chg_uu_uni_subscription; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Test adapter configuration - - // Preamble - f_create_prov_uu_uni_subscription(v_prov_chg_uu_uni_subscription); - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_put( - PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & v_prov_chg_uu_uni_subscription.links.self_.href, - v_headers, - m_http_message_body_json( - m_body_json_prov_chg_uu_uni_subscription( - m_prov_chg_uu_uni_subscription_invalid( - m_prov_chg_uu_uni_filter_criteria( - m_location_info( - m_ecgi( - PX_CELL_ID,m_plmn(PX_MCC, PX_MNC) - ), - m_location_info_geo_area( - 43.72, - 10.41 - )), - m_v2x_application_server( - oct2char(unichar2oct(PX_V2X_SERVER_IP_ADDRESS, "UTF-8")), - oct2char(unichar2oct(PX_V2X_SERVER_UDP_PORT, "UTF-8")) - )), - PX_PROV_UU_UNI_SUB_CALLBACK, - v_prov_chg_uu_uni_subscription.links - )))))); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); + // Local variables + var Headers v_headers; + var ProvChgUuUniSubscription v_prov_chg_uu_uni_subscription; + var charstring v_subscription_id; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_prov_uu_uni_subscription(v_prov_chg_uu_uni_subscription, v_subscription_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_put( + PICS_ROOT_API & PX_ME_V2X_URI_SUB & "/" & v_subscription_id, + v_headers, + m_http_message_body_json( + m_body_json_prov_chg_uu_uni_subscription( + m_prov_chg_uu_uni_subscription_invalid( + m_prov_chg_uu_uni_filter_criteria( + m_location_info( + m_ecgi( + PX_CELL_ID,m_plmn(PX_MCC, PX_MNC) + ), + m_location_info_geo_area( + 43.72, + 10.41 + )), + m_v2x_application_server( + oct2char(unichar2oct(PX_V2X_SERVER_IP_ADDRESS, "UTF-8")), + oct2char(unichar2oct(PX_V2X_SERVER_UDP_PORT, "UTF-8")) + )), + PX_PROV_UU_UNI_SUB_CALLBACK, + v_prov_chg_uu_uni_subscription.links + )))))); + 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 - - // postamble - f_delete_prov_uu_uni_subscription(v_prov_chg_uu_uni_subscription); - f_cf_01_http_down(); + // 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_delete_prov_uu_uni_subscription(v_subscription_id); + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC030_SRV_V2X_010_BR /** - * @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/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + * @desc Check that the IUT responds with the requested of updating subscription when queried by a MEC Application */ testcase TC_MEC_MEC030_SRV_V2X_010_NF() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var ProvChgUuUniSubscription v_prov_chg_uu_uni_subscription; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; + // Local variables + var Headers v_headers; + var ProvChgUuUniSubscription v_prov_chg_uu_uni_subscription; + var charstring v_subscription_id; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_prov_uu_uni_subscription(v_prov_chg_uu_uni_subscription, v_subscription_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_put( + PICS_ROOT_API & PX_ME_V2X_URI_SUB & "/" & PX_NON_EXISTENT_SUBSCRIPTION_ID, + v_headers, + m_http_message_body_json( + m_body_json_prov_chg_uu_uni_subscription( + m_prov_chg_uu_uni_subscription_invalid( + m_prov_chg_uu_uni_filter_criteria( + m_location_info( + m_ecgi( + PX_CELL_ID,m_plmn(PX_MCC, PX_MNC) + ), + m_location_info_geo_area( + 43.72, + 10.41 + )), + m_v2x_application_server( + oct2char(unichar2oct(PX_V2X_SERVER_IP_ADDRESS, "UTF-8")), + oct2char(unichar2oct(PX_V2X_SERVER_UDP_PORT, "UTF-8")) + )), + PX_PROV_UU_UNI_SUB_CALLBACK, + v_prov_chg_uu_uni_subscription.links + )))))); + 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 correct error code ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } - - // Test component configuration - f_cf_01_http_up(); - - // Test adapter configuration - - // Preamble - f_create_prov_uu_uni_subscription(v_prov_chg_uu_uni_subscription); - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_put( - PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/invalid_links", - v_headers, - m_http_message_body_json( - m_body_json_prov_chg_uu_uni_subscription( - m_prov_chg_uu_uni_subscription_invalid( - m_prov_chg_uu_uni_filter_criteria( - m_location_info( - m_ecgi( - PX_CELL_ID,m_plmn(PX_MCC, PX_MNC) - ), - m_location_info_geo_area( - 43.72, - 10.41 - )), - m_v2x_application_server( - oct2char(unichar2oct(PX_V2X_SERVER_IP_ADDRESS, "UTF-8")), - oct2char(unichar2oct(PX_V2X_SERVER_UDP_PORT, "UTF-8")) - )), - PX_PROV_UU_UNI_SUB_CALLBACK, - v_prov_chg_uu_uni_subscription.links - )))))); - 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 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_prov_uu_uni_subscription(v_prov_chg_uu_uni_subscription); - f_cf_01_http_down(); + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // postamble + f_delete_prov_uu_uni_subscription(v_subscription_id); + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC030_SRV_V2X_010_NF /** - * @desc Check that the IUT responds with the request of removing subscription information when queried by a MEC Application - * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + * @desc Check that the IUT responds with the requested of removing subscription when queried by a MEC Application - ProvChgUuUniSubscription */ testcase TC_MEC_MEC030_SRV_V2X_011_OK_01() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - var ProvChgUuUniSubscription v_prov_chg_uu_uni_subscription; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var ProvChgUuUniSubscription v_prov_chg_uu_uni_subscription; + var charstring v_subscription_id; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_prov_uu_uni_subscription(v_prov_chg_uu_uni_subscription, v_subscription_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & PX_ME_V2X_URI_SUB & "/" & v_subscription_id, + 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 removes subscription ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } - - // Test component configuration - f_cf_01_http_up(); - - // Test adapter configuration - - // Preamble - f_create_prov_uu_uni_subscription(v_prov_chg_uu_uni_subscription); - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_delete( - PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & v_prov_chg_uu_uni_subscription.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 removes 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 - - // postamble - f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC030_SRV_V2X_011_OK_01 + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_011_OK_01 /** - * @desc Check that the IUT responds with the request of removing subscription information when queried by a MEC Application - * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + * @desc Check that the IUT responds with the requested of removing subscription when queried by a MEC Application - ProvChgUuMbmsSubscription */ testcase TC_MEC_MEC030_SRV_V2X_011_OK_02() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - var ProvChgUuMbmsSubscription v_prov_chg_uu_mbms_subscription; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Test adapter configuration - - // Preamble - f_create_prov_uu_mbms_subscription(v_prov_chg_uu_mbms_subscription); - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_delete( - PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & v_prov_chg_uu_mbms_subscription.links.self_.href, - v_headers - ))); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var ProvChgUuMbmsSubscription v_prov_chg_uu_mbms_subscription; + var charstring v_subscription_id; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_prov_uu_mbms_subscription(v_prov_chg_uu_mbms_subscription, v_subscription_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & PX_ME_V2X_URI_SUB & "/" & v_subscription_id, + 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 removes 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 - - // postamble - f_cf_01_http_down(); + // 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 removes 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 + + // postamble + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC030_SRV_V2X_011_OK_02 /** - * @desc Check that the IUT responds with the request of removing subscription information when queried by a MEC Application - * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + * @desc Check that the IUT responds with the requested of removing subscription when queried by a MEC Application - ProvChgPc5Subscription */ testcase TC_MEC_MEC030_SRV_V2X_011_OK_03() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - var ProvChgPc5Subscription v_prov_chg_pc5_subscription; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Test adapter configuration - - // Preamble - f_create_prov_pc5_subscription(v_prov_chg_pc5_subscription); - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_delete( - PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & v_prov_chg_pc5_subscription.links.self_.href, - v_headers - ))); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var ProvChgPc5Subscription v_prov_chg_pc5_subscription; + var charstring v_subscription_id; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_prov_pc5_subscription(v_prov_chg_pc5_subscription, v_subscription_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & PX_ME_V2X_URI_SUB & "/" & v_subscription_id, + 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 removes 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 - - // postamble - f_cf_01_http_down(); + // 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 removes 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 + + // postamble + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC030_SRV_V2X_011_OK_03 /** - * @desc Check that the IUT responds with the request of removing subscription information when queried by a MEC Application - * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + * @desc Check that the IUT responds with the requested of removing subscription when queried by a MEC Application - V2xMsgSubscription */ testcase TC_MEC_MEC030_SRV_V2X_011_OK_04() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - var V2xMsgSubscription v_v2x_msg_subscription; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Test adapter configuration - - // Preamble - f_create_v2x_msg_subscription(v_v2x_msg_subscription); - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_delete( - PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & v_v2x_msg_subscription.links.self_.href, - v_headers - ))); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var V2xMsgSubscription v_v2x_msg_subscription; + var charstring v_subscription_id; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_v2x_msg_subscription(v_v2x_msg_subscription, v_subscription_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & PX_ME_V2X_URI_SUB & "/" & v_subscription_id, + 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 registers 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 - - // postamble - f_cf_01_http_down(); + // 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 removes 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 + + // postamble + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC030_SRV_V2X_011_OK_04 /** - * @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/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml - * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + * @desc Check that the IUT responds with the requested of removing subscription when queried by a MEC Application - PredQosSubscription + */ + testcase TC_MEC_MEC030_SRV_V2X_011_OK_05() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var PredQosSubscription v_pred_qos_subscription; + var charstring v_subscription_id; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_pred_qos_subscription(v_pred_qos_subscription, v_subscription_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & PX_ME_V2X_URI_SUB & "/" & v_subscription_id, + 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 removes 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 + + // postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_011_OK_05 + + /** + * @desc Check that the IUT responds with the requested of removing subscription when queried by a MEC Application */ testcase TC_MEC_MEC030_SRV_V2X_011_NF() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var ProvChgUuUniSubscription v_prov_chg_uu_uni_subscription; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; + // Local variables + var Headers v_headers; + var ProvChgUuUniSubscription v_prov_chg_uu_uni_subscription; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & PX_ME_V2X_URI_SUB & "/" & PX_NON_EXISTENT_SUBSCRIPTION_ID, + 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 correct error code ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } - - // 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_V2X_URI & "/subscriptions/invalid_links", - 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 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(); + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // postamble + f_cf_01_http_down(); } // End of testcase TC_MEC_MEC030_SRV_V2X_011_NF } // End of group me_app_role diff --git a/ttcn/AtsMec_V2XInformationService/AtsMec_V2XInformationServiceAPI_TestControl.ttcn b/ttcn/AtsMec_V2XInformationService/AtsMec_V2XInformationServiceAPI_TestControl.ttcn index f8dccdf..0bbe65b 100644 --- a/ttcn/AtsMec_V2XInformationService/AtsMec_V2XInformationServiceAPI_TestControl.ttcn +++ b/ttcn/AtsMec_V2XInformationService/AtsMec_V2XInformationServiceAPI_TestControl.ttcn @@ -67,6 +67,13 @@ module AtsMec_V2XInformationServiceAPI_TestControl { execute(TC_MEC_MEC030_SRV_V2X_010_OK_05()); execute(TC_MEC_MEC030_SRV_V2X_010_BR()); execute(TC_MEC_MEC030_SRV_V2X_010_NF()); + + execute(TC_MEC_MEC030_SRV_V2X_011_OK_01()); + execute(TC_MEC_MEC030_SRV_V2X_011_OK_02()); + execute(TC_MEC_MEC030_SRV_V2X_011_OK_03()); + execute(TC_MEC_MEC030_SRV_V2X_011_OK_04()); + execute(TC_MEC_MEC030_SRV_V2X_011_OK_05()); + execute(TC_MEC_MEC030_SRV_V2X_011_NF()); } } // End of 'control' statement -- GitLab From 4620d04f9804f31534586297d0e732bc9e253ba7 Mon Sep 17 00:00:00 2001 From: garciay Date: Mon, 5 Feb 2024 18:26:03 +0100 Subject: [PATCH 67/99] TTF T027: Finalyze review MEC-030 & MEC-029 --- ...AccessInformationServiceAPI_TestCases.ttcn | 1485 ++++++++--------- ...cessInformationServiceAPI_TestControl.ttcn | 40 +- .../AtsMec_WlanInformationAPI_TestCases.ttcn | 20 +- .../module.mk | 1 + ...AccessInformationServiceAPI_Functions.ttcn | 342 ++++ ...xedAccessInformationServiceAPI_Pixits.ttcn | 14 +- ...AccessInformationServiceAPI_Templates.ttcn | 174 +- ...sInformationServiceAPI_TypesAndValues.ttcn | 14 +- ttcn/LibMec/ttcn/LibMec_Pixits.ttcn | 10 +- .../ttcn/LibHttp_JsonMessageBodyTypes.ttcn | 3 + .../ttcn/LibHttp_JsonTemplates.ttcn | 48 +- 11 files changed, 1322 insertions(+), 829 deletions(-) create mode 100644 ttcn/LibMec/FixedAccessInformationServiceAPI/ttcn/FixedAccessInformationServiceAPI_Functions.ttcn diff --git a/ttcn/AtsMec_FixedAccessInformationService/AtsMec_FixedAccessInformationServiceAPI_TestCases.ttcn b/ttcn/AtsMec_FixedAccessInformationService/AtsMec_FixedAccessInformationServiceAPI_TestCases.ttcn index 1d9036f..9a328e8 100644 --- a/ttcn/AtsMec_FixedAccessInformationService/AtsMec_FixedAccessInformationServiceAPI_TestCases.ttcn +++ b/ttcn/AtsMec_FixedAccessInformationService/AtsMec_FixedAccessInformationServiceAPI_TestCases.ttcn @@ -7,64 +7,64 @@ * 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 029 V2.1.1 + * @see ETSI GS MEC 003, ETSI GS MEC 029 V2.2.1 */ module AtsMec_FixedAccessInformationServiceAPI_TestCases { - + // Libcommon import from LibCommon_Time all; import from LibCommon_VerdictControl all; import from LibCommon_Sync all; - + // LibHttp import from LibHttp_TypesAndValues all; import from LibHttp_Functions all; import from LibHttp_Templates all; import from LibHttp_JsonTemplates all; import from LibHttp_TestSystem all; - + // LibMec_FixedAccessInformationServiceAPI + import from FixedAccessInformationServiceAPI_TypesAndValues all; import from FixedAccessInformationServiceAPI_Templates all; + import from FixedAccessInformationServiceAPI_Functions all; import from FixedAccessInformationServiceAPI_Pics all; import from FixedAccessInformationServiceAPI_Pixits all; - + // LibMec + import from LibMec_Templates all; import from LibMec_Functions all; import from LibMec_Pics all; import from LibMec_Pixits all; - + /* * Fixed Access Information Service (FAIS) */ group fixedAccessInfoService { - + /** * @desc Check that the IUT responds with the current status of the fixed access information when queried by a MEC Application */ - testcase TP_MEC_MEC029_SRV_FAIS_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_FAI_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FAI_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; - } + testcase TC_MEC_MEC029_SRV_FAIS_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_FAI_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FAI_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } // Preamble f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( - m_http_request_get( + m_http_request_get( PX_FAI_FA_INFO_URI, v_headers - ) - ) - ); + ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); - + // Test Body tc_ac.start; alt { @@ -74,9 +74,9 @@ module AtsMec_FixedAccessInformationServiceAPI_TestCases { mw_http_message_body_json( mw_body_json_fai_fa_info( mw_fa_info - ))))) { + ))))) { tc_ac.stop; - + log("*** " & testcasename() & ": PASS: IUT successfully responds with a FaInfo ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } @@ -85,82 +85,79 @@ module AtsMec_FixedAccessInformationServiceAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + // Postamble f_cf_01_http_down(); - } // End of testcase TP_MEC_MEC029_SRV_FAIS_001_OK - + } // End of testcase TC_MEC_MEC029_SRV_FAIS_001_OK + /** * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application */ - testcase TP_MEC_MEC029_SRV_FAIS_001_BR() 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_FAI_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FAI_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Test adapter configuration - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_get( - PX_FAI_FA_INFO_URI & "?interface=1", - 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 - )) { + testcase TC_MEC_MEC029_SRV_FAIS_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_FAI_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FAI_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PX_FAI_FA_INFO_URI & "?if=1", + 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 ProblemDetails set to 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 TP_MEC_MEC029_SRV_FAIS_001_BR - + } // End of testcase TC_MEC_MEC029_SRV_FAIS_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 */ - testcase TP_MEC_MEC029_SRV_FAIS_001_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC029_SRV_FAIS_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_FAI_API_SUPPORTED)) { log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FAI_API_SUPPORTED required for executing the TC ***"); setverdict(inconc); stop; } - + // Test component configuration f_cf_01_http_up(); - + // Test adapter configuration // Preamble @@ -168,22 +165,20 @@ module AtsMec_FixedAccessInformationServiceAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - "/" & PICS_ROOT_API & PX_FAI_FA_INFO_URI & "?interface=999", + PICS_ROOT_API & PX_FAI_FA_INFO_URI & "?interface=666", v_headers - ) - ) - ); + ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); - + // Test Body tc_ac.start; alt { [] httpPort.receive( mw_http_response( - mw_http_response_404_not_found() - )) { + mw_http_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); } @@ -192,43 +187,40 @@ module AtsMec_FixedAccessInformationServiceAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + // Postamble f_cf_01_http_down(); - } // End of testcase TP_MEC_MEC029_SRV_FAIS_001_NF - + } // End of testcase TC_MEC_MEC029_SRV_FAIS_001_NF + /** * @desc Check that the IUT responds with the current status of the device information when queried by a MEC Application */ - testcase TP_MEC_MEC029_SRV_FAIS_002_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_FAI_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FAI_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; - } - + testcase TC_MEC_MEC029_SRV_FAIS_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_FAI_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FAI_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_FAI_DEVICE_INFO_URI, - v_headers - ) - ) - ); + m_http_request_get( + PICS_ROOT_API & PX_FAI_DEVICE_INFO_URI, + v_headers + ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); - + // Test Body tc_ac.start; alt { @@ -238,9 +230,9 @@ module AtsMec_FixedAccessInformationServiceAPI_TestCases { mw_http_message_body_json( mw_body_json_fai_device_info( mw_device_info - ))))) { + ))))) { tc_ac.stop; - + log("*** " & testcasename() & ": PASS: IUT successfully responds with a DeviceInfo ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } @@ -249,53 +241,50 @@ module AtsMec_FixedAccessInformationServiceAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + // Postamble f_cf_01_http_down(); - } // End of testcase TP_MEC_MEC029_SRV_FAIS_002_OK - + } // End of testcase TC_MEC_MEC029_SRV_FAIS_002_OK + /** * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application */ - testcase TP_MEC_MEC029_SRV_FAIS_002_BR() 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_FAI_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FAI_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; - } - + testcase TC_MEC_MEC029_SRV_FAIS_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_FAI_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FAI_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_FAI_DEVICE_INFO_URI & "?device=__any_value__", - v_headers - ) - ) - ); + m_http_request_get( + PICS_ROOT_API & PX_FAI_DEVICE_INFO_URI & "?dev=__any_value__", + 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 400 Bad Request ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } @@ -304,28 +293,28 @@ module AtsMec_FixedAccessInformationServiceAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + // Postamble f_cf_01_http_down(); - } // End of testcase TP_MEC_MEC029_SRV_FAIS_002_BR - + } // End of testcase TC_MEC_MEC029_SRV_FAIS_002_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 */ - testcase TP_MEC_MEC029_SRV_FAIS_002_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC029_SRV_FAIS_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_FAI_API_SUPPORTED)) { log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FAI_API_SUPPORTED required for executing the TC ***"); setverdict(inconc); stop; } - + // Test component configuration f_cf_01_http_up(); - + // Test adapter configuration // Preamble @@ -333,22 +322,20 @@ module AtsMec_FixedAccessInformationServiceAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - "/" & PICS_ROOT_API & PX_FAI_DEVICE_INFO_URI & "?gwId=" & oct2char(unichar2oct(PX_NON_EXISTING_FAI_GW_ID[0], "UTF-8")), + PICS_ROOT_API & PX_FAI_DEVICE_INFO_URI & "?gwId=" & oct2char(unichar2oct(PX_NON_EXISTING_FAI_GW_ID[0], "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 ProblemDetails set to 404 Not Found ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } @@ -357,56 +344,53 @@ module AtsMec_FixedAccessInformationServiceAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + // Postamble f_cf_01_http_down(); - } // End of testcase TP_MEC_MEC029_SRV_FAIS_002_NF + } // End of testcase TC_MEC_MEC029_SRV_FAIS_002_NF /** * @desc CCheck that the IUT responds with the current status of the cable line information when queried by a MEC Application */ - testcase TP_MEC_MEC029_SRV_FAIS_003_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_FAI_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FAI_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; - } - + testcase TC_MEC_MEC029_SRV_FAIS_003_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_FAI_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FAI_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_FAI_CABLE_LINE_INFO_URI, + PICS_ROOT_API & PX_FAI_CABLE_LINE_INFO_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_fai_cable_line_info( - mw_cable_line_info - ))))) { - + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_fai_cable_line_info( + mw_cable_line_info + ))))) { + tc_ac.stop; - + log("*** " & testcasename() & ": PASS: IUT successfully responds with a CableLineInfo ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } @@ -415,53 +399,50 @@ module AtsMec_FixedAccessInformationServiceAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + // Postamble f_cf_01_http_down(); - } // End of testcase TP_MEC_MEC029_SRV_FAIS_003_OK - + } // End of testcase TC_MEC_MEC029_SRV_FAIS_003_OK + /** * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application */ - testcase TP_MEC_MEC029_SRV_FAIS_003_BR() 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_FAI_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FAI_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; - } - + testcase TC_MEC_MEC029_SRV_FAIS_003_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_FAI_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FAI_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_FAI_CABLE_LINE_INFO_URI & "?cm=__any_value__", - v_headers - ) - ) - ); + m_http_request_get( + PICS_ROOT_API & PX_FAI_CABLE_LINE_INFO_URI & "?cm=__any_value__", + 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 400 Bad Request ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } @@ -470,52 +451,49 @@ module AtsMec_FixedAccessInformationServiceAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + // Postamble f_cf_01_http_down(); - } // End of testcase TP_MEC_MEC029_SRV_FAIS_003_BR + } // End of testcase TC_MEC_MEC029_SRV_FAIS_003_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 */ - testcase TP_MEC_MEC029_SRV_FAIS_003_NF() 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_FAI_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FAI_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; - } - + testcase TC_MEC_MEC029_SRV_FAIS_003_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_FAI_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FAI_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_FAI_CABLE_LINE_INFO_URI & "?cmId=" & oct2char(unichar2oct(PX_NON_EXISTING_FAI_CM_ID, "UTF-8")), - v_headers - ) - ) - ); + m_http_request_get( + PICS_ROOT_API & PX_FAI_CABLE_LINE_INFO_URI & "?cmId=" & oct2char(unichar2oct(PX_NON_EXISTING_FAI_CM_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); } @@ -524,43 +502,40 @@ module AtsMec_FixedAccessInformationServiceAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + // Postamble f_cf_01_http_down(); - } // End of testcase TP_MEC_MEC029_SRV_FAIS_003_NF - + } // End of testcase TC_MEC_MEC029_SRV_FAIS_003_NF + /** * @desc Check that the IUT responds with the current status of the optical network information when queried by a MEC Application */ - testcase TP_MEC_MEC029_SRV_FAIS_004_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_FAI_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FAI_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; - } - + testcase TC_MEC_MEC029_SRV_FAIS_004_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_FAI_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FAI_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_FAI_OPTICAL_NW_INFO_URI, + PICS_ROOT_API & PX_FAI_OPTICAL_NW_INFO_URI, v_headers - ) - ) - ); + ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); - + // Test Body tc_ac.start; alt { @@ -570,9 +545,9 @@ module AtsMec_FixedAccessInformationServiceAPI_TestCases { mw_http_message_body_json( mw_body_json_fai_pon_info( mw_pon_info - ))))) { + ))))) { tc_ac.stop; - + log("*** " & testcasename() & ": PASS: IUT successfully responds with a PonInfo ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } @@ -581,60 +556,50 @@ module AtsMec_FixedAccessInformationServiceAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + // Postamble f_cf_01_http_down(); - } // End of testcase TP_MEC_MEC029_SRV_FAIS_004_OK - + } // End of testcase TC_MEC_MEC029_SRV_FAIS_004_OK + /** * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application */ - testcase TP_MEC_MEC029_SRV_FAIS_004_BR() 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_FAI_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FAI_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; - } - + testcase TC_MEC_MEC029_SRV_FAIS_004_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_FAI_API_SUPPORTED)) { log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FAI_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_FAI_OPTICAL_NW_INFO_URI & "?onu=__any_value__", + PICS_ROOT_API & PX_FAI_OPTICAL_NW_INFO_URI & "?onu=__any_value__", 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); } @@ -643,59 +608,49 @@ module AtsMec_FixedAccessInformationServiceAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + // Postamble f_cf_01_http_down(); - } // End of testcase TP_MEC_MEC029_SRV_FAIS_004_BR + } // End of testcase TC_MEC_MEC029_SRV_FAIS_004_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 */ - testcase TP_MEC_MEC029_SRV_FAIS_004_NF() 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_FAI_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FAI_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; - } - + testcase TC_MEC_MEC029_SRV_FAIS_004_NF() 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_FAI_API_SUPPORTED)) { log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FAI_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_FAI_OPTICAL_NW_INFO_URI & "?onuId=" & oct2char(unichar2oct(PX_NON_EXISTING_FAI_ONU_ID, "UTF-8")), - v_headers - ) - ) - ); + PICS_ROOT_API & PX_FAI_OPTICAL_NW_INFO_URI & "?onuId=" & oct2char(unichar2oct(PX_NON_EXISTING_FAI_ONU_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() - )) { + 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); } @@ -704,43 +659,40 @@ module AtsMec_FixedAccessInformationServiceAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + // Postamble f_cf_01_http_down(); - } // End of testcase TP_MEC_MEC029_SRV_FAIS_004_NF + } // End of testcase TC_MEC_MEC029_SRV_FAIS_004_NF /** * @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 TP_MEC_MEC029_SRV_FAIS_005_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_FAI_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FAI_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration + testcase TC_MEC_MEC029_SRV_FAIS_005_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_FAI_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FAI_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_FAI_SUB_URI, + PICS_ROOT_API & PX_FAI_SUB_URI, v_headers - ) - ) - ); + ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); - + // Test Body tc_ac.start; alt { @@ -750,9 +702,9 @@ module AtsMec_FixedAccessInformationServiceAPI_TestCases { mw_http_message_body_json( mw_body_json_fai_subscription_link_list( mw_subscription_link_list - ))))) { + ))))) { tc_ac.stop; - + log("*** " & testcasename() & ": PASS: IUT successfully responds with a SubscriptionLinkList ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } @@ -761,52 +713,50 @@ module AtsMec_FixedAccessInformationServiceAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + // Postamble f_cf_01_http_down(); - } // End of testcase TP_MEC_MEC029_SRV_FAIS_005_OK - + } // End of testcase TC_MEC_MEC029_SRV_FAIS_005_OK + /** * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application */ - testcase TP_MEC_MEC029_SRV_FAIS_005_BR() 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_FAI_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FAI_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; - } - + testcase TC_MEC_MEC029_SRV_FAIS_005_BR() 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_FAI_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FAI_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_FAI_SUB_URI & "?subscription=__any_value", + PICS_ROOT_API & PX_FAI_SUB_URI & "?subscription=__any_value", 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); } @@ -815,43 +765,40 @@ module AtsMec_FixedAccessInformationServiceAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + // Postamble f_cf_01_http_down(); - } // End of testcase TP_MEC_MEC029_SRV_FAIS_005_BR + } // End of testcase TC_MEC_MEC029_SRV_FAIS_005_BR /** * @desc Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application */ - testcase TP_MEC_MEC029_SRV_FAIS_005_NF() 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_FAI_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FAI_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; - } - + testcase TC_MEC_MEC029_SRV_FAIS_005_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_FAI_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FAI_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_FAI_SUB_URI & "?subscription_type=" & oct2char(unichar2oct(PX_NON_EXISTING_FAI_SUB_ID, "UTF-8")), + PICS_ROOT_API & PX_FAI_SUB_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTING_FAI_SUB_ID, "UTF-8")), v_headers - ) - ) - ); + ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); - + // Test Body tc_ac.start; alt { @@ -859,9 +806,9 @@ module AtsMec_FixedAccessInformationServiceAPI_TestCases { 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); } @@ -870,51 +817,48 @@ module AtsMec_FixedAccessInformationServiceAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + // Postamble f_cf_01_http_down(); - } // End of testcase TP_MEC_SRV_UEINFOLOOK_001_NF + } // End of testcase TC_MEC_MEC029_SRV_FAIS_005_NF /** * @desc Check that the IUT acknowledges the subscription by a MEC Application to notifications on Optical Network Unit alarm events */ - testcase TP_MEC_MEC029_SRV_FAIS_006_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_FAI_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FAI_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; - } - + testcase TC_MEC_MEC029_SRV_FAIS_006_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var OnuAlarmSubscription v_onu_alarm_subscription; + var charstring v_subscription_id; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_FAI_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FAI_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_FAI_SUB_URI, + PICS_ROOT_API & PX_FAI_SUB_URI, v_headers, m_http_message_body_json( - m_body_json_fai_onu_alarm_subscription_link_list( - m_onu_alarm_subscription( - PX_ONU_ALARM_SUB_CALLBACK_URI, // callbackReference - m_filter_criteria_onu_alarm - ) - ) - ) - ) - ) - ); + m_body_json_fai_onu_alarm_subscription( + m_onu_alarm_subscription( + PX_ONU_ALARM_SUB_CALLBACK_URI, + m_filter_criteria_onu_alarm + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); - + // Test Body tc_ac.start; alt { @@ -922,85 +866,84 @@ module AtsMec_FixedAccessInformationServiceAPI_TestCases { mw_http_response( mw_http_response_201_created( mw_http_message_body_json( - mw_body_json_fai_onu_alarm_subscription_link_list( - mw_onu_alarm_subscription( - PX_ONU_ALARM_SUB_CALLBACK_URI - )))))) { - // TODO how to send this? The TP has the IUT doing this immediately. Do we want this or will it be discarded as part of the test? - // MEC 029, clause 7.7.3.4 -// the IUT entity sends a vPOST containing -// uri indicating value CALLBACK_URL -// body containing -// OnuAlarmNotification containing -// notificationType set to "OnuAlarmSubscription" -// ; -// ; -// ; -// to the MEC_APP entity + mw_body_json_fai_onu_alarm_subscription( + mw_onu_alarm_subscription( + PX_ONU_ALARM_SUB_CALLBACK_URI + )))))) -> value v_response { + tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a OnuAlarmSubscription ***"); - f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + + // Check HTTP Location header + if (f_check_headers(v_response.response.header) == false) { + log("*** " & testcasename() & ": FAIL: IUT failed in Area subscription ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_error); + } else { + var charstring_list v_header_location; + f_get_header(v_response.response.header, "Location", v_header_location); + v_subscription_id := regexp( + v_header_location[0], + "?+" & PX_FAI_SUB_URI & "/(?*)", + 0 + ); + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a onuAlarmSubscription, SubscriptionId: ", v_subscription_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 - + // Postamble + f_delete_onu_alarm_subscription(v_subscription_id); f_cf_01_http_down(); - } // End of testcase TP_MEC_MEC029_SRV_FAIS_006_OK - + } // End of testcase TC_MEC_MEC029_SRV_FAIS_006_OK + /** * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application */ - testcase TP_MEC_MEC029_SRV_FAIS_006_BR() 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_FAI_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FAI_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; - } - + testcase TC_MEC_MEC029_SRV_FAIS_006_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_FAI_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FAI_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_UE_ZONAL_TRAF_SUB_URI, + PICS_ROOT_API & PX_FAI_SUB_URI, v_headers, m_http_message_body_json( - m_body_json_fai_onu_alarm_subscription_link_list( - m_onu_alarm_subscription_bad_request( - PX_ONU_ALARM_SUB_CALLBACK_URI, // callbackReference - m_filter_criteria_onu_alarm - ) - ) - ) - ) - ) - ); + m_body_json_fai_onu_alarm_subscription( + m_onu_alarm_subscription_bad_request( + PX_ONU_ALARM_SUB_CALLBACK_URI, + m_filter_criteria_onu_alarm + )))))); 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); } @@ -1009,43 +952,45 @@ module AtsMec_FixedAccessInformationServiceAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + // Postamble f_cf_01_http_down(); - } // End of testcase TP_MEC_MEC029_SRV_FAIS_006_BR - + } // End of testcase TC_MEC_MEC029_SRV_FAIS_006_BR + /** * @desc Check that the IUT responds with the information on a given subscription when queried by a MEC Application */ - testcase TP_MEC_MEC029_SRV_FAIS_007_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_FAI_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FAI_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; - } - + testcase TC_MEC_MEC029_SRV_FAIS_007_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var OnuAlarmSubscription v_onu_alarm_subscription; + var charstring v_subscription_id; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_FAI_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FAI_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + // Test component configuration f_cf_01_http_up(); - + // Test adapter configuration - + // Preamble + f_create_onu_alarm_subscription(v_onu_alarm_subscription, v_subscription_id); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( m_http_request_get( - "/" & PICS_ROOT_API & PX_FAI_SUB_URI & oct2char(unichar2oct(PX_SUBSCRIPTION_ID, "UTF-8")), + PICS_ROOT_API & PX_FAI_SUB_URI & "/" & v_subscription_id, v_headers ) ) ); f_selfOrClientSyncAndVerdict(c_prDone, e_success); - + // Test Body tc_ac.start; alt { @@ -1053,11 +998,11 @@ module AtsMec_FixedAccessInformationServiceAPI_TestCases { mw_http_response( mw_http_response_ok( mw_http_message_body_json( - mw_body_json_fai_onu_alarm_subscription_link_list( - mw_onu_alarm_subscription - ))))) { + mw_body_json_fai_onu_alarm_subscription( + mw_onu_alarm_subscription + ))))) { tc_ac.stop; - + log("*** " & testcasename() & ": PASS: IUT successfully responds with a OnuAlarmSubscription ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } @@ -1066,52 +1011,50 @@ module AtsMec_FixedAccessInformationServiceAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + // Postamble + f_delete_onu_alarm_subscription(v_subscription_id); f_cf_01_http_down(); - } // End of testcase TP_MEC_MEC029_SRV_FAIS_007_OK - + } // End of testcase TC_MEC_MEC029_SRV_FAIS_007_OK + /** * @desc Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application */ - testcase TP_MEC_MEC029_SRV_FAIS_007_NF() 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_FAI_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FAI_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; - } - + testcase TC_MEC_MEC029_SRV_FAIS_007_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_FAI_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FAI_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_FAI_SUB_URI & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_ID, "UTF-8")), + PICS_ROOT_API & PX_FAI_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 a 404 Not Found ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } @@ -1120,52 +1063,48 @@ module AtsMec_FixedAccessInformationServiceAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + // Postamble f_cf_01_http_down(); - } // End of testcase TP_MEC_MEC029_SRV_FAIS_007_NF + } // End of testcase TC_MEC_MEC029_SRV_FAIS_007_NF /** * @desc Check that the IUT updates an existing subscription when commanded by a MEC Application */ - testcase TP_MEC_MEC029_SRV_FAIS_008_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_FAI_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FAI_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; - } - + testcase TC_MEC_MEC029_SRV_FAIS_008_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var OnuAlarmSubscription v_onu_alarm_subscription; + var charstring v_subscription_id; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_FAI_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FAI_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + // Test component configuration f_cf_01_http_up(); - + // Test adapter configuration - + // Preamble - // TODO If-Match header needs to have a PROPER_ETAG + f_create_onu_alarm_subscription(v_onu_alarm_subscription, v_subscription_id); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( m_http_request_put( - "/" & PICS_ROOT_API & PX_FAI_SUB_URI & oct2char(unichar2oct(PX_SUBSCRIPTION_ID, "UTF-8")), - v_headers, - m_http_message_body_json( - m_body_json_fai_onu_alarm_subscription_link_list( - m_onu_alarm_subscription( - PX_ONU_ALARM_SUB_CALLBACK_URI, - m_filter_criteria_onu_alarm - ) - ) - ) - ) - ) - ); + PICS_ROOT_API & PX_FAI_SUB_URI & "/" & v_subscription_id, + v_headers, + m_http_message_body_json( + m_body_json_fai_onu_alarm_subscription( + m_onu_alarm_subscription( + PX_ONU_ALARM_SUB_CALLBACK_URI, + m_filter_criteria_onu_alarm + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); - + // Test Body tc_ac.start; alt { @@ -1173,11 +1112,11 @@ module AtsMec_FixedAccessInformationServiceAPI_TestCases { mw_http_response( mw_http_response_ok( mw_http_message_body_json( - mw_body_json_fai_onu_alarm_subscription_link_list( - mw_onu_alarm_subscription - ))))) { + mw_body_json_fai_onu_alarm_subscription( + mw_onu_alarm_subscription + ))))) { tc_ac.stop; - + log("*** " & testcasename() & ": PASS: IUT successfully responds with a userTrackingSubscription ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } @@ -1186,61 +1125,58 @@ module AtsMec_FixedAccessInformationServiceAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + // Postamble + f_delete_onu_alarm_subscription(v_subscription_id); f_cf_01_http_down(); - } // End of testcase TP_MEC_MEC029_SRV_FAIS_008_OK - + } // End of testcase TC_MEC_MEC029_SRV_FAIS_008_OK + /** * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application */ - testcase TP_MEC_MEC029_SRV_FAIS_008_BR() 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_FAI_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FAI_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; - } - + testcase TC_MEC_MEC029_SRV_FAIS_008_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var OnuAlarmSubscription v_onu_alarm_subscription; + var charstring v_subscription_id; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_FAI_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FAI_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + // Test component configuration f_cf_01_http_up(); - + // Test adapter configuration - + // Preamble - // TODO If-Match header needs to have a PROPER_ETAG + f_create_onu_alarm_subscription(v_onu_alarm_subscription, v_subscription_id); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( m_http_request_put( - "/" & PICS_ROOT_API & PX_FAI_SUB_URI & oct2char(unichar2oct(PX_SUBSCRIPTION_ID, "UTF-8")), + PICS_ROOT_API & PX_FAI_SUB_URI & "/" & v_subscription_id, v_headers, m_http_message_body_json( - m_body_json_fai_onu_alarm_subscription_link_list( - m_onu_alarm_subscription_bad_request( - PX_ONU_ALARM_SUB_CALLBACK_URI, - m_filter_criteria_onu_alarm - ) - ) - ) - ) - ) - ); + m_body_json_fai_onu_alarm_subscription( + m_onu_alarm_subscription_bad_request( + PX_ONU_ALARM_SUB_CALLBACK_URI, + m_filter_criteria_onu_alarm + )))))); 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); } @@ -1249,61 +1185,58 @@ module AtsMec_FixedAccessInformationServiceAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + // Postamble + f_delete_onu_alarm_subscription(v_subscription_id); f_cf_01_http_down(); - } // End of testcase TP_MEC_MEC029_SRV_FAIS_008_BR - + } // End of testcase TC_MEC_MEC029_SRV_FAIS_008_BR + /** * @desc Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application */ - testcase TP_MEC_MEC029_SRV_FAIS_008_NF() 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_FAI_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FAI_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; - } - + testcase TC_MEC_MEC029_SRV_FAIS_008_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var OnuAlarmSubscription v_onu_alarm_subscription; + var charstring v_subscription_id; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_FAI_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FAI_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + // Test component configuration f_cf_01_http_up(); - + // Test adapter configuration - + // Preamble - // TODO If-Match header needs to have a PROPER_ETAG + f_create_onu_alarm_subscription(v_onu_alarm_subscription, v_subscription_id); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( m_http_request_put( - "/" & PICS_ROOT_API & PX_FAI_SUB_URI & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_ID, "UTF-8")), + PICS_ROOT_API & PX_FAI_SUB_URI & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_ID, "UTF-8")), v_headers, m_http_message_body_json( - m_body_json_fai_onu_alarm_subscription_link_list( - m_onu_alarm_subscription( - PX_ONU_ALARM_SUB_CALLBACK_URI, - m_filter_criteria_onu_alarm - ) - ) - ) - ) - ) - ); + m_body_json_fai_onu_alarm_subscription( + m_onu_alarm_subscription( + PX_ONU_ALARM_SUB_CALLBACK_URI, + m_filter_criteria_onu_alarm + )))))); 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 HTTP error 404 ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } @@ -1312,59 +1245,56 @@ module AtsMec_FixedAccessInformationServiceAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + // Postamble + f_delete_onu_alarm_subscription(v_subscription_id); f_cf_01_http_down(); - } // End of testcase TP_MEC_MEC029_SRV_FAIS_008_NF + } // End of testcase TC_MEC_MEC029_SRV_FAIS_008_NF /** * @desc Check that the IUT responds with an error when a request sent by a MEC Application doesn't comply with a required condition */ - testcase TP_MEC_MEC029_SRV_FAIS_008_PF() 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_FAI_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FAI_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; - } - + testcase TC_MEC_MEC029_SRV_FAIS_008_PF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var OnuAlarmSubscription v_onu_alarm_subscription; + var charstring v_subscription_id; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_FAI_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FAI_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + // Test component configuration f_cf_01_http_up(); - + // Test adapter configuration - + // Preamble - // TODO If-Match header needs to have an INVALID_ETAG + f_create_onu_alarm_subscription(v_onu_alarm_subscription, v_subscription_id); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( m_http_request_put( - "/" & PICS_ROOT_API & PX_FAI_SUB_URI & oct2char(unichar2oct(PX_SUBSCRIPTION_ID, "UTF-8")), - v_headers, - m_http_message_body_json( - m_body_json_fai_onu_alarm_subscription_link_list( - m_onu_alarm_subscription( - PX_ONU_ALARM_SUB_CALLBACK_URI, - m_filter_criteria_onu_alarm - ) - ) - ) - ) - ) - ); + PICS_ROOT_API & PX_FAI_SUB_URI & "/" & v_subscription_id, + v_headers, + m_http_message_body_json( + m_body_json_fai_onu_alarm_subscription( + m_onu_alarm_subscription( + PX_ONU_ALARM_SUB_CALLBACK_URI, + m_filter_criteria_onu_alarm + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); - + // Test Body tc_ac.start; alt { [] httpPort.receive( mw_http_response( mw_http_response_412_precondition_failed - )) { + )) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a ProblemDetails set to 412 Precondition Failed ***"); @@ -1375,52 +1305,53 @@ module AtsMec_FixedAccessInformationServiceAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + // Postamble + f_delete_onu_alarm_subscription(v_subscription_id); f_cf_01_http_down(); - } // End of testcase TP_MEC_MEC029_SRV_FAIS_008_PF + } // End of testcase TC_MEC_MEC029_SRV_FAIS_008_PF /** * @desc Check that the IUT acknowledges the cancellation of UE location change notifications when commanded by a MEC Application */ - testcase TP_MEC_MEC029_SRV_FAIS_009_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_FAI_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FAI_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; - } - + testcase TC_MEC_MEC029_SRV_FAIS_009_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var OnuAlarmSubscription v_onu_alarm_subscription; + var charstring v_subscription_id; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_FAI_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FAI_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + // Test component configuration f_cf_01_http_up(); - + // Test adapter configuration - + // Preamble + f_create_onu_alarm_subscription(v_onu_alarm_subscription, v_subscription_id); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( m_http_request_delete( - "/" & PICS_ROOT_API & PX_FAI_SUB_URI & oct2char(unichar2oct(PX_SUBSCRIPTION_ID, "UTF-8")), + PICS_ROOT_API & PX_FAI_SUB_URI & "/" & v_subscription_id, 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); } @@ -1429,50 +1360,45 @@ module AtsMec_FixedAccessInformationServiceAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + // Postamble f_cf_01_http_down(); - } // End of testcase TP_MEC_MEC029_SRV_FAIS_009_OK - + } // End of testcase TC_MEC_MEC029_SRV_FAIS_009_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 TP_MEC_MEC029_SRV_FAIS_009_NF() 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_FAI_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FAI_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; - } - + testcase TC_MEC_MEC029_SRV_FAIS_009_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var OnuAlarmSubscription v_onu_alarm_subscription; + var charstring v_subscription_id; + // Test control if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_FAI_API_SUPPORTED)) { log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FAI_API_SUPPORTED required for executing the TC ***"); setverdict(inconc); stop; } - + // Test component configuration f_cf_01_http_up(); - + // Test adapter configuration - + // Preamble + f_create_onu_alarm_subscription(v_onu_alarm_subscription, v_subscription_id); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( m_http_request_delete( - "/" & PICS_ROOT_API & PX_FAI_SUB_URI & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_ID, "UTF-8")), + PICS_ROOT_API & PX_FAI_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 { @@ -1481,7 +1407,7 @@ module AtsMec_FixedAccessInformationServiceAPI_TestCases { 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); } @@ -1490,148 +1416,133 @@ module AtsMec_FixedAccessInformationServiceAPI_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - + // Postamble + f_delete_onu_alarm_subscription(v_subscription_id); f_cf_01_http_down(); - } // End of testcase TP_MEC_MEC029_SRV_FAIS_009_NF - + } // End of testcase TC_MEC_MEC029_SRV_FAIS_009_NF + /** * @desc Check that the IUT sends notification on expiry of Fixed Access Information event subscription to a MEC Application */ - testcase TP_MEC_MEC029_SRV_FAIS_010_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_FAI_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FAI_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; - } - + testcase TC_MEC_MEC029_SRV_FAIS_010_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var DevInfoSubscription v_dev_info_subscription; + var charstring v_subscription_id; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_FAI_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FAI_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + // Test component configuration - f_cf_01_http_up(); - + f_cf_01_http_notif_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_FAI_SUB_URI, - v_headers, - m_http_message_body_json( - m_body_json_fai_onu_alarm_subscription_link_list( - m_onu_alarm_subscription( - PX_ONU_ALARM_SUB_CALLBACK_URI, - m_filter_criteria_onu_alarm, - -, -, -, - m_time_stamp(1577836800) - ) - ) - ) - ) - ) - ); + f_create_dev_info_subscription(v_dev_info_subscription, v_subscription_id); f_selfOrClientSyncAndVerdict(c_prDone, e_success); - + // Test Body - tc_ac.start; + tc_wait.start; alt { - [] httpPort.receive( - mw_http_response( - mw_http_response_201_created( - mw_http_message_body_json( - mw_body_json_fai_onu_alarm_subscription_link_list( - mw_onu_alarm_subscription - ))))) { - // TODO Need to check Location header - - // TODO: how to wait for a timeout of (NOW_PLUS_X_SECONDS - guard time)? which guard time value to use? - // MEC 029, clause 5.2.6.2 -// the IUT entity sends a vPOST containing -// uri indicating value CALLBACK_URL -// body containing -// ExpiryNotification containing -// expiryDeadline indicating value NOW_PLUS_X_SECONDS // TODO: how to set this? -// ; -// ; -// ; -// to the MEC_APP entity - tc_ac.stop; + [] httpPort_notif.receive( + mw_http_request( + mw_http_request_post( + PX_FAI_SUB_URI, + -, + mw_http_message_body_json( + mw_body_json_fai_dev_info_subscription( + mw_dev_info_subscription( + PX_DEV_ALARM_SUB_CALLBACK_URI + )))))) { + tc_wait.stop; + f_init_default_headers_list(-, -, v_headers); + httpPort_notif.send( + m_http_response( + m_http_response_ok_no_body( + v_headers + ))); log("*** " & testcasename() & ": PASS: IUT successfully responds with a DevInfoSubscription ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } - [] tc_ac.timeout { + [] 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_down(); - } // End of testcase TP_MEC_MEC029_SRV_FAIS_010_OK - + f_delete_dev_info_subscription(v_subscription_id); + f_cf_01_http_notif_down(); + } // End of testcase TC_MEC_MEC029_SRV_FAIS_010_OK + /** * @desc Check that the IUT acknowledges the subscription by a MEC Application to notifications on Optical Network Unit alarm events */ - testcase TP_MEC_MEC029_SRV_FAIS_011_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_FAI_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FAI_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; - } - + testcase TC_MEC_MEC029_SRV_FAIS_011_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var OnuAlarmSubscription v_onu_alarm_subscription; + var charstring v_subscription_id; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_FAI_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_FAI_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); - -// TODO how to generate an event? -// Initial conditions with { -// the IUT entity being_in idle_state and -// the IUT entity having a subscriptions containing, -// subscriptionType indicating value "OnuAlarmSubscription" -// callbackReference indicating value CALLBACK_URL -// ; -// } -// -// // MEC 029, clause 5.2.7 -// Expected behaviour -// ensure that { -// when { -// the IUT entity generates a onu_alarm_event -// } -// then { -// // // MEC 029, clause 5.2.7 -// the IUT entity sends a vPOST containing -// Uri set to CALLBACK_URL -// body containing -// OnuAlarmSubscription containing -// notificationType set to "OnuAlarmSubscription" -// ; -// ; -// ; -// to the MEC_APP entity -// } -// } + f_create_onu_alarm_subscription(v_onu_alarm_subscription, v_subscription_id); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_wait.start; + alt { + [] httpPort_notif.receive( + mw_http_request( + mw_http_request_post( + PX_FAI_SUB_URI, + -, + mw_http_message_body_json( + mw_body_json_fai_onu_alarm_subscription( + mw_onu_alarm_subscription( + PX_DEV_ALARM_SUB_CALLBACK_URI + )))))) { + tc_wait.stop; + + f_init_default_headers_list(-, -, v_headers); + httpPort_notif.send( + m_http_response( + m_http_response_ok_no_body( + v_headers + ))); + log("*** " & testcasename() & ": PASS: IUT successfully responds with a DevInfoSubscription ***"); + 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_down(); - } // End of testcase TP_MEC_MEC029_SRV_FAIS_011_OK - + f_delete_onu_alarm_subscription(v_subscription_id); + f_cf_01_http_notif_down(); + } // End of testcase TC_MEC_MEC029_SRV_FAIS_011_OK + } // End of group fixedAccessInfoService - + } // End of module AtsMec_FixedAccessInformationServiceAPI_TestCases diff --git a/ttcn/AtsMec_FixedAccessInformationService/AtsMec_FixedAccessInformationServiceAPI_TestControl.ttcn b/ttcn/AtsMec_FixedAccessInformationService/AtsMec_FixedAccessInformationServiceAPI_TestControl.ttcn index 8aba18e..710a3e4 100644 --- a/ttcn/AtsMec_FixedAccessInformationService/AtsMec_FixedAccessInformationServiceAPI_TestControl.ttcn +++ b/ttcn/AtsMec_FixedAccessInformationService/AtsMec_FixedAccessInformationServiceAPI_TestControl.ttcn @@ -11,8 +11,44 @@ module AtsMec_FixedAccessInformationServiceAPI_TestControl { control { - if (PICS_MEC_PLAT and PICS_FAI_API_SUPPORTED) { - execute(TP_MEC_MEC029_SRV_FAIS_001_OK()); + if (PICS_MEC_PLAT and PICS_FAI_API_SUPPORTED and PICS_FAI_API_SUPPORTED) { + execute(TC_MEC_MEC029_SRV_FAIS_001_OK()); + execute(TC_MEC_MEC029_SRV_FAIS_001_BR()); + execute(TC_MEC_MEC029_SRV_FAIS_001_NF()); + + execute(TC_MEC_MEC029_SRV_FAIS_002_OK()); + execute(TC_MEC_MEC029_SRV_FAIS_002_BR()); + execute(TC_MEC_MEC029_SRV_FAIS_002_NF()); + + execute(TC_MEC_MEC029_SRV_FAIS_003_OK()); + execute(TC_MEC_MEC029_SRV_FAIS_003_BR()); + execute(TC_MEC_MEC029_SRV_FAIS_003_NF()); + + execute(TC_MEC_MEC029_SRV_FAIS_004_OK()); + execute(TC_MEC_MEC029_SRV_FAIS_004_BR()); + execute(TC_MEC_MEC029_SRV_FAIS_004_NF()); + + execute(TC_MEC_MEC029_SRV_FAIS_005_OK()); + execute(TC_MEC_MEC029_SRV_FAIS_005_BR()); + execute(TC_MEC_MEC029_SRV_FAIS_005_NF()); + + execute(TC_MEC_MEC029_SRV_FAIS_006_OK()); + execute(TC_MEC_MEC029_SRV_FAIS_006_BR()); + + execute(TC_MEC_MEC029_SRV_FAIS_007_OK()); + execute(TC_MEC_MEC029_SRV_FAIS_007_NF()); + + execute(TC_MEC_MEC029_SRV_FAIS_008_OK()); + execute(TC_MEC_MEC029_SRV_FAIS_008_BR()); + execute(TC_MEC_MEC029_SRV_FAIS_008_NF()); + execute(TC_MEC_MEC029_SRV_FAIS_008_PF()); + + execute(TC_MEC_MEC029_SRV_FAIS_009_OK()); + execute(TC_MEC_MEC029_SRV_FAIS_009_NF()); + + execute(TC_MEC_MEC029_SRV_FAIS_010_OK()); + + execute(TC_MEC_MEC029_SRV_FAIS_011_OK()); } } // End of 'control' statement diff --git a/ttcn/AtsMec_WlanInformation/AtsMec_WlanInformationAPI_TestCases.ttcn b/ttcn/AtsMec_WlanInformation/AtsMec_WlanInformationAPI_TestCases.ttcn index dcaab23..e1ee4e6 100644 --- a/ttcn/AtsMec_WlanInformation/AtsMec_WlanInformationAPI_TestCases.ttcn +++ b/ttcn/AtsMec_WlanInformation/AtsMec_WlanInformationAPI_TestCases.ttcn @@ -1259,16 +1259,16 @@ module AtsMec_WlanInformationAPI_TestCases { alt { [] httpPort_notif.receive( mw_http_request( - mw_http_request_post( - -, - -, - mw_http_message_body_json( - mw_body_json_assoc_sta_subscription( - mw_assoc_sta_subscription( - PX_ASSOC_STA_SUBSCRIPTION_CALLBACK, - -, - -, -, - ? + mw_http_request_post( + -, + -, + mw_http_message_body_json( + mw_body_json_assoc_sta_subscription( + mw_assoc_sta_subscription( + PX_ASSOC_STA_SUBSCRIPTION_CALLBACK, + -, + -, -, + ? )))))) { tc_wait.stop; diff --git a/ttcn/LibMec/FixedAccessInformationServiceAPI/module.mk b/ttcn/LibMec/FixedAccessInformationServiceAPI/module.mk index 341b7f8..2d89431 100644 --- a/ttcn/LibMec/FixedAccessInformationServiceAPI/module.mk +++ b/ttcn/LibMec/FixedAccessInformationServiceAPI/module.mk @@ -2,5 +2,6 @@ sources := \ ttcn/FixedAccessInformationServiceAPI_Pics.ttcn \ ttcn/FixedAccessInformationServiceAPI_Pixits.ttcn \ ttcn/FixedAccessInformationServiceAPI_Templates.ttcn \ + ttcn/FixedAccessInformationServiceAPI_Functions.ttcn \ ttcn/FixedAccessInformationServiceAPI_TypesAndValues.ttcn diff --git a/ttcn/LibMec/FixedAccessInformationServiceAPI/ttcn/FixedAccessInformationServiceAPI_Functions.ttcn b/ttcn/LibMec/FixedAccessInformationServiceAPI/ttcn/FixedAccessInformationServiceAPI_Functions.ttcn new file mode 100644 index 0000000..3ce305c --- /dev/null +++ b/ttcn/LibMec/FixedAccessInformationServiceAPI/ttcn/FixedAccessInformationServiceAPI_Functions.ttcn @@ -0,0 +1,342 @@ +module FixedAccessInformationServiceAPI_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 LibHttp_TypesAndValues all; + import from LibHttp_Functions all; + import from LibHttp_Templates all; + import from LibHttp_JsonTemplates all; + import from LibHttp_TestSystem all; + + // LibMec/FixedAccessInformationServiceAPI + import from FixedAccessInformationServiceAPI_TypesAndValues all; + import from FixedAccessInformationServiceAPI_Templates all; + import from FixedAccessInformationServiceAPI_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_onu_alarm_subscription( + out OnuAlarmSubscription p_onu_alarm_subscription, + out charstring p_subscription_id + ) 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_FAI_SUB_URI, + v_headers, + m_http_message_body_json( + m_body_json_fai_onu_alarm_subscription( + m_onu_alarm_subscription( + PX_ONU_ALARM_SUB_CALLBACK_URI, + m_filter_criteria_onu_alarm + )))))); + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_201_created( + mw_http_message_body_json( + mw_body_json_fai_onu_alarm_subscription( + mw_onu_alarm_subscription( + PX_ONU_ALARM_SUB_CALLBACK_URI + )))))) -> value v_response { + tc_ac.stop; + + // Extract HTTP Location header + var charstring_list v_subscription_id; + f_get_header(v_response.response.header, "Location", v_subscription_id); + // Extract HTTP subssription id + p_subscription_id := regexp( + v_subscription_id[0], + "?+" & PX_FAI_SUB_URI & "/(?*)", + 0 + ); + p_onu_alarm_subscription := v_response.response.body.json_body.onuAlarmSubscription; + log("f_create_onu_alarm_subscription: INFO: IUT successfully responds to the subscription: ", p_onu_alarm_subscription); + log("f_create_onu_alarm_subscription: INFO: p_subscription_id: ", p_subscription_id); + } + [] tc_ac.timeout { + log("f_create_onu_alarm_subscription: INCONC: Expected message not received"); + } + } // End of 'alt' statement + + } // End of function f_create_onu_alarm_subscription + + function f_delete_onu_alarm_subscription( + in charstring p_subscription_id + ) 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_FAI_SUB_URI & "/" & p_subscription_id, + 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_onu_alarm_subscription: INCONC: Expected message not received"); + } + } // End of 'alt' statement + + } // End of function f_delete_onu_alarm_subscription + + function f_create_dev_info_subscription( + out DevInfoSubscription p_dev_info_subscription, + out charstring p_subscription_id + ) 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_FAI_SUB_URI, + v_headers, + m_http_message_body_json( + m_body_json_fai_dev_info_subscription( + m_dev_info_subscription( + PX_DEV_ALARM_SUB_CALLBACK_URI, + m_filter_criteria_dev_info + )))))); + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_201_created( + mw_http_message_body_json( + mw_body_json_fai_onu_alarm_subscription( + mw_onu_alarm_subscription( + PX_ONU_ALARM_SUB_CALLBACK_URI + )))))) -> value v_response { + tc_ac.stop; + + // Extract HTTP Location header + var charstring_list v_subscription_id; + f_get_header(v_response.response.header, "Location", v_subscription_id); + // Extract HTTP subssription id + p_subscription_id := regexp( + v_subscription_id[0], + "?+" & PX_FAI_SUB_URI & "/(?*)", + 0 + ); + p_dev_info_subscription := v_response.response.body.json_body.devInfoSubscription; + log("f_create_dev_info_subscription: INFO: IUT successfully responds to the subscription: ", p_dev_info_subscription); + log("f_create_dev_info_subscription: INFO: p_subscription_id: ", p_subscription_id); + } + [] tc_ac.timeout { + log("f_create_onu_alarm_suf_create_dev_info_subscriptionbscription: INCONC: Expected message not received"); + } + } // End of 'alt' statement + + } // End of function f_create_dev_info_subscription + + function f_delete_dev_info_subscription( + in charstring p_subscription_id + ) 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_FAI_SUB_URI & "/" & p_subscription_id, + 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_dev_info_subscription: INCONC: Expected message not received"); + } + } // End of 'alt' statement + + } // End of function f_delete_dev_info_subscription + + function f_create_cm_conn_subscription( + out CmConnSubscription p_cm_conn_subscription, + out charstring p_subscription_id + ) 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_FAI_SUB_URI, + v_headers, + m_http_message_body_json( + m_body_json_fai_cm_conn_subscription( + m_cm_conn_subscription( + PX_CM_CONN_SUB_CALLBACK_URI + //m_filter_criteria_dev_info + )))))); + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_201_created( + mw_http_message_body_json( + mw_body_json_fai_onu_alarm_subscription( + mw_onu_alarm_subscription( + PX_CM_CONN_SUB_CALLBACK_URI + )))))) -> value v_response { + tc_ac.stop; + + // Extract HTTP Location header + var charstring_list v_subscription_id; + f_get_header(v_response.response.header, "Location", v_subscription_id); + // Extract HTTP subssription id + p_subscription_id := regexp( + v_subscription_id[0], + "?+" & PX_FAI_SUB_URI & "/(?*)", + 0 + ); + p_cm_conn_subscription := v_response.response.body.json_body.cmConnSubscription; + log("f_create_cm_conn_subscription: INFO: IUT successfully responds to the subscription: ", p_cm_conn_subscription); + log("f_create_cm_conn_subscription: INFO: p_subscription_id: ", p_subscription_id); + } + [] tc_ac.timeout { + log("f_create_onu_alarm_suf_create_cm_conn_subscriptionbscription: INCONC: Expected message not received"); + } + } // End of 'alt' statement + + } // End of function f_create_cm_conn_subscription + + function f_delete_cm_conn_subscription( + in charstring p_subscription_id + ) 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_FAI_SUB_URI & "/" & p_subscription_id, + 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_cm_conn_subscription: INCONC: Expected message not received"); + } + } // End of 'alt' statement + + } // End of function f_delete_cm_conn_subscription + + function f_create_ani_alarm_subscription( + out AniAlarmSubscription p_ani_alarm_subscription, + out charstring p_subscription_id + ) 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_FAI_SUB_URI, + v_headers, + m_http_message_body_json( + m_body_json_fai_ani_alarm_subscription( + m_ani_alarm_subscription( + PX_ANI_ALARM_SUB_CALLBACK_URI + //m_filter_criteria_ani_alarm + )))))); + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_201_created( + mw_http_message_body_json( + mw_body_json_fai_ani_alarm_subscription( + mw_ani_alarm_subscription( + PX_ANI_ALARM_SUB_CALLBACK_URI + )))))) -> value v_response { + tc_ac.stop; + + // Extract HTTP Location header + var charstring_list v_subscription_id; + f_get_header(v_response.response.header, "Location", v_subscription_id); + // Extract HTTP subssription id + p_subscription_id := regexp( + v_subscription_id[0], + "?+" & PX_FAI_SUB_URI & "/(?*)", + 0 + ); + p_ani_alarm_subscription := v_response.response.body.json_body.aniAlarmSubscription; + log("f_create_ani_alarm_subscription: INFO: IUT successfully responds to the subscription: ", p_ani_alarm_subscription); + log("f_create_ani_alarm_subscription: INFO: p_subscription_id: ", p_subscription_id); + } + [] tc_ac.timeout { + log("f_create_ani_alarm_subscription: INCONC: Expected message not received"); + } + } // End of 'alt' statement + + } // End of function f_create_ani_alarm_subscription + + function f_delete_ani_alarm_subscription( + in charstring p_subscription_id + ) 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_FAI_SUB_URI & "/" & p_subscription_id, + 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_ani_alarm_subscription: INCONC: Expected message not received"); + } + } // End of 'alt' statement + + } // End of function f_delete_ani_alarm_subscription + +} // End of module FixedAccessInformationServiceAPI_Functions \ No newline at end of file diff --git a/ttcn/LibMec/FixedAccessInformationServiceAPI/ttcn/FixedAccessInformationServiceAPI_Pixits.ttcn b/ttcn/LibMec/FixedAccessInformationServiceAPI/ttcn/FixedAccessInformationServiceAPI_Pixits.ttcn index 183a6d9..28872c3 100644 --- a/ttcn/LibMec/FixedAccessInformationServiceAPI/ttcn/FixedAccessInformationServiceAPI_Pixits.ttcn +++ b/ttcn/LibMec/FixedAccessInformationServiceAPI/ttcn/FixedAccessInformationServiceAPI_Pixits.ttcn @@ -6,10 +6,6 @@ module FixedAccessInformationServiceAPI_Pixits { // LibMec_FixedAccessInformationServiceAPI import from FixedAccessInformationServiceAPI_TypesAndValues all; - modulepar GatewayIdList PX_FAI_GW_ID := { "" }; - - modulepar GatewayIdList PX_NON_EXISTING_FAI_GW_ID := { "" }; - modulepar Json.String PX_FAI_CM_ID := ""; modulepar Json.String PX_NON_EXISTING_FAI_CM_ID := ""; @@ -18,12 +14,22 @@ module FixedAccessInformationServiceAPI_Pixits { modulepar Json.String PX_NON_EXISTING_FAI_ONU_ID := ""; + modulepar Json.String PX_FAI_GW_ID := ""; + + modulepar Json.String PX_NON_EXISTING_FAI_GW_ID := ""; + modulepar Json.String PX_FAI_SUB_ID := ""; modulepar Json.String PX_NON_EXISTING_FAI_SUB_ID := ""; modulepar Json.AnyURI PX_ONU_ALARM_SUB_CALLBACK_URI := ""; + modulepar Json.AnyURI PX_DEV_ALARM_SUB_CALLBACK_URI := ""; + + modulepar Json.AnyURI PX_CM_CONN_SUB_CALLBACK_URI := ""; + + modulepar Json.AnyURI PX_ANI_ALARM_SUB_CALLBACK_URI := ""; + modulepar Json.String PX_SUBSCRIPTION_ID := ""; modulepar Json.String PX_NON_EXISTENT_SUBSCRIPTION_ID := ""; diff --git a/ttcn/LibMec/FixedAccessInformationServiceAPI/ttcn/FixedAccessInformationServiceAPI_Templates.ttcn b/ttcn/LibMec/FixedAccessInformationServiceAPI/ttcn/FixedAccessInformationServiceAPI_Templates.ttcn index a5dfa5a..b97c9aa 100644 --- a/ttcn/LibMec/FixedAccessInformationServiceAPI/ttcn/FixedAccessInformationServiceAPI_Templates.ttcn +++ b/ttcn/LibMec/FixedAccessInformationServiceAPI/ttcn/FixedAccessInformationServiceAPI_Templates.ttcn @@ -226,14 +226,14 @@ module FixedAccessInformationServiceAPI_Templates { subscriptionType := "BadSubscriptionType" } // End of template m_onu_alarm_subscription_bad_request - template OnuAlarmSubscription mw_onu_alarm_subscription( - template (present) Json.AnyURI p_callbackReference := ?, - template (present) FilterCriteriaOnuAlarm p_filterCriteriaOnuAlarm := ?, - template Links p_links := *, - template Json.Bool p_requestTestNotification := *, - template WebsockNotifConfig p_websockNotifConfig := *, - template TimeStamp p_expiryDeadline := * - ) := { + template (present) OnuAlarmSubscription mw_onu_alarm_subscription( + template (present) Json.AnyURI p_callbackReference := ?, + template (present) FilterCriteriaOnuAlarm p_filterCriteriaOnuAlarm := ?, + template Links p_links := *, + template Json.Bool p_requestTestNotification := *, + template WebsockNotifConfig p_websockNotifConfig := *, + template TimeStamp p_expiryDeadline := * + ) := { subscriptionType := "OnuAlarmSubscription", callbackReference := p_callbackReference, requestTestNotification := p_requestTestNotification, @@ -263,4 +263,162 @@ module FixedAccessInformationServiceAPI_Templates { alarms := p_alarms } // End of template mw_filter_criteria_onu_alarm + template (omit) DevInfoSubscription m_dev_info_subscription( + in template (value) Json.AnyURI p_callbackReference, + in template (value) FilterCriteriaDevInfo p_filterCriteriaDevInfo, + in template (omit) Links p_links := omit, + in template (omit) Json.Bool p_requestTestNotification := omit, + in template (omit) WebsockNotifConfig p_websockNotifConfig := omit, + in template (omit) TimeStamp p_expiryDeadline := omit + ) := { + subscriptionType := "DevInfoSubscription", + callbackReference := p_callbackReference, + requestTestNotification := p_requestTestNotification, + websockNotifConfig := p_websockNotifConfig, + links := p_links, + filterCriteriaDevInfo := p_filterCriteriaDevInfo, + expiryDeadline := p_expiryDeadline + } // End of template m_dev_info_subscription + + template (present) DevInfoSubscription mw_dev_info_subscription( + template (present) Json.AnyURI p_callbackReference := ?, + template (present) FilterCriteriaDevInfo p_filterCriteriaDevInfo := ?, + template Links p_links := *, + template Json.Bool p_requestTestNotification := *, + template WebsockNotifConfig p_websockNotifConfig := *, + template TimeStamp p_expiryDeadline := * + ) := { + subscriptionType := "DevInfoSubscription", + callbackReference := p_callbackReference, + requestTestNotification := p_requestTestNotification, + websockNotifConfig := p_websockNotifConfig, + links := p_links, + filterCriteriaDevInfo := p_filterCriteriaDevInfo, + expiryDeadline := p_expiryDeadline + } // End of template mw_dev_info_subscription + + template (omit) FilterCriteriaDevInfo m_filter_criteria_dev_info( + in template (value) GatewayIdList p_gwId := { PX_FAI_GW_ID }, + in template (omit) DeviceIdList p_deviceId := omit, + in template (omit) DeviceErrStatus p_deviceErrStatus := omit + ) := { + gwId := p_gwId, + deviceId := p_deviceId, + deviceErrStatus := p_deviceErrStatus + } // End of template m_filter_criteria_dev_info + + template (present) FilterCriteriaDevInfo mw_filter_criteria_dev_info( + template (present) GatewayIdList p_gwId := ?, + template DeviceIdList p_deviceId := *, + template DeviceErrStatus p_deviceErrStatus := * + ) := { + gwId := p_gwId, + deviceId := p_deviceId, + deviceErrStatus := p_deviceErrStatus + } // End of template mw_filter_criteria_dev_info + + template (omit) CmConnSubscription m_cm_conn_subscription( + in template (value) Json.AnyURI p_callbackReference, + in template (omit) FilterCriteriaCmConn p_filterCriteriaCmConn := omit, + in template (omit) Links p_links := omit, + in template (omit) Json.Bool p_requestTestNotification := omit, + in template (omit) WebsockNotifConfig p_websockNotifConfig := omit, + in template (omit) TimeStamp p_expiryDeadline := omit + ) := { + subscriptionType := "CmConnSubscription", + callbackReference := p_callbackReference, + requestTestNotification := p_requestTestNotification, + websockNotifConfig := p_websockNotifConfig, + links := p_links, + filterCriteriaCmConn := p_filterCriteriaCmConn, + expiryDeadline := p_expiryDeadline + } // End of template m_cm_conn_subscription + + template (present) CmConnSubscription mw_cm_conn_subscription( + template (present) Json.AnyURI p_callbackReference := ?, + template FilterCriteriaCmConn p_filterCriteriaCmConn := *, + template Links p_links := *, + template Json.Bool p_requestTestNotification := *, + template WebsockNotifConfig p_websockNotifConfig := *, + template TimeStamp p_expiryDeadline := * + ) := { + subscriptionType := "CmConnSubscription", + callbackReference := p_callbackReference, + requestTestNotification := p_requestTestNotification, + websockNotifConfig := p_websockNotifConfig, + links := p_links, + filterCriteriaCmConn := p_filterCriteriaCmConn, + expiryDeadline := p_expiryDeadline + } // End of template mw_cm_conn_subscription + + template (omit) FilterCriteriaCmConn m_filter_criteria_cm_conn( + in template (omit) CpInfo p_customerPremisesInfo := omit, + in template (omit) CmIf p_cmIf := omit + ) := { + customerPremisesInfo := p_customerPremisesInfo, + cmIf := p_cmIf + } // End of template m_filter_criteria_cm_conn + + template FilterCriteriaCmConn mw_filter_criteria_cm_conn( + template CpInfo p_customerPremisesInfo := *, + template CmIf p_cmIf := * + ) := { + customerPremisesInfo := p_customerPremisesInfo, + cmIf := p_cmIf + } // End of template mw_filter_criteria_cm_conn + + template (omit) AniAlarmSubscription m_ani_alarm_subscription( + in template (value) Json.AnyURI p_callbackReference, + in template (omit) FilterCriteriaAniAlarm p_filterCriteriaAniAlarm := omit, + in template (omit) Links p_links := omit, + in template (omit) Json.Bool p_requestTestNotification := omit, + in template (omit) WebsockNotifConfig p_websockNotifConfig := omit, + in template (omit) TimeStamp p_expiryDeadline := omit + ) := { + subscriptionType := "AniAlarmSubscription", + callbackReference := p_callbackReference, + requestTestNotification := p_requestTestNotification, + websockNotifConfig := p_websockNotifConfig, + links := p_links, + filterCriteriaAniAlarm := p_filterCriteriaAniAlarm, + expiryDeadline := p_expiryDeadline + } // End of template m_ani_alarm_subscription + + template (present) AniAlarmSubscription mw_ani_alarm_subscription( + template (present) Json.AnyURI p_callbackReference := ?, + template FilterCriteriaAniAlarm p_filterCriteriaAniAlarm := *, + template Links p_links := *, + template Json.Bool p_requestTestNotification := *, + template WebsockNotifConfig p_websockNotifConfig := *, + template TimeStamp p_expiryDeadline := * + ) := { + subscriptionType := "AniAlarmSubscription", + callbackReference := p_callbackReference, + requestTestNotification := p_requestTestNotification, + websockNotifConfig := p_websockNotifConfig, + links := p_links, + filterCriteriaAniAlarm := p_filterCriteriaAniAlarm, + expiryDeadline := p_expiryDeadline + } // End of template mw_ani_alarm_subscription + + template (omit) FilterCriteriaAniAlarm m_filter_criteria_ani_alarm( + in template (value) OnuIds p_onuId, + in template (value) AniId p_aniId, + in template (omit) CpInfo p_customerPremisesInfo := omit + ) := { + customerPremisesInfo := p_customerPremisesInfo, + onuId := p_onuId, + aniId := p_aniId + } // End of template m_filter_criteria_ani_alarm + + template (present) FilterCriteriaAniAlarm mw_filter_criteria_ani_alarm( + template (present) OnuIds p_onuId := ?, + template (present) AniId p_aniId := ?, + template CpInfo p_customerPremisesInfo := * + ) := { + customerPremisesInfo := p_customerPremisesInfo, + onuId := p_onuId, + aniId := p_aniId + } // End of template mw_filter_criteria_ani_alarm + } // End of module FixedAccessInformationServiceAPI_Templates diff --git a/ttcn/LibMec/FixedAccessInformationServiceAPI/ttcn/FixedAccessInformationServiceAPI_TypesAndValues.ttcn b/ttcn/LibMec/FixedAccessInformationServiceAPI/ttcn/FixedAccessInformationServiceAPI_TypesAndValues.ttcn index de9f30a..2145c5c 100644 --- a/ttcn/LibMec/FixedAccessInformationServiceAPI/ttcn/FixedAccessInformationServiceAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/FixedAccessInformationServiceAPI/ttcn/FixedAccessInformationServiceAPI_TypesAndValues.ttcn @@ -471,7 +471,7 @@ module FixedAccessInformationServiceAPI_TypesAndValues { Json.Bool requestTestNotification optional, WebsockNotifConfig websockNotifConfig optional, Links links optional, - FilterCriteriaCmConn filterCriteriaCmConn, + FilterCriteriaCmConn filterCriteriaCmConn, TimeStamp expiryDeadline optional } with { variant (links) "name as '_links'"; @@ -561,13 +561,13 @@ module FixedAccessInformationServiceAPI_TypesAndValues { * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.3.6-1: Attributes of the AniAlarmSubscription */ type record AniAlarmSubscription { - Json.String subscriptionType, - Json.AnyURI callbackReference optional, - Json.Bool requestTestNotification optional, - WebsockNotifConfig websockNotifConfig optional, - Links links optional, + Json.String subscriptionType, + Json.AnyURI callbackReference optional, + Json.Bool requestTestNotification optional, + WebsockNotifConfig websockNotifConfig optional, + Links links optional, FilterCriteriaAniAlarm filterCriteriaAniAlarm, - TimeStamp expiryDeadline optional + TimeStamp expiryDeadline optional } with { variant (links) "name as '_links'"; } diff --git a/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn b/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn index 7aa9929..8bda338 100644 --- a/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn +++ b/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn @@ -82,15 +82,15 @@ module LibMec_Pixits { modulepar charstring PX_ME_APP_SUPPORT_TIMING_CAPS_URI := "mec_app_support/v2/timing/timing_caps"; - modulepar charstring PX_FAI_FA_INFO_URI := "fai/v1/fa_info"; + modulepar charstring PX_FAI_FA_INFO_URI := "fai/v1/queries/fa_info"; - modulepar charstring PX_FAI_DEVICE_INFO_URI:= "fai/v1/device_info"; + modulepar charstring PX_FAI_DEVICE_INFO_URI:= "fai/v1/queries/device_info"; - modulepar charstring PX_FAI_CABLE_LINE_INFO_URI := "fai/v1/cable_line_info"; + modulepar charstring PX_FAI_CABLE_LINE_INFO_URI := "fai/v1/queries/cable_line_info"; - modulepar charstring PX_FAI_OPTICAL_NW_INFO_URI := "fai/v1/optical_network_info"; + modulepar charstring PX_FAI_OPTICAL_NW_INFO_URI := "fai/v1/queries/optical_network_info"; - modulepar charstring PX_FAI_SUB_URI := "fai/v1/optical_network_info"; + modulepar charstring PX_FAI_SUB_URI := "ai/v1/subscriptions"; modulepar charstring PX_UE_ZONAL_TRAF_SUB_URI := "fai/v1/optical_network_info"; diff --git a/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn b/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn index 24c1189..373d25b 100644 --- a/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn +++ b/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn @@ -144,6 +144,9 @@ module LibHttp_JsonMessageBodyTypes { CableLineInfo cableLineInfo, PonInfo ponInfo, OnuAlarmSubscription onuAlarmSubscription, + DevInfoSubscription devInfoSubscription, + CmConnSubscription cmConnSubscription, + AniAlarmSubscription aniAlarmSubscription, FixedAccessInformationServiceAPI_TypesAndValues.SubscriptionLinkList subscriptionLinkList_fai, UuUnicastProvisioningInfo uuUnicastProvisioningInfo, UuMbmsProvisioningInfo uuMbmsProvisioningInfo, diff --git a/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn b/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn index 3f31307..71dc97c 100644 --- a/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn +++ b/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn @@ -1494,17 +1494,53 @@ module LibHttp_JsonTemplates { subscriptionLinkList_fai := p_subscriptionLinkList } // End of template mw_body_json_fai_subscription_link_list - template (value) JsonBody m_body_json_fai_onu_alarm_subscription_link_list( - in template (value) OnuAlarmSubscription p_onuAlarmSubscription + template (value) JsonBody m_body_json_fai_onu_alarm_subscription( + in template (value) OnuAlarmSubscription p_onuAlarmSubscription ) := { onuAlarmSubscription := p_onuAlarmSubscription - } // End of template m_body_json_fai_onu_alarm_subscription_link_list + } // End of template m_body_json_fai_onu_alarm_subscription - template (present) JsonBody mw_body_json_fai_onu_alarm_subscription_link_list( - template (present) OnuAlarmSubscription p_onuAlarmSubscription := ? + template (present) JsonBody mw_body_json_fai_onu_alarm_subscription( + template (present) OnuAlarmSubscription p_onuAlarmSubscription := ? ) := { onuAlarmSubscription := p_onuAlarmSubscription - } // End of template mw_body_json_fai_onu_alarm_subscription_link_list + } // End of template mw_body_json_fai_onu_alarm_subscription + + template (value) JsonBody m_body_json_fai_dev_info_subscription( + in template (value) DevInfoSubscription p_devInfoSubscription + ) := { + devInfoSubscription := p_devInfoSubscription + } // End of template m_body_json_fai_dev_info_subscription + + template (present) JsonBody mw_body_json_fai_dev_info_subscription( + template (present) DevInfoSubscription p_devInfoSubscription := ? + ) := { + devInfoSubscription := p_devInfoSubscription + } // End of template mw_body_json_fai_dev_info_subscription + + template (value) JsonBody m_body_json_fai_cm_conn_subscription( + in template (value) CmConnSubscription p_cmConnSubscription + ) := { + cmConnSubscription := p_cmConnSubscription + } // End of template m_body_json_fai_cm_conn_subscription + + template (present) JsonBody mw_body_json_fai_cm_conn_subscription( + template (present) CmConnSubscription p_cmConnSubscription := ? + ) := { + cmConnSubscription := p_cmConnSubscription + } // End of template mw_body_json_fai_cm_conn_subscription + + template (value) JsonBody m_body_json_fai_ani_alarm_subscription( + in template (value) AniAlarmSubscription p_aniAlarmSubscription + ) := { + aniAlarmSubscription := p_aniAlarmSubscription + } // End of template m_body_json_fai_ani_alarm_subscription + + template (present) JsonBody mw_body_json_fai_ani_alarm_subscription( + template (present) AniAlarmSubscription p_aniAlarmSubscription := ? + ) := { + aniAlarmSubscription := p_aniAlarmSubscription + } // End of template mw_body_json_fai_ani_alarm_subscription } // End of group fai -- GitLab From c38af3d5954545fc6114204ae16d7168854623f1 Mon Sep 17 00:00:00 2001 From: garciay Date: Wed, 7 Feb 2024 11:37:36 +0100 Subject: [PATCH 68/99] TTF T027: Finalyze review MEC-021 --- ...pplicationMobiltyServiceAPI_TestCases.ttcn | 3183 +++++++++-------- ...licationMobiltyServiceAPI_TestControl.ttcn | 46 + ttcn/LibMec/Ams_ToBeRemoved/module.mk | 7 - .../ttcn/Ams_EncdecDeclarations.ttcn | 22 - .../LibMec/Ams_ToBeRemoved/ttcn/Ams_Pics.ttcn | 8 - .../Ams_ToBeRemoved/ttcn/Ams_Pixits.ttcn | 27 - .../Ams_ToBeRemoved/ttcn/Ams_Templates.ttcn | 267 -- .../ttcn/Ams_TypesAndValues.ttcn | 539 --- ...plicationMobilityServiceAPI_Functions.ttcn | 337 ++ .../ApplicationMobilityServiceAPI_Pixits.ttcn | 15 +- ...plicationMobilityServiceAPI_Templates.ttcn | 282 +- ...tionMobilityServiceAPI_TypesAndValues.ttcn | 26 +- ttcn/LibMec/ttcn/LibMec_Pixits.ttcn | 4 +- .../ttcn/LibHttp_JsonMessageBodyTypes.ttcn | 12 +- .../ttcn/LibHttp_JsonTemplates.ttcn | 134 +- 15 files changed, 2432 insertions(+), 2477 deletions(-) delete mode 100644 ttcn/LibMec/Ams_ToBeRemoved/module.mk delete mode 100644 ttcn/LibMec/Ams_ToBeRemoved/ttcn/Ams_EncdecDeclarations.ttcn delete mode 100644 ttcn/LibMec/Ams_ToBeRemoved/ttcn/Ams_Pics.ttcn delete mode 100644 ttcn/LibMec/Ams_ToBeRemoved/ttcn/Ams_Pixits.ttcn delete mode 100644 ttcn/LibMec/Ams_ToBeRemoved/ttcn/Ams_Templates.ttcn delete mode 100644 ttcn/LibMec/Ams_ToBeRemoved/ttcn/Ams_TypesAndValues.ttcn diff --git a/ttcn/AtsMec_ApplicationMobiltyService/AtsMec_ApplicationMobiltyServiceAPI_TestCases.ttcn b/ttcn/AtsMec_ApplicationMobiltyService/AtsMec_ApplicationMobiltyServiceAPI_TestCases.ttcn index 485c9ac..931930f 100644 --- a/ttcn/AtsMec_ApplicationMobiltyService/AtsMec_ApplicationMobiltyServiceAPI_TestCases.ttcn +++ b/ttcn/AtsMec_ApplicationMobiltyService/AtsMec_ApplicationMobiltyServiceAPI_TestCases.ttcn @@ -11,7 +11,10 @@ */ module AtsMec_ApplicationMobiltyServiceAPI_TestCases { - // Libcommon + // JSON + import from Json all; + + // Libcommon import from LibCommon_BasicTypesAndValues all; import from LibCommon_Sync all; @@ -23,7 +26,9 @@ import from LibHttp_TestSystem all; // LibMec_ApplicationMobiltyServiceAPI + import from ApplicationMobilityServiceAPI_TypesAndValues all; import from ApplicationMobilityServiceAPI_Templates all; + import from ApplicationMobilityServiceAPI_Functions all; import from ApplicationMobilityServiceAPI_Pics all; import from ApplicationMobilityServiceAPI_Pixits all; @@ -36,263 +41,55 @@ group appMobilityServices { - /** - * @desc Check that the AMS service returns information about the registered application mobility services when requested - * @see ETSI GS MEC 021 2.1.1, clause 8.3.3.1 - */ - // testcase TC_MEC_MEC012_SRV_AMS_001_OK() runs on HttpComponent system HttpTestAdapter { - // // Local variables - // var Headers v_headers; - // var HttpMessage v_response; - - // // Test control - // if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { - // log("*** " & testcasename() & ": PICS_AMS 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_ME_APP_AMS_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_mobility_service_info( - // mw_app_mobility_service_info( - // { - // mw_app_mobility_registration_info( - // mw_service_consumer_id( - // PX_APP_INS_ID, - // PX_MEP_ID - // ) - // ) - // } - // )))))) -> value v_response { - // tc_ac.stop; - - // if (f_check_headers(valueof(v_response.response.header)) == true) { - // log("*** " & testcasename() & ": PASS: IUT successfully responds with a AppTerminationNotificationSubscription ***"); - // 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_MEC012_SRV_AMS_001_OK - - /** - * @desc Check that the AMS service returns an error when receives a query about a registered application mobility service with wrong parameters - * @see ETSI GS MEC 021 2.1.1, clause 8.3.3.1 - */ - testcase TC_MEC_MEC012_SRV_AMS_001_BR() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - - // Test control - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_AMS 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_ME_APP_AMS_URI & "?appMobilityService=" & oct2char(unichar2oct(PX_APP_MOBILITY_SERVICE_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( - mw_http_message_body_json( - mw_body_json_problem_details( - mw_problem_details( - -, - -, - 400 - )))))) { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a ProblemDetails set to 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_MEC012_SRV_AMS_001_BR - - - /** - * @desc Check that the AMS service creates a new application mobility services when requested - * @see ETSI GS MEC 021 2.1.1, clause 8.3.3.4 - */ - testcase TC_MEC_MEC012_SRV_AMS_002_OK() runs on HttpComponent system HttpTestAdapter { - var Headers v_headers; - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_AMS 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_ME_APP_AMS_URI, - v_headers, - m_http_message_body_json( - m_body_json_ams_registration_info( - m_registration_info( - PX_APP_MOBILITY_SERVICE_ID, - m_service_consumer_id( - PX_APP_INS_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_mobility_service_info( - mw_app_mobility_service_info( - mw_registration_info( - mw_service_consumer_id( - PX_APP_INS_ID, - - - ), - -, - - - ), - PX_APP_MOBILITY_SERVICE_ID - ) - ) - ) - ) - ) - ) - - { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a AppMobilityServiceInfo and status code set to 201 Created ***"); - 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_MEC012_SRV_AMS_002_OK - - /** - * @desc Check that the AMS service sends an error when it receives a malformed request to create a new application mobility service - * @see ETSI GS MEC 021 2.1.1, clause 8.3.3.4 - */ - testcase TC_MEC_MEC012_SRV_AMS_002_BR() runs on HttpComponent system HttpTestAdapter { - var Headers v_headers; - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_AMS 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_ME_APP_AMS_URI, - v_headers, - m_http_message_body_json( - m_body_json_ams_registration_info( - m_registration_info( - PX_APP_MOBILITY_SERVICE_ID, - m_service_consumer_error( - PX_APP_INS_ID, - - - ) - ) - ) - ) - ) - ) - ); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body - tc_ac.start; - 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 - ) - ) - ) - ) - ) - ) - { + /** + * @desc Check that the AMS service returns information about the registered application mobility services when requested + */ + testcase TC_MEC_MEC021_SRV_AMS_001_OK_01() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var RegistrationInfo v_registration_info_1; + var RegistrationInfo v_registration_info_2; + + // Test control + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_create_application_mobility_services(-, v_registration_info_1); + f_create_application_mobility_services(PX_APP_INS_ID_2, v_registration_info_2); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_APP_AMS_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_ams_registration_info_list( + { + *, + v_registration_info_1, + v_registration_info_2, + * + } + ))))) { tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a Problem Details when bad request is performed ***"); + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of RegistrationInfo ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -300,1087 +97,1723 @@ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - - } // End of testcase TC_MEC_MEC012_SRV_AMS_002_BR - } // End of group appMobilityServices - - - group individualAppMobilityService{ - - /** - * @desc Check that the AMS service returns information about this individual application mobility service - * @see ETSI GS MEC 021 2.0.10, clause 8.4.3.1 - */ - testcase TC_MEC_MEC012_SRV_AMS_011_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_AMS 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_ME_APP_AMS_URI & oct2char(unichar2oct(PX_APP_MOBILITY_SERVICE_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_mobility_service_info( - mw_app_mobility_service_info( - -, - PX_APP_MOBILITY_SERVICE_ID - )))))) -> value v_response { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a AppMobilityServiceInfo***"); - 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_MEC012_SRV_AMS_011_OK - - /** - * @desc Check that the AMS service sends an error when receives a query about a not existing individual application mobility service - * @see ETSI GS MEC 021 2.0.10, clause 8.4.3.1 - */ - testcase TC_MEC_MEC012_SRV_AMS_011_NF() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - - // Test control - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); - setverdict(inconc); - stop; + + // Postamble + f_delete_application_mobility_services(v_registration_info_1.appMobilityServiceId); + f_delete_application_mobility_services(v_registration_info_2.appMobilityServiceId); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC021_SRV_AMS_001_OK_01 + + /** + * @desc Check that the AMS service returns information about the a specific registered application mobility service when requested - filter + */ + testcase TC_MEC_MEC021_SRV_AMS_001_OK_02() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var RegistrationInfo v_registration_info_1; + var RegistrationInfo v_registration_info_2; + + // Test control + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_create_application_mobility_services(-, v_registration_info_1); + f_create_application_mobility_services(PX_APP_INS_ID_2, v_registration_info_2); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_APP_AMS_URI & "?filter=(eq,appMobilityServiceId," & v_registration_info_1.appMobilityServiceId & ")", + 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_ams_registration_info_list( + { + *, + v_registration_info_1, + * + } + ))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of RegistrationInfo ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } - - // 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_ME_APP_AMS_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_APP_MOBILITY_SERVICE_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 - - } // End of testcase TC_MEC_MEC012_SRV_AMS_011_NF - - - - /** - * @desc Check that the AMS service modifies the individual application mobility service when requested - * @see ETSI GS MEC 021 2.0.10, clause 8.4.3.2 - */ - testcase TC_MEC_MEC012_SRV_AMS_012_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); - setverdict(inconc); - stop; + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } - - // 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_ME_APP_AMS_URI & oct2char(unichar2oct(PX_APP_MOBILITY_SERVICE_ID, "UTF-8")), - v_headers, - m_http_message_body_json( - m_body_json_ams_registration_info( - m_registration_info( - PX_APP_MOBILITY_SERVICE_ID, - m_service_consumer_id( - PX_APP_INS_ID, - - - ), - -, - - - ) - ) - ) - ))); - 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_mobility_service_info( - mw_app_mobility_service_info({ - *, - mw_app_mobility_registration_info( - mw_service_consumer_id( - PX_APP_INS_ID, - - - ), - -, - - - ), - *}, - - - ) - ) - ) - ))) -> value v_response { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a AppMobilityServiceInfo***"); - 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_MEC012_SRV_AMS_012_OK - - /** - * @desc Check that the AMS service sends an error when receives a request to modify a not existing individual application mobility service - * @see ETSI GS MEC 021 2.0.10, clause 8.4.3.2 - */ - testcase TC_MEC_MEC012_SRV_AMS_012_NF() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - - // Test control - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); - setverdict(inconc); - stop; + } // End of 'alt' statement + + // Postamble + f_delete_application_mobility_services(v_registration_info_1.appMobilityServiceId); + f_delete_application_mobility_services(v_registration_info_2.appMobilityServiceId); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC021_SRV_AMS_001_OK_02 + + /** + * @desc Check that the AMS service returns information about the a specific registered application mobility service when requested - filter + */ + testcase TC_MEC_MEC021_SRV_AMS_001_OK_03() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var RegistrationInfo v_registration_info_1; + var RegistrationInfo v_registration_info_2; + + // Test control + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_create_application_mobility_services(-, v_registration_info_1); + f_create_application_mobility_services(PX_APP_INS_ID_2, v_registration_info_2); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_APP_AMS_URI & "?filter=(eq,serviceConsumerId[appInstanceId]," & PX_APP_INS_ID_2 & ")", + 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_ams_registration_info_list( + { + *, + v_registration_info_2, + * + } + ))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of RegistrationInfo ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } - - // 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_ME_APP_AMS_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_APP_MOBILITY_SERVICE_ID, "UTF-8")), - v_headers, - m_http_message_body_json( - m_body_json_ams_registration_info( - m_registration_info( - PX_APP_MOBILITY_SERVICE_ID, - m_service_consumer_id( - PX_APP_INS_ID, - - - ), - -, - - - ) - ) - ) - ))); - 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 - - } // End of testcase TC_MEC_MEC012_SRV_AMS_012_NF - - /** - * @desc Check that the AMS service sends an error when receives a request to modify a individual application mobility service using bad parameters - * @see ETSI GS MEC 021 2.0.10, clause 8.4.3.2 - */ - testcase TC_MEC_MEC012_SRV_AMS_012_BR() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - - // Test control - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); - setverdict(inconc); - stop; + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } - - // 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_ME_APP_AMS_URI & "/" & oct2char(unichar2oct(PX_APP_MOBILITY_SERVICE_ID, "UTF-8")), - v_headers, - m_http_message_body_json( - m_body_json_ams_registration_request( - m_registration_info( - PX_APP_MOBILITY_SERVICE_ID, - m_service_consumer_id_with_error( - PX_APP_INS_ID, - - - ), - -, - - - ) - ) - ) - ))); - 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 - - } // End of testcase TC_MEC_MEC012_SRV_AMS_012_BR - - - /** - * @desc Check that the AMS service de-register the individual application mobility service and delete the resource - * that represents the individual application mobility service - * @see ETSI GS MEC 021 2.0.10, clause 8.4.3.5 - */ - testcase TC_MEC_MEC012_SRV_AMS_013_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); - setverdict(inconc); - stop; + } // End of 'alt' statement + + // Postamble + f_delete_application_mobility_services(v_registration_info_1.appMobilityServiceId); + f_delete_application_mobility_services(v_registration_info_2.appMobilityServiceId); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC021_SRV_AMS_001_OK_03 + + /** + * @desc Check that the AMS service returns information about the a specific registered application mobility service when requested - exclude_fields + */ + testcase TC_MEC_MEC021_SRV_AMS_001_OK_04() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var RegistrationInfo v_registration_info_1; + var RegistrationInfo v_registration_info_2; + + // Test control + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_create_application_mobility_services(-, v_registration_info_1); + f_create_application_mobility_services(PX_APP_INS_ID_2, v_registration_info_2); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_APP_AMS_URI & "?filter=(eq,appMobilityServiceId," & v_registration_info_1.appMobilityServiceId & "&exclude_fields=[deviceInformation])", + 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_ams_registration_info_list( + { + *, + mw_registration_info( + v_registration_info_1.appMobilityServiceId, + mw_service_consumer_id( + PX_APP_INS_ID, + PX_MEP_ID + )), + * + } + ))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of RegistrationInfo ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } - - // 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_ME_APP_AMS_URI & oct2char(unichar2oct(PX_APP_MOBILITY_SERVICE_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 ***"); - 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_MEC012_SRV_AMS_013_OK - - /** - * @desc Check that the AMS service sends an error when is requested to delete the resource - * that represents the individual application mobility service - * @see ETSI GS MEC 021 2.0.10, clause 8.4.3.5 - */ - testcase TC_MEC_MEC012_SRV_AMS_013_NF() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - - // Test control - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); - setverdict(inconc); - stop; + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } - - // 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_ME_APP_AMS_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_APP_MOBILITY_SERVICE_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 - - } // End of testcase TC_MEC_MEC012_SRV_AMS_013_NF - - } - - group appMobilityServiceDeregisterTask { - - /** - * @desc Check that the AMS service deregister an individual application mobility service on expiry of the timer associated with the service - * @see ETSI GS MEC 021 2.0.10, clause 8.5.3.4 - */ - testcase TC_MEC_MEC012_SRV_AMS_014_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); - setverdict(inconc); - stop; + } // End of 'alt' statement + + // Postamble + f_delete_application_mobility_services(v_registration_info_1.appMobilityServiceId); + f_delete_application_mobility_services(v_registration_info_2.appMobilityServiceId); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC021_SRV_AMS_001_OK_04 + + /** + * @desc Check that the AMS service returns information about the registered application mobility services when requested - No registered application mobility service + */ + testcase TC_MEC_MEC021_SRV_AMS_001_OK_05() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_AMS 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_ME_APP_AMS_URI, + v_headers + ))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_ok_no_body + )) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with an empty body ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } - - // 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_ME_APP_AMS_URI & oct2char(unichar2oct(PX_APP_MOBILITY_SERVICE_ID, "UTF-8")) & "/deregisterTask", - 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_mobility_service_info( - mw_app_mobility_service_info({ - *, - mw_app_mobility_registration_info( - mw_service_consumer_id( - PX_APP_INS_ID, - - - ), - -, - - - ), - *}, - - - ) - ) - ) - ))) -> value v_response { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a AppMobilityServiceInfo***"); - 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_MEC012_SRV_AMS_014_OK - - /** - * @desc Check that the AMS service send an error when is requested to deregister a not existent individual application mobility service - * @see ETSI GS MEC 021 2.0.10, clause 8.5.3.4 - */ - testcase TC_MEC_MEC012_SRV_AMS_014_NF() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); - setverdict(inconc); - stop; + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } - - // 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_ME_APP_AMS_URI & oct2char(unichar2oct(PX_NON_EXISTENT_APP_MOBILITY_SERVICE_ID, "UTF-8")) & "/deregisterTask", - 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***"); - 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_MEC012_SRV_AMS_012_OK - - - } - - group appMobilityServicesSubscriptions { + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC021_SRV_AMS_001_OK_05 + + /** + * @desc Check that the AMS service returns an error when receives a query about a registered application mobility service with wrong parameters + */ + testcase TC_MEC_MEC021_SRV_AMS_001_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var RegistrationInfo v_registration_info_1; + var RegistrationInfo v_registration_info_2; + + // Test control + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_create_application_mobility_services(-, v_registration_info_1); + f_create_application_mobility_services(PX_APP_INS_ID_2, v_registration_info_2); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_APP_AMS_URI & "?appMobilityService=" & "?filter=(appMobilityServiceId,eq," & v_registration_info_1.appMobilityServiceId & ")", // Wrong syntax + 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( + mw_http_message_body_json( + mw_body_json_problem_details( + mw_problem_details( + -, + -, + 400 + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a ProblemDetails set to 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_delete_application_mobility_services(v_registration_info_1.appMobilityServiceId); + f_delete_application_mobility_services(v_registration_info_2.appMobilityServiceId); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC021_SRV_AMS_001_BR + + /** + * @desc Check that the AMS service creates a new application mobility services when requested + */ + testcase TC_MEC_MEC021_SRV_AMS_002_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var Json.String v_app_mobility_service_id; + + // Test control + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_AMS 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_ME_APP_AMS_URI, + v_headers, + m_http_message_body_json( + m_body_json_ams_registration_info( + m_registration_info( + -, + m_service_consumer_id( + PX_APP_INS_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_ams_registration_info( + mw_registration_info( + ?, + mw_service_consumer_id( + PX_APP_INS_ID + ))))))) -> value v_response { + tc_ac.stop; + + v_app_mobility_service_id := v_response.response.body.json_body.registrationInfo.appMobilityServiceId; + log("*** " & testcasename() & ": PASS: IUT successfully responds with a v_app_mobility_service_id ", v_app_mobility_service_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 + + // Postamble + f_delete_application_mobility_services(v_app_mobility_service_id); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC021_SRV_AMS_002_OK + + /** + * @desc Check that the AMS service sends an error when it receives a malformed request to create a new application mobility service + */ + testcase TC_MEC_MEC021_SRV_AMS_002_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var Json.String v_app_mobility_service_id; + + // Test control + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_AMS 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_ME_APP_AMS_URI, + v_headers, + m_http_message_body_json( + m_body_json_ams_registration_info( + m_registration_info( + PX_APP_INS_ID, // Wrong field value: Shall be absent in POST requests, and present otherwise + m_service_consumer_id( + PX_APP_INS_ID + ))))))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + 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 + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a Problem Details when bad request is performed ***"); + 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_MEC021_SRV_AMS_002_BR + + } // End of group appMobilityServices + + group appMobilityServicesSubscriptions { + + /** + * @desc Check that the AMS service returns information about the available subscriptions when requested + */ + testcase TC_MEC_MEC021_SRV_AMS_003_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var MobilityProcedureSubscription v_mobility_procedure_subscription; + var charstring v_subscription_id; + + // Test control + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_create_mobility_procedure_subscription(v_mobility_procedure_subscription, v_subscription_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_APP_AMS_SUBS & "?subscriptionType=" & v_mobility_procedure_subscription.subscriptionType, + 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_ams_subscriptions( + mw_subscription_link_list( + v_mobility_procedure_subscription.links, + mw_subscription( + -, + v_mobility_procedure_subscription.subscriptionType + ))))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with the list of subscriptions type MobilityProcedureSubscription ***"); + 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_mobility_procedure_subscription(v_subscription_id); + f_cf_01_http_down(); + } // END TC_MEC_MEC021_SRV_AMS_003_OK + + /** + * @desc Check that the AMS service sends an error when it receives a malformed query about the available subscriptions + */ + testcase TC_MEC_MEC021_SRV_AMS_003_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_AMS 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_ME_APP_AMS_SUBS & "?subscriptionType=info_app_adj", // Wrong parameter + 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 TC_MEC_MEC021_SRV_AMS_003_BR + + /** + * @desc Check that the AMS service creates a notification subscriptions when requested + */ + testcase TC_MEC_MEC021_SRV_AMS_004_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var charstring v_subscription_id; + + // Test control + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_AMS 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_ME_APP_AMS_SUBS, + v_headers, + m_http_message_body_json( + m_body_json_ams_mobility_procedure_subscription( + m_mobility_procedure_subscription( + PX_CALLBACK_REFERENCE, + m_filter_criteria + )))))); + 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_ams_mobility_procedure_subscription( + mw_mobility_procedure_subscription( + PX_CALLBACK_REFERENCE, + mw_filter_criteria, + mw_links + )))))) -> value v_response { + tc_ac.stop; + + // Check HTTP Location header + if (f_check_headers(v_response.response.header) == false) { + log("*** " & testcasename() & ": FAIL: IUT failed in Area subscription ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_error); + } else { + var charstring_list v_header_location; + f_get_header(v_response.response.header, "Location", v_header_location); + v_subscription_id := regexp( + v_header_location[0], + "?+" & PX_ME_APP_AMS_SUBS & "/(?*)", + 0 + ); + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a AMS Subscription and 201 Created status code, SubscriptionId: ", v_subscription_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 + + // Postamble + f_delete_mobility_procedure_subscription(v_subscription_id); + f_cf_01_http_down(); + } // End of TC_MEC_MEC021_SRV_AMS_004_OK + + /** + * @desc Check that the AMS service sends an error when it receives a malformed request to create a notification subscription + */ + testcase TC_MEC_MEC021_SRV_AMS_004_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var MobilityProcedureSubscription v_mobility_procedure_subscription; + var charstring v_subscription_id; + + // Test control + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_create_mobility_procedure_subscription(v_mobility_procedure_subscription, v_subscription_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_ME_APP_AMS_SUBS, + v_headers, + m_http_message_body_json( + m_body_json_ams_mobility_procedure_subscription( + m_mobility_procedure_subscription_error( + PX_CALLBACK_REFERENCE, + m_filter_criteria + )))))); + 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_delete_mobility_procedure_subscription(v_subscription_id); + f_cf_01_http_down(); + } // End of TC_MEC_MEC021_SRV_AMS_004_BR + + /** + * @desc Check that the AMS service returns information about a given subscription when requested + */ + testcase TC_MEC_MEC021_SRV_AMS_005_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var MobilityProcedureSubscription v_mobility_procedure_subscription; + var charstring v_subscription_id; + + // Test control + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_create_mobility_procedure_subscription(v_mobility_procedure_subscription, v_subscription_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_APP_AMS_SUBS & "/" & v_subscription_id, + 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_ams_mobility_procedure_subscription( + v_mobility_procedure_subscription + ))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct 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 + + // Postamble + f_delete_mobility_procedure_subscription(v_subscription_id); + f_cf_01_http_down(); + } // End of TC_MEC_MEC021_SRV_AMS_005_OK + + /** + * @desc Check that the AMS service returns an error when receives a query about a not existing subscription + */ + testcase TC_MEC_MEC021_SRV_AMS_005_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var MobilityProcedureSubscription v_mobility_procedure_subscription; + var charstring v_subscription_id; + + // Test control + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_create_mobility_procedure_subscription(v_mobility_procedure_subscription, v_subscription_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_APP_AMS_SUBS & "/" & PX_NON_EXISTENT_SUBSCRIPTION_ID, + 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_mobility_procedure_subscription(v_subscription_id); + f_cf_01_http_down(); + } // End of TC_MEC_MEC021_SRV_AMS_005_NF + + /** + * @desc Check that the AMS service deletes a given subscription when requested + */ + testcase TC_MEC_MEC021_SRV_AMS_006_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var MobilityProcedureSubscription v_mobility_procedure_subscription; + var charstring v_subscription_id; + + // Test control + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_create_mobility_procedure_subscription(v_mobility_procedure_subscription, v_subscription_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & PX_ME_APP_AMS_SUBS & "/" & v_subscription_id, + 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 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 + + // Postamble + f_cf_01_http_down(); + } // End of TC_MEC_MEC021_SRV_AMS_006_OK - /** - * @desc Check that the AMS service returns information about the available subscriptions when requested. - * Permitted SUBSCRIPTION_TYPE are: - * - MobilityProcedureSubscription - * - AdjacentAppInfoSubscription - * @see ETSI GS MEC 021 2.1.1, clause 8.6.3.1 - */ - testcase TC_MEC_MEC012_SRV_AMS_003_OK() runs on HttpComponent system HttpTestAdapter { - var Headers v_headers; - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); - setverdict(inconc); - stop; + /** + * @desc Check that the AMS service sends an error when it receives a delete request for a not existing subscription + */ + testcase TC_MEC_MEC021_SRV_AMS_006_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var MobilityProcedureSubscription v_mobility_procedure_subscription; + var charstring v_subscription_id; + + // Test control + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_create_mobility_procedure_subscription(v_mobility_procedure_subscription, v_subscription_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & PX_ME_APP_AMS_SUBS & "/" & PX_NON_EXISTENT_SUBSCRIPTION_ID, + 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_mobility_procedure_subscription(v_subscription_id); + f_cf_01_http_down(); + } // End of TC_MEC_MEC021_SRV_AMS_006_NF + + /** + * @desc Check that the AMS service modifies a given subscription when requested + */ + testcase TC_MEC_MEC021_SRV_AMS_007_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var MobilityProcedureSubscription v_mobility_procedure_subscription; + var charstring v_subscription_id; + + // Test control + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_create_mobility_procedure_subscription(v_mobility_procedure_subscription, v_subscription_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_put( + PICS_ROOT_API & PX_ME_APP_AMS_SUBS & "/" & v_subscription_id, + v_headers, + m_http_message_body_json( + m_body_json_ams_mobility_procedure_subscription( + m_mobility_procedure_subscription( + PX_CALLBACK_REFERENCE, + m_filter_criteria( + PX_APP_INS_ID + ))))))); + 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_ams_mobility_procedure_subscription( + m_mobility_procedure_subscription( + PX_CALLBACK_REFERENCE, + m_filter_criteria( + PX_APP_INS_ID + ))))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully updates successfully the 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 + + // Postamble + f_delete_mobility_procedure_subscription(v_subscription_id); + f_cf_01_http_down(); + } // End of TC_MEC_MEC021_SRV_AMS_007_OK + + /** + * @desc Check that the AMS service sends an error when it receives a malformed modify request for a given subscription + */ + testcase TC_MEC_MEC021_SRV_AMS_007_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var MobilityProcedureSubscription v_mobility_procedure_subscription; + var charstring v_subscription_id; + + // Test control + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_create_mobility_procedure_subscription(v_mobility_procedure_subscription, v_subscription_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_put( + PICS_ROOT_API & PX_ME_APP_AMS_SUBS & "/" & v_subscription_id, + v_headers, + m_http_message_body_json( + m_body_json_ams_mobility_procedure_subscription( + m_mobility_procedure_subscription_error( + PX_CALLBACK_REFERENCE, + m_filter_criteria( + PX_APP_INS_ID + ))))))); + 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_delete_mobility_procedure_subscription(v_subscription_id); + f_cf_01_http_down(); + } // End of TC_MEC_MEC021_SRV_AMS_007_BR + + /** + * @desc Check that the AMS service sends an error when it receives a modify request for a not existing subscription + */ + testcase TC_MEC_MEC021_SRV_AMS_007_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var MobilityProcedureSubscription v_mobility_procedure_subscription; + var charstring v_subscription_id; + + // Test control + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_create_mobility_procedure_subscription(v_mobility_procedure_subscription, v_subscription_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_put( + PICS_ROOT_API & PX_ME_APP_AMS_SUBS & "/" & PX_NON_EXISTENT_SUBSCRIPTION_ID, + v_headers, + m_http_message_body_json( + m_body_json_ams_mobility_procedure_subscription( + m_mobility_procedure_subscription( + PX_CALLBACK_REFERENCE, + m_filter_criteria( + PX_APP_INS_ID + ))))))); + 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_mobility_procedure_subscription(v_subscription_id); + f_cf_01_http_down(); + } // End of TC_MEC_MEC021_SRV_AMS_007_NF + + } // End of group appMobilityServicesSubscriptions + + group ams_notifications { + + /** + * @desc Check that the AMS service sends an AMS notification about a mobility procedure if the AMS service has an associated subscription and the event is generated + */ + testcase TC_MEC_MEC021_SRV_AMS_008_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var MobilityProcedureSubscription v_mobility_procedure_subscription; + var charstring v_subscription_id; + + // Test control + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_notif_up(); + + // Preamble + f_create_mobility_procedure_subscription(v_mobility_procedure_subscription, v_subscription_id); + action("Trigger a mobility procedure event"); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_wait.start; + alt { + [] httpPort_notif.receive( + mw_http_request( + mw_http_request_post( + -, + -, + mw_http_message_body_json( + mw_body_json_mobility_procedure_notification( + mw_mobility_procedure_notification( + v_mobility_procedure_subscription.links + )))))) { + tc_wait.stop; + + // Send 204 No Content + f_init_default_headers_list(-, -, v_headers); + httpPort_notif.send(m_http_response(m_http_response_204_no_content(v_headers))); + + log("*** " & testcasename() & ": PASS: IUT successfully sends mobility procedure 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_delete_mobility_procedure_subscription(v_subscription_id); + f_cf_01_http_notif_down(); + } // End of TC_MEC_MEC021_SRV_AMS_008_OK + + /** + * @desc Check that the AMS service sends an AMS notification about adjacent application instances if the AMS service has an associated subscription and the event is generated + */ + testcase TC_MEC_MEC021_SRV_AMS_009_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var AdjacentAppInfoSubscription v_adjacent_appInfo_subscription; + var charstring v_subscription_id; + + // Test control + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_notif_up(); + + // Preamble + f_create_adjacent_appInfo_subscription(v_adjacent_appInfo_subscription, v_subscription_id); + action("Trigger a mobility procedure event"); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_wait.start; + alt { + [] httpPort_notif.receive( + mw_http_request( + mw_http_request_post( + -, + -, + mw_http_message_body_json( + mw_body_json_adjacent_app_info_notification( + mw_adjacent_app_info_notification( + v_adjacent_appInfo_subscription.links + )))))) { + tc_wait.stop; + + // Send 204 No Content + f_init_default_headers_list(-, -, v_headers); + httpPort_notif.send(m_http_response(m_http_response_204_no_content(v_headers))); + + log("*** " & testcasename() & ": PASS: IUT successfully sends adjacent appInfo 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_delete_adjacent_appInfo_subscription(v_subscription_id); + f_cf_01_http_notif_down(); + } // End of TC_MEC_MEC021_SRV_AMS_009_OK + + /** + * @desc Check that the AMS service sends an AMS notification on subscription expiration if the AMS service has an associated subscription and the event is generated + */ + testcase TC_MEC_MEC021_SRV_AMS_010_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var MobilityProcedureSubscription v_mobility_procedure_subscription; + var charstring v_subscription_id; + + // Test control + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_notif_up(); + + // Preamble + f_create_mobility_procedure_subscription(v_mobility_procedure_subscription, v_subscription_id); + action("Trigger a mobility procedure event"); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_wait.start; + alt { + [] httpPort_notif.receive( + mw_http_request( + mw_http_request_post( + -, + -, + mw_http_message_body_json( + mw_body_json_mobility_procedure_notification( + mw_mobility_procedure_notification( + v_mobility_procedure_subscription.links + )))))) { + tc_wait.stop; + + // Send 204 No Content + f_init_default_headers_list(-, -, v_headers); + httpPort_notif.send(m_http_response(m_http_response_204_no_content(v_headers))); + + log("*** " & testcasename() & ": INFO: IUT successfully sends mobility procedure notification ***"); + repeat; } - - // 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( - //@TODO: How can we convert enums in strings? - "/" & PICS_ROOT_API & PX_ME_APP_AMS_SUBS & "?subscriptionType=" & int2str(enum2int(PX_SUBSCRIPTION_TYPE)), - 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_ams_subscriptions( - mw_ams_subscription( - PX_SUBSCRIPTION_TYPE, - -, - -, - -, - - - ) - ) - ) - ) - ) - ) - { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with the list of subscriptions type MobilityProcedureSubscription ***"); - 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 TC_MEC_MEC012_SRV_AMS_003_OK - - /** - * @desc Check that the AMS service sends an error when it receives a malformed query about the available subscriptions - * @see ETSI GS MEC 021 2.1.1, clause 8.6.3.1 - */ - testcase TC_MEC_MEC012_SRV_AMS_003_BR() runs on HttpComponent system HttpTestAdapter { - var Headers v_headers; - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); - setverdict(inconc); - stop; + [] httpPort_notif.receive( + mw_http_request( + mw_http_request_post( + -, + -, + mw_http_message_body_json( + mw_body_json_expire_notification( + mw_expire_notification + ))))) { + tc_wait.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully sends expiry 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_delete_mobility_procedure_subscription(v_subscription_id); + } // End of TC_MEC_MEC021_SRV_AMS_009_OK + + } // End of group ams_notifications + + group individualAppMobilityService { - // 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_ME_APP_AMS_SUBS & "?subscriptionTyp=" & int2str(enum2int(PX_SUBSCRIPTION_TYPE)), - 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( - mw_http_message_body_json( - mw_body_json_problem_details( - mw_problem_details( - -, -, 400 - ) - ) - ) - ) - ) - ) - { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a ProblemDetails set to 400 Bad Request ***"); + /** + * @desc Check that the AMS service returns information about this individual application mobility service + */ + testcase TC_MEC_MEC021_SRV_AMS_011_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var RegistrationInfo v_registration_info_1; + var RegistrationInfo v_registration_info_2; + + // Test control + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_create_application_mobility_services(PX_APP_INS_ID, v_registration_info_1); + f_create_application_mobility_services(PX_APP_INS_ID_2, v_registration_info_2); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_APP_AMS_URI & oct2char(unichar2oct(v_registration_info_1.appMobilityServiceId, "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_ams_registration_info( + v_registration_info_1 + ))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a the correct RegistrationInfo ***"); 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 TC_MEC_MEC012_SRV_AMS_003_BR - - /** - * @desc Check that the AMS service creates a notification subscriptions when requested. - * Permitted SUBSCRIPTION_TYPE are: - * - MobilityProcedureSubscription - * - AdjacentAppInfoSubscription - * @see ETSI GS MEC 021 2.1.1, clause 8.6.3.4 - */ - testcase TC_MEC_MEC012_SRV_AMS_004_OK() runs on HttpComponent system HttpTestAdapter { - var Headers v_headers; - if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_AMS 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_ME_APP_AMS_SUBS, - v_headers, - m_http_message_body_json( - m_body_json_ams_subscriptions( - m_ams_subscription( - PX_SUBSCRIPTION_TYPE, - PX_CALLBACK_REFERENCE, - -, - -, - - - ) - ) - ) - ) - ) - ); - 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_ams_subscriptions( - mw_ams_subscription( - PX_SUBSCRIPTION_TYPE, - PX_CALLBACK_REFERENCE, - -, - -, - - - ) - ) - ) - ) - ) - ) - { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a AMS Subscription and 201 Created status code ***"); + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_delete_application_mobility_services(v_registration_info_1.appMobilityServiceId); + f_delete_application_mobility_services(v_registration_info_2.appMobilityServiceId); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC021_SRV_AMS_011_OK + + /** + * @desc Check that the AMS service sends an error when receives a query about a not existing individual application mobility service + */ + testcase TC_MEC_MEC021_SRV_AMS_011_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var RegistrationInfo v_registration_info_1; + var RegistrationInfo v_registration_info_2; + + // Test control + if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Preamble + f_create_application_mobility_services(PX_APP_INS_ID, v_registration_info_1); + f_create_application_mobility_services(PX_APP_INS_ID_2, v_registration_info_2); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_APP_AMS_URI & oct2char(unichar2oct(PX_NON_EXISTENT_APP_MOBILITY_SERVICE_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 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 - - } // End of TC_MEC_MEC012_SRV_AMS_004_OK - - /** - * @desc Check that the AMS service sends an error when it receives a malformed request to create a notification subscription - * Permitted SUBSCRIPTION_TYPE are: - * - MobilityProcedureSubscription - * - AdjacentAppInfoSubscription - * @see ETSI GS MEC 021 2.1.1, clause 8.6.3.4 - */ - testcase TC_MEC_MEC012_SRV_AMS_004_BR() runs on HttpComponent system HttpTestAdapter { + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_delete_application_mobility_services(v_registration_info_1.appMobilityServiceId); + f_delete_application_mobility_services(v_registration_info_2.appMobilityServiceId); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC021_SRV_AMS_011_NF + + /** + * @desc Check that the AMS service modifies the individual application mobility service when requested + */ + testcase TC_MEC_MEC021_SRV_AMS_012_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables var Headers v_headers; + var RegistrationInfo v_registration_info_1; + var RegistrationInfo v_registration_info_2; + + // Test control if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); setverdict(inconc); stop; } - + // Test component configuration f_cf_01_http_up(); - - + // Preamble + f_create_application_mobility_services(PX_APP_INS_ID, v_registration_info_1); + f_create_application_mobility_services(PX_APP_INS_ID_2, v_registration_info_2); + v_registration_info_1.serviceConsumerId.appInstanceId := PX_APP_INS_ID_NEW; f_init_default_headers_list(-, -, v_headers); httpPort.send( - m_http_request( - m_http_request_post( - "/" & PICS_ROOT_API & PX_ME_APP_AMS_SUBS, - v_headers, - m_http_message_body_json( - m_body_json_ams_subscriptions( - m_ams_subscription_error( - PX_SUBSCRIPTION_TYPE, - PX_CALLBACK_REFERENCE, - -, - -, - - - ) - ) - ) - ) - ) - ); + m_http_request( + m_http_request_put( + PICS_ROOT_API & PX_ME_APP_AMS_URI & oct2char(unichar2oct(v_registration_info_1.appMobilityServiceId, "UTF-8")), + v_headers, + m_http_message_body_json( + m_body_json_ams_registration_info( + v_registration_info_1 + ))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); - + // Test Body tc_ac.start; 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( + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_ams_registration_info( + v_registration_info_1 + ))))) { tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a Problem Details and 400 Bad request status code ***"); - f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + + log("*** " & testcasename() & ": PASS: IUT successfully updates with a the correct RegistrationInfo ***"); + 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 TC_MEC_MEC012_SRV_AMS_004_BR - - /** - * @desc Check that the AMS service returns information about a given subscription when requested. - * Permitted SUBSCRIPTION_TYPE are: - * - MobilityProcedureSubscription - * - AdjacentAppInfoSubscription - * @see ETSI GS MEC 021 2.1.1, clause 8.7.3.1 - */ - testcase TC_MEC_MEC012_SRV_AMS_005_OK() runs on HttpComponent system HttpTestAdapter { + + // Postamble + f_delete_application_mobility_services(v_registration_info_1.appMobilityServiceId); + f_delete_application_mobility_services(v_registration_info_2.appMobilityServiceId); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC021_SRV_AMS_012_OK + + /** + * @desc Check that the AMS service sends an error when receives a request to modify a individual application mobility service using bad parameters + */ + testcase TC_MEC_MEC021_SRV_AMS_012_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables var Headers v_headers; + var RegistrationInfo v_registration_info_1; + var RegistrationInfo v_registration_info_2; + var Json.String v_appMobilityServiceId; + + // Test control if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); setverdict(inconc); stop; } - + // Test component configuration f_cf_01_http_up(); - - + // Preamble + f_create_application_mobility_services(PX_APP_INS_ID, v_registration_info_1); + f_create_application_mobility_services(PX_APP_INS_ID_2, v_registration_info_2); + v_appMobilityServiceId := v_registration_info_1.appMobilityServiceId; f_init_default_headers_list(-, -, v_headers); httpPort.send( - m_http_request( - m_http_request_get( - "/" & PICS_ROOT_API & PX_ME_APP_AMS_SUBS & "/" & oct2char(unichar2oct(PX_SUBSCRIPTION_ID, "UTF-8")), - v_headers - ) - ) - ); + m_http_request( + m_http_request_put( + PICS_ROOT_API & PX_ME_APP_AMS_URI & oct2char(unichar2oct(v_registration_info_1.appMobilityServiceId, "UTF-8")), + v_headers, + m_http_message_body_json( + m_body_json_ams_registration_info( + v_registration_info_1 + ))))); 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_ams_subscriptions( - mw_ams_subscription(PX_SUBSCRIPTION_TYPE, -, -, -, -) - ) - ) - ) - ) - ) - { + mw_http_response( + mw_http_response_400_bad_request + )) { tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with the list of subscriptions type MobilityProcedureSubscription ***"); - f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + + log("*** " & testcasename() & ": PASS: IUT successfully updates with a 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 - - } // End of TC_MEC_MEC012_SRV_AMS_005_OK - - /** - * @desc Check that the AMS service returns an error when receives a query about a not existing subscription - * @see ETSI GS MEC 021 2.1.1, clause 8.7.3.1 - */ - testcase TC_MEC_MEC012_SRV_AMS_005_NF() runs on HttpComponent system HttpTestAdapter { + + // Postamble + f_delete_application_mobility_services(v_appMobilityServiceId); + f_delete_application_mobility_services(v_registration_info_2.appMobilityServiceId); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC021_SRV_AMS_012_BR + + /** + * @desc Check that the AMS service sends an error when receives a request to modify a not existing individual application mobility service + */ + testcase TC_MEC_MEC021_SRV_AMS_012_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables var Headers v_headers; + var RegistrationInfo v_registration_info_1; + var RegistrationInfo v_registration_info_2; + + // Test control if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); setverdict(inconc); stop; } - + // Test component configuration f_cf_01_http_up(); - - + // Preamble + f_create_application_mobility_services(PX_APP_INS_ID, v_registration_info_1); + f_create_application_mobility_services(PX_APP_INS_ID_2, v_registration_info_2); + v_registration_info_1.serviceConsumerId.appInstanceId := PX_APP_INS_ID_NEW; f_init_default_headers_list(-, -, v_headers); httpPort.send( - m_http_request( - m_http_request_get( - "/" & PICS_ROOT_API & PX_ME_APP_AMS_SUBS & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_ID, "UTF-8")), - v_headers - ) - ) - ); + m_http_request( + m_http_request_put( + PICS_ROOT_API & PX_ME_APP_AMS_URI & oct2char(unichar2oct(PX_NON_EXISTENT_APP_MOBILITY_SERVICE_ID, "UTF-8")), + v_headers, + m_http_message_body_json( + m_body_json_ams_registration_info( + v_registration_info_1 + ))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); - + // Test Body tc_ac.start; alt { [] httpPort.receive( - mw_http_response( - mw_http_response_404_not_found( - mw_http_message_body_json( - mw_body_json_problem_details( - mw_problem_details( - -, -, 404 - ) - ) - ) - ) - ) - ) - { + 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); + + log("*** " & testcasename() & ": PASS: IUT successfully updates with a 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 - - } // End of TC_MEC_MEC012_SRV_AMS_005_NF - - /** - * @desc Check that the AMS service deletes a given subscription when requested - * @see ETSI GS MEC 021 2.1.1, clause 8.7.3.5 - */ - testcase TC_MEC_MEC012_SRV_AMS_006_OK() runs on HttpComponent system HttpTestAdapter { + + // Postamble + f_delete_application_mobility_services(v_registration_info_1.appMobilityServiceId); + f_delete_application_mobility_services(v_registration_info_2.appMobilityServiceId); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC021_SRV_AMS_012_NF + + /** + * @desc Check that the AMS service de-register the individual application mobility service and delete the resource that represents the individual application mobility service + */ + testcase TC_MEC_MEC021_SRV_AMS_013_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables var Headers v_headers; + var RegistrationInfo v_registration_info; + + // Test control if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); setverdict(inconc); stop; } - + // Test component configuration f_cf_01_http_up(); - - + // Preamble + f_create_application_mobility_services(PX_APP_INS_ID, v_registration_info); f_init_default_headers_list(-, -, v_headers); httpPort.send( - m_http_request( - m_http_request_delete( - "/" & PICS_ROOT_API & PX_ME_APP_AMS_SUBS & "/" & oct2char(unichar2oct(PX_SUBSCRIPTION_ID, "UTF-8")), - v_headers - ) - ) - ); + m_http_request( + m_http_request_delete( + PICS_ROOT_API & PX_ME_APP_AMS_URI & oct2char(unichar2oct(v_registration_info.appMobilityServiceId, "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 - ) - ) - { + mw_http_response( + mw_http_response_204_no_content + )) { tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with 204 No Content on deletion request ***"); - f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + + log("*** " & testcasename() & ": PASS: IUT successfully deletes the RegistrationInfo ***"); + 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 TC_MEC_MEC012_SRV_AMS_006_OK - - /** - * @desc Check that the AMS service sends an error when it receives a delete request for a not existing subscription - * @see ETSI GS MEC 021 2.1.1, clause 8.7.3.5 - */ - testcase TC_MEC_MEC012_SRV_AMS_006_NF() runs on HttpComponent system HttpTestAdapter { + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC021_SRV_AMS_013_OK + + /** + * @desc Check that the AMS service sends an error when is requested to delete the resource that represents the individual application mobility service + */ + testcase TC_MEC_MEC021_SRV_AMS_013_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables var Headers v_headers; + var RegistrationInfo v_registration_info; + + // Test control if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); setverdict(inconc); stop; } - + // Test component configuration f_cf_01_http_up(); - - + // Preamble + f_create_application_mobility_services(PX_APP_INS_ID, v_registration_info); f_init_default_headers_list(-, -, v_headers); httpPort.send( - m_http_request( - m_http_request_delete( - "/" & PICS_ROOT_API & PX_ME_APP_AMS_SUBS & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_ID, "UTF-8")), - v_headers - ) - ) - ); + m_http_request( + m_http_request_delete( + PICS_ROOT_API & PX_ME_APP_AMS_URI & oct2char(unichar2oct(PX_NON_EXISTENT_APP_MOBILITY_SERVICE_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( - mw_http_message_body_json( - mw_body_json_problem_details( - ) - ) - ) - ) - ) - { + 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); + + log("*** " & testcasename() & ": PASS: IUT successfully de-registers the RegistrationInfo ***"); + 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_MEC021_SRV_AMS_013_NF + + } // End of group individualAppMobilityService - } // End of TC_MEC_MEC012_SRV_AMS_006_NF - - /** - * @desc Check that the AMS service modifies a given subscription when requested. - * Permitted SUBSCRIPTION_TYPE are: - * - MobilityProcedureSubscription - * - AdjacentAppInfoSubscription - * @see ETSI GS MEC 021 2.1.1, clause 8.7.3.2 - */ - testcase TC_MEC_MEC012_SRV_AMS_007_OK() runs on HttpComponent system HttpTestAdapter { + group appMobilityServiceDeregisterTask { + + /** + * @desc Check that the AMS service deregister an individual application mobility service on expiry of the timer associated with the service + */ + testcase TC_MEC_MEC021_SRV_AMS_014_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables var Headers v_headers; + var RegistrationInfo v_registration_info; + + // Test control if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); setverdict(inconc); stop; } - + // Test component configuration f_cf_01_http_up(); - - + // Preamble + f_create_application_mobility_services(PX_APP_INS_ID, v_registration_info); f_init_default_headers_list(-, -, v_headers); httpPort.send( - m_http_request( - m_http_request_put( - "/" & PICS_ROOT_API & PX_ME_APP_AMS_SUBS & "/" & oct2char(unichar2oct(PX_SUBSCRIPTION_ID, "UTF-8")), - v_headers, - m_http_message_body_json( - m_body_json_ams_subscriptions( - m_ams_subscription( - PX_SUBSCRIPTION_TYPE, PX_CALLBACK_REFERENCE, -, -, - - ) - ) - ) - ) - ) - ); + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_ME_APP_AMS_URI & oct2char(unichar2oct(v_registration_info.appMobilityServiceId, "UTF-8")) & "/deregisterTask", + 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_ams_subscriptions( - mw_ams_subscription(PX_SUBSCRIPTION_TYPE, -, -, -, -) - ) - ) - ) - ) - ) - { + mw_http_response( + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_ams_registration_info_list( + { + *, + v_registration_info, + * + } + ))))) { tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a AppMobilityServiceInfo ***"); + + log("*** " & testcasename() & ": PASS: IUT successfully deregisters the registerInfo ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -1388,67 +1821,50 @@ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - - } // End of TC_MEC_MEC012_SRV_AMS_007_OK - - /** - * @desc Check that the AMS service sends an error when it receives a malformed modify request for a given subscription. - * Permitted SUBSCRIPTION_TYPE are: - * - MobilityProcedureSubscription - * - AdjacentAppInfoSubscription - * @see ETSI GS MEC 021 2.1.1, clause 8.7.3.2 - */ - testcase TC_MEC_MEC012_SRV_AMS_007_BR() runs on HttpComponent system HttpTestAdapter { + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC021_SRV_AMS_014_OK + + /** + * @desc Check that the AMS service send an error when is requested to deregister a not existent individual application mobility service + */ + testcase TC_MEC_MEC021_SRV_AMS_014_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables var Headers v_headers; + var RegistrationInfo v_registration_info; + + // Test control if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); setverdict(inconc); stop; } - + // Test component configuration f_cf_01_http_up(); - - + // Preamble + f_create_application_mobility_services(PX_APP_INS_ID, v_registration_info); f_init_default_headers_list(-, -, v_headers); httpPort.send( - m_http_request( - m_http_request_put( - "/" & PICS_ROOT_API & PX_ME_APP_AMS_SUBS & "/" & oct2char(unichar2oct(PX_SUBSCRIPTION_ID, "UTF-8")), - v_headers, - m_http_message_body_json( - m_body_json_ams_registration_info( - m_registration_info( - PX_APP_MOBILITY_SERVICE_ID, - m_service_consumer_error(PX_APP_INS_ID, -), - -, - - - ) - ) - ) - ) - ) - ); + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_ME_APP_AMS_URI & oct2char(unichar2oct(PX_NON_EXISTENT_APP_MOBILITY_SERVICE_ID, "UTF-8")) & "/deregisterTask", + 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( - mw_http_message_body_json( - mw_body_json_problem_details( - ) - ) - ) - ) - ) - { + mw_http_response( + mw_http_response_404_not_found + )) { tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a 400 Bad Request ***"); + + log("*** " & testcasename() & ": PASS: IUT successfully deregisters the registerInfo ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -1456,61 +1872,64 @@ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - - } // End of TC_MEC_MEC012_SRV_AMS_007_BR - - /** - * @desc Check that the AMS service sends an error when it receives a modify request for a not existing subscription - * @see ETSI GS MEC 021 2.1.1, clause 8.7.3.2 - */ - testcase TC_MEC_MEC012_SRV_AMS_007_NF() runs on HttpComponent system HttpTestAdapter { + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC021_SRV_AMS_014_NF + + } // End of group appMobilityServiceDeregisterTask + + group adjacentApplicationInstances { + + /** + * @desc Check that the AMS service returns information about the registered application mobility services when requested + */ + testcase TC_MEC_MEC021_SRV_AMS_015_OK_01() runs on HttpComponent system HttpTestAdapter { + // Local variables var Headers v_headers; + var AdjacentAppInstanceInfo v_adjacent_app_instance_info_1; + var AdjacentAppInstanceInfo v_adjacent_app_instance_info_2; + + // Test control if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)) { log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); setverdict(inconc); stop; } - + // Test component configuration f_cf_01_http_up(); - - + // Preamble + f_create_adjacent_app_instance_info(-, -, m_communication_interface({{ host := PX_HOST, port_ := PX_PORT }}), v_adjacent_app_instance_info_1); + f_create_adjacent_app_instance_info(PX_APP_INS_ID_2, PX_APP_ID_2, m_communication_interface({{ host := PX_HOST, port_ := PX_PORT }}), v_adjacent_app_instance_info_2); f_init_default_headers_list(-, -, v_headers); httpPort.send( - m_http_request( - m_http_request_put( - "/" & PICS_ROOT_API & PX_ME_APP_AMS_SUBS & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_ID, "UTF-8")), - v_headers, - m_http_message_body_json( - m_body_json_ams_subscriptions( - m_ams_subscription( - PX_SUBSCRIPTION_TYPE, PX_CALLBACK_REFERENCE, -, -, - - ) - ) - ) - ) - ) - ); + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_APP_AMS_QUERIES_URI, + v_headers + ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); - + // Test Body tc_ac.start; alt { [] httpPort.receive( - mw_http_response( - mw_http_response_404_not_found( - mw_http_message_body_json( - mw_body_json_problem_details( - ) - ) - ) - ) - ) - { + mw_http_response( + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_ams_adjacent_app_instance_info_list( + { + *, + v_adjacent_app_instance_info_1, + v_adjacent_app_instance_info_2, + * + } + ))))) { tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a 404 Not Found ***"); + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of RegistrationInfo ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -1518,217 +1937,15 @@ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - - } // End of TC_MEC_MEC012_SRV_AMS_007_NF - - - } // End of group appMobilityServicesSubscriptions - - group ams_notifications { - - /** - * @desc Check that the AMS service sends an AMS notification about a mobility procedure if the AMS service has an associated subscription and the event is generated - * @see ETSI GS MEC 021 2.1.1, clause 7.4.2 - */ - testcase TC_MEC_MEC012_SRV_AMS_008_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - - // Test control - if (not(PICS_AMS) or not(PICS_AMS_NOTIFICATIONS)) { - log("*** " & testcasename() & ": PICS_AMS and PICS_AMS_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 mobility procedure 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_mobility_procedure_notification( - mw_mobility_procedure_notification( - -, - PX_CALLBACK_REFERENCE, - -, - -, - - - ) - ) - ) - ) - ) - ) { - tc_wait.stop; - log("*** " & testcasename() & ": INFO: IUT successfully sends mobility procedure 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 mobility procedure 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 TC_MEC_MEC012_SRV_AMS_008_OK - - /** - * @desc Check that the AMS service sends an AMS notification about adjacent application instances if the AMS service has an associated subscription and the event is generated - * @see ETSI GS MEC 021 2.1.1, clause 7.4.3 - */ - testcase TC_MEC_MEC012_SRV_AMS_009_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - - // Test control - if (not(PICS_AMS) or not(PICS_AMS_NOTIFICATIONS)) { - log("*** " & testcasename() & ": PICS_AMS and PICS_AMS_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 adjacent application info 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_adjacent_application_info_notification( - mw_adjacent_application_info_notification( - -, - PX_CALLBACK_REFERENCE, - -, - -, - - - ) - ) - ) - ) - ) - ) { - tc_wait.stop; - log("*** " & testcasename() & ": INFO: IUT successfully sends adjacent application info 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 adjacent application info 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(); - } - - - /** - * @desc Check that the AMS service sends an AMS notification on subscription expiration if the AMS service has an associated subscription and the event is generated - * @see ETSI GS MEC 021 2.1.1, clause 7.4.4 - */ - testcase TC_MEC_MEC012_SRV_AMS_010_OK() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var UInt64 v_timestamp; - - // Test control - if (not(PICS_AMS) or not(PICS_AMS_NOTIFICATIONS)) { - log("*** " & testcasename() & ": PICS_AMS and PICS_AMS_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"); - v_timestamp := f_get_current_timestamp_utc(); - 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_expire_notification( - mw_expire_notification( - -, - -, - { seconds := v_timestamp / 1000, nanoSeconds := 1000 * v_timestamp mod 1000 } - ) - ) - ) - ) - ) - ) { - tc_wait.stop; - log("*** " & testcasename() & ": INFO: IUT successfully sends adjacent application info 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 adjacent applicationinfo 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 ams_notifications - + + // Postamble + f_delete_adjacent_app_instance_info(v_adjacent_app_instance_info_1.appInstanceId); + f_delete_adjacent_app_instance_info(v_adjacent_app_instance_info_2.appInstanceId); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC021_SRV_AMS_015_OK_01 + + } // End of group adjacentApplicationInstances + } // End of module AtsMec_ApplicationMobiltyServiceAPI_TestCases diff --git a/ttcn/AtsMec_ApplicationMobiltyService/AtsMec_ApplicationMobiltyServiceAPI_TestControl.ttcn b/ttcn/AtsMec_ApplicationMobiltyService/AtsMec_ApplicationMobiltyServiceAPI_TestControl.ttcn index ca476c0..afa12b3 100644 --- a/ttcn/AtsMec_ApplicationMobiltyService/AtsMec_ApplicationMobiltyServiceAPI_TestControl.ttcn +++ b/ttcn/AtsMec_ApplicationMobiltyService/AtsMec_ApplicationMobiltyServiceAPI_TestControl.ttcn @@ -13,6 +13,52 @@ module AtsMec_ApplicationMobiltyServiceAPI_TestControl { control { if (PICS_MEC_PLAT and PICS_SERVICES) { + execute(TC_MEC_MEC021_SRV_AMS_001_OK_01()); + execute(TC_MEC_MEC021_SRV_AMS_001_OK_02()); + execute(TC_MEC_MEC021_SRV_AMS_001_OK_03()); + execute(TC_MEC_MEC021_SRV_AMS_001_OK_04()); + execute(TC_MEC_MEC021_SRV_AMS_001_OK_05()); + execute(TC_MEC_MEC021_SRV_AMS_001_BR()); + + execute(TC_MEC_MEC021_SRV_AMS_002_OK()); + execute(TC_MEC_MEC021_SRV_AMS_002_BR()); + + execute(TC_MEC_MEC021_SRV_AMS_003_OK()); + execute(TC_MEC_MEC021_SRV_AMS_003_BR()); + + execute(TC_MEC_MEC021_SRV_AMS_004_OK()); + execute(TC_MEC_MEC021_SRV_AMS_004_BR()); + + execute(TC_MEC_MEC021_SRV_AMS_005_OK()); + execute(TC_MEC_MEC021_SRV_AMS_005_NF()); + + execute(TC_MEC_MEC021_SRV_AMS_006_OK()); + execute(TC_MEC_MEC021_SRV_AMS_006_NF()); + + execute(TC_MEC_MEC021_SRV_AMS_007_OK()); + execute(TC_MEC_MEC021_SRV_AMS_007_BR()); + execute(TC_MEC_MEC021_SRV_AMS_007_NF()); + + execute(TC_MEC_MEC021_SRV_AMS_008_OK()); + + execute(TC_MEC_MEC021_SRV_AMS_009_OK()); + + execute(TC_MEC_MEC021_SRV_AMS_009_OK()); + + execute(TC_MEC_MEC021_SRV_AMS_011_OK()); + execute(TC_MEC_MEC021_SRV_AMS_011_NF()); + + execute(TC_MEC_MEC021_SRV_AMS_012_OK()); + execute(TC_MEC_MEC021_SRV_AMS_012_BR()); + execute(TC_MEC_MEC021_SRV_AMS_012_NF()); + + execute(TC_MEC_MEC021_SRV_AMS_013_OK()); + execute(TC_MEC_MEC021_SRV_AMS_013_NF()); + + execute(TC_MEC_MEC021_SRV_AMS_014_OK()); + execute(TC_MEC_MEC021_SRV_AMS_014_NF()); + + execute(TC_MEC_MEC021_SRV_AMS_015_OK_01()); } } // End of 'control' statement diff --git a/ttcn/LibMec/Ams_ToBeRemoved/module.mk b/ttcn/LibMec/Ams_ToBeRemoved/module.mk deleted file mode 100644 index bce6cc1..0000000 --- a/ttcn/LibMec/Ams_ToBeRemoved/module.mk +++ /dev/null @@ -1,7 +0,0 @@ -sources := \ - ttcn/Ams_Pics.ttcn \ - ttcn/Ams_Pixits.ttcn \ - ttcn/Ams_EncdecDeclarations.ttcn \ - ttcn/Ams_Templates.ttcn \ - ttcn/Ams_TypesAndValues.ttcn \ - diff --git a/ttcn/LibMec/Ams_ToBeRemoved/ttcn/Ams_EncdecDeclarations.ttcn b/ttcn/LibMec/Ams_ToBeRemoved/ttcn/Ams_EncdecDeclarations.ttcn deleted file mode 100644 index 2a189e1..0000000 --- a/ttcn/LibMec/Ams_ToBeRemoved/ttcn/Ams_EncdecDeclarations.ttcn +++ /dev/null @@ -1,22 +0,0 @@ -module Ams_EncdecDeclarations { - - import from Ams_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)" }; - - -} // End of module Ams_EncdecDeclarations diff --git a/ttcn/LibMec/Ams_ToBeRemoved/ttcn/Ams_Pics.ttcn b/ttcn/LibMec/Ams_ToBeRemoved/ttcn/Ams_Pics.ttcn deleted file mode 100644 index 89089fa..0000000 --- a/ttcn/LibMec/Ams_ToBeRemoved/ttcn/Ams_Pics.ttcn +++ /dev/null @@ -1,8 +0,0 @@ -module Ams_Pics { - - /** - * @desc Does the IUT support LocationAPI? - */ - modulepar boolean PICS_AMS_API_SUPPORTED := true; - -} // End of module LocationAPI_Pics diff --git a/ttcn/LibMec/Ams_ToBeRemoved/ttcn/Ams_Pixits.ttcn b/ttcn/LibMec/Ams_ToBeRemoved/ttcn/Ams_Pixits.ttcn deleted file mode 100644 index 1a4870e..0000000 --- a/ttcn/LibMec/Ams_ToBeRemoved/ttcn/Ams_Pixits.ttcn +++ /dev/null @@ -1,27 +0,0 @@ -module Ams_Pixits { - - // JSON - import from Json all; - - // LibMec/LocationAPI - import from Ams_TypesAndValues all; - - 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_SUBSCRIPTION_ID := "e0deee2b-6e50-4f33-ab09-8bf0585025d3"; - - modulepar Json.String PX_NON_EXISTENT_SUBSCRIPTION_ID := "NON_EXISTENT_SUBSCRIPTION_ID"; - - modulepar Json.String PX_NON_EXISTENT_APP_MOBILITY_SERVICE_ID := "PX_NON_EXISTENT_APP_MOBILITY_SERVICE_ID"; - - modulepar Json.String PX_CALLBACK_REFERENCE := "http://127.0.0.1/callback"; - - modulepar charstring PX_CALLBACK_URI := "http://127.0.0.1/callback"; - - modulepar Json.String PX_MEP_ID := ""; - -} // End of module LocationAPI_Pixits diff --git a/ttcn/LibMec/Ams_ToBeRemoved/ttcn/Ams_Templates.ttcn b/ttcn/LibMec/Ams_ToBeRemoved/ttcn/Ams_Templates.ttcn deleted file mode 100644 index ee4630a..0000000 --- a/ttcn/LibMec/Ams_ToBeRemoved/ttcn/Ams_Templates.ttcn +++ /dev/null @@ -1,267 +0,0 @@ -module Ams_Templates { - - // JSON - import from Json all; - - // LibCommon - import from LibCommon_BasicTypesAndValues all; - - // LibMec/LocationAPI - import from Ams_TypesAndValues all; - import from Ams_Pixits all; - - 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) ServiceConsumerIdWithError m_service_consumer_id_with_error( - in template (omit) String p_appId := omit, - in template (omit) String p_mepId := omit - ) := { - appId := p_appId, - 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) RegistrationRequestWithError m_registration_request_with_error ( - in template (omit) ServiceConsumerIdWithError p_service_consumer_id_with_error := omit, - in template (omit) DeviceInformations p_device_info := omit, - in template (omit) UInt32 p_expire_time := omit - ) := { - serviceConsumerIdWithError := p_service_consumer_id_with_error, - 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/Ams_ToBeRemoved/ttcn/Ams_TypesAndValues.ttcn b/ttcn/LibMec/Ams_ToBeRemoved/ttcn/Ams_TypesAndValues.ttcn deleted file mode 100644 index 2ac176f..0000000 --- a/ttcn/LibMec/Ams_ToBeRemoved/ttcn/Ams_TypesAndValues.ttcn +++ /dev/null @@ -1,539 +0,0 @@ -module Ams_TypesAndValues { - -// JSON -import from Json all; - -// LibCommon -import from LibCommon_BasicTypesAndValues all; - - -type record of AppMobilityServiceInfo AppMobilityServiceInfos; -type record AppMobilityServiceInfo { - RegistrationInfos registeredAppMobilityService , - String appMobilityServiceId -} - - -type record RegistrationRequest { - ServiceConsumerId serviceConsumerId, - DeviceInformations deviceInformation optional, - UInt32 expiryTime optional -} - - -type record RegistrationRequestWithError { - ServiceConsumerIdWithError serviceConsumerIdWithError, - DeviceInformations deviceInformation optional, - UInt32 expiryTime optional -} - - -type record ServiceConsumerIdWithError { - String appId 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 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 -// * @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 A type containing list of users. -// * @member user Collection of the zone information list. -// * @member resourceURL Self referring URL. -// */ -// type record of UserInfo UserInfos; -// type record UserList { -// UserInfos user optional, -// ResourceURL resourceURL -// } -// -// /** -// * @desc A type containing location information with latitude, longitude and altitude, in addition the accuracy of the information are provided. -// * @member latitude -// * @member longitude -// * @member altitude -// * @member accuracy -// */ -// type record LocationInfo { -// Json.Number latitude, -// Json.Number longitude, -// Json.Number altitude optional, -// UInt32 accuracy -// } // End of type LocationInfo -// -// /** -// * @desc A type containing zone information. -// * @member zoneId Identifier of zone -// * @member numberOfAccessPoints The number of access points within the zone -// * @member numberOfUnservicableAccessPoints Number of inoperable access points within the zone. -// * @member numberOfUsers The number of users currently on the access point. -// * @member resourceURL Self referring URL. -// */ -// type record ZoneInfo { -// ZoneId zoneId, -// NumberOfAccessPoints numberOfAccessPoints, -// NumberOfUnserviceableAccessPoints numberOfUnservicableAccessPoints, -// NumberOfUsers numberOfUsers, -// ResourceURL resourceURL -// } -// -// /** -// * @desc Collection of the zone information list. -// * @member zone Collection of the zone information list. -// * @member resourceURL Self referring URL. -// */ -// type record of ZoneInfo ZoneInfos; -// type record ZoneList { -// ZoneInfos zone optional, -// ResourceURL resourceURL -// } -// -// /** -// * @desc Identifier of access point, (reference ETSI TS 129 171). Where the E-CGI is made up of the PLMN and Cell Identity (28 bit string). Then the PLMN is made up of the 3 digit MCC & 2 or 3 digit MNC. The Cell Portion is an optional element -// */ -// type Json.String AccessPointId; -// -// /** -// * @desc A type containing access point information. -// * @member accessPointId -// * @member connectionType The connection type for the access poin -// * @member operationStatus The operation status of the access point -// * @member numberOfUsers The number of users currently on the access point. -// * @member resourceURL Self referring URL. -// */ -// type record AccessPointInfo { -// AccessPointId accessPointId, -// LocationInfo locationInfo optional, -// ConnectionType connectionType, -// OperationStatus operationStatus, -// NumberOfUsers numberOfUsers, -// InterestRealm interestRealm, -// ResourceURL resourceURL -// } -// type record of AccessPointInfo AccessPointInfos; -// -// /** -// * @desc A type containing list of access points. -// * @member zoneId -// * @member accessPoint Collection of the access point information list. -// * @member resourceURL -// */ -// type record AccessPointList { -// ZoneId zoneId, -// AccessPointInfos accessPoint optional, -// ResourceURL resourceURL -// } -// -// /** -// * @desc Address of user (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI). -// */ -// type Json.String Address -// -// /** -// * @desc Reserved for future use. -// */ -// type Json.String AncillaryInfo; -// -// /** -// * @desc CallBackData if passed by the application during the associated ZonalTrafficSubscription and UserTrackingSubscription operation. See [\ -//REST_NetAPI_Common]. -// */ -// type Json.String CallbackData; -// -// /** -// * @desc Notification callback definition. -// * @member notifyURL -// */ -// type record CallbackReference { -// NotifyURL notifyURL -// } -// -// /** -// * @desc Uniquely identifies this create subscription request. If there is a communication failure during the request, using the same clientCorrelator when retrying the request allows the operator to avoid creating a duplicate subscription. -// */ -// type Json.String ClientCorrelator; -// -// /** -// * @desc The connection type for the access point -// */ -// type enumerated ConnectionType { -// Femto, -// LTE_femto, -// Smallcell, -// LTE_smallcell, -// Wifi, -// Pico, -// Micro, -// Macro, -// Wimax, -// Unknown -// } -// -// /** -// * @desc Contextual information of a user location (e.g., aisle, floor, room number, etc.) -// */ -// type Json.String ContextLocationInfo; -// -// /** -// * @desc Zone ID -// */ -// type Json.String CurrentAccessPointId; -// -// /** -// * @desc Period (in seconds) of time notifications are provided for. If set to \"0\" (zero), a default duration time, which is specified by the service policy, will be used. If the parameter is omitted, the notifications will continue until the maximum duration time, which is specified by the service policy, unless the notifications are stopped by deletion of subscription for notifications. This element MAY be given by the client during resource creation in order to signal the desired lifetime of the subscription. The server MUST return in this element the period of time for which the subscription will still be valid. -// */ -// type Json.Date Duration; -// -// /** -// * @desc Interest realm of access point (e.g. geographical area, a type of industry etc.). -// */ -// type Json.String InterestRealm; -// -// /** -// * @desc Link to other resources -// * @member rel Describes the relationship between the URI and the resource. -// * @member href UTI -// */ -// type record Link { -// Json.String rel, -// Json.String href -// } -// -// /** -// * @desc The URL of your own listener application. -// */ -// type Json.String NotifyURL; -// -// /** -// * @desc The number of access points within the zone -// */ -// type UInt32 NumberOfAccessPoints; -// -// /** -// * @desc Number of inoperable access points within the zone. -// */ -// type UInt32 NumberOfUnserviceableAccessPoints; -// -// /** -// * @desc The number of users currently on the access point. -// */ -// type UInt32 NumberOfUsers; -// -// /** -// * @desc Threshold number of users in an access point which if crossed shall cause a notification. -// */ -// type UInt32 NumberOfUsersAPThreshold; -// -// /** -// * @desc This element shall be present when ZoneStatusSubscription includes numberOfUsersAPThreshold element and the number of users in an access point exceeds the threshold defined in the subscription. -// */ -// type UInt32 NumberOfUsersInAP; -// -// /** -// * @desc Threshold number of users in a zone which if crossed shall cause a notification. -// */ -// type UInt32 NumberOfUsersInZone; -// -// /** -// * @desc Threshold number of users in a zone which if crossed shall cause a notification. -// */ -// type UInt32 NumberOfUsersZoneThreshold; -// -// /** -// * @desc The operation status of the access point -// */ -// type enumerated OperationStatus { -// Serviceable, -// Unserviceable, -// Unknown -// } -// -// /** -// * @desc Zone ID -// */ -// type Json.String PreviousAccessPointId; -// -// /** -// * @desc Self referring URL -// */ -// type Json.AnyURI ResourceURL; -// -// /** -// * @desc Indicates the time of day for zonal presence notification. -// */ -// type Json.String Timestamp; -// -// /** -// * @desc Time zone of access point -// */ -// type Json.String Timezone; -// -// /** -// * @desc User event -// */ -// type enumerated UserEventType { -// Entering, -// Leaving, -// Transferring -// } -// -// /** -// * @desc List of user event values to generate notifications for (these apply to address specified). If this element is missing, a notification is requested to be generated for any change in user event. -// */ -// type record of UserEventType UserEventCriteria; -// -// /** -// * @desc A type containing user information. -// * @member address_ Address of user (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI). -// * @member accessPointId Identifier of access point, (reference ETSI TS 129 171). -// * @member zoneId Identifier of zone -// * @member resourceURL Self referring URL. -// * @member locationInfo A type containing location information with latitude, longitude and altitude, in addition the accuracy of the information are provided. -// * @member contextLocationInfo -// * @member ancillaryInfo -// */ -// type record UserInfo { -// Address address_, -// AccessPointId accessPointId, -// ZoneId zoneId, -// ResourceURL resourceURL, -// LocationInfo locationInfo optional, -// ContextLocationInfo contextLocationInfo optional, -// AncillaryInfo ancillaryInfo optional -// } with { -// variant (address_) "name as 'address'"; -// } // End of type UserInfo -// -// /** -// * @desc A type containing user tracking subscription. -// * @member -// */ -// type record UserTrackingSubscription { -// ClientCorrelator clientCorrelator optional, -// CallbackReference callbackReference, -// Address address_, -// UserEventCriteria userEventCriteria optional, -// ResourceURL resourceURL optional -// } with { -// variant (address_) "name as 'address'"; -// } -// -// /** -// * @desc A type containing zonal presence notification -// * @member -// * @member link Link to other resources that are in relationship with this notification. The server SHOULD include a link to the related subscription. No other links are required or suggested by this specification. -// */ -// type record ZonalPresenceNotification { -// CallbackReference callbackReference optional, -// ZoneId zoneId, -// Address address_, -// InterestRealm interestRealm optional, -// UserEventType userEventType, -// CurrentAccessPointId currentAccessPointId, -// PreviousAccessPointId previousAccessPointId optional, -// Timestamp timestamp_, -// Link link optional -// } with { -// variant (address_) "name as 'address'"; -// variant (timestamp_) "name as 'timestamp'"; -// } -// -// /** -// * @desc A type containing zonal traffic subscription -// * @member -// * @member interestRealm Interest realms of access points within a zone (e.g. geographical area, a type of industry etc.). -// * @member userEventCriteria List of user event values to generate notifications for (these apply to zone identifier or all interest realms within zone identifier specified). If this element is missing, a notification is requested to be generated for any change in user event. -// * @member resourceURL -// */ -// type record ZonalTrafficSubscription { -// ClientCorrelator clientCorrelator optional, -// CallbackReference callbackReference, -// ZoneId zoneId, -// InterestRealm interestRealm optional, -// UserEventCriteria userEventCriteria optional, -// Duration duration optional, -// ResourceURL resourceURL optional -// } -// -// /** -// * @desc Identifier of zone -// */ -// type Json.String ZoneId; -// -// /** -// * @desc A type containing zone status notification. -// * @member zoneId -// * @member -// */ -// type record ZoneStatusNotification { -// CallbackData callbackData optional, -// ZoneId zoneId, -// AccessPointId accessPointId optional, -// NumberOfUsersInZone numberOfUsersInZone optional, -// NumberOfUsersInAP numberOfUsersInAP optional, -// OperationStatus operationStatus optional, -// Timestamp timestamp_, -// Link link -// } with { -// variant (timestamp_) "name as 'timestamp'"; -// } -// -// /** -// * @desc A type containing zone status subscription. -// * @member zoneId -// * @member -// * @member -// * @member -// * @member operationStatus List of operation status values to generate notifications for (these apply to all access points within a zone). -// */ -// type record ZoneStatusSubscription { -// ClientCorrelator clientCorrelator optional, -// ResourceURL resourceURL optional, -// CallbackReference callbackReference, -// ZoneId zoneId, -// NumberOfUsersZoneThreshold numberOfUsersZoneThreshold optional, -// NumberOfUsersAPThreshold numberOfUsersAPThreshold optional, -// OperationStatus operationStatus optional -// } -// -// /** -// * @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/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_Functions.ttcn b/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_Functions.ttcn index d5f9d63..443257a 100644 --- a/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_Functions.ttcn +++ b/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_Functions.ttcn @@ -3,4 +3,341 @@ module ApplicationMobilityServiceAPI_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 LibHttp_TypesAndValues all; + import from LibHttp_Functions all; + import from LibHttp_Templates all; + import from LibHttp_JsonTemplates all; + import from LibHttp_TestSystem all; + + // LibMec/ApplicationMobilityServiceAPI + import from ApplicationMobilityServiceAPI_TypesAndValues all; + import from ApplicationMobilityServiceAPI_Templates all; + import from ApplicationMobilityServiceAPI_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_application_mobility_services( + in Json.String p_app_instance_id := PX_APP_INS_ID, + out RegistrationInfo p_registration_info + ) 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_AMS_URI, + v_headers, + m_http_message_body_json( + m_body_json_ams_registration_info( + m_registration_info( + -, + m_service_consumer_id( + p_app_instance_id + ))))))); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_201_created( + mw_http_message_body_json( + mw_body_json_ams_registration_info( + mw_registration_info( + ?, + mw_service_consumer_id( + p_app_instance_id + ))))))) -> value v_response { + tc_ac.stop; + + p_registration_info := v_response.response.body.json_body.registrationInfo; + log("f_create_application_mobility_services: INFO: IUT successfully responds to the registration: ", p_registration_info); + } + [] tc_ac.timeout { + log("f_create_application_mobility_services: Expected message not received"); + } + } // End of 'alt' statement + } // End of function f_create_application_mobility_services + + function f_delete_application_mobility_services( + in Json.String p_app_mobility_service_id + ) 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_delete( + PICS_ROOT_API & PX_ME_APP_AMS_URI & oct2char(unichar2oct(p_app_mobility_service_id, "UTF-8")), + v_headers + ))); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_204_no_content + )) { + tc_ac.stop; + } + [] tc_ac.timeout { + log("f_delete_application_mobility_services: INCONC: Expected message not received"); + } + } // End of 'alt' statement + } // End of function f_delete_application_mobility_services + + function f_create_adjacent_app_instance_info( + in Json.String p_app_instance_id := PX_APP_INS_ID, + in Json.String p_app_id := PX_APP_ID, + in template (value) CommunicationInterface p_communication_interface, + out AdjacentAppInstanceInfo p_adjacent_app_instance_info + ) 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_AMS_URI, + v_headers, + m_http_message_body_json( + m_body_json_ams_adjacent_app_instance_info( + m_adjacent_app_instance_info( + p_app_instance_id, + p_app_id, + p_communication_interface + )))))); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_201_created( + mw_http_message_body_json( + mw_body_json_ams_adjacent_app_instance_info( + mw_adjacent_app_instance_info( + p_app_instance_id, + p_app_id + )))))) -> value v_response { + tc_ac.stop; + + p_adjacent_app_instance_info := v_response.response.body.json_body.adjacentAppInstanceInfo; + log("f_create_adjacent_app_instance_info: INFO: IUT successfully responds to the adjacentAppInstanceInfo: ", p_adjacent_app_instance_info); + } + [] tc_ac.timeout { + log("f_create_adjacent_app_instance_info: Expected message not received"); + } + } // End of 'alt' statement + } // End of function f_create_adjacent_app_instance_info + + function f_delete_adjacent_app_instance_info( + in Json.String p_app_instance_id + ) 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_delete( + PICS_ROOT_API & PX_ME_APP_AMS_URI & oct2char(unichar2oct(p_app_instance_id, "UTF-8")), + v_headers + ))); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_204_no_content + )) { + tc_ac.stop; + } + [] tc_ac.timeout { + log("f_delete_adjacent_app_instance_info: INCONC: Expected message not received"); + } + } // End of 'alt' statement + } // End of function f_delete_adjacent_app_instance_info + + function f_create_mobility_procedure_subscription( + out MobilityProcedureSubscription p_mobility_procedure_subscription, + out charstring p_subscription_id + ) 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_AMS_SUBS, + v_headers, + m_http_message_body_json( + m_body_json_ams_mobility_procedure_subscription( + m_mobility_procedure_subscription( + PX_CALLBACK_REFERENCE, + m_filter_criteria, + -, -, -, + { seconds := (f_get_current_timestamp_utc() / 1000) + 60, nanoSeconds := 0 } + )))))); + + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_201_created( + mw_http_message_body_json( + mw_body_json_ams_mobility_procedure_subscription( + mw_mobility_procedure_subscription( + PX_CALLBACK_REFERENCE, + mw_filter_criteria, + mw_links + )))))) -> value v_response { + tc_ac.stop; + + // Extract HTTP Location header + var charstring_list v_subscription_id; + f_get_header(v_response.response.header, "Location", v_subscription_id); + // Extract HTTP subssription id + p_subscription_id := regexp( + v_subscription_id[0], + "?+" & PX_ME_APP_AMS_SUBS & "/(?*)", + 0 + ); + p_mobility_procedure_subscription := v_response.response.body.json_body.mobilityProcedureSubscription; + log("f_create_mobility_procedure_subscription: INFO: IUT successfully responds to the subscription: ", p_mobility_procedure_subscription); + log("f_create_mobility_procedure_subscription: INFO: p_subscription_id: ", p_subscription_id); + } + [] tc_ac.timeout { + log("f_create_mobility_procedure_subscription: INCONC: Expected message not received"); + } + } // End of 'alt' statement + } // End of function f_create_mobility_procedure_subscription + + function f_delete_mobility_procedure_subscription( + in charstring p_subscription_id + ) 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_ME_APP_AMS_SUBS & "/" & p_subscription_id, + 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_mobility_procedure_subscription: INCONC: Expected message not received"); + } + } // End of 'alt' statement + } // End of function f_delete_mobility_procedure_subscription + + function f_create_adjacent_appInfo_subscription( + out AdjacentAppInfoSubscription p_adjacent_appInfo_subscription, + out charstring p_subscription_id + ) 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_AMS_SUBS, + v_headers, + m_http_message_body_json( + m_body_json_ams_adjacent_appInfo_subscription( + m_adjacent_app_info_subscription( + PX_CALLBACK_REFERENCE, + m_adjacent_filter_criteria + )))))); + + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_201_created( + mw_http_message_body_json( + mw_body_json_ams_adjacent_appInfo_subscription( + mw_adjacent_app_info_subscription( + PX_CALLBACK_REFERENCE, + mw_adjacent_filter_criteria, + mw_links + )))))) -> value v_response { + tc_ac.stop; + + // Extract HTTP Location header + var charstring_list v_subscription_id; + f_get_header(v_response.response.header, "Location", v_subscription_id); + // Extract HTTP subssription id + p_subscription_id := regexp( + v_subscription_id[0], + "?+" & PX_ME_APP_AMS_SUBS & "/(?*)", + 0 + ); + p_adjacent_appInfo_subscription := v_response.response.body.json_body.adjacentAppInfoSubscription; + log("f_create_adjacent_appInfo_subscription: INFO: IUT successfully responds to the subscription: ", p_adjacent_appInfo_subscription); + log("f_create_adjacent_appInfo_subscription: INFO: p_subscription_id: ", p_subscription_id); + } + [] tc_ac.timeout { + log("f_create_adjacent_appInfo_subscription: INCONC: Expected message not received"); + } + } // End of 'alt' statement + } // End of function f_create_adjacent_appInfo_subscription + + function f_delete_adjacent_appInfo_subscription( // FIXME To be merged with f_delete_mobility_procedure_subscription into f_delete_subscription + in charstring p_subscription_id + ) 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_ME_APP_AMS_SUBS & "/" & p_subscription_id, + 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_adjacent_appInfo_subscription: INCONC: Expected message not received"); + } + } // End of 'alt' statement + } // End of function f_delete_adjacent_appInfo_subscription + } // End of module ApplicationMobilityServiceAPI_Functions diff --git a/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_Pixits.ttcn b/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_Pixits.ttcn index e4d5979..6b6d485 100644 --- a/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_Pixits.ttcn +++ b/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_Pixits.ttcn @@ -6,11 +6,15 @@ module ApplicationMobilityServiceAPI_Pixits { // LibMec/ApplicationMobilityServiceAPI import from ApplicationMobilityServiceAPI_TypesAndValues all; - modulepar Json.String PX_APP_MOBILITY_SERVICE_ID := "KtRGymNQ84dG3mQfRepa"; - modulepar Json.String PX_APP_INS_ID := "5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f"; - modulepar Json.String PX_SUBSCRIPTION_ID := "e0deee2b-6e50-4f33-ab09-8bf0585025d3"; + modulepar Json.String PX_APP_INS_ID_2 := "4e92055c-c594-11ee-8535-13445063b38e"; + + modulepar Json.String PX_APP_INS_ID_NEW := "d1e24122-c596-11ee-9ffa-33159308a999"; + + modulepar Json.String PX_APP_ID := "5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f"; + + modulepar Json.String PX_APP_ID_2 := "4e92055c-c594-11ee-8535-13445063b38e"; modulepar Json.String PX_NON_EXISTENT_SUBSCRIPTION_ID := "NON_EXISTENT_SUBSCRIPTION_ID"; @@ -21,4 +25,9 @@ module ApplicationMobilityServiceAPI_Pixits { modulepar charstring PX_CALLBACK_URI := "http://127.0.0.1/callback"; modulepar Json.String PX_MEP_ID := ""; + + modulepar Json.String PX_HOST := ""; + + modulepar UInt16 PX_PORT := 12345 + } // End of module ApplicationMobilityServiceAPI_Pixits diff --git a/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_Templates.ttcn b/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_Templates.ttcn index 60d997e..6426d06 100644 --- a/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_Templates.ttcn +++ b/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_Templates.ttcn @@ -13,25 +13,8 @@ module ApplicationMobilityServiceAPI_Templates { // LibCommon import from LibCommon_BasicTypesAndValues all; - // 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_registration_info( - in Json.String p_app_mobility_service_id, + in template (omit) Json.String p_app_mobility_service_id := omit, in template (value) ServiceConsumerId p_serviceConsumerId, in template (omit) DeviceInformation p_deviceInformation := omit, in template (omit) UInt32 p_expiryTime := omit @@ -39,15 +22,15 @@ module ApplicationMobilityServiceAPI_Templates { appMobilityServiceId := p_app_mobility_service_id, serviceConsumerId := p_serviceConsumerId, deviceInformation := p_deviceInformation, - expiryTime := p_expiryTime + expiryTime := p_expiryTime } // End of template m_registration_info - template RegistrationInfo mw_registration_info( - template (present) Json.String p_app_mobility_service_id := ?, - template (present) ServiceConsumerId p_serviceConsumerId := ?, - template DeviceInformation p_deviceInformation := *, - template UInt32 p_expiryTime := * - ) := { + template (present) RegistrationInfo mw_registration_info( + template (present) Json.String p_app_mobility_service_id := ?, + template (present) ServiceConsumerId p_serviceConsumerId := ?, + template DeviceInformation p_deviceInformation := *, + template UInt32 p_expiryTime := * + ) := { appMobilityServiceId := p_app_mobility_service_id, serviceConsumerId := p_serviceConsumerId, deviceInformation := p_deviceInformation, @@ -55,8 +38,8 @@ module ApplicationMobilityServiceAPI_Templates { } // End of template m_registration_info template (omit) ServiceConsumerId m_service_consumer_id( - in template (omit) String p_appInstanceId := omit, - in template (omit) String p_mepId := omit + in template (omit) Json.String p_appInstanceId := omit, + in template (omit) Json.String p_mepId := omit ) := { appInstanceId := p_appInstanceId, mepId := p_mepId @@ -71,7 +54,7 @@ module ApplicationMobilityServiceAPI_Templates { } // End of template mw_service_consumer_id template (omit) DeviceInformation_ m_device_info( - in String p_associate_id, + in Json.String p_associate_id, in template (omit) AppMobilityServiceLevel p_appMobilityServiceLevel := omit, in template (omit) ContextTransferState p_contextTransferState := omit ) := { @@ -81,7 +64,7 @@ module ApplicationMobilityServiceAPI_Templates { } // End of template m_device_info template (present) DeviceInformation_ mw_device_info( - template (present) String p_associate_id := ?, + template (present) Json.String p_associate_id := ?, template AppMobilityServiceLevel p_appMobilityServiceLevel := *, template ContextTransferState p_contextTransferState := * ) := { @@ -90,51 +73,165 @@ module ApplicationMobilityServiceAPI_Templates { contextTransferState := p_contextTransferState } // End of template mw_device_info - template (value) AdjacentAppInfoSubscription m_adjacent_app_info_subscription( - in Json.String p_subscriptionType, - in template (omit) Json.AnyURI p_callbackReference := omit, - in template (omit) ApplicationMobilityServiceAPI_TypesAndValues.Links p_links := omit, - in template (omit) AdjacentFilterCriteria p_filterCriteria := omit, - in template (omit) TimeStamp p_expiryDeadline := omit, - in template (omit) Json.Bool p_requestTestNotification := omit, - in template (omit) ApplicationMobilityServiceAPI_TypesAndValues.WebsockNotifConfig p_websockNotifConfig := omit - ) := { - subscriptionType := p_subscriptionType , + template (omit) MobilityProcedureSubscription m_mobility_procedure_subscription( + in template (omit) Json.AnyURI p_callbackReference := omit, + in template (value) FilterCriteria p_filterCriteria, + in template (omit) ApplicationMobilityServiceAPI_TypesAndValues.Links p_links := omit, + in template (omit) Json.Bool p_requestTestNotification := omit, + in template (omit) ApplicationMobilityServiceAPI_TypesAndValues.WebsockNotifConfig p_websockNotifConfig := omit, + in template (omit) TimeStamp p_expiryDeadline := omit + ) := { + subscriptionType := "MobilityProcedureSubscription", + callbackReference := p_callbackReference, + requestTestNotification := p_requestTestNotification, + websockNotifConfig := p_websockNotifConfig, + links := p_links, + filterCriteria := p_filterCriteria, + expiryDeadline := p_expiryDeadline + } // End of template m_mobility_procedure_subscription + + template (omit) MobilityProcedureSubscription m_mobility_procedure_subscription_error( + in template (omit) Json.AnyURI p_callbackReference := omit, + in template (value) FilterCriteria p_filterCriteria, + in template (omit) ApplicationMobilityServiceAPI_TypesAndValues.Links p_links := omit, + in template (omit) Json.Bool p_requestTestNotification := omit, + in template (omit) ApplicationMobilityServiceAPI_TypesAndValues.WebsockNotifConfig p_websockNotifConfig := omit, + in template (omit) TimeStamp p_expiryDeadline := omit + ) modifies m_mobility_procedure_subscription := { + subscriptionType := "MobilityProcedureSub" + } // End of template m_mobility_procedure_subscription_error + + template (present) MobilityProcedureSubscription mw_mobility_procedure_subscription( + template Json.AnyURI p_callbackReference := *, + template (present) FilterCriteria p_filterCriteria := ?, + template ApplicationMobilityServiceAPI_TypesAndValues.Links p_links := *, + template Json.Bool p_requestTestNotification := *, + template ApplicationMobilityServiceAPI_TypesAndValues.WebsockNotifConfig p_websockNotifConfig := *, + template TimeStamp p_expiryDeadline := * + ) := { + subscriptionType := "MobilityProcedureSubscription", callbackReference := p_callbackReference, requestTestNotification := p_requestTestNotification, websockNotifConfig := p_websockNotifConfig, links := p_links, filterCriteria := p_filterCriteria, - expiryDeadline := p_expiryDeadline + expiryDeadline := p_expiryDeadline + } // End of template mw_mobility_procedure_subscription + + template (omit) FilterCriteria m_filter_criteria( + in template (omit) Json.String p_appInstanceId := omit, + in template (omit) AssociateId p_associateId := omit, + in template (omit) MobilityStatus p_mobilityStatus := omit + ) := { + appInstanceId := p_appInstanceId, + associateId := p_associateId, + mobilityStatus := p_mobilityStatus + } // End of template m_filter_criteria + + template FilterCriteria mw_filter_criteria( + template Json.String p_appInstanceId := *, + template AssociateId p_associateId := *, + template MobilityStatus p_mobilityStatus := * + ) := { + appInstanceId := p_appInstanceId, + associateId := p_associateId, + mobilityStatus := p_mobilityStatus + } // End of template mw_filter_criteria + + template (omit) AdjacentAppInstanceInfo m_adjacent_app_instance_info( + in template (value) Json.String p_appInstanceId, + in template (value) Json.String p_appDId, + in template (value) CommunicationInterface p_appInstanceCommLink, + in template (omit) MECHostInformation p_mecHostInformation := omit, + in template (omit) Json.String p_registeredInstanceId := omit + ) := { + appInstanceId := p_appInstanceId, + appDId := p_appDId, + appInstanceCommLink := p_appInstanceCommLink, + mecHostInformation := p_mecHostInformation, + registeredInstanceId := p_registeredInstanceId + } // End of template m_adjacent_app_instance_info + + template (present) AdjacentAppInstanceInfo mw_adjacent_app_instance_info( + template (present) Json.String p_appInstanceId := ?, + template (present) Json.String p_appDId := ?, + template (present) CommunicationInterface p_appInstanceCommLink := ?, + template MECHostInformation p_mecHostInformation := *, + template Json.String p_registeredInstanceId := * + ) := { + appInstanceId := p_appInstanceId, + appDId := p_appDId, + appInstanceCommLink := p_appInstanceCommLink, + mecHostInformation := p_mecHostInformation, + registeredInstanceId := p_registeredInstanceId + } // End of template mw_adjacent_app_instance_info + + template (omit) CommunicationInterface m_communication_interface( + in template (omit) IpAddresses p_ipAddresses := omit + ) := { + ipAddresses := p_ipAddresses + } // End of template m_communication_interface + + template CommunicationInterface mw_communication_interface( + template IpAddresses p_ipAddresses := * + ) := { + ipAddresses := p_ipAddresses + } // End of template mw_communication_interface + + template (omit) AdjacentAppInfoSubscription m_adjacent_app_info_subscription( + in template (omit) Json.AnyURI p_callbackReference := omit, + in template (value) AdjacentFilterCriteria p_filterCriteria, + in template (omit) ApplicationMobilityServiceAPI_TypesAndValues.Links p_links := omit, + in template (omit) Json.Bool p_requestTestNotification := omit, + in template (omit) ApplicationMobilityServiceAPI_TypesAndValues.WebsockNotifConfig p_websockNotifConfig := omit, + in template (omit) TimeStamp p_expiryDeadline := omit + ) := { + subscriptionType := "AdjacentAppInfoSubscription", + callbackReference := p_callbackReference, + requestTestNotification := p_requestTestNotification, + websockNotifConfig := p_websockNotifConfig, + links := p_links, + filterCriteria := p_filterCriteria, + expiryDeadline := p_expiryDeadline } // End of template m_adjacent_app_info_subscription template (present) AdjacentAppInfoSubscription mw_adjacent_app_info_subscription( - template (present) Json.String p_subscriptionType := ?, template Json.AnyURI p_callbackReference := *, + template (present) AdjacentFilterCriteria p_filterCriteria := ?, template ApplicationMobilityServiceAPI_TypesAndValues.Links p_links := *, - template AdjacentFilterCriteria p_filterCriteria := *, - template TimeStamp p_expiryDeadline := *, template Json.Bool p_requestTestNotification := *, - template ApplicationMobilityServiceAPI_TypesAndValues.WebsockNotifConfig p_websockNotifConfig := * - ) := { - subscriptionType := p_subscriptionType , + template ApplicationMobilityServiceAPI_TypesAndValues.WebsockNotifConfig p_websockNotifConfig := *, + template TimeStamp p_expiryDeadline := * + ) := { + subscriptionType := "AdjacentAppInfoSubscription", callbackReference := p_callbackReference, requestTestNotification := p_requestTestNotification, websockNotifConfig := p_websockNotifConfig, links := p_links, filterCriteria := p_filterCriteria, - expiryDeadline := p_expiryDeadline + expiryDeadline := p_expiryDeadline } // End of template mw_adjacent_app_info_subscription + template (omit) AdjacentFilterCriteria m_adjacent_filter_criteria( + in template (omit) Json.String p_appInstanceId := omit + ) := { + appInstanceId := p_appInstanceId + } // End of template m_adjacent_filter_criteria + + template AdjacentFilterCriteria mw_adjacent_filter_criteria( + template Json.String p_appInstanceId := * + ) := { + appInstanceId := p_appInstanceId + } // End of template mw_adjacent_filter_criteria + template (value) MobilityProcedureNotification m_mobility_procedure_notification( - in Json.String p_notificationType, - in template (value) Links_Notification p_links, + in template (value) ApplicationMobilityServiceAPI_TypesAndValues.Links p_links, in template (value) AssociateId p_associateId, in template (value) MobilityStatus p_mobilityStatus, in template (omit) TimeStamp p_timeStamp := omit, in template (omit) TargetAppInfo p_targetAppInfo := omit ) := { - notificationType := p_notificationType, + notificationType := "MobilityProcedureNotification", timeStamp := p_timeStamp, associateId := p_associateId, mobilityStatus := p_mobilityStatus, @@ -143,14 +240,13 @@ module ApplicationMobilityServiceAPI_Templates { } // End of template m_mobility_procedure_notification template (present) MobilityProcedureNotification mw_mobility_procedure_notification( - template (present) Json.String p_notificationType := ?, - template (present) Links_Notification p_links := ?, + template (present) ApplicationMobilityServiceAPI_TypesAndValues.Links p_links := ?, template (present) AssociateId p_associateId := ?, template (present) MobilityStatus p_mobilityStatus := ?, template TimeStamp p_timeStamp := *, template TargetAppInfo p_targetAppInfo := * ) := { - notificationType := p_notificationType, + notificationType := "MobilityProcedureNotification", timeStamp := p_timeStamp, associateId := p_associateId, mobilityStatus := p_mobilityStatus, @@ -158,24 +254,88 @@ module ApplicationMobilityServiceAPI_Templates { links := p_links } // End of template mw_mobility_procedure_notification + template (omit) AdjacentAppInfoNotification m_adjacent_app_info_notification( + in template (value) ApplicationMobilityServiceAPI_TypesAndValues.Links p_links, + in template (omit) AdjacentAppInfo p_adjacentAppInfo := omit, + in template (omit) TimeStamp p_timeStamp := omit + ) :={ + notificationType := "AdjacentAppInfoNotification", + timeStamp := p_timeStamp, + adjacentAppInfo := p_adjacentAppInfo, + links := p_links + } // End of template m_adjacent_app_info_notification + + template (present) AdjacentAppInfoNotification mw_adjacent_app_info_notification( + template (present) ApplicationMobilityServiceAPI_TypesAndValues.Links p_links := ?, + template AdjacentAppInfo p_adjacentAppInfo := *, + template TimeStamp p_timeStamp := * + ) :={ + notificationType := "AdjacentAppInfoNotification", + timeStamp := p_timeStamp, + adjacentAppInfo := p_adjacentAppInfo, + links := p_links + } // End of template mw_adjacent_app_info_notification + template (omit) ApplicationMobilityServiceAPI_TypesAndValues.ExpiryNotification m_expire_notification( - in Json.String p_notificationType, - in template (omit) TimeStamp p_timestamp := omit, - in template (omit) ApplicationMobilityServiceAPI_TypesAndValues.Links p_links := omit + in template (value) ApplicationMobilityServiceAPI_TypesAndValues.Links p_links, + in template (omit) TimeStamp p_timestamp := omit ) := { - notificationType := p_notificationType, + notificationType := "ExpiryNotification", timeStamp := p_timestamp, links := p_links } // End of template m_expire_notification template (present) ApplicationMobilityServiceAPI_TypesAndValues.ExpiryNotification mw_expire_notification( - template (present) Json.String p_notificationType := ?, - template TimeStamp p_timestamp := *, - template ApplicationMobilityServiceAPI_TypesAndValues.Links p_links := * + template (present) ApplicationMobilityServiceAPI_TypesAndValues.Links p_links := ?, + template TimeStamp p_timestamp := * ) := { - notificationType := p_notificationType, + notificationType := "ExpiryNotification", timeStamp := p_timestamp, links := p_links } // End of template mw_expire_notification + template (value) ApplicationMobilityServiceAPI_TypesAndValues.SubscriptionLinkList m_subscription_link_list( + in template (value) ApplicationMobilityServiceAPI_TypesAndValues.Links p_links, + in template (value) ApplicationMobilityServiceAPI_TypesAndValues.Subscription p_subscription + ) := { + links := p_links, + subscription := p_subscription + } // End of template m_subscription_link_list + + template (present) ApplicationMobilityServiceAPI_TypesAndValues.SubscriptionLinkList mw_subscription_link_list( + template (present) ApplicationMobilityServiceAPI_TypesAndValues.Links p_links := ?, + template (present) ApplicationMobilityServiceAPI_TypesAndValues.Subscription p_subscription := ? + ) := { + links := p_links, + subscription := p_subscription + } // End of template mw_subscription_link_list + + template (value) ApplicationMobilityServiceAPI_TypesAndValues.Links m_links( + in template (value) ApplicationMobilityServiceAPI_TypesAndValues.LinkType p_self_ + ) := { + self_ := p_self_ + } // End of template m_links + + template (present) ApplicationMobilityServiceAPI_TypesAndValues.Links mw_links( + template (present) ApplicationMobilityServiceAPI_TypesAndValues.LinkType p_self_ := ? + ) := { + self_ := p_self_ + } // End of template mw_links + + template (value) ApplicationMobilityServiceAPI_TypesAndValues.Subscription m_subscription( + in template (value) Json.AnyURI p_href, + in template (value) Json.String p_subscriptionType + ) := { + href := p_href, + subscriptionType := p_subscriptionType + } // End of template m_subscription + + template (present) ApplicationMobilityServiceAPI_TypesAndValues.Subscription mw_subscription( + template (present) Json.AnyURI p_href := ?, + template (present) Json.String p_subscriptionType := ? + ) := { + href := p_href, + subscriptionType := p_subscriptionType + } // End of template mw_subscription + } // End of module ApplicationMobilityServiceAPI_Templates diff --git a/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_TypesAndValues.ttcn b/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_TypesAndValues.ttcn index 4a79f59..f6dc762 100644 --- a/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_TypesAndValues.ttcn @@ -85,6 +85,7 @@ module ApplicationMobilityServiceAPI_TypesAndValues { MECHostInformation mecHostInformation optional, Json.String registeredInstanceId optional } + type record of AdjacentAppInstanceInfo AdjacentAppInstanceInfos; /** * @desc This type represents a subscription to mobility procedure notifications from AMS @@ -98,7 +99,7 @@ module ApplicationMobilityServiceAPI_TypesAndValues { * @see ETSI GS MEC 021 V3.1.1 (2023-10) Table 7.3.2-1: Attributes of the MobilityProcedureSubscription */ type record MobilityProcedureSubscription { - Json.String subscriptionType, + Json.String subscriptionType, Json.AnyURI callbackReference optional, Json.Bool requestTestNotification optional, WebsockNotifConfig websockNotifConfig optional, @@ -123,10 +124,14 @@ module ApplicationMobilityServiceAPI_TypesAndValues { /** * @desc List of filtering criteria for the subscription * @member appInstanceId Identifier of the application instance that registers to the Application Mobility Service + * @member associateId Identifiers to associate the information for specific UE(s) and flow(s) + * @member mobilityStatus In case mobilityStatus is not included in the subscription request * @see ETSI GS MEC 021 V3.1.1 (2023-10) Table 7.3.2-1: Attributes of the MobilityProcedureSubscription */ type record FilterCriteria { - Json.String appInstanceId optional + Json.String appInstanceId optional, + AssociateId associateId optional, + MobilityStatus mobilityStatus optional } type record of FilterCriteria FilterCriterias; @@ -203,7 +208,7 @@ module ApplicationMobilityServiceAPI_TypesAndValues { AssociateId associateId, MobilityStatus mobilityStatus, TargetAppInfo targetAppInfo optional, - Links_Notification links + Links links } with { variant (links) "name as '_links'"; } @@ -231,15 +236,6 @@ module ApplicationMobilityServiceAPI_TypesAndValues { variant "JSON: as number" } - /** - * @desc Object containing hyperlinks related to the resource - * @member subscription Link to the related subscription - * @see ETSI GS MEC 021 V3.1.1 (2023-10) Table 7.4.2-1: Attributes of the MobilityProcedureNotification - */ - type record Links_Notification { - LinkType subscription - } - /** * @desc This type represents a notification from AMS with regards to change on adjacent application instances information * @member notificationType Shall be set to "MobilityProcedureNotification" @@ -252,7 +248,7 @@ module ApplicationMobilityServiceAPI_TypesAndValues { Json.String notificationType, TimeStamp timeStamp optional, AdjacentAppInfo adjacentAppInfo optional, - Links_Notification links + Links links } with { variant (links) "name as '_links'"; } @@ -269,7 +265,7 @@ module ApplicationMobilityServiceAPI_TypesAndValues { type record ExpiryNotification { Json.String notificationType, TimeStamp timeStamp optional, - Links_Notification links + Links links } with { variant (links) "name as '_links'"; } @@ -303,7 +299,7 @@ module ApplicationMobilityServiceAPI_TypesAndValues { */ type record TestNotification { Json.String notificationType, - Links_Notification links + Links links } with { variant (links) "name as '_links'"; } diff --git a/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn b/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn index 8bda338..c074fe3 100644 --- a/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn +++ b/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn @@ -44,7 +44,9 @@ module LibMec_Pixits { modulepar charstring PX_ME_DEVICE_APP_URI := "dev_app/v1"; - modulepar charstring PX_ME_APP_AMS_URI := "amsi/v1/appMobilityServices" + modulepar charstring PX_ME_APP_AMS_URI := "amsi/v1/app_mobility_services" + + modulepar charstring PX_ME_APP_AMS_QUERIES_URI := "amsi/v1/queries/adjacent_app_instances" modulepar charstring PX_ME_APP_AMS_SUBS := "amsi/v1/subscriptions"; diff --git a/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn b/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn index 373d25b..2dc8d1c 100644 --- a/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn +++ b/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn @@ -85,9 +85,15 @@ module LibHttp_JsonMessageBodyTypes { TrafficRuleList trafficRuleList, TrafficRule trafficRule, /*AppMobilityServiceInfo appMobilityServiceInfo,*/ - RegistrationInfo registrationInfo, - ApplicationMobilityServiceAPI_TypesAndValues.MobilityProcedureSubscription subscriptionLinkList_ams, - ApplicationMobilityServiceAPI_TypesAndValues.AdjacentAppInfoSubscription adjacentAppInfoSubscription_ams, + RegistrationInfos registrationInfos, + RegistrationInfo registrationInfo, + AdjacentAppInstanceInfos adjacentAppInstanceInfos, + AdjacentAppInstanceInfo adjacentAppInstanceInfo, + MobilityProcedureSubscription mobilityProcedureSubscription, + AdjacentAppInfoSubscription adjacentAppInfoSubscription, + MobilityProcedureNotification mobilityProcedureNotification, + AdjacentAppInfoNotification adjacentAppInfoNotification, + ApplicationMobilityServiceAPI_TypesAndValues.SubscriptionLinkList subscriptionLinkList_ams, ApplicationMobilityServiceAPI_TypesAndValues.ExpiryNotification expireNotification_ams, /* ApplicationMobilityServiceAPI_TypesAndValues.RegistrationRequestWithError registrationRequestWithError_ams, */ GrantRequest grantRequest, diff --git a/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn b/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn index 71dc97c..553c55c 100644 --- a/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn +++ b/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn @@ -331,62 +331,114 @@ module LibHttp_JsonTemplates { group application_mobilty_service_api { - // template (value) JsonBody m_body_json_app_mobility_service_info( - // in template (value) AppMobilityServiceInfo p_app_mobility_service_info - // ) := { - // appMobilityServiceInfo := p_app_mobility_service_info - // } // End of template mw_body_json_app_mobility_service_info - - // template (present) JsonBody mw_body_json_app_mobility_service_info( - // template (present) AppMobilityServiceInfo p_app_mobility_service_info := ? - // ) := { - // appMobilityServiceInfo := p_app_mobility_service_info - // } // End of template mw_body_json_app_mobility_service_info + template (value) JsonBody m_body_json_ams_registration_info_list( + in template (value) RegistrationInfos p_registrationInfos + ) := { + registrationInfos := p_registrationInfos + } // End of template m_body_json_ams_registration_info_list + template (present) JsonBody mw_body_json_ams_registration_info_list( + template (present) RegistrationInfos p_registrationInfos := ? + ) := { + registrationInfos := p_registrationInfos + } // End of template mw_body_json_ams_registration_info_list template (value) JsonBody m_body_json_ams_registration_info( in template (value) RegistrationInfo p_registrationInfo - ) := { + ) := { registrationInfo := p_registrationInfo } // End of template m_body_json_ams_registration_info - template (present) JsonBody mw_body_json_ams_registration_request( - template (present) RegistrationInfo p_registrationInfo := ? - ) := { + template (present) JsonBody mw_body_json_ams_registration_info( + template (present) RegistrationInfo p_registrationInfo := ? + ) := { registrationInfo := p_registrationInfo - } // End of template mw_body_json_ams_registration_request - - // template (value) JsonBody m_body_json_ams_registration_request_with_error( - // in template (value) ApplicationMobilityServiceAPI_TypesAndValues.RegistrationRequestWithError p_registrationRequestWithError - // ) := { - // registrationRequestWithError_ams := p_registrationRequestWithError - // } // End of template m_body_json_ue_identity_problem_details - - // template (present) JsonBody mw_body_json_ams_subscriptions( - // template (present) ApplicationMobilityServiceAPI_TypesAndValues.MobilityProcedureSubscription p_amsSubscriptionLinkList := ? - // ) := { - // subscriptionLinkList_ams := p_amsSubscriptionLinkList - // } // End of template mw_body_json_ue_identity_problem_details - - template (present) JsonBody m_body_json_ams_subscriptions( - template (present) ApplicationMobilityServiceAPI_TypesAndValues.MobilityProcedureSubscription p_amsSubscriptionLinkList := ? - ) := { + } // End of template mw_body_json_ams_registration_info + + template (value) JsonBody m_body_json_ams_adjacent_app_instance_info_list( + in template (value) AdjacentAppInstanceInfos p_adjacentAppInstanceInfos + ) := { + adjacentAppInstanceInfos := p_adjacentAppInstanceInfos + } // End of template m_body_json_ams_adjacent_app_instance_info_list + + template (present) JsonBody mw_body_json_ams_adjacent_app_instance_info_list( + template (present) AdjacentAppInstanceInfos p_adjacentAppInstanceInfos := ? + ) := { + adjacentAppInstanceInfos := p_adjacentAppInstanceInfos + } // End of template mw_body_json_ams_adjacent_app_instance_info_list + + template (value) JsonBody m_body_json_ams_adjacent_app_instance_info( + in template (value) AdjacentAppInstanceInfo p_adjacentAppInstanceInfo + ) := { + adjacentAppInstanceInfo := p_adjacentAppInstanceInfo + } // End of template m_body_json_ams_adjacent_app_instance_info + + template (present) JsonBody mw_body_json_ams_adjacent_app_instance_info( + template (present) AdjacentAppInstanceInfo p_adjacentAppInstanceInfo := ? + ) := { + adjacentAppInstanceInfo := p_adjacentAppInstanceInfo + } // End of template mw_body_json_ams_adjacent_app_instance_info + + template (value) JsonBody m_body_json_ams_subscriptions( + in template (value) ApplicationMobilityServiceAPI_TypesAndValues.SubscriptionLinkList p_amsSubscriptionLinkList + ) := { subscriptionLinkList_ams := p_amsSubscriptionLinkList - } // End of template mw_body_json_ue_identity_problem_details + } // End of template m_body_json_ams_subscriptions + template (present) JsonBody mw_body_json_ams_subscriptions( + template (present) ApplicationMobilityServiceAPI_TypesAndValues.SubscriptionLinkList p_amsSubscriptionLinkList := ? + ) := { + subscriptionLinkList_ams := p_amsSubscriptionLinkList + } // End of template mw_body_json_ams_subscriptions + + template (value) JsonBody m_body_json_ams_mobility_procedure_subscription( + in template (value) MobilityProcedureSubscription p_mobilityProcedureSubscription + ) := { + mobilityProcedureSubscription := p_mobilityProcedureSubscription + } // End of template m_body_json_ams_mobility_procedure_subscription + + template (present) JsonBody mw_body_json_ams_mobility_procedure_subscription( + template (present) MobilityProcedureSubscription p_mobilityProcedureSubscription + ) := { + mobilityProcedureSubscription := p_mobilityProcedureSubscription + } // End of template mw_body_json_ams_mobility_procedure_subscription + + template (value) JsonBody m_body_json_ams_adjacent_appInfo_subscription( + in template (value) AdjacentAppInfoSubscription p_adjacentAppInfoSubscription + ) := { + adjacentAppInfoSubscription := p_adjacentAppInfoSubscription + } // End of template m_body_json_ams_adjacent_appInfo_subscription + + template (present) JsonBody mw_body_json_ams_adjacent_appInfo_subscription( + template (present) AdjacentAppInfoSubscription p_adjacentAppInfoSubscription + ) := { + adjacentAppInfoSubscription := p_adjacentAppInfoSubscription + } // End of template mw_body_json_ams_adjacent_appInfo_subscription + + template (value) JsonBody m_body_json_mobility_procedure_notification( + in template (value) MobilityProcedureNotification p_mobilityProcedureNotification + ) := { + mobilityProcedureNotification := p_mobilityProcedureNotification + } // End of template m_body_json_mobility_procedure_notification template (present) JsonBody mw_body_json_mobility_procedure_notification( - template (present) ApplicationMobilityServiceAPI_TypesAndValues.MobilityProcedureSubscription p_amsSubscriptionLinkList := ? - ) := { - subscriptionLinkList_ams := p_amsSubscriptionLinkList + template (present) MobilityProcedureNotification p_mobilityProcedureNotification := ? + ) := { + mobilityProcedureNotification := p_mobilityProcedureNotification } // End of template mw_body_json_mobility_procedure_notification - template (present) JsonBody mw_body_json_adjacent_application_info_notification( - template (present) ApplicationMobilityServiceAPI_TypesAndValues.AdjacentAppInfoSubscription p_adjacentAppInfoSubscription := ? - ) := { - adjacentAppInfoSubscription_ams := p_adjacentAppInfoSubscription - } // End of template mw_body_json_mobility_procedure_notification + template (value) JsonBody m_body_json_adjacent_app_info_notification( + in template (value) AdjacentAppInfoNotification p_adjacentAppInfoNotification + ) := { + adjacentAppInfoNotification := p_adjacentAppInfoNotification + } // End of template m_body_json_adjacent_app_info_notification + + template (present) JsonBody mw_body_json_adjacent_app_info_notification( + template (present) AdjacentAppInfoNotification p_adjacentAppInfoNotification := ? + ) := { + adjacentAppInfoNotification := p_adjacentAppInfoNotification + } // End of template mw_body_json_adjacent_app_info_notification template (present) JsonBody mw_body_json_expire_notification( template (present) ApplicationMobilityServiceAPI_TypesAndValues.ExpiryNotification p_expire_notification := ? -- GitLab From bb9651c66da2007649d6e281b88b0cbe07069728 Mon Sep 17 00:00:00 2001 From: garciay Date: Thu, 8 Feb 2024 08:05:17 +0100 Subject: [PATCH 69/99] TTF T027: Finalyze review MEC-016 --- .../AtsMec_DeviceApplicationInterfaceAPI_TestCases.ttcn | 1 - .../ttcn/DeviceApplicationInterfaceAPI_TypesAndValues.ttcn | 5 ++--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/ttcn/AtsMec_DeviceApplicationInterface/AtsMec_DeviceApplicationInterfaceAPI_TestCases.ttcn b/ttcn/AtsMec_DeviceApplicationInterface/AtsMec_DeviceApplicationInterfaceAPI_TestCases.ttcn index 2f39915..904a4d0 100644 --- a/ttcn/AtsMec_DeviceApplicationInterface/AtsMec_DeviceApplicationInterfaceAPI_TestCases.ttcn +++ b/ttcn/AtsMec_DeviceApplicationInterface/AtsMec_DeviceApplicationInterfaceAPI_TestCases.ttcn @@ -11,7 +11,6 @@ */ module AtsMec_DeviceApplicationInterfaceAPI_TestCases { - // JSON import from Json all; diff --git a/ttcn/LibMec/DeviceApplicationInterfaceAPI/ttcn/DeviceApplicationInterfaceAPI_TypesAndValues.ttcn b/ttcn/LibMec/DeviceApplicationInterfaceAPI/ttcn/DeviceApplicationInterfaceAPI_TypesAndValues.ttcn index b70a27f..791a797 100644 --- a/ttcn/LibMec/DeviceApplicationInterfaceAPI/ttcn/DeviceApplicationInterfaceAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/DeviceApplicationInterfaceAPI/ttcn/DeviceApplicationInterfaceAPI_TypesAndValues.ttcn @@ -10,7 +10,6 @@ */ module DeviceApplicationInterfaceAPI_TypesAndValues { - // JSON import from Json all; @@ -51,9 +50,9 @@ module DeviceApplicationInterfaceAPI_TypesAndValues { Json.String appDId, Json.String appName, Json.String appProvider, - Json.String appSoftVersion optional, + Json.String appSoftVersion, Json.String appDVersion, - Json.String appDescription optional, + Json.String appDescription, LocationConstraintsList appLocation optional, AppCharcs appCharcs optional } -- GitLab From 1b3a7c70a5895fb7f2adf2d3cbd0448361936bfe Mon Sep 17 00:00:00 2001 From: garciay Date: Fri, 8 Mar 2024 17:21:51 +0100 Subject: [PATCH 70/99] Validation VIS ATS against MEC Sanbox --- ccsrc/Protocols/Json/json_codec.cc | 12 +- .../AtsMec_V2XInformationService.cfg | 77 --------- .../AtsMec_V2XInformationService.cfg_ | 154 ++++++++++++++++++ .../AtsMec_Rnis/AtsMec_RnisAPI_TestCases.ttcn | 46 +++--- ...ec_V2XInformationServiceAPI_TestCases.ttcn | 140 +++++++++++----- ttcn/LibMec/RnisAPI/ttcn/RnisAPI_Pixits.ttcn | 4 +- .../V2XInformationServiceAPI_Functions.ttcn | 6 +- .../ttcn/V2XInformationServiceAPI_Pixits.ttcn | 24 +-- .../V2XInformationServiceAPI_Templates.ttcn | 28 +++- ...XInformationServiceAPI_TypesAndValues.ttcn | 8 +- 10 files changed, 331 insertions(+), 168 deletions(-) delete mode 100644 etc/AtsMec_V2XInformationService/AtsMec_V2XInformationService.cfg create mode 100644 etc/AtsMec_V2XInformationService/AtsMec_V2XInformationService.cfg_ diff --git a/ccsrc/Protocols/Json/json_codec.cc b/ccsrc/Protocols/Json/json_codec.cc index 8d8bdec..aeb97ea 100644 --- a/ccsrc/Protocols/Json/json_codec.cc +++ b/ccsrc/Protocols/Json/json_codec.cc @@ -80,6 +80,12 @@ int json_codec::encode (const LibHttp__JsonMessageBodyTypes::JsonBody& msg, OCTE const V2XInformationServiceAPI__TypesAndValues::PredictedQos& predicted_qos = msg.predictedQos(); predicted_qos.encode(V2XInformationServiceAPI__TypesAndValues::PredictedQos_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(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_v2xMsgDistributionServerInfo)) { + const V2XInformationServiceAPI__TypesAndValues::V2xMsgDistributionServerInfo& v2x_msg_distribution_server_info = msg.v2xMsgDistributionServerInfo(); + v2x_msg_distribution_server_info.encode(V2XInformationServiceAPI__TypesAndValues::V2xMsgDistributionServerInfo_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(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_assocStaSubscription)) { const WlanInformationAPI__TypesAndValues::AssocStaSubscription& assoc_sta_subscription = msg.assocStaSubscription(); assoc_sta_subscription.encode(WlanInformationAPI__TypesAndValues::AssocStaSubscription_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); @@ -430,7 +436,11 @@ int json_codec::decode (const OCTETSTRING& p_data, LibHttp__JsonMessageBodyTypes TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); prov_chg_pc5_notification.decode(V2XInformationServiceAPI__TypesAndValues::ProvChgPc5Notification_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); msg.provChgPc5Notification() = prov_chg_pc5_notification; - + } else if (it->second.find("\"v2xMsgDistributionServer\"") != std::string::npos) { + V2XInformationServiceAPI__TypesAndValues::V2xMsgDistributionServerInfo v2x_msg_distribution_server_info; + TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); + v2x_msg_distribution_server_info.decode(V2XInformationServiceAPI__TypesAndValues::V2xMsgDistributionServerInfo_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); + msg.v2xMsgDistributionServerInfo() = v2x_msg_distribution_server_info; } else if (it->second.find("\"AssocStaSubscription\"") != std::string::npos) { if (it->second.find("\"subscription\"") != std::string::npos) { // SubscriptionLinkList diff --git a/etc/AtsMec_V2XInformationService/AtsMec_V2XInformationService.cfg b/etc/AtsMec_V2XInformationService/AtsMec_V2XInformationService.cfg deleted file mode 100644 index c79eb24..0000000 --- a/etc/AtsMec_V2XInformationService/AtsMec_V2XInformationService.cfg +++ /dev/null @@ -1,77 +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; - -LibHttp_Pics.PICS_HEADER_HOST := "sandbox-mec.etsi.org" #"192.168.1.39" - -LibHttp_Pics.PICS_HEADER_CONTENT_TYPE := "application/json" -LibHttp_Pics.PICS_USE_TOKEN_HEADER := true -#LibHttp_Pics.PICS_TOKEN_HEADER := "Basic WrongToken" - -LibMec_Pics.PICS_ROOT_API := "/sbx8tunqyy/mep1" # Need to sign in on https://sandbox-mec.etsi.org/, section 'Try-it from your MEC application' - -LibMec_Pics.PICS_MEC_PLAT := true - -[LOGGING] -# In this section you can specify the name of the log file and the classes of events -# you want to log into the file or display on console (standard error). - -LogFile := "../logs/AtsMec_V2XInformationService/%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=sandbox-mec.etsi.org,port=443,use_ssl=1,trusted_ca_list=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem,privkey=/home/yann/var/ssl/archive/yanngarcia.ddns.net/privkey1.pem,certificate=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem)" -system.httpPort_notif.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server_mode=1,local_port=443,use_ssl=1,mutual_auth=1,mutual_tls=1,trusted_ca_list=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem,privkey=/home/yann/var/ssl/archive/yanngarcia.ddns.net/privkey1.pem,certificate=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem)" - -[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 - -[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_V2XInformationService/AtsMec_V2XInformationService.cfg_ b/etc/AtsMec_V2XInformationService/AtsMec_V2XInformationService.cfg_ new file mode 100644 index 0000000..bb44d0d --- /dev/null +++ b/etc/AtsMec_V2XInformationService/AtsMec_V2XInformationService.cfg_ @@ -0,0 +1,154 @@ +[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; + +LibHttp_Pics.PICS_HEADER_HOST := "mec-platform.etsi.org" #"192.168.1.39" + +LibHttp_Pics.PICS_HEADER_CONTENT_TYPE := "application/json" +LibHttp_Pics.PICS_USE_TOKEN_HEADER := true +#LibHttp_Pics.PICS_TOKEN_HEADER := "Basic WrongToken" + +LibMec_Pics.PICS_ROOT_API := "/sbxykqjr17/mep1/" # Need to sign in on https://mec-platform.etsi.org/, section 'Try-it from your MEC application' + +LibMec_Pics.PICS_MEC_PLAT := true + +# 5g-small-cell-1 +V2XInformationServiceAPI_Pixits.PX_V2X_ECGI := "268804901557" +V2XInformationServiceAPI_Pixits.PX_V2X_CELL_ID := "101010101" +V2XInformationServiceAPI_Pixits.PX_V2X_ECGI_LAT := 43.730846 +V2XInformationServiceAPI_Pixits.PX_V2X_ECGI_LONG := 7.415385 + +[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_V2XInformationService/%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=mec-platform.etsi.org,port=443,use_ssl=1,trusted_ca_list=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem,privkey=/home/yann/var/ssl/archive/yanngarcia.ddns.net/privkey1.pem,certificate=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem)" +system.httpPort_notif.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server_mode=1,local_port=443,use_ssl=1,mutual_auth=1,mutual_tls=1,trusted_ca_list=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem,privkey=/home/yann/var/ssl/archive/yanngarcia.ddns.net/privkey1.pem,certificate=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem)" + +[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 + +# 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 +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_002_OK_02 +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_002_BR +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_002_NF + +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_003_OK_01 +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_003_OK_02 +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_003_BR +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_003_NF + +# Check that the IUT processes properly a request to information of V2X Message Distribution servers +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 + +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_005_OK +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_005_BR +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_005_NF + +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_006_OK +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_006_BR + +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_007_OK_01 +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_007_OK_02 +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_007_OK_03 +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_007_OK_04 +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_007_OK_05 +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_007_BR + +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_008_OK_01 +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_008_OK_02 +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_008_OK_03 +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_008_OK_04 +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_008_OK_05 +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_008_BR + +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_009_OK_01 +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_009_OK_02 +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_009_OK_03 +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_009_OK_04 +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_009_OK_05 +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_009_BR +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_009_NF + +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_010_OK_01 +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_010_OK_02 +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_010_OK_03 +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_010_OK_04 +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_010_OK_05 +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_010_BR +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_010_NF + +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_011_OK_01 +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_011_OK_02 +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_011_OK_03 +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_011_OK_04 +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_011_OK_05 +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_011_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/ttcn/AtsMec_Rnis/AtsMec_RnisAPI_TestCases.ttcn b/ttcn/AtsMec_Rnis/AtsMec_RnisAPI_TestCases.ttcn index 1e79a3c..7fd34ac 100644 --- a/ttcn/AtsMec_Rnis/AtsMec_RnisAPI_TestCases.ttcn +++ b/ttcn/AtsMec_Rnis/AtsMec_RnisAPI_TestCases.ttcn @@ -100,7 +100,7 @@ module AtsMec_RnisAPI_TestCases { { m_ecgi( m_plmn("001", "001"), - PX_CELL_ID + PX_V2X_CELL_ID ) } ) @@ -809,7 +809,7 @@ module AtsMec_RnisAPI_TestCases { { m_ecgi( m_plmn("001", "001"), - PX_CELL_ID + PX_V2X_CELL_ID ) } ))))))); @@ -945,7 +945,7 @@ module AtsMec_RnisAPI_TestCases { { m_ecgi( m_plmn("001", "001"), - PX_CELL_ID + PX_V2X_CELL_ID ) } ))))))); @@ -1028,7 +1028,7 @@ module AtsMec_RnisAPI_TestCases { { m_ecgi( m_plmn("001", "001"), - PX_CELL_ID + PX_V2X_CELL_ID ) } ) @@ -1080,7 +1080,7 @@ module AtsMec_RnisAPI_TestCases { { mw_ecgi( m_plmn("001", "001"), - PX_CELL_ID + PX_V2X_CELL_ID ) } ) @@ -1151,7 +1151,7 @@ module AtsMec_RnisAPI_TestCases { { m_ecgi( m_plmn("001", "001"), - PX_CELL_ID + PX_V2X_CELL_ID ) } ) @@ -1191,7 +1191,7 @@ module AtsMec_RnisAPI_TestCases { { m_ecgi( m_plmn("001", "001"), - PX_CELL_ID + PX_V2X_CELL_ID ) } ), @@ -1222,7 +1222,7 @@ module AtsMec_RnisAPI_TestCases { { mw_ecgi( m_plmn("001", "001"), - PX_CELL_ID + PX_V2X_CELL_ID ) } ) @@ -1283,7 +1283,7 @@ module AtsMec_RnisAPI_TestCases { { m_ecgi( m_plmn("001", "001"), - PX_CELL_ID + PX_V2X_CELL_ID ) } ) @@ -1432,7 +1432,7 @@ module AtsMec_RnisAPI_TestCases { { m_ecgi( m_plmn("001", "001"), - PX_CELL_ID + PX_V2X_CELL_ID ) } ) @@ -1472,7 +1472,7 @@ module AtsMec_RnisAPI_TestCases { { m_ecgi( m_plmn("001", "001"), - PX_CELL_ID + PX_V2X_CELL_ID ) } ) @@ -1546,7 +1546,7 @@ module AtsMec_RnisAPI_TestCases { { m_ecgi( m_plmn("001", "001"), - PX_CELL_ID + PX_V2X_CELL_ID ) } ) @@ -1660,7 +1660,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_CELL_ID, "UTF-8")), + PICS_ROOT_API & PX_RNIS_QUERIES_URI & "/rab_info?cell_id=" & oct2char(unichar2oct(PX_V2X_CELL_ID, "UTF-8")), v_headers ) ) @@ -1681,7 +1681,7 @@ module AtsMec_RnisAPI_TestCases { { *, mw_cell_user_info( mw_ecgi( mw_plmn, - PX_CELL_ID + PX_V2X_CELL_ID ), ? ), @@ -1804,7 +1804,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_CELL_ID, "UTF-8")), + PICS_ROOT_API & PX_RNIS_QUERIES_URI & "/s1_bearer_info?cell_id=" & oct2char(unichar2oct(PX_V2X_CELL_ID, "UTF-8")), v_headers ) ) @@ -1826,7 +1826,7 @@ module AtsMec_RnisAPI_TestCases { -, // TODO use superset instead of { mw_associate_id }, mw_ecgi( mw_plmn, - PX_CELL_ID + PX_V2X_CELL_ID ) ) }, @@ -1872,7 +1872,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_CELL_ID, "UTF-8")), + PICS_ROOT_API & PX_RNIS_QUERIES_URI & "/layer2_meas?cell_id=" & oct2char(unichar2oct(PX_V2X_CELL_ID, "UTF-8")), v_headers ) ) @@ -1945,7 +1945,7 @@ module AtsMec_RnisAPI_TestCases { 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")), + PICS_ROOT_API & PX_RNIS_QUERIES_URI & "/rab_info_invalid?cell_id=" & oct2char(unichar2oct(PX_V2X_CELL_ID, "UTF-8")), v_headers ) ) @@ -1999,7 +1999,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_UNKNOWN_CELL_ID, "UTF-8")), + PICS_ROOT_API & PX_RNIS_QUERIES_URI & "/rab_info?cell_id=" & oct2char(unichar2oct(PX_V2X_UNKNOWN_CELL_ID, "UTF-8")), v_headers ) ) @@ -2161,7 +2161,7 @@ module AtsMec_RnisAPI_TestCases { 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")), + PICS_ROOT_API & PX_RNIS_QUERIES_URI & "/s1_bearer_info_invalid?cell_id=" & oct2char(unichar2oct(PX_V2X_CELL_ID, "UTF-8")), v_headers ) ) @@ -2215,7 +2215,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_UNKNOWN_CELL_ID, "UTF-8")), + PICS_ROOT_API & PX_RNIS_QUERIES_URI & "/s1_bearer_info?cell_id=" & oct2char(unichar2oct(PX_V2X_UNKNOWN_CELL_ID, "UTF-8")), v_headers ) ) @@ -2269,7 +2269,7 @@ module AtsMec_RnisAPI_TestCases { 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")), + PICS_ROOT_API & PX_RNIS_QUERIES_URI & "/layer2_meas_invalid?cell_id=" & oct2char(unichar2oct(PX_V2X_CELL_ID, "UTF-8")), v_headers ) ) @@ -2323,7 +2323,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_UNKNOWN_CELL_ID, "UTF-8")), + PICS_ROOT_API & PX_RNIS_QUERIES_URI & "/layer2_meas?cell_id=" & oct2char(unichar2oct(PX_V2X_UNKNOWN_CELL_ID, "UTF-8")), v_headers ) ) diff --git a/ttcn/AtsMec_V2XInformationService/AtsMec_V2XInformationServiceAPI_TestCases.ttcn b/ttcn/AtsMec_V2XInformationService/AtsMec_V2XInformationServiceAPI_TestCases.ttcn index c698320..381f82b 100644 --- a/ttcn/AtsMec_V2XInformationService/AtsMec_V2XInformationServiceAPI_TestCases.ttcn +++ b/ttcn/AtsMec_V2XInformationService/AtsMec_V2XInformationServiceAPI_TestCases.ttcn @@ -65,7 +65,7 @@ module AtsMec_V2XInformationServiceAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - PICS_ROOT_API & PX_ME_V2X_QUERIES_URI & "/uu_unicast_provisioning_info?location_info=" & PX_V2X_ECGI, + PICS_ROOT_API & PX_ME_V2X_QUERIES_URI & "/uu_unicast_provisioning_info?location_info=ecgi," & PX_V2X_ECGI, v_headers ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -78,8 +78,26 @@ module AtsMec_V2XInformationServiceAPI_TestCases { mw_http_response_ok( mw_http_message_body_json( mw_body_json_uu_unicast_provisioning_info( - mw_uu_unicast_provisioning_info - ))))) { + mw_uu_unicast_provisioning_info( + { + mw_proInfoUuUnicast( + mw_location_info( + mw_ecgi( + PX_V2X_CELL_ID, + mw_plmn( + PX_MCC, + PX_MNC + )), + mw_location_info_geo_area( + PX_V2X_ECGI_LAT, + PX_V2X_ECGI_LONG + )), + mw_v2x_application_server( + PX_V2X_MC_SERVER, + PX_V2X_MC_PORT) + ) + } + )))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a UuUnicastProvisioningInfo ***"); @@ -132,8 +150,26 @@ module AtsMec_V2XInformationServiceAPI_TestCases { mw_http_response_ok( mw_http_message_body_json( mw_body_json_uu_unicast_provisioning_info( - mw_uu_unicast_provisioning_info - ))))) { + mw_uu_unicast_provisioning_info( + { + mw_proInfoUuUnicast( + mw_location_info( + mw_ecgi( + PX_V2X_CELL_ID, + mw_plmn( + PX_MCC, + PX_MNC + )), + mw_location_info_geo_area( + PX_V2X_ECGI_LAT, + PX_V2X_ECGI_LONG + )), + mw_v2x_application_server( + PX_V2X_MC_SERVER, + PX_V2X_MC_PORT) + ) + } + )))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a UuUnicastProvisioningInfo ***"); @@ -173,7 +209,7 @@ module AtsMec_V2XInformationServiceAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - PICS_ROOT_API & PX_ME_V2X_QUERIES_URI & "/invalid_uu_unicast_provisioning_info?location_info=" & PX_V2X_LATITUDE, + PICS_ROOT_API & PX_ME_V2X_QUERIES_URI & "/uu_unicast_provisioning_info?info=" & PX_V2X_LATITUDE, v_headers ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -224,7 +260,7 @@ module AtsMec_V2XInformationServiceAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - PICS_ROOT_API & PX_ME_V2X_QUERIES_URI & "/uu_unicast_provisioning_info?location_info=" & PX_V2X_UNKNOWN_ECGI, + PICS_ROOT_API & PX_ME_V2X_QUERIES_URI & "/uu_unicast_provisioning_info?location_info=ecgi," & PX_V2X_UNKNOWN_ECGI, v_headers ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -275,7 +311,7 @@ module AtsMec_V2XInformationServiceAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - PICS_ROOT_API & PX_ME_V2X_QUERIES_URI & "/uu_mbms_provisioning_info?location_info=" & PX_V2X_ECGI, + PICS_ROOT_API & PX_ME_V2X_QUERIES_URI & "/uu_mbms_provisioning_info?location_info=ecgi," & PX_V2X_ECGI, v_headers ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -434,7 +470,7 @@ module AtsMec_V2XInformationServiceAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - PICS_ROOT_API & PX_ME_V2X_QUERIES_URI & "/uu_mbms_provisioning_info?location_info=" & PX_V2X_UNKNOWN_ECGI, + PICS_ROOT_API & PX_ME_V2X_QUERIES_URI & "/uu_mbms_provisioning_info?location_info=ecgi," & PX_V2X_UNKNOWN_ECGI, v_headers ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -485,7 +521,7 @@ module AtsMec_V2XInformationServiceAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - PICS_ROOT_API & PX_ME_V2X_QUERIES_URI & "/pc5_provisioning_info?location_info=" & PX_V2X_ECGI, + PICS_ROOT_API & PX_ME_V2X_QUERIES_URI & "/pc5_provisioning_info?location_info=ecgi," & PX_V2X_ECGI, v_headers ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -644,7 +680,7 @@ module AtsMec_V2XInformationServiceAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - PICS_ROOT_API & PX_ME_V2X_QUERIES_URI & "/pc5_provisioning_info?location_info=" & PX_V2X_UNKNOWN_ECGI, + PICS_ROOT_API & PX_ME_V2X_QUERIES_URI & "/pc5_provisioning_info?location_info=ecgi," & PX_V2X_UNKNOWN_ECGI, v_headers ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -699,10 +735,13 @@ module AtsMec_V2XInformationServiceAPI_TestCases { v_headers, m_http_message_body_json( m_body_json_v2x_msg_distribution_server_info( - m_v2x_msg_distribution_server_info( + m_v2x_msg_distribution_server_info( + { m_v2x_msg_distribution_server( m_info_protocol - ))))))); + ) + } + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -714,10 +753,15 @@ module AtsMec_V2XInformationServiceAPI_TestCases { mw_http_message_body_json( mw_body_json_v2x_msg_distribution_server_info( mw_v2x_msg_distribution_server_info( - mw_v2x_msg_distribution_server( - mw_info_protocol, - mw_info_connection - ))))))) { + { + mw_v2x_msg_distribution_server( + m_info_protocol, + mw_info_connection( + PX_V2X_MC_SERVER, + oct2int(str2oct(PX_V2X_MC_PORT)) + )) + } + )))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct connection information ***"); @@ -734,7 +778,7 @@ module AtsMec_V2XInformationServiceAPI_TestCases { } // End of testcase TC_MEC_MEC030_SRV_V2X_004_OK /** - * @desc Check that the IUT processes properly a request to information of V2X Message Distribution servers + * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application */ testcase TC_MEC_MEC030_SRV_V2X_004_BR() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -762,12 +806,15 @@ module AtsMec_V2XInformationServiceAPI_TestCases { m_http_message_body_json( m_body_json_v2x_msg_distribution_server_info( m_v2x_msg_distribution_server_info( - m_v2x_msg_distribution_server( - m_info_protocol, - m_info_connection( // Wrong field value: Shall only be included in the response - PX_V2X_MSG_DISTRIBUTION_SERVER_IP_ADDRESS, - PX_V2X_MSG_DISTRIBUTION_SERVER_PORT - )))))))); + { + m_v2x_msg_distribution_server( + m_info_protocol, + m_info_connection( // Wrong field value: Shall only be included in the response + PX_V2X_MSG_DISTRIBUTION_SERVER_IP_ADDRESS, + PX_V2X_MSG_DISTRIBUTION_SERVER_PORT + )) + } + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -793,7 +840,7 @@ module AtsMec_V2XInformationServiceAPI_TestCases { } // End of testcase TC_MEC_MEC030_SRV_V2X_004_BR /** - * @desc Check that the IUT processes properly a request to information of V2X Message Distribution servers + * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application */ testcase TC_MEC_MEC030_SRV_V2X_004_NF() runs on HttpComponent system HttpTestAdapter { // Local variables @@ -821,9 +868,12 @@ module AtsMec_V2XInformationServiceAPI_TestCases { m_http_message_body_json( m_body_json_v2x_msg_distribution_server_info( m_v2x_msg_distribution_server_info( - m_v2x_msg_distribution_server( - m_info_protocol(MQTT_SN) - ))))))); + { + m_v2x_msg_distribution_server( + m_info_protocol + ) + } + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -892,7 +942,7 @@ module AtsMec_V2XInformationServiceAPI_TestCases { m_route_info( m_location_info( m_ecgi( - PX_CELL_ID, + PX_V2X_CELL_ID, m_plmn(PX_MCC, PX_MNC) ), m_location_info_geo_area(43.72, 10.41) @@ -904,7 +954,7 @@ module AtsMec_V2XInformationServiceAPI_TestCases { m_route_info( m_location_info( m_ecgi( - PX_CELL_ID, + PX_V2X_CELL_ID, m_plmn(PX_MCC, PX_MNC) ), m_location_info_geo_area(43.75, 10.5) @@ -990,7 +1040,7 @@ module AtsMec_V2XInformationServiceAPI_TestCases { m_route_info( m_location_info( m_ecgi( - PX_CELL_ID, + PX_V2X_CELL_ID, m_plmn(PX_MCC, PX_MNC) ), m_location_info_geo_area(43.72, 10.41) @@ -1002,7 +1052,7 @@ module AtsMec_V2XInformationServiceAPI_TestCases { m_route_info( m_location_info( m_ecgi( - PX_CELL_ID, + PX_V2X_CELL_ID, m_plmn(PX_MCC, PX_MNC) ), m_location_info_geo_area(43.75, 10.5) @@ -1083,7 +1133,7 @@ module AtsMec_V2XInformationServiceAPI_TestCases { m_route_info( m_location_info( m_ecgi( - PX_UNKNOWN_CELL_ID, + PX_V2X_UNKNOWN_CELL_ID, m_plmn(PX_MCC, PX_MNC) ), m_location_info_geo_area(43.72, 10.41) @@ -1095,7 +1145,7 @@ module AtsMec_V2XInformationServiceAPI_TestCases { m_route_info( m_location_info( m_ecgi( - PX_CELL_ID, + PX_V2X_CELL_ID, m_plmn(PX_UNKNOWN_MCC, PX_UNKNOWN_MNC) ), m_location_info_geo_area(43.75, 10.5) @@ -1165,7 +1215,7 @@ module AtsMec_V2XInformationServiceAPI_TestCases { -, -, -, m_location_info( m_ecgi( - PX_CELL_ID, + PX_V2X_CELL_ID, m_plmn(PX_MCC, PX_MNC) ), m_location_info_geo_area(43.72, 10.41) // FIXME Use PIXITs @@ -1227,7 +1277,7 @@ module AtsMec_V2XInformationServiceAPI_TestCases { -, -, -, m_location_info( m_ecgi( - PX_CELL_ID, + PX_V2X_CELL_ID, m_plmn(PX_MCC, PX_MNC) ), m_location_info_geo_area(43.72, 10.41) @@ -1630,7 +1680,7 @@ module AtsMec_V2XInformationServiceAPI_TestCases { m_prov_chg_uu_uni_filter_criteria( m_location_info( m_ecgi( - PX_CELL_ID,m_plmn(PX_MCC, PX_MNC) + PX_V2X_CELL_ID,m_plmn(PX_MCC, PX_MNC) ), m_location_info_geo_area( 43.72, @@ -1720,7 +1770,7 @@ module AtsMec_V2XInformationServiceAPI_TestCases { m_prov_chg_uu_mbms_filter_criteria( m_location_info( m_ecgi( - PX_CELL_ID,m_plmn(PX_MCC, PX_MNC) + PX_V2X_CELL_ID,m_plmn(PX_MCC, PX_MNC) ), m_location_info_geo_area( 43.72, @@ -1818,7 +1868,7 @@ module AtsMec_V2XInformationServiceAPI_TestCases { PX_V2X_DST_LAYER_2_ID, m_location_info( m_ecgi( - PX_CELL_ID,m_plmn(PX_MCC, PX_MNC) + PX_V2X_CELL_ID,m_plmn(PX_MCC, PX_MNC) ), m_location_info_geo_area( 43.72, @@ -2058,7 +2108,7 @@ module AtsMec_V2XInformationServiceAPI_TestCases { m_prov_chg_uu_uni_filter_criteria( m_location_info( m_ecgi( - PX_CELL_ID,m_plmn(PX_MCC, PX_MNC) + PX_V2X_CELL_ID,m_plmn(PX_MCC, PX_MNC) ), m_location_info_geo_area( 43.72, @@ -2552,7 +2602,7 @@ module AtsMec_V2XInformationServiceAPI_TestCases { m_prov_chg_uu_uni_filter_criteria( m_location_info( m_ecgi( - PX_CELL_ID,m_plmn(PX_MCC, PX_MNC) + PX_V2X_CELL_ID,m_plmn(PX_MCC, PX_MNC) ), m_location_info_geo_area( 43.77, @@ -2632,7 +2682,7 @@ module AtsMec_V2XInformationServiceAPI_TestCases { m_prov_chg_uu_mbms_filter_criteria( m_location_info( m_ecgi( - PX_CELL_ID,m_plmn(PX_MCC, PX_MNC) + PX_V2X_CELL_ID,m_plmn(PX_MCC, PX_MNC) ), m_location_info_geo_area( 43.77, @@ -2720,7 +2770,7 @@ module AtsMec_V2XInformationServiceAPI_TestCases { PX_V2X_DST_LAYER_2_ID, m_location_info( m_ecgi( - PX_CELL_ID,m_plmn(PX_MCC, PX_MNC) + PX_V2X_CELL_ID,m_plmn(PX_MCC, PX_MNC) ), m_location_info_geo_area( 43.77, @@ -2931,7 +2981,7 @@ module AtsMec_V2XInformationServiceAPI_TestCases { m_prov_chg_uu_uni_filter_criteria( m_location_info( m_ecgi( - PX_CELL_ID,m_plmn(PX_MCC, PX_MNC) + PX_V2X_CELL_ID,m_plmn(PX_MCC, PX_MNC) ), m_location_info_geo_area( 43.72, @@ -3004,7 +3054,7 @@ module AtsMec_V2XInformationServiceAPI_TestCases { m_prov_chg_uu_uni_filter_criteria( m_location_info( m_ecgi( - PX_CELL_ID,m_plmn(PX_MCC, PX_MNC) + PX_V2X_CELL_ID,m_plmn(PX_MCC, PX_MNC) ), m_location_info_geo_area( 43.72, diff --git a/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_Pixits.ttcn b/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_Pixits.ttcn index c5deed7..3277c32 100644 --- a/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_Pixits.ttcn +++ b/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_Pixits.ttcn @@ -21,9 +21,9 @@ module RnisAPI_Pixits { modulepar Json.String PX_ASSOCIATE_ID_VALUE := "192.0.0.2"; - modulepar CellId PX_CELL_ID := "0x0800000A"; + modulepar CellId PX_V2X_CELL_ID := "0x0800000A"; - modulepar CellId PX_UNKNOWN_CELL_ID := "0x0800000A"; + modulepar CellId PX_V2X_UNKNOWN_CELL_ID := "0x0800000A"; modulepar CellId PX_C_ID := "0xFFFFFFFF"; diff --git a/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Functions.ttcn b/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Functions.ttcn index 2a9abbb..7f606ce 100644 --- a/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Functions.ttcn +++ b/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Functions.ttcn @@ -56,7 +56,7 @@ module V2XInformationServiceAPI_Functions { m_prov_chg_uu_uni_filter_criteria( m_location_info( m_ecgi( - PX_CELL_ID,m_plmn(PX_MCC, PX_MNC) + PX_V2X_CELL_ID,m_plmn(PX_MCC, PX_MNC) ), m_location_info_geo_area( 43.72, @@ -150,7 +150,7 @@ module V2XInformationServiceAPI_Functions { m_prov_chg_uu_mbms_filter_criteria( m_location_info( m_ecgi( - PX_CELL_ID,m_plmn(PX_MCC, PX_MNC) + PX_V2X_CELL_ID,m_plmn(PX_MCC, PX_MNC) ), m_location_info_geo_area( 43.72, @@ -253,7 +253,7 @@ module V2XInformationServiceAPI_Functions { PX_V2X_DST_LAYER_2_ID, m_location_info( m_ecgi( - PX_CELL_ID,m_plmn(PX_MCC, PX_MNC) + PX_V2X_CELL_ID,m_plmn(PX_MCC, PX_MNC) ), m_location_info_geo_area( 43.72, diff --git a/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Pixits.ttcn b/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Pixits.ttcn index 0d6601f..e58c575 100644 --- a/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Pixits.ttcn +++ b/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Pixits.ttcn @@ -6,21 +6,25 @@ module V2XInformationServiceAPI_Pixits { // JSON import from Json all; - modulepar charstring PX_V2X_ECGI := "ecgi,135792468"; + modulepar charstring PX_V2X_ECGI := "268804901557"; - modulepar charstring PX_V2X_UNKNOWN_ECGI := "ecgi,1357924689"; + modulepar charstring PX_V2X_CELL_ID := "101010101"; - modulepar charstring PX_V2X_LATITUDE := "latitude,000.000,001.000,longitude,000.000,001.000"; + modulepar Json.Number PX_V2X_ECGI_LAT := 43.730846; - modulepar charstring PX_LOC_GRANULARITY := "17"; + modulepar Json.Number PX_V2X_ECGI_LONG := 7.415385; + + modulepar charstring PX_V2X_UNKNOWN_ECGI := "1357924689"; - modulepar charstring PX_CELL_ID := "4680"; + modulepar charstring PX_V2X_UNKNOWN_CELL_ID := "666666666"; - modulepar charstring PX_UNKNOWN_CELL_ID := "4680"; + modulepar charstring PX_V2X_LATITUDE := "latitude,43.730846,longitude,7.415385"; + + modulepar charstring PX_LOC_GRANULARITY := "17"; - modulepar charstring PX_MCC := "135"; + modulepar charstring PX_MCC := "1"; - modulepar charstring PX_MNC := "792"; + modulepar charstring PX_MNC := "1"; modulepar charstring PX_UNKNOWN_MCC := "136"; @@ -44,9 +48,9 @@ module V2XInformationServiceAPI_Pixits { modulepar charstring PX_V2X_MBMS_SERVICE_ID := ""; - modulepar charstring PX_V2X_MC_SERVER := ""; + modulepar charstring PX_V2X_MC_SERVER := "test.mosquito.org"; - modulepar charstring PX_V2X_MC_PORT := ""; + modulepar charstring PX_V2X_MC_PORT := "1338"; modulepar charstring PX_V2X_SERVICE_AREA_ID := ""; diff --git a/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Templates.ttcn b/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Templates.ttcn index 63a5bb4..dc06b56 100644 --- a/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Templates.ttcn +++ b/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Templates.ttcn @@ -71,8 +71,28 @@ module V2XInformationServiceAPI_Templates { proInfoPc5 := p_proInfoPc5 } // End of template mw_pc5_provisioning_info + template (omit) ProInfoUuUnicast m_proInfoUuUnicast( + in template (value) LocationInfo p_locationInfo, + in template (value) V2xApplicationServer p_v2xApplicationServer, + in template (omit) UuUniNeighbourCellInfoList p_neighbourCellInfo := omit + ) := { + locationInfo := p_locationInfo, + v2xApplicationServer := p_v2xApplicationServer, + neighbourCellInfo := p_neighbourCellInfo + } // End of template m_proInfoUuUnicast + + template (present) ProInfoUuUnicast mw_proInfoUuUnicast( + template (present) LocationInfo p_locationInfo := ?, + template (present) V2xApplicationServer p_v2xApplicationServer := ?, + template UuUniNeighbourCellInfoList p_neighbourCellInfo := omit + ) := { + locationInfo := p_locationInfo, + v2xApplicationServer := p_v2xApplicationServer, + neighbourCellInfo := p_neighbourCellInfo + } // End of template mw_proInfoUuUnicast + template (omit) V2xMsgDistributionServerInfo m_v2x_msg_distribution_server_info( - in template (value) V2xMsgDistributionServer p_v2xMsgDistributionServer, + in template (value) V2xMsgDistributionServers p_v2xMsgDistributionServer, in template (omit) LocationInfo p_locationInfo := omit ) := { v2xMsgDistributionServer := p_v2xMsgDistributionServer, @@ -80,7 +100,7 @@ module V2XInformationServiceAPI_Templates { } // End of template m_v2x_msg_distribution_server_info template (present) V2xMsgDistributionServerInfo mw_v2x_msg_distribution_server_info( - template (present) V2xMsgDistributionServer p_v2xMsgDistributionServer := ?, + template (present) V2xMsgDistributionServers p_v2xMsgDistributionServer := ?, template LocationInfo p_locationInfo := * ) := { v2xMsgDistributionServer := p_v2xMsgDistributionServer, @@ -104,7 +124,7 @@ module V2XInformationServiceAPI_Templates { } // End of template mw_v2x_msg_distribution_server template (value) InfoProtocol m_info_protocol( - in MsgProtocol p_msgProtocol := MQTT_v3_1_1, + in MsgProtocols p_msgProtocol := { MQTT_v3_1_1 }, in Json.String p_protImplementation := PX_PROT_IMPLEMENTATION ) := { msgProtocol := p_msgProtocol, @@ -112,7 +132,7 @@ module V2XInformationServiceAPI_Templates { } // End of template m_info_protocol template (present) InfoProtocol mw_info_protocol( - template (present) MsgProtocol p_msgProtocol := MQTT_v3_1_1, + template (present) MsgProtocols p_msgProtocol := { MQTT_v3_1_1 }, template (present) Json.String p_protImplementation := PX_PROT_IMPLEMENTATION ) := { msgProtocol := p_msgProtocol, diff --git a/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_TypesAndValues.ttcn b/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_TypesAndValues.ttcn index b39391d..eff1971 100644 --- a/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_TypesAndValues.ttcn @@ -97,8 +97,8 @@ module V2XInformationServiceAPI_TypesAndValues { * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.2.5-1: Attributes of the V2xMsgDistributionServerInfo */ type record V2xMsgDistributionServerInfo { - V2xMsgDistributionServer v2xMsgDistributionServer, - LocationInfo locationInfo optional + V2xMsgDistributionServers v2xMsgDistributionServer, + LocationInfo locationInfo optional } /** @@ -794,6 +794,7 @@ module V2XInformationServiceAPI_TypesAndValues { InfoProtocol infoProtocol, InfoConnection infoConnection optional } + type record of V2xMsgDistributionServer V2xMsgDistributionServers; /** * @desc Specifics of the application layer protocol of V2X Message Distribution Server @@ -802,7 +803,7 @@ module V2XInformationServiceAPI_TypesAndValues { * @see ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.5.16-1: Attributes of the V2xMsgDistributionServer */ type record InfoProtocol { - MsgProtocol msgProtocol, + MsgProtocols msgProtocol, Json.String protImplementation } @@ -819,6 +820,7 @@ module V2XInformationServiceAPI_TypesAndValues { } with { variant "JSON: as number" } + type record of MsgProtocol MsgProtocols /** * @desc Connection information of the V2X Message Distribution Server the service consumer can use for direct connection -- GitLab From 207a72dbbbaf2e19e655fad0ded961c395be31a9 Mon Sep 17 00:00:00 2001 From: garciay Date: Sun, 10 Mar 2024 15:00:30 +0100 Subject: [PATCH 71/99] Validation VIS ATS against MEC Sanbox --- ccsrc/Protocols/Json/json_codec.cc | 27 ++++-- .../AtsMec_V2XInformationService.cfg_ | 20 ++++- ...ec_V2XInformationServiceAPI_TestCases.ttcn | 87 +++++++++++++++++-- ..._V2XInformationServiceAPI_TestControl.ttcn | 3 +- 4 files changed, 116 insertions(+), 21 deletions(-) diff --git a/ccsrc/Protocols/Json/json_codec.cc b/ccsrc/Protocols/Json/json_codec.cc index aeb97ea..5d072d6 100644 --- a/ccsrc/Protocols/Json/json_codec.cc +++ b/ccsrc/Protocols/Json/json_codec.cc @@ -67,33 +67,42 @@ int json_codec::encode (const LibHttp__JsonMessageBodyTypes::JsonBody& msg, OCTE } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_trafficRule)) { 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("}"))*/; + data = OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_bwInfo)) { const TrafficManagementAPI__TypesAndValues::BwInfo& bw_info = msg.bwInfo(); bw_info.encode(TrafficManagementAPI__TypesAndValues::BwInfo_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); - data = /*char2oct(CHARSTRING("{\"TrafficRule\": ")) + */OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; + data = OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_mtsSessionInfo)) { const TrafficManagementAPI__TypesAndValues::MtsSessionInfo& mts_session_info = msg.mtsSessionInfo(); mts_session_info.encode(TrafficManagementAPI__TypesAndValues::MtsSessionInfo_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); - data = /*char2oct(CHARSTRING("{\"TrafficRule\": ")) + */OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; + data = OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_predictedQos)) { const V2XInformationServiceAPI__TypesAndValues::PredictedQos& predicted_qos = msg.predictedQos(); predicted_qos.encode(V2XInformationServiceAPI__TypesAndValues::PredictedQos_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); - data = /*char2oct(CHARSTRING("{\"TrafficRule\": ")) + */OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; - + data = OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_v2xMsgDistributionServerInfo)) { const V2XInformationServiceAPI__TypesAndValues::V2xMsgDistributionServerInfo& v2x_msg_distribution_server_info = msg.v2xMsgDistributionServerInfo(); v2x_msg_distribution_server_info.encode(V2XInformationServiceAPI__TypesAndValues::V2xMsgDistributionServerInfo_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); - data = /*char2oct(CHARSTRING("{\"TrafficRule\": ")) + */OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; + data = OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; + } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_provChgUuUniSubscription)) { + const V2XInformationServiceAPI__TypesAndValues::ProvChgUuUniSubscription& prov_chg_uu_uni_subscription = msg.provChgUuUniSubscription(); + prov_chg_uu_uni_subscription.encode(V2XInformationServiceAPI__TypesAndValues::ProvChgUuUniSubscription_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); + data = OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; + } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_provChgUuMbmsSubscription)) { + const V2XInformationServiceAPI__TypesAndValues::ProvChgUuMbmsSubscription& prov_chg_uu_mbms_subscription = msg.provChgUuMbmsSubscription(); + prov_chg_uu_mbms_subscription.encode(V2XInformationServiceAPI__TypesAndValues::ProvChgUuMbmsSubscription_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); + data = OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; + + } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_assocStaSubscription)) { const WlanInformationAPI__TypesAndValues::AssocStaSubscription& assoc_sta_subscription = msg.assocStaSubscription(); assoc_sta_subscription.encode(WlanInformationAPI__TypesAndValues::AssocStaSubscription_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); - data = /*char2oct(CHARSTRING("{\"TrafficRule\": ")) + */OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; + data = OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_staDataRateSubscription)) { const WlanInformationAPI__TypesAndValues::StaDataRateSubscription& sta_data_rate_subscription = msg.staDataRateSubscription(); sta_data_rate_subscription.encode(WlanInformationAPI__TypesAndValues::StaDataRateSubscription_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); - data = /*char2oct(CHARSTRING("{\"TrafficRule\": ")) + */OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; + data = OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; } else { loggers::get_instance().error("json_codec::encode: Not supported"); } @@ -335,7 +344,7 @@ int json_codec::decode (const OCTETSTRING& p_data, LibHttp__JsonMessageBodyTypes 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 + } 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); diff --git a/etc/AtsMec_V2XInformationService/AtsMec_V2XInformationService.cfg_ b/etc/AtsMec_V2XInformationService/AtsMec_V2XInformationService.cfg_ index bb44d0d..4a16139 100644 --- a/etc/AtsMec_V2XInformationService/AtsMec_V2XInformationService.cfg_ +++ b/etc/AtsMec_V2XInformationService/AtsMec_V2XInformationService.cfg_ @@ -23,6 +23,7 @@ V2XInformationServiceAPI_Pixits.PX_V2X_ECGI := "268804901557" V2XInformationServiceAPI_Pixits.PX_V2X_CELL_ID := "101010101" V2XInformationServiceAPI_Pixits.PX_V2X_ECGI_LAT := 43.730846 V2XInformationServiceAPI_Pixits.PX_V2X_ECGI_LONG := 7.415385 +V2XInformationServiceAPI_Pixits.PX_PROV_UU_UNI_SUB_CALLBACK := "https://yanngarcia.ddns.net:36001/vis/v2/" [LOGGING] # In this section you can specify the name of the log file and the classes of events @@ -89,7 +90,7 @@ system.httpPort_notif.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server #AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_003_NF # Check that the IUT processes properly a request to information of V2X Message Distribution servers -AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_004_OK +#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 @@ -109,19 +110,32 @@ AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_004_OK #AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_007_OK_05 #AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_007_BR +# Check that the IUT responds with the requested to create a subscription - ProvChgUuUniSubscription #AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_008_OK_01 +# Check that the IUT responds with the requested to create a subscription - ProvChgUuMbmsSubscription #AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_008_OK_02 +# Check that the IUT responds with the requested to create a subscription - ProvChgPc5Subscription #AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_008_OK_03 +# Check that the IUT responds with the requested to create a subscription - V2xMsgSubscription #AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_008_OK_04 +# Check that the IUT responds with the requested to create a subscription - PredQosSubscription #AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_008_OK_05 -#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 - Wrong SubscriptionType +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_008_BR_01 +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - No Callback neitheir WebSocket +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_008_BR_02 +# Check that the IUT responds with the requested of subscription information when queried by a MEC Application - ProvChgUuUniSubscription #AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_009_OK_01 +# Check that the IUT responds with the requested of subscription information when queried by a MEC Application - ProvChgUuMbmsSubscription #AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_009_OK_02 +# Check that the IUT responds with the requested of subscription information when queried by a MEC Application - ProvChgPc5Subscription #AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_009_OK_03 +# Check that the IUT responds with the requested of subscription information when queried by a MEC Application - PredQosSubscription #AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_009_OK_04 +# Check that the IUT responds with the requested of subscription information when queried by a MEC Application - PredQosSubscription #AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_009_OK_05 -#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_009_BR +AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_009_BR #AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_009_NF #AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_010_OK_01 diff --git a/ttcn/AtsMec_V2XInformationService/AtsMec_V2XInformationServiceAPI_TestCases.ttcn b/ttcn/AtsMec_V2XInformationService/AtsMec_V2XInformationServiceAPI_TestCases.ttcn index 381f82b..e1853cc 100644 --- a/ttcn/AtsMec_V2XInformationService/AtsMec_V2XInformationServiceAPI_TestCases.ttcn +++ b/ttcn/AtsMec_V2XInformationService/AtsMec_V2XInformationServiceAPI_TestCases.ttcn @@ -758,7 +758,7 @@ module AtsMec_V2XInformationServiceAPI_TestCases { m_info_protocol, mw_info_connection( PX_V2X_MC_SERVER, - oct2int(str2oct(PX_V2X_MC_PORT)) + str2int(PX_V2X_MC_PORT) )) } )))))) { @@ -870,7 +870,7 @@ module AtsMec_V2XInformationServiceAPI_TestCases { m_v2x_msg_distribution_server_info( { m_v2x_msg_distribution_server( - m_info_protocol + m_info_protocol({ AMQP_1_0 }) ) } )))))); @@ -1706,12 +1706,12 @@ module AtsMec_V2XInformationServiceAPI_TestCases { -, PX_PROV_UU_UNI_SUB_CALLBACK, ? - )))))) { + )))))) -> value v_response{ tc_ac.stop; // Check HTTP Location header if (f_check_headers(v_response.response.header) == false) { - log("*** " & testcasename() & ": FAIL: IUT failed in Area subscription ***"); + log("*** " & testcasename() & ": FAIL: IUT failed in ProvChgUuUniSubscription subscription ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); } else { var charstring_list v_header_location; @@ -1723,6 +1723,7 @@ module AtsMec_V2XInformationServiceAPI_TestCases { ); log("*** " & testcasename() & ": PASS: IUT successfully responds with a provChgUuUniSubscription, SubscriptionId: ", v_subscription_id," ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } [] tc_ac.timeout { @@ -1820,6 +1821,7 @@ module AtsMec_V2XInformationServiceAPI_TestCases { ); log("*** " & testcasename() & ": PASS: IUT successfully responds with a provChgUuMbmsSubscription, SubscriptionId: ", v_subscription_id," ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } [] tc_ac.timeout { @@ -1907,6 +1909,7 @@ module AtsMec_V2XInformationServiceAPI_TestCases { ); log("*** " & testcasename() & ": PASS: IUT successfully responds with a provChgPc5Subscription, SubscriptionId: ", v_subscription_id," ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } [] tc_ac.timeout { @@ -2077,9 +2080,9 @@ module AtsMec_V2XInformationServiceAPI_TestCases { } // End of testcase TC_MEC_MEC030_SRV_V2X_008_OK_05 /** - * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application + * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - Wrong SubscriptionType */ - testcase TC_MEC_MEC030_SRV_V2X_008_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC030_SRV_V2X_008_BR_01() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -2131,7 +2134,75 @@ module AtsMec_V2XInformationServiceAPI_TestCases { )) { tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully registers subscription ***"); + 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_MEC030_SRV_V2X_008_BR_01 + + /** + * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - No Callback neitheir WebSocket + */ + testcase TC_MEC_MEC030_SRV_V2X_008_BR_02() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_ME_V2X_URI_SUB, + v_headers, + m_http_message_body_json( + m_body_json_prov_chg_uu_uni_subscription( + m_prov_chg_uu_uni_subscription( + m_prov_chg_uu_uni_filter_criteria( + m_location_info( + m_ecgi( + PX_V2X_CELL_ID,m_plmn(PX_MCC, PX_MNC) + ), + m_location_info_geo_area( + 43.72, + 10.41 + )), + m_v2x_application_server( + oct2char(unichar2oct(PX_V2X_SERVER_IP_ADDRESS, "UTF-8")), + oct2char(unichar2oct(PX_V2X_SERVER_UDP_PORT, "UTF-8")) + )), + "" + )))))); + 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 { @@ -2142,7 +2213,7 @@ module AtsMec_V2XInformationServiceAPI_TestCases { // postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC030_SRV_V2X_008_BR + } // End of testcase TC_MEC_MEC030_SRV_V2X_008_BR_02 /** * @desc Check that the IUT responds with the requested of subscription information when queried by a MEC Application - ProvChgUuUniSubscription diff --git a/ttcn/AtsMec_V2XInformationService/AtsMec_V2XInformationServiceAPI_TestControl.ttcn b/ttcn/AtsMec_V2XInformationService/AtsMec_V2XInformationServiceAPI_TestControl.ttcn index 0bbe65b..5b60233 100644 --- a/ttcn/AtsMec_V2XInformationService/AtsMec_V2XInformationServiceAPI_TestControl.ttcn +++ b/ttcn/AtsMec_V2XInformationService/AtsMec_V2XInformationServiceAPI_TestControl.ttcn @@ -50,7 +50,8 @@ module AtsMec_V2XInformationServiceAPI_TestControl { execute(TC_MEC_MEC030_SRV_V2X_008_OK_03()); execute(TC_MEC_MEC030_SRV_V2X_008_OK_04()); execute(TC_MEC_MEC030_SRV_V2X_008_OK_05()); - execute(TC_MEC_MEC030_SRV_V2X_008_BR()); + execute(TC_MEC_MEC030_SRV_V2X_008_BR_01()); + execute(TC_MEC_MEC030_SRV_V2X_008_BR_02()); execute(TC_MEC_MEC030_SRV_V2X_009_OK_01()); execute(TC_MEC_MEC030_SRV_V2X_009_OK_02()); -- GitLab From e28110e937f2b7cf435d3e03b1b9816966417738 Mon Sep 17 00:00:00 2001 From: garciay Date: Fri, 29 Mar 2024 10:27:40 +0100 Subject: [PATCH 72/99] Validation VIS ATS against MEC Sanbox --- ccsrc/Protocols/Json/json_codec.cc | 14 +++++++++++++- .../AtsMec_V2XInformationService.cfg_ | 18 ++++++++++++++---- titan-test-system-framework | 2 +- ...Mec_V2XInformationServiceAPI_TestCases.ttcn | 2 +- ...2XInformationServiceAPI_TypesAndValues.ttcn | 4 ++-- 5 files changed, 31 insertions(+), 9 deletions(-) diff --git a/ccsrc/Protocols/Json/json_codec.cc b/ccsrc/Protocols/Json/json_codec.cc index 5d072d6..452273c 100644 --- a/ccsrc/Protocols/Json/json_codec.cc +++ b/ccsrc/Protocols/Json/json_codec.cc @@ -92,7 +92,14 @@ int json_codec::encode (const LibHttp__JsonMessageBodyTypes::JsonBody& msg, OCTE const V2XInformationServiceAPI__TypesAndValues::ProvChgUuMbmsSubscription& prov_chg_uu_mbms_subscription = msg.provChgUuMbmsSubscription(); prov_chg_uu_mbms_subscription.encode(V2XInformationServiceAPI__TypesAndValues::ProvChgUuMbmsSubscription_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); data = OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; - + } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_provChgPc5Subscription)) { + const V2XInformationServiceAPI__TypesAndValues::ProvChgPc5Subscription& prov_chg_pc5_subscription = msg.provChgPc5Subscription(); + prov_chg_pc5_subscription.encode(V2XInformationServiceAPI__TypesAndValues::ProvChgPc5Subscription_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); + data = OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; + } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_v2xMsgSubscription)) { + const V2XInformationServiceAPI__TypesAndValues::V2xMsgSubscription& v2x_msg_subscription = msg.v2xMsgSubscription(); + v2x_msg_subscription.encode(V2XInformationServiceAPI__TypesAndValues::V2xMsgSubscription_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); + data = OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_assocStaSubscription)) { @@ -428,6 +435,11 @@ int json_codec::decode (const OCTETSTRING& p_data, LibHttp__JsonMessageBodyTypes TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); prov_chg_pc5_subscription.decode(V2XInformationServiceAPI__TypesAndValues::ProvChgPc5Subscription_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); msg.provChgPc5Subscription() = prov_chg_pc5_subscription; + } else if (it->second.find("\"V2xMsgSubscription\"") != std::string::npos) { + V2XInformationServiceAPI__TypesAndValues::V2xMsgSubscription v2x_msg_subscription; + TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); + v2x_msg_subscription.decode(V2XInformationServiceAPI__TypesAndValues::V2xMsgSubscription_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); + msg.v2xMsgSubscription() = v2x_msg_subscription; } else if (it->second.find("\"ProvChgUuUniNotification\"") != std::string::npos) { diff --git a/etc/AtsMec_V2XInformationService/AtsMec_V2XInformationService.cfg_ b/etc/AtsMec_V2XInformationService/AtsMec_V2XInformationService.cfg_ index 4a16139..9ea10db 100644 --- a/etc/AtsMec_V2XInformationService/AtsMec_V2XInformationService.cfg_ +++ b/etc/AtsMec_V2XInformationService/AtsMec_V2XInformationService.cfg_ @@ -23,7 +23,10 @@ V2XInformationServiceAPI_Pixits.PX_V2X_ECGI := "268804901557" V2XInformationServiceAPI_Pixits.PX_V2X_CELL_ID := "101010101" V2XInformationServiceAPI_Pixits.PX_V2X_ECGI_LAT := 43.730846 V2XInformationServiceAPI_Pixits.PX_V2X_ECGI_LONG := 7.415385 + +# Callbacks V2XInformationServiceAPI_Pixits.PX_PROV_UU_UNI_SUB_CALLBACK := "https://yanngarcia.ddns.net:36001/vis/v2/" +V2XInformationServiceAPI_Pixits.PX_PROV_V2X_SUB_CALLBACK := "https://yanngarcia.ddns.net:36001/vis/v2/" [LOGGING] # In this section you can specify the name of the log file and the classes of events @@ -67,7 +70,7 @@ system.httpPort_notif.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server [EXECUTE] # In this section you can specify what parts of your test suite you want to execute. -#AtsMec_TestControl.control +#AtsMec_V2XInformationServiceAPI_TestControl.control # 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 @@ -79,7 +82,7 @@ system.httpPort_notif.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server #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 +AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_002_OK_01 #AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_002_OK_02 #AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_002_BR #AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_002_NF @@ -131,11 +134,13 @@ system.httpPort_notif.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server #AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_009_OK_02 # Check that the IUT responds with the requested of subscription information when queried by a MEC Application - ProvChgPc5Subscription #AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_009_OK_03 -# Check that the IUT responds with the requested of subscription information when queried by a MEC Application - PredQosSubscription +# Check that the IUT responds with the requested of subscription information when queried by a MEC Application - V2xMsgSubscription #AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_009_OK_04 # Check that the IUT responds with the requested of subscription information when queried by a MEC Application - PredQosSubscription #AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_009_OK_05 -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_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 #AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_010_OK_01 @@ -146,10 +151,15 @@ AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_009_BR #AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_010_BR #AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_010_NF +# Check that the IUT responds with the requested of removing subscription when queried by a MEC Application - ProvChgUuUniSubscription #AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_011_OK_01 +# Check that the IUT responds with the requested of removing subscription when queried by a MEC Application - ProvChgUuMbmsSubscription #AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_011_OK_02 +# Check that the IUT responds with the requested of removing subscription when queried by a MEC Application - ProvChgPc5Subscription #AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_011_OK_03 +# Check that the IUT responds with the requested of removing subscription when queried by a MEC Application - V2xMsgSubscription #AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_011_OK_04 +# Check that the IUT responds with the requested of removing subscription when queried by a MEC Application - PredQosSubscription #AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_011_OK_05 #AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_011_NF diff --git a/titan-test-system-framework b/titan-test-system-framework index 6901c1c..6959b8b 160000 --- a/titan-test-system-framework +++ b/titan-test-system-framework @@ -1 +1 @@ -Subproject commit 6901c1c381950f308d2b1643e90757248ae99eab +Subproject commit 6959b8be419f3755de6f888e24bfdc8de07383a7 diff --git a/ttcn/AtsMec_V2XInformationService/AtsMec_V2XInformationServiceAPI_TestCases.ttcn b/ttcn/AtsMec_V2XInformationService/AtsMec_V2XInformationServiceAPI_TestCases.ttcn index e1853cc..f94289e 100644 --- a/ttcn/AtsMec_V2XInformationService/AtsMec_V2XInformationServiceAPI_TestCases.ttcn +++ b/ttcn/AtsMec_V2XInformationService/AtsMec_V2XInformationServiceAPI_TestCases.ttcn @@ -2553,7 +2553,7 @@ module AtsMec_V2XInformationServiceAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - PICS_ROOT_API & "/vis/v2/subs/" & v_subscription_id, // Wrong URL + PICS_ROOT_API & PX_ME_V2X_URI_SUB & "?sub="& v_subscription_id, // Wrong URL v_headers ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); diff --git a/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_TypesAndValues.ttcn b/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_TypesAndValues.ttcn index eff1971..c881fa0 100644 --- a/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_TypesAndValues.ttcn @@ -763,8 +763,8 @@ module V2XInformationServiceAPI_TypesAndValues { map_ (5), ivi (6), ev_rsr(7) - } with { - variant "JSON: as number" + // } with { + // variant "JSON: as number" } type record of MsgType MsgTypeList; -- GitLab From c9bb0d8f6fa4829ed63d6085764a591c9f60a2d2 Mon Sep 17 00:00:00 2001 From: garciay Date: Thu, 4 Apr 2024 08:11:24 +0200 Subject: [PATCH 73/99] Change repo folder for TITAN --- virtualization/docker/Dockerfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/virtualization/docker/Dockerfile b/virtualization/docker/Dockerfile index 2fdb13d..456149a 100644 --- a/virtualization/docker/Dockerfile +++ b/virtualization/docker/Dockerfile @@ -19,7 +19,7 @@ RUN \ # Clone Titan WORKDIR /home/etsi -RUN mkdir -p frameworks dev tmp && cd frameworks && git clone https://github.com/eclipse/titan.core.git || exit 1 +RUN mkdir -p frameworks dev tmp && cd frameworks && git clone https://gitlab.eclipse.org/eclipse/titan/titan.core.git || exit 1 WORKDIR /home/etsi/frameworks/titan.core/ # Setup ENV variables @@ -42,8 +42,8 @@ RUN \ WORKDIR /home/etsi/dev -ENV ATS=AtsCise +ENV ATS=AtsMec_V2XInformationService -EXPOSE 443/tcp +EXPOSE 80/tcp 443/tcp ENTRYPOINT /home/yann/dev/cise/virtualization/docker/docker-entrypoint.sh -- GitLab From 3ed089efac66449bdd3bb5339af0f81a386075e3 Mon Sep 17 00:00:00 2001 From: garciay Date: Thu, 11 Apr 2024 10:05:28 +0200 Subject: [PATCH 74/99] Validation MEC 011 ATS against MEC Sanbox; Bug fixed in virtualization --- ccsrc/Protocols/Json/json_codec.cc | 21 +- ...ormApplicationEnablementAPI_TestCases.ttcn | 539 ++++++++++-------- ...mApplicationEnablementAPI_TestControl.ttcn | 3 + ...ormApplicationEnablementAPI_Functions.ttcn | 123 +++- ...ormApplicationEnablementAPI_Templates.ttcn | 8 +- ...plicationEnablementAPI_TypesAndValues.ttcn | 4 +- ttcn/LibMec/ttcn/LibMec_Pixits.ttcn | 2 +- .../docker-dev/home/etc/init.d/20-eclipse.sh | 8 +- .../init.d/{40-ttf_t012.sh => 40-ttf_t027.sh} | 11 +- 9 files changed, 465 insertions(+), 254 deletions(-) rename virtualization/docker-dev/home/etc/init.d/{40-ttf_t012.sh => 40-ttf_t027.sh} (82%) diff --git a/ccsrc/Protocols/Json/json_codec.cc b/ccsrc/Protocols/Json/json_codec.cc index 452273c..89b366c 100644 --- a/ccsrc/Protocols/Json/json_codec.cc +++ b/ccsrc/Protocols/Json/json_codec.cc @@ -56,6 +56,21 @@ int json_codec::encode (const LibHttp__JsonMessageBodyTypes::JsonBody& msg, OCTE 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(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_appTerminationConfirmation)) { + const EdgePlatformApplicationEnablementAPI__TypesAndValues::AppTerminationConfirmation& app = msg.appTerminationConfirmation(); + app.encode(EdgePlatformApplicationEnablementAPI__TypesAndValues::AppTerminationConfirmation_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); + data = /*char2oct(CHARSTRING("{\"AppTerminationConfirmation\": ")) + */OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; + + } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_appReadyConfirmation)) { + const EdgePlatformApplicationEnablementAPI__TypesAndValues::AppReadyConfirmation& app = msg.appReadyConfirmation(); + app.encode(EdgePlatformApplicationEnablementAPI__TypesAndValues::AppReadyConfirmation_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); + data = /*char2oct(CHARSTRING("{\"AppTerminationConfirmation\": ")) + */OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; + + + } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_dnsRule)) { const EdgePlatformApplicationEnablementAPI__TypesAndValues::DnsRule& dns_rule = msg.dnsRule(); dns_rule.encode(EdgePlatformApplicationEnablementAPI__TypesAndValues::DnsRule_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); @@ -248,7 +263,11 @@ int json_codec::decode (const OCTETSTRING& p_data, LibHttp__JsonMessageBodyTypes 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); + if ((str[it_start - 3] == 'n') || (str[it_start - 3] == 's')) { // fqdn or uris or addresses + str = str.substr(0, it_start) + "[]" + str.substr(it_stop); + } else { + 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(); diff --git a/ttcn/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn b/ttcn/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn index 6646ce9..05e406c 100644 --- a/ttcn/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn +++ b/ttcn/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn @@ -53,6 +53,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { // Local variables var Headers v_headers; var ServiceInfo v_service_info; + var charstring v_subscription_id; // Test control if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_APP_ENABLEMENT_API_SUPPORTED)) { @@ -67,16 +68,14 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { // Test adapter configuration // Preamble - f_create_service_info(v_service_info, v_headers); + f_create_service_info(v_service_info, v_subscription_id); f_init_default_headers_list(-, -, v_headers); 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_ME_APP_REG_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/services", v_headers - ) - ) - ); + ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -90,16 +89,14 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { { *, mw_service_info( - v_service_info.serName, - -, -, -, -, -, - PX_APP_INSTANCE_ID + v_service_info.serName ), * } ))))) { tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with a ServiceInfoList ***"); + log("*** " & testcasename() & ": PASS: IUT successfully responds with to the service creation ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -109,7 +106,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { } // End of 'alt' statement // Postamble - f_delete_service_info(v_service_info); + f_delete_service_info(v_subscription_id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC011_SRV_APPSAQ_001_OK @@ -119,9 +116,12 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { testcase TC_MEC_MEC011_SRV_APPSAQ_001_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; + var HttpMessage v_response; + var ServiceInfo v_service_info; + var charstring v_subscription_id; // Test control - if (not(PICS_MEC_PLAT) or not (PICS_SERVICES) or not(PICS_APP_ENABLEMENT_API_SUPPORTED)) { + 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; @@ -133,15 +133,14 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { // Test adapter configuration // Preamble + f_create_service_info(v_service_info, v_subscription_id); f_init_default_headers_list(-, -, v_headers); 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_ME_APP_REG_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/services?instance_id=" & oct2char(unichar2oct(v_service_info.serInstanceId)), v_headers - ) - ) - ); + ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -150,10 +149,10 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { [] httpPort.receive( mw_http_response( mw_http_response_400_bad_request - )) { + )) { tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with a ProblemDetails set to 400 Bad Request ***"); + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct error code ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -163,9 +162,61 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { } // End of 'alt' statement // Postamble + f_delete_service_info(v_subscription_id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC011_SRV_APPSAQ_001_BR + /** + * @desc Check that the IUT responds with an error when a request with an unknown service is sent by a MEC Application + */ + testcase TC_MEC_MEC011_SRV_APPSAQ_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_ME_APP_REG_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/services?ser_instance_id=" & oct2char(unichar2oct(PX_NON_EXISTENT_SERVICE_NAME)), + 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_APPSAQ_001_NF + /** * @desc Check that the IUT notifies the authorised relevant (subscribed) application instances when a new service for a given application instance is registered */ @@ -174,6 +225,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { var Headers v_headers; var HttpMessage v_response; var universal charstring v_service_name; + var charstring v_subscription_id; // Test control if (not(PICS_MEC_PLAT) or not (PICS_SERVICES) or not (PICS_NOTIFICATIONS) or not(PICS_APP_ENABLEMENT_API_SUPPORTED)) { @@ -193,16 +245,13 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_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_ME_APP_REG_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", @@ -224,31 +273,25 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { mw_body_json_service_info( mw_service_info( v_service_name //serName - )))))) -> value v_response { + )))))) -> value v_response { tc_ac.stop; - if (f_check_headers(valueof(v_response.response.header)) == true) { -/* TODO how to test this as the notification is for another MEC Application? - and - // MEC 011, clause 6.4.2 - the IUT entity sends a notification_message containing - body containing - notificationType set to "SerAvailabilityNotification", - services containing - serName set to SERVICE_NAME - _links containing - subscription set to MP1_SUBSCRIPTION_A - ; - ; - ; - ; - to the MEC_APP_Subscriber entity -*/ + // Check HTTP Location header + if (f_check_headers(v_response.response.header) == false) { + log("*** " & testcasename() & ": FAIL: IUT failed in creating service ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_error); + } else { + var charstring_list v_header_location; + f_get_header(v_response.response.header, "Location", v_header_location); + v_subscription_id := regexp( + v_header_location[0], + "?+" & PX_ME_APP_REG_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/services" & "/(?*)", + 0 + ); + + // TODO how to test this as the notification is for another MEC Application? log("*** " & testcasename() & ": PASS: IUT successfully responds with a ServiceInfo and set notification ***"); 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 { @@ -258,6 +301,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { } // End of 'alt' statement // Postamble + f_delete_service_info(v_subscription_id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC011_SRV_APPSAQ_002_OK @@ -287,7 +331,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_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_ME_APP_REG_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/services", v_headers, m_http_message_body_json( m_body_json_service_info( @@ -296,13 +340,8 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { -, SUSPENDED, RAW, - m_service_info_link("m_service_info_link") - ) - ) - ) - ) - ) - ); + m_service_info_link("m_service_info_link") // Shall not be present in the request + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -311,10 +350,10 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { [] httpPort.receive( mw_http_response( mw_http_response_400_bad_request - )) { + )) { tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with a ProblemDetails set to 400 Bad Request ***"); + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct error code ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -351,7 +390,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_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_ME_APP_REG_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( @@ -376,7 +415,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { )) { tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with a ProblemDetails set to 404 Not Found ***"); + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct error code ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -395,6 +434,9 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { testcase TC_MEC_MEC011_SRV_APPSAQ_003_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; + var HttpMessage v_response; + var ServiceInfo v_service_info; + var charstring v_subscription_id; // Test control if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_APP_ENABLEMENT_API_SUPPORTED)) { @@ -409,15 +451,14 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { // Test adapter configuration // Preamble + f_create_service_info(v_service_info, v_subscription_id); f_init_default_headers_list(-, -, v_headers); 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_ME_APP_REG_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/services/" & oct2char(unichar2oct(v_service_info.serInstanceId, "UTF-8")), v_headers - ) - ) - ); + ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -429,9 +470,10 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { mw_http_message_body_json( mw_body_json_service_info( mw_service_info( - -, -, -, -, -, - PX_SERVICE_ID - )))))) { + v_service_info.serName, + -, -, -, -, + v_service_info.serInstanceId + )))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a ServiceInfo ***"); @@ -444,6 +486,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { } // End of 'alt' statement // Postamble + f_delete_service_info(v_subscription_id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC011_SRV_APPSAQ_003_OK @@ -471,11 +514,9 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_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_ME_APP_REG_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/services/" & oct2char(unichar2oct(PX_NON_EXISTENT_SERVICE_ID, "UTF-8")), v_headers - ) - ) - ); + ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -484,10 +525,10 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { [] 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 ***"); + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct error code ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -508,6 +549,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { var Headers v_headers; var charstring_list v_etag; var ServiceInfo v_service_info; + var charstring v_subscription_id; // Test control if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_APP_ENABLEMENT_API_SUPPORTED)) { @@ -522,35 +564,21 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { // Test adapter configuration // Preamble - 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-Match header needs to have a PROPER_ETAG + f_create_service_info(v_service_info, v_subscription_id); 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_info.serName, "UTF-8")), + PICS_ROOT_API & PX_ME_APP_REG_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/services/" & v_subscription_id, v_headers, m_http_message_body_json( m_body_json_service_info( m_service_info( v_service_info.serName, PX_NEW_SERVICE_INFO_VERSION, - -, -, - m_service_info_link("m_service_info_link"), - -, -, + -, -, -, -, -, v_service_info.transportInfo - ) - ) - ) - ) - ) - ); + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -563,11 +591,13 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { mw_body_json_service_info( mw_service_info( v_service_info.serName, - PX_NEW_SERVICE_INFO_VERSION - )))))) { + PX_NEW_SERVICE_INFO_VERSION, + -, -, -, -, -, + v_service_info.transportInfo + )))))) { tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with a ServiceInfo ***"); + log("*** " & testcasename() & ": PASS: IUT successfully responds with a modified ServiceInfo ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -577,7 +607,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { } // End of 'alt' statement // Postamble - f_delete_service_info(v_service_info); + f_delete_service_info(v_subscription_id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC011_SRV_APPSAQ_004_OK @@ -589,6 +619,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { var Headers v_headers; var charstring_list v_etag; var ServiceInfo v_service_info; + var charstring v_subscription_id; // Test control if (not(PICS_MEC_PLAT) or not (PICS_SERVICES) or not(PICS_APP_ENABLEMENT_API_SUPPORTED)) { @@ -603,38 +634,21 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { // Test adapter configuration // Preamble - 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 - // If-Match header needs to have a PROPER_ETAG + f_create_service_info(v_service_info, v_subscription_id); 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_info.serName, "UTF-8")), - v_headers, - m_http_message_body_json( - m_body_json_service_info( - m_service_info( - v_service_info.serName & char(0, 0, 1, 111), - PX_NEW_SERVICE_INFO_VERSION, - -, -, - m_service_info_link("m_service_info_link") - ) - ) - ) - ) - ) - ); + PICS_ROOT_API & PX_ME_APP_REG_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/services/" & v_subscription_id, + v_headers, + m_http_message_body_json( + m_body_json_service_info( + m_service_info( + v_service_info.serName, + PX_NEW_SERVICE_INFO_VERSION, + -, -, + m_service_info_link("m_service_info_link") + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -643,10 +657,10 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { [] httpPort.receive( mw_http_response( mw_http_response_400_bad_request - )) { + )) { tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with a ProblemDetails set to 400 Bad Request ***"); + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct error code ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -656,7 +670,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { } // End of 'alt' statement // Postamble - f_delete_service_info(v_service_info); + f_delete_service_info(v_subscription_id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC011_SRV_APPSAQ_004_BR @@ -685,7 +699,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_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_ME_APP_REG_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( @@ -694,12 +708,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { PX_NEW_SERVICE_INFO_VERSION, -, -, m_service_info_link("m_service_info_link") - ) - ) - ) - ) - ) - ); + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -708,10 +717,10 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { [] 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 ***"); + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct error code ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -732,6 +741,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { var Headers v_headers; var charstring_list v_etag; var ServiceInfo v_service_info; + var charstring v_subscription_id; // Test control if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_APP_ENABLEMENT_API_SUPPORTED)) { @@ -746,7 +756,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { // Test adapter configuration // Preamble - f_create_service_info(v_service_info, v_headers); + f_create_service_info(v_service_info, v_subscription_id); 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); @@ -758,7 +768,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_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(v_service_info.serName, "UTF-8")), + PICS_ROOT_API & PX_ME_APP_REG_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( @@ -796,10 +806,115 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { } // End of 'alt' statement // Postamble - f_delete_service_info(v_service_info); + f_delete_service_info(v_subscription_id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC011_SRV_APPSAQ_004_PF + /** + * @desc Check that the IUT executes the deletion of a service for a given application instance when requested by a MEC Application + */ + testcase TC_MEC_MEC011_SRV_APPSAQ_005_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var ServiceInfo v_service_info; + var charstring v_subscription_id; + + // 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_create_service_info(v_service_info, v_subscription_id); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & PX_ME_APP_REG_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/services/" & v_subscription_id, + 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 successfully to the service delation ***"); + 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_APPSAQ_005_OK + + /** + * @desc Check that the IUT responds with an error when a request for deletion of a unknown service is sent by a MEC Application + */ + testcase TC_MEC_MEC011_SRV_APPSAQ_005_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_delete( + PICS_ROOT_API & PX_ME_APP_REG_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/services/" & PX_NON_EXISTENT_SERVICE_NAME, + 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 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_MEC011_SRV_APPSAQ_005_NF + } // End of group app_saq /* @@ -923,6 +1038,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { // Local variables var Headers v_headers; var HttpMessage v_response; + var charstring v_subscription_id; // Test control if (not(PICS_MEC_PLAT) or not (PICS_SERVICES) or not(PICS_APP_ENABLEMENT_API_SUPPORTED)) { @@ -938,7 +1054,6 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { // Preamble f_init_default_headers_list(-, -, v_headers); - //TODO Create a subsciption (see TC_MEC_MEC011_SRV_APPSUB_001_OK); httpPort.send( m_http_request( m_http_request_post( @@ -948,16 +1063,9 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { m_body_json_app_termination_notif_subscription( m_app_termination_notif_subscription( PX_APP_TERM_NOTIF_CALLBACK_URI, - -/*m_self( - { href := PX_HREF } - )*/, - "ID1"/*PX_APP_INSTANCE_ID*/ - ) - ) - ) - ) - ) - ); + -, + PX_APP_INSTANCE_ID + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -969,16 +1077,26 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { mw_http_message_body_json( mw_body_json_app_termination_notif_subscription( mw_app_termination_notif_subscription( - PX_APP_TERM_NOTIF_CALLBACK_URI - )))))) -> value v_response { + PX_APP_TERM_NOTIF_CALLBACK_URI, + mw_self, + PX_APP_INSTANCE_ID + )))))) -> value v_response { tc_ac.stop; - if (f_check_headers(valueof(v_response.response.header)) == true) { - log("*** " & testcasename() & ": PASS: IUT successfully responds with a AppTerminationNotificationSubscription ***"); - f_selfOrClientSyncAndVerdict(c_tbDone, e_success); - } else { + if (f_check_headers(v_response.response.header) == false) { log("*** " & testcasename() & ": FAIL: Header 'Location' was not present in the response headers ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_error); + } else { + var charstring_list v_header_location; + f_get_header(v_response.response.header, "Location", v_header_location); + v_subscription_id := regexp( + v_header_location[0], + "?+" & PX_ME_APP_SUPPORT_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/subscriptions" & "/(?*)", + 0 + ); + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a AppTerminationNotificationSubscription ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } } [] tc_ac.timeout { @@ -988,6 +1106,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { } // End of 'alt' statement // Postamble + f_delete_app_termination_notif_subscription(v_subscription_id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC011_SRV_APPSUB_002_OK @@ -1026,12 +1145,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { { href := PX_HREF } ), PX_APP_INSTANCE_ID - ) - ) - ) - ) - ) - ); + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -1040,7 +1154,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { [] httpPort.receive( mw_http_response( mw_http_response_400_bad_request - )) { + )) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a ProblemDetails set to 400 Bad Request ***"); @@ -1062,6 +1176,8 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { testcase TC_MEC_MEC011_SRV_APPSUB_003_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; + var AppTerminationNotificationSubscription v_app_termination_notification_subscription; + var charstring v_subscription_id; // Test control if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_APP_ENABLEMENT_API_SUPPORTED)) { @@ -1076,15 +1192,14 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { // Test adapter configuration // Preamble + f_create_app_termination_notif_subscription(v_app_termination_notification_subscription, v_subscription_id); f_init_default_headers_list(-, -, v_headers); 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/" & v_subscription_id, v_headers - ) - ) - ); + ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -1095,8 +1210,8 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { mw_http_response_ok( mw_http_message_body_json( mw_body_json_app_termination_notif_subscription( - mw_app_termination_notif_subscription - ))))) { + v_app_termination_notification_subscription + ))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a AppTerminationNotificationSubscription ***"); @@ -1109,6 +1224,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { } // End of 'alt' statement // Postamble + f_delete_app_termination_notif_subscription(v_subscription_id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC011_SRV_APPSUB_003_OK @@ -1138,9 +1254,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { 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")), v_headers - ) - ) - ); + ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -1149,7 +1263,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { [] 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 ***"); @@ -1171,6 +1285,8 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { testcase TC_MEC_MEC011_SRV_APPSUB_004_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; + var AppTerminationNotificationSubscription v_app_termination_notification_subscription; + var charstring v_subscription_id; // Test control if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_APP_ENABLEMENT_API_SUPPORTED)) { @@ -1185,15 +1301,14 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { // Test adapter configuration // Preamble + f_create_app_termination_notif_subscription(v_app_termination_notification_subscription, v_subscription_id); f_init_default_headers_list(-, -, v_headers); 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/" & v_subscription_id, v_headers - ) - ) - ); + ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -1202,7 +1317,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { [] httpPort.receive( mw_http_response( mw_http_response_204_no_content - )) { + )) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with no content ***"); @@ -1245,9 +1360,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { 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")), v_headers - ) - ) - ); + ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -1256,10 +1369,10 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { [] 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 ***"); + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct error code ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -1305,11 +1418,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { m_http_message_body_json( m_body_json_app_termination_confirmation( { operationAction := TERMINATING } - ) - ) - ) - ) - ); + ))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -1318,7 +1427,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { [] httpPort.receive( mw_http_response( mw_http_response_204_no_content - )) { + )) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a AppTerminationConf ***"); @@ -1363,11 +1472,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { m_http_message_body_json( m_body_json_app_termination_confirmation( { operationAction := TERMINATING } - ) - ) - ) - ) - ); + ))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -1376,7 +1481,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { [] 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 ***"); @@ -1421,11 +1526,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { m_http_message_body_json( m_body_json_app_ready_confirmation( { indication := "READY" } - ) - ) - ) - ) - ); + ))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -1434,7 +1535,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { [] httpPort.receive( mw_http_response( mw_http_response_204_no_content - )) { + )) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a AppReadyConf ***"); @@ -1479,11 +1580,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { m_http_message_body_json( m_body_json_app_ready_confirmation( { indication := "READY" } - ) - ) - ) - ) - ); + ))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -1492,7 +1589,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { [] 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 ***"); @@ -2000,6 +2097,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { // Local variables var Headers v_headers; var ServiceInfo v_service_info; + var charstring v_subscription_id; // Test control if (not(PICS_MEC_PLAT) or not (PICS_SERVICES) or not(PICS_APP_ENABLEMENT_API_SUPPORTED)) { @@ -2014,16 +2112,14 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { // Test adapter configuration // Preamble - f_create_service_info(v_service_info, v_headers); + f_create_service_info(v_service_info, v_subscription_id); 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 @@ -2036,7 +2132,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { mw_body_json_srv_liveness_info( mw_service_liveness_info( ACTIVE - )))))) { + )))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a ServiceLivenessInfo ***"); @@ -2049,7 +2145,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { } // End of 'alt' statement // Postamble - f_delete_service_info(v_service_info); + f_delete_service_info(v_subscription_id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC011_SRV_MSL_001_OK @@ -2079,9 +2175,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { m_http_request_get( PICS_ROOT_API & PX_LINK_LIV, v_headers - ) - ) - ); + ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -2090,7 +2184,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { [] 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 ***"); @@ -2113,6 +2207,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { // Local variables var Headers v_headers; var ServiceInfo v_service_info; + var charstring v_subscription_id; // Test control if (not(PICS_MEC_PLAT) or not (PICS_SERVICES) or not(PICS_APP_ENABLEMENT_API_SUPPORTED)) { @@ -2127,7 +2222,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { // Test adapter configuration // Preamble - f_create_service_info(v_service_info, v_headers); + f_create_service_info(v_service_info, v_subscription_id); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( @@ -2142,12 +2237,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { f_get_current_timestamp_utc() ), 10 - ) - ) - ) - ) - ) - ); + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -2160,7 +2250,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { mw_body_json_srv_liveness_info( mw_service_liveness_info( ACTIVE - )))))) { + )))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a new ServiceLivenessInfo ***"); @@ -2173,7 +2263,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { } // End of 'alt' statement // Postamble - f_delete_service_info(v_service_info); + f_delete_service_info(v_subscription_id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC011_SRV_MSL_002_OK @@ -2211,12 +2301,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { f_get_current_timestamp_utc() ), 10 - ) - ) - ) - ) - ) - ); + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -2225,7 +2310,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { [] 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 ***"); diff --git a/ttcn/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestControl.ttcn b/ttcn/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestControl.ttcn index a806736..56fdf43 100644 --- a/ttcn/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestControl.ttcn +++ b/ttcn/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestControl.ttcn @@ -15,6 +15,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestControl { if (PICS_APP_ENABLEMENT_API_SUPPORTED) { execute(TC_MEC_MEC011_SRV_APPSAQ_001_OK()); execute(TC_MEC_MEC011_SRV_APPSAQ_001_BR()); + execute(TC_MEC_MEC011_SRV_APPSAQ_001_NF()); execute(TC_MEC_MEC011_SRV_APPSAQ_002_OK()); execute(TC_MEC_MEC011_SRV_APPSAQ_002_BR()); execute(TC_MEC_MEC011_SRV_APPSAQ_002_NF()); @@ -24,6 +25,8 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestControl { execute(TC_MEC_MEC011_SRV_APPSAQ_004_BR()); execute(TC_MEC_MEC011_SRV_APPSAQ_004_NF()); execute(TC_MEC_MEC011_SRV_APPSAQ_004_PF()); + execute(TC_MEC_MEC011_SRV_APPSAQ_005_OK()); + execute(TC_MEC_MEC011_SRV_APPSAQ_005_NF()); execute(TC_MEC_MEC011_SRV_APPSUB_001_OK()); execute(TC_MEC_MEC011_SRV_APPSUB_001_NF()); diff --git a/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Functions.ttcn b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Functions.ttcn index 2ba0429..df3c585 100644 --- a/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Functions.ttcn +++ b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Functions.ttcn @@ -29,7 +29,7 @@ module EdgePlatformApplicationEnablementAPI_Functions { function f_create_service_info( out ServiceInfo p_service_info, - out Headers p_headers + out charstring p_subscription_id ) runs on HttpComponent { var Headers v_headers; var HttpMessage v_response; @@ -39,24 +39,22 @@ module EdgePlatformApplicationEnablementAPI_Functions { 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_ME_APP_REG_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", + "REST_HTTP", REST_HTTP, "HTTP", "2.0", m_end_point_uris({"/meMp1/service/MyEntryPoint"}), m_security_info - ))))))); + ))))))); tc_ac.start; alt { [] httpPort.receive( @@ -65,13 +63,22 @@ module EdgePlatformApplicationEnablementAPI_Functions { mw_http_message_body_json( mw_body_json_service_info( mw_service_info( - v_service_name //serName - )))))) -> value v_response { + v_service_name + )))))) -> value v_response { tc_ac.stop; + // Extract HTTP Location header + var charstring_list v_subscription_id; + f_get_header(v_response.response.header, "Location", v_subscription_id); + // Extract HTTP subssription id + p_subscription_id := regexp( + v_subscription_id[0], + "?+" & PX_ME_APP_REG_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/services" & "/(?*)", + 0 + ); 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); + log("f_create_service_info: INFO: IUT successfully responds to the service creation: ", p_service_info); + log("f_create_service_info: INFO: Resource URI: ", p_subscription_id); } [] tc_ac.timeout { log("f_create_service_info: INCONC: Expected message not received"); @@ -80,7 +87,7 @@ module EdgePlatformApplicationEnablementAPI_Functions { } // End of function f_create_service_info function f_delete_service_info( - in ServiceInfo p_service_info + in charstring p_subscription_id ) runs on HttpComponent { var Headers v_headers; @@ -88,7 +95,7 @@ module EdgePlatformApplicationEnablementAPI_Functions { 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)), + PICS_ROOT_API & PX_ME_APP_REG_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/services/" & p_subscription_id, v_headers ))); tc_ac.start; @@ -104,7 +111,93 @@ module EdgePlatformApplicationEnablementAPI_Functions { } } // End of 'alt' statement } // End of function f_delete_service_info - + + function f_create_app_termination_notif_subscription( + out AppTerminationNotificationSubscription p_app_termination_notification_subscription, + out charstring p_subscription_id + ) 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_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( + m_app_termination_notif_subscription( + PX_APP_TERM_NOTIF_CALLBACK_URI, + -, + PX_APP_INSTANCE_ID + )))))); + + // 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_termination_notif_subscription( + mw_app_termination_notif_subscription( + PX_APP_TERM_NOTIF_CALLBACK_URI, + mw_self, + PX_APP_INSTANCE_ID + )))))) -> value v_response { + tc_ac.stop; + + // Extract HTTP Location header + var charstring_list v_subscription_id; + f_get_header(v_response.response.header, "Location", v_subscription_id); + // Extract HTTP subssription id + p_subscription_id := regexp( + v_subscription_id[0], + "?+" & PX_ME_APP_SUPPORT_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/subscriptions" & "/(?*)", + 0 + ); + p_app_termination_notification_subscription := v_response.response.body.json_body.appTerminationNotificationSubscription; + log("f_create_app_termination_notif_subscription: INFO: IUT successfully responds with a AppTerminationNotificationSubscription: ", p_app_termination_notification_subscription); + log("f_create_app_termination_notif_subscription: INFO: Resource URI: ", p_subscription_id); + } + [] tc_ac.timeout { + log("f_create_app_termination_notif_subscription: INCONC: Expected message not received"); + } + } // End of 'alt' statement + + } // End of function f_create_app_termination_notif_subscription + + function f_delete_app_termination_notif_subscription( + in charstring p_subscription_id + ) runs on HttpComponent { + // Local variables + var Headers v_headers; + + f_init_default_headers_list(-, -, v_headers); + 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/" & p_subscription_id, + v_headers + ))); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_204_no_content + )) { + tc_ac.stop; + } + [] tc_ac.timeout { + log("f_delete_app_termination_notif_subscription: INCONC: Expected message not received"); + } + } // End of 'alt' statement + + } // End of function f_delete_app_termination_notif_subscription + function f_create_ser_availability_notification_subscription( out SerAvailabilityNotificationSubscription p_ser_availability_notification_subscription ) runs on HttpComponent { diff --git a/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Templates.ttcn b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Templates.ttcn index 11f4d44..2121e7d 100644 --- a/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Templates.ttcn +++ b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Templates.ttcn @@ -78,7 +78,7 @@ module EdgePlatformApplicationEnablementAPI_Templates { in ServiceInfo_Version p_version := PX_SERVICE_INFO_VERSION, in ServiceState p_state := PX_SERVICE_INFO_STATE, in EdgePlatformApplicationEnablementAPI_TypesAndValues.SerializerType p_serializer := PX_SERIALIZER, - in template (value) ServiceInfo_Link p_links, + in template (omit) ServiceInfo_Link p_links := omit, in template (omit) SerInstanceId p_serInstanceId := omit, in template (omit) TransportId p_transportId := omit, in template (omit) TransportInfo p_transportInfo := omit, @@ -143,6 +143,12 @@ module EdgePlatformApplicationEnablementAPI_Templates { self_ := p_self_ } // End of template m_self + template (present) Self mw_self( + template (present) EdgePlatformApplicationEnablementAPI_TypesAndValues.LinkType p_self_ := ? + ) := { + self_ := p_self_ + } // End of template mw_self + template (omit) AppTerminationNotificationSubscription m_app_termination_notif_subscription( in template (value) AppTerminationNotificationSubscription_CallbackReference p_callbackReference, in template (omit) Self p_links := omit, diff --git a/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_TypesAndValues.ttcn b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_TypesAndValues.ttcn index f24ab58..fabb260 100644 --- a/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_TypesAndValues.ttcn @@ -340,7 +340,7 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { * @desc Entry point information of the service in a format defined by an implementation, or in an external specification. */ type record EndPointInfo_Alternative { - anytype alternative + anytype alternative optional } /** @@ -631,7 +631,7 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { Json.Bool consumedLocalOnly optional, Json.Bool isLocal optional, Json.UInteger livenessInterval optional, - ServiceInfo_Link links + ServiceInfo_Link links optional } with { variant (links) "name as '_links'"; } diff --git a/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn b/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn index c074fe3..fee2d65 100644 --- a/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn +++ b/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn @@ -78,7 +78,7 @@ module LibMec_Pixits { modulepar charstring PX_ME_APP_SUPPORT_URI := "mec_app_support/v2/applications"; - modulepar charstring PX_ME_APP_REG_APPS_URI := "mec_app_support/v2/applications"; + modulepar charstring PX_ME_APP_REG_APPS_URI := "mec_service_mgmt/v1/applications"; modulepar charstring PX_MEC_SVC_MGMT_SVC_URI := "mec_service_mgmt/v1/services"; diff --git a/virtualization/docker-dev/home/etc/init.d/20-eclipse.sh b/virtualization/docker-dev/home/etc/init.d/20-eclipse.sh index e7e65cf..ab90df6 100755 --- a/virtualization/docker-dev/home/etc/init.d/20-eclipse.sh +++ b/virtualization/docker-dev/home/etc/init.d/20-eclipse.sh @@ -1,6 +1,6 @@ #!/bin/bash -ECLIPSE_URL='https://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/2020-06/R/eclipse-jee-2020-06-R-linux-gtk-x86_64.tar.gz&r=1' +ECLIPSE_URL='https://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/2024-03/R/eclipse-cpp-2024-03-R-linux-gtk-x86_64.tar.gz&r=1' TITAN_URL='https://www.eclipse.org/downloads/download.php?file=/titan/TITAN_Designer_and_Executor_Plugin_7.1.0.zip&r=1' #set -e @@ -10,10 +10,10 @@ echo -e "*****************************\n* Install eclipse\n********************* mkdir -p ${HOME}/frameworks cd ${HOME}/frameworks || exit 1 -wget --progress=dot:mega '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' -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 +wget --progress=dot:mega 'http://www.mirrorservice.org/sites/download.eclipse.org/eclipseMirror/technology/epp/downloads/release/2024-03/R/eclipse-cpp-2024-03-R-linux-gtk-x86_64.tar.gz' -Oeclipse-cpp-2024-03-R-linux-gtk-x86_64.tar.gz || exit 1 +tar -zxvf ./eclipse-cpp-2024-03-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 +rm -f ./eclipse-cpp-2024-03-R-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-8.1.0.zip' -OTITAN_Designer_and_Executor_plugin.zip; then eclipse/eclipse -noSplash -application org.eclipse.equinox.p2.director \ diff --git a/virtualization/docker-dev/home/etc/init.d/40-ttf_t012.sh b/virtualization/docker-dev/home/etc/init.d/40-ttf_t027.sh similarity index 82% rename from virtualization/docker-dev/home/etc/init.d/40-ttf_t012.sh rename to virtualization/docker-dev/home/etc/init.d/40-ttf_t027.sh index ab701a5..7bedfab 100755 --- a/virtualization/docker-dev/home/etc/init.d/40-ttf_t012.sh +++ b/virtualization/docker-dev/home/etc/init.d/40-ttf_t027.sh @@ -6,7 +6,7 @@ set -vx echo -e "*****************************\n* Checkout mec_devel sources\n*****************************\n" mkdir -p ${HOME}/dev && cd ${HOME}/dev || exit 1 -git clone --recurse-submodules --branch devel https://forge.etsi.org/rep/mec/gs032p3-ttcn-test-suite.git mec_devel +git clone --recurse-submodules --branch TTF_T027 https://forge.etsi.org/rep/mec/gs032p3-ttcn-test-suite.git mec_devel cd ${HOME}/dev/mec_devel/titan-test-system-framework git checkout devel cd ${HOME}/dev/mec_devel/ttcn @@ -19,8 +19,13 @@ ln -sf ${HOME}/dev/mec_devel/scripts/devenv.bash.ubuntu ${HOME}/devenv.bash echo -e "*****************************\n* Apply patched \n*****************************\n" cd ${HOME}/dev/mec_devel -cp ./ttcn/patch_lib_common_titan/module.mk ./ttcn/LibCommon/ -cp ./ttcn/patch_lib_common_titan/ttcn/*.ttcn ./ttcn/LibCommon/ttcn + +cd ./ttcn/LibCommon +ln -sf ${HOME}/dev/mec_devel/ttcn/patch_lib_common_titan/module.mk module.mk +cd - +cd ./titan-test-system-framework/ttcn/LibHttp +ln -sf module_mec.mk module.mk +cd - echo -e "*****************************\n* Build Mec test suite\n*****************************\n" cd ${HOME}/dev/mec_devel -- GitLab From 99dfd91db469c8729955927663b190fbaf79bb5d Mon Sep 17 00:00:00 2001 From: garciay Date: Fri, 12 Apr 2024 15:04:11 +0200 Subject: [PATCH 75/99] Validation MEC 011 ATS against MEC Sanbox --- ccsrc/Protocols/Json/json_codec.cc | 19 +- ...ormApplicationEnablementAPI_TestCases.ttcn | 183 ++++++++++-------- ...ormApplicationEnablementAPI_Functions.ttcn | 42 ++-- ...atformApplicationEnablementAPI_Pixits.ttcn | 8 +- 4 files changed, 140 insertions(+), 112 deletions(-) diff --git a/ccsrc/Protocols/Json/json_codec.cc b/ccsrc/Protocols/Json/json_codec.cc index 89b366c..c117361 100644 --- a/ccsrc/Protocols/Json/json_codec.cc +++ b/ccsrc/Protocols/Json/json_codec.cc @@ -52,25 +52,22 @@ int json_codec::encode (const LibHttp__JsonMessageBodyTypes::JsonBody& msg, OCTE 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(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_appInfo__regapps)) { + const EdgePlatformApplicationEnablementAPI__TypesAndValues::AppInfo& app_info = msg.appInfo__regapps(); + app_info.encode(EdgePlatformApplicationEnablementAPI__TypesAndValues::AppInfo_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); + data = /*char2oct(CHARSTRING("{\"AppInfo\": ")) + */OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_appTerminationNotificationSubscription)) { 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(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_appTerminationConfirmation)) { const EdgePlatformApplicationEnablementAPI__TypesAndValues::AppTerminationConfirmation& app = msg.appTerminationConfirmation(); app.encode(EdgePlatformApplicationEnablementAPI__TypesAndValues::AppTerminationConfirmation_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); data = /*char2oct(CHARSTRING("{\"AppTerminationConfirmation\": ")) + */OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; - } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_appReadyConfirmation)) { const EdgePlatformApplicationEnablementAPI__TypesAndValues::AppReadyConfirmation& app = msg.appReadyConfirmation(); app.encode(EdgePlatformApplicationEnablementAPI__TypesAndValues::AppReadyConfirmation_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); data = /*char2oct(CHARSTRING("{\"AppTerminationConfirmation\": ")) + */OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; - - - } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_dnsRule)) { const EdgePlatformApplicationEnablementAPI__TypesAndValues::DnsRule& dns_rule = msg.dnsRule(); dns_rule.encode(EdgePlatformApplicationEnablementAPI__TypesAndValues::DnsRule_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); @@ -375,14 +372,18 @@ int json_codec::decode (const OCTETSTRING& p_data, LibHttp__JsonMessageBodyTypes 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) { + } else if (it->second.find("\"associateDevAppId\"") != std::string::npos) { UEAppInterfaceAPI__TypesAndValues::AppContext appContext; appContext.decode(UEAppInterfaceAPI__TypesAndValues::AppContext_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.appContext() = appContext; - } else if (it->second.find("\"AppInfo\"") != std::string::npos) { + } else if (it->second.find("\"appInfo\"") != std::string::npos) { UEAppInterfaceAPI__TypesAndValues::AppInfo appInfo; appInfo.decode(UEAppInterfaceAPI__TypesAndValues::AppInfo_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.appInfo() = appInfo; + } else if (it->second.find("\"appName\"") != std::string::npos) { + EdgePlatformApplicationEnablementAPI__TypesAndValues::AppInfo appInfo; + appInfo.decode(EdgePlatformApplicationEnablementAPI__TypesAndValues::AppInfo_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); + msg.appInfo__regapps() = appInfo; } else if ((it->second.find("\"bwInfo\"") != std::string::npos) || (it->second.find("\"fixedBWPriority\"") != std::string::npos)) { // Need to change some enumerated string not supported by TTCN-3 language while (true) { diff --git a/ttcn/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn b/ttcn/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn index 05e406c..bf99ea1 100644 --- a/ttcn/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn +++ b/ttcn/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn @@ -258,7 +258,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { REST_HTTP, "HTTP", "2.0", - m_end_point_uris({"/meMp1/service/MyEntryPoint"}), + m_end_point_uris({PX_APP_ENDPOINT_URI}), m_security_info ))))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -1157,7 +1157,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { )) { tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with a ProblemDetails set to 400 Bad Request ***"); + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct error code ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -1946,7 +1946,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { )) { tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with a ProblemDetails set to 400 Bad Request ***"); + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct error code ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -2360,7 +2360,10 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { m_http_message_body_json( m_body_json_app_info_regapps( m_app_info( - PX_APP_NAME + PX_APP_NAME, + -, -, -, + -, + m_end_point_uris({PX_APP_ENDPOINT_URI}) )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -2373,7 +2376,10 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { mw_http_message_body_json( mw_body_json_app_info_regapps( mw_app_info( - PX_APP_NAME + PX_APP_NAME, + -, -, -, + PX_APP_INSTANCE_ID, + mw_end_point_uris({PX_APP_ENDPOINT_URI}) )))))) -> value v_response { tc_ac.stop; @@ -2430,7 +2436,8 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { m_app_info( PX_APP_NAME, -, -, -, - PX_APP_INSTANCE_ID + PX_APP_INSTANCE_ID, + m_end_point_uris({PX_APP_ENDPOINT_URI}) )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -2445,7 +2452,8 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { mw_app_info( PX_APP_NAME, -, -, -, - PX_APP_INSTANCE_ID + PX_APP_INSTANCE_ID, + mw_end_point_uris({PX_APP_ENDPOINT_URI}) )))))) -> value v_response { tc_ac.stop; @@ -2503,7 +2511,8 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { PX_APP_NAME, -, -, PX_APP_D_ID, - PX_APP_INSTANCE_ID + PX_APP_INSTANCE_ID, + m_end_point_uris({PX_APP_ENDPOINT_URI}) )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -2519,7 +2528,8 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { PX_APP_NAME, -, -, PX_APP_D_ID, - PX_APP_INSTANCE_ID + PX_APP_INSTANCE_ID, + mw_end_point_uris({PX_APP_ENDPOINT_URI}) )))))) -> value v_response { tc_ac.stop; @@ -2573,7 +2583,11 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { m_http_message_body_json( m_body_json_app_info_regapps( m_app_info( - PX_APP_NAME + PX_APP_NAME, + -, -, -, + -, // appInstanceId shall be provided as isInsByMec is set to true + -, -, -, -, -, + true )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -2970,12 +2984,12 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { mw_http_response_ok( mw_http_message_body_json( mw_body_json_app_info_regapps( - mw_app_info( + v_app_info/*mw_app_info( v_app_info.appName, -, -, v_app_info.appDId, - v_app_info.appInstanceId - )))))) { + v_app_info.appInstanceId*/ + ))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct AppInfo ***"); @@ -3078,7 +3092,8 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { v_app_info.appProvider, -, v_app_info.appDId, - v_app_info.appInstanceId + v_app_info.appInstanceId, + v_app_info.endpoint )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -3087,8 +3102,17 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { alt { [] httpPort.receive( mw_http_response( - mw_http_response_204_no_content - )) { + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_app_info_regapps( + mw_app_info( + v_app_info.appName, + v_app_info.appProvider, + -, + v_app_info.appDId, + v_app_info.appInstanceId, + v_app_info.endpoint + )))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct code ***"); @@ -3304,9 +3328,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { m_http_request_get( PICS_ROOT_API & PX_MEC_SVC_MGMT_SVC_URI, v_headers - ) - ) - ); + ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -3317,7 +3339,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { mw_http_response_ok( mw_http_message_body_json( mw_body_json_service_info_list - )))) { + )))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a ServiceInfoList ***"); @@ -3360,9 +3382,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { 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")), v_headers - ) - ) - ); + ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -3371,10 +3391,10 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { [] httpPort.receive( mw_http_response( mw_http_response_400_bad_request() - )) { + )) { tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with a ProblemDetails set to 400 Bad Request ***"); + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct error code ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -3393,6 +3413,8 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { testcase TC_MEC_MEC011_SRV_SAQ_002_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; + var ServiceInfo v_service_info; + var charstring v_subscription_id; // Test control if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_APP_ENABLEMENT_API_SUPPORTED)) { @@ -3407,11 +3429,12 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { // Test adapter configuration // Preamble + f_create_service_info(v_service_info, v_subscription_id); f_init_default_headers_list(-, -, v_headers); 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 & "/" & v_subscription_id, v_headers ) ) @@ -3426,9 +3449,8 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { mw_http_response_ok( mw_http_message_body_json( mw_body_json_service_info( - mw_service_info( - PX_SERVICE_ID - )))))) { + v_service_info + ))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a ServiceInfo ***"); @@ -3441,6 +3463,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { } // End of 'alt' statement // Postamble + f_delete_service_info(v_subscription_id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC011_SRV_SAQ_002_OK @@ -3470,9 +3493,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { m_http_request_get( PICS_ROOT_API & PX_MEC_SVC_MGMT_SVC_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_SERVICE_ID, "UTF-8")), v_headers - ) - ) - ); + ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -3481,7 +3502,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { [] 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 ***"); @@ -3511,6 +3532,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { // Local variables var Headers v_headers; var SerAvailabilityNotificationSubscription v_ser_availability_notification_subscription; + var charstring v_subscription_id; // Test control if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_APP_ENABLEMENT_API_SUPPORTED)) { @@ -3526,15 +3548,13 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { // Preamble f_init_default_headers_list(-, -, v_headers); - f_create_ser_availability_notification_subscription(v_ser_availability_notification_subscription); + f_create_ser_availability_notification_subscription(v_ser_availability_notification_subscription, v_subscription_id); 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_ME_APP_REG_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/subscriptions", v_headers - ) - ) - ); + ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -3546,7 +3566,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { mw_http_message_body_json( mw_body_json_subscription_link_list( mw_subscription_link_list - ))))) { + ))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a Mp1SubscriptionLinkList ***"); @@ -3559,7 +3579,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { } // End of 'alt' statement // Postamble - f_delete_ser_availability_notification_subscription(v_ser_availability_notification_subscription); + f_delete_ser_availability_notification_subscription(v_subscription_id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC011_SRV_SRVSUB_001_OK @@ -3587,7 +3607,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_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_ME_APP_REG_APPS_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_APP_INSTANCE_ID, "UTF-8")) & "/subscriptions", v_headers ) ) @@ -3623,6 +3643,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { // Local variables var Headers v_headers; var HttpMessage v_response; + var charstring v_subscription_id; // Test control if (not(PICS_MEC_PLAT) or not (PICS_SERVICES) or not(PICS_APP_ENABLEMENT_API_SUPPORTED)) { @@ -3641,18 +3662,13 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_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_ME_APP_REG_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 - ) - ) - ) - ) - ) - ); + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -3665,15 +3681,25 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { mw_body_json_srv_avail_notif_subscription( mw_srv_avail_notif_subscription( PX_SRV_AVAIL_NOTIF_CALLBACK_URI - )))))) -> value v_response { + )))))) -> value v_response { tc_ac.stop; - if (f_check_headers(valueof(v_response.response.header)) == true) { + // Check HTTP Location header + if (f_check_headers(v_response.response.header) == false) { + log("*** " & testcasename() & ": FAIL: IUT failed in creating service ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_error); + } else { + var charstring_list v_header_location; + f_get_header(v_response.response.header, "Location", v_header_location); + v_subscription_id := regexp( + v_header_location[0], + "?+" & PX_ME_APP_REG_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/subscriptions" & "/(?*)", + 0 + ); + + // TODO how to test this as the notification is for another MEC Application? log("*** " & testcasename() & ": PASS: IUT successfully responds with a SerAvailabilityNotificationSubscription ***"); 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 { @@ -3683,7 +3709,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { } // End of 'alt' statement // Postamble - f_delete_ser_availability_notification_subscription(v_response.response.body.json_body.serAvailabilityNotificationSubscription); + f_delete_ser_availability_notification_subscription(v_subscription_id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC011_SRV_APPSUB_002_OK @@ -3712,7 +3738,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_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_ME_APP_REG_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( @@ -3735,7 +3761,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { )) { tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with a ProblemDetails set to 400 Bad Request ***"); + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct error code ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -3755,7 +3781,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { // Local variables var Headers v_headers; var SerAvailabilityNotificationSubscription v_ser_availability_notification_subscription; - var charstring v_uri; + var charstring v_subscription_id; // Test control if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_APP_ENABLEMENT_API_SUPPORTED)) { @@ -3770,21 +3796,14 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { // Test adapter configuration // Preamble - 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 - ); + f_create_ser_availability_notification_subscription(v_ser_availability_notification_subscription, v_subscription_id); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( m_http_request_get( - PICS_ROOT_API & PX_MEC_SVC_MGMT_APPS_URI & v_uri, + PICS_ROOT_API & PX_ME_APP_REG_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/subscriptions/" & v_subscription_id, v_headers - ) - ) - ); + ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body tc_ac.start; @@ -3794,9 +3813,8 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { mw_http_response_ok( mw_http_message_body_json( mw_body_json_srv_avail_notif_subscription( - mw_srv_avail_notif_subscription( - v_ser_availability_notification_subscription.callbackReference - )))))) { + v_ser_availability_notification_subscription + ))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a SerAvailabilityNotificationSubscription ***"); @@ -3809,7 +3827,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { } // End of 'alt' statement // Postamble - f_delete_ser_availability_notification_subscription(v_ser_availability_notification_subscription); + f_delete_ser_availability_notification_subscription(v_subscription_id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC011_SRV_SRVSUB_003_OK @@ -3837,7 +3855,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_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_ME_APP_REG_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/subscriptions/" & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_ID, "UTF-8")), v_headers ) ) @@ -3873,7 +3891,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { // Local variables var Headers v_headers; var SerAvailabilityNotificationSubscription v_ser_availability_notification_subscription; - var charstring v_uri; + var charstring v_subscription_id; // Test control if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_APP_ENABLEMENT_API_SUPPORTED)) { @@ -3888,19 +3906,14 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { // Test adapter configuration // Preamble - 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 - ); + f_create_ser_availability_notification_subscription(v_ser_availability_notification_subscription, v_subscription_id); 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 & v_uri, + PICS_ROOT_API & PX_ME_APP_REG_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/subscriptions/" & v_subscription_id, v_headers - ))); + ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -3909,7 +3922,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { [] httpPort.receive( mw_http_response( mw_http_response_204_no_content - )) { + )) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with no content ***"); @@ -3950,7 +3963,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_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_ME_APP_REG_APPS_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_APP_INSTANCE_ID, "UTF-8")) & "/subscriptions/" & oct2char(unichar2oct(PX_SUBSCRIPTION_ID, "UTF-8")), v_headers ) ) @@ -3963,7 +3976,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { [] 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 ***"); @@ -4395,7 +4408,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { )) { tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with a ProblemDetails set to 400 Bad Request ***"); + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct error code ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { diff --git a/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Functions.ttcn b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Functions.ttcn index df3c585..5df5a05 100644 --- a/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Functions.ttcn +++ b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Functions.ttcn @@ -199,7 +199,8 @@ module EdgePlatformApplicationEnablementAPI_Functions { } // End of function f_delete_app_termination_notif_subscription function f_create_ser_availability_notification_subscription( - out SerAvailabilityNotificationSubscription p_ser_availability_notification_subscription + out SerAvailabilityNotificationSubscription p_ser_availability_notification_subscription, + out charstring p_subscription_id ) runs on HttpComponent { var Headers v_headers; var HttpMessage v_response; @@ -208,13 +209,13 @@ module EdgePlatformApplicationEnablementAPI_Functions { 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_ME_APP_REG_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( @@ -224,11 +225,21 @@ module EdgePlatformApplicationEnablementAPI_Functions { mw_body_json_srv_avail_notif_subscription( mw_srv_avail_notif_subscription( PX_SRV_AVAIL_NOTIF_CALLBACK_URI - )))))) -> value v_response { + )))))) -> value v_response { tc_ac.stop; + // Extract HTTP Location header + var charstring_list v_subscription_id; + f_get_header(v_response.response.header, "Location", v_subscription_id); + // Extract HTTP subssription id + p_subscription_id := regexp( + v_subscription_id[0], + "?+" & PX_ME_APP_REG_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/subscriptions" & "/(?*)", + 0 + ); 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); + log("f_create_service_info: INFO: Resource URI: ", p_subscription_id); } [] tc_ac.timeout { log("f_create_ser_availability_notification_subscription: INCONC: Expected message not received"); @@ -237,28 +248,23 @@ module EdgePlatformApplicationEnablementAPI_Functions { } // End of function f_create_ser_availability_notification_subscription function f_delete_ser_availability_notification_subscription( - in SerAvailabilityNotificationSubscription p_ser_availability_notification_subscription + in charstring p_subscription_id ) 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, + PICS_ROOT_API & PX_ME_APP_REG_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/subscriptions/" & p_subscription_id, v_headers - ))); + ))); tc_ac.start; alt { [] httpPort.receive( mw_http_response( mw_http_response_204_no_content - )) { + )) { tc_ac.stop; } [] tc_ac.timeout { @@ -283,7 +289,10 @@ module EdgePlatformApplicationEnablementAPI_Functions { m_http_message_body_json( m_body_json_app_info_regapps( m_app_info( - PX_APP_NAME + PX_APP_NAME, + -, -, -, + PX_APP_INSTANCE_ID, + m_end_point_uris({PX_APP_ENDPOINT_URI}) )))))); tc_ac.start; @@ -294,7 +303,10 @@ module EdgePlatformApplicationEnablementAPI_Functions { mw_http_message_body_json( mw_body_json_app_info_regapps( mw_app_info( - PX_APP_NAME + PX_APP_NAME, + -, -, -, + PX_APP_INSTANCE_ID, + mw_end_point_uris({PX_APP_ENDPOINT_URI}) )))))) -> value v_response { tc_ac.stop; diff --git a/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Pixits.ttcn b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Pixits.ttcn index 3c16b76..3a7bcfd 100644 --- a/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Pixits.ttcn +++ b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Pixits.ttcn @@ -6,15 +6,17 @@ module EdgePlatformApplicationEnablementAPI_Pixits { // LibMec/EdgePlatformApplicationEnablementAPI import from EdgePlatformApplicationEnablementAPI_TypesAndValues all; - modulepar Json.String PX_APP_NAME := "appName"; + modulepar Json.String PX_APP_NAME := "appName01"; - modulepar Json.String PX_APP_D_ID := "appName"; + modulepar Json.String PX_APP_D_ID := "appName01"; modulepar AppInstanceId PX_APP_INSTANCE_ID := "appInst01"; modulepar AppInstanceId PX_NON_EXISTENT_APP_INSTANCE_ID := "appInst99"; + + modulepar Json.String PX_APP_ENDPOINT_URI := "http://example.com:12345"; - modulepar SerName PX_SERVICE_NAME := "serName"; + modulepar SerName PX_SERVICE_NAME := "serName01"; modulepar SerName PX_NON_EXISTENT_SERVICE_NAME := "unknownSerName"; -- GitLab From d48f553b4ee5f3555d20b4e655ec0f69debb103c Mon Sep 17 00:00:00 2001 From: garciay Date: Sun, 14 Apr 2024 14:23:19 +0200 Subject: [PATCH 76/99] Add confoguration file for EdgePlatformApplicationEnablement --- ...PlatformApplicationEnablement_Sandbox.cfg_ | 214 ++++++++++++++++++ 1 file changed, 214 insertions(+) create mode 100644 etc/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablement_Sandbox.cfg_ diff --git a/etc/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablement_Sandbox.cfg_ b/etc/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablement_Sandbox.cfg_ new file mode 100644 index 0000000..11eef44 --- /dev/null +++ b/etc/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablement_Sandbox.cfg_ @@ -0,0 +1,214 @@ +[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; + +LibHttp_Pics.PICS_HEADER_HOST := "192.168.1.21" + +LibHttp_Pics.PICS_HEADER_CONTENT_TYPE := "application/json" +LibHttp_Pics.PICS_USE_TOKEN_HEADER := true +#LibHttp_Pics.PICS_TOKEN_HEADER := "Basic WrongToken" + +LibMec_Pics.PICS_ROOT_API := "/sbxykqjr17/mep1/" # Need to sign in on https://mec-platform.etsi.org/, section 'Try-it from your MEC application' + +LibMec_Pics.PICS_MEC_PLAT := true + +# Application Instance ID +EdgePlatformApplicationEnablementAPI_Pixits.PX_APP_INSTANCE_ID := "6b618c24-51bd-4383-9a11-2a11937dc31d" # Copied from ETSI MEC Sandbox GUI + +# Callbacks +#AtsMec_EdgePlatformApplicationEnablementAPI_Pixits.PX_PROV_UU_UNI_SUB_CALLBACK := "https://yanngarcia.ddns.net:36001/epae/v2/" +#AtsMec_EdgePlatformApplicationEnablementAPI_Pixits.PX_PROV_V2X_SUB_CALLBACK := "https://yanngarcia.ddns.net:36001/epae/v2/" + +[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_EdgePlatformApplicationEnablement/%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=mec-platform.etsi.org,port=443,use_ssl=1,trusted_ca_list=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem,privkey=/home/yann/var/ssl/archive/yanngarcia.ddns.net/privkey1.pem,certificate=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem)" +system.httpPort_notif.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server_mode=1,local_port=443,use_ssl=1,mutual_auth=1,mutual_tls=1,trusted_ca_list=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem,privkey=/home/yann/var/ssl/archive/yanngarcia.ddns.net/privkey1.pem,certificate=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem)" + +[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_EdgePlatformApplicationEnablementAPI_TestControl.control + +# 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 responds with an error when a request with an unknown service is sent by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_APPSAQ_001_NF +# 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 executes the deletion of a service for a given application instance when requested by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_APPSAQ_005_OK +# Check that the IUT responds with an error when a request for deletion of a unknown service is sent by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_APPSAQ_005_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_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 termination 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 the MEC application is up and running +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_CONFTASK_002_OK +# 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 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 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 acknowledges the registration by a MEC Application to the MEC platform +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_REGAPPS_001_OK_01 +# Check that the IUT acknowledges the registration by a MEC Application to the MEC platform +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_REGAPPS_001_OK_02 +# Check that the IUT acknowledges the registration by a MEC Application instanciated by the MEC platform +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_REGAPPS_001_OK_03 +# Check that the IUT responds with an error message when the IUT received a registration with missing fields from a MEC Application instanciated by the MEC platform +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_REGAPPS_001_BR_01 +# Check that the IUT responds with an error message when the IUT received by a MEC Application registration with missing endpoint +# AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_REGAPPS_001_BR_02 +# Check that the IUT responds with an error message when the IUT received by a MEC Application registration with unexpected appServiceRequired +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_REGAPPS_001_BR_03 +# Check that the IUT responds with an error message when the IUT received by a MEC Application registration with unexpected appServiceOptional +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_REGAPPS_001_BR_04 +# Check that the IUT responds with an error message when the IUT received by a MEC Application registration with unexpected appFeatureRequired +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_REGAPPS_001_BR_05 +# Check that the IUT responds with an error message when the IUT received by a MEC Application registration with unexpected appFeatureOptional +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_REGAPPS_001_BR_06 +# Check that the IUT responds with the AppInfo description when queried by a MEC Application +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_REGAPPS_002_OK +# Check that the IUT responds with an error when when it receives a request for returning an AppInfo with a wrong ID +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_REGAPPS_002_NF +# Check that the IUT responds with 204 No Content when queried to update MEC Application registration +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_REGAPPS_003_OK +# Check that the IUT responds with an error when queried to update MEC Application registration with a wrong ID +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_REGAPPS_003_NF +# Check that the IUT responds with 204 No Content when queried to delete an existing MEC Application registration +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_REGAPPS_004_OK +# Check that the IUT responds with an error when queried to delete an unknown MEC Application registration +AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_REGAPPS_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 + +[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 -- GitLab From 2fdfdf26ee32fd071e99eb0169c666246e80a967 Mon Sep 17 00:00:00 2001 From: garciay Date: Sun, 14 Apr 2024 14:38:06 +0200 Subject: [PATCH 77/99] Update AtsMec_Location_Sandbox.cf_ --- etc/AtsMec_Location/AtsMec_Location_Sandbox.cf_ | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/etc/AtsMec_Location/AtsMec_Location_Sandbox.cf_ b/etc/AtsMec_Location/AtsMec_Location_Sandbox.cf_ index 8de3d45..c2d6b7f 100644 --- a/etc/AtsMec_Location/AtsMec_Location_Sandbox.cf_ +++ b/etc/AtsMec_Location/AtsMec_Location_Sandbox.cf_ @@ -8,7 +8,7 @@ LibCommon_Time.PX_TAC := 30.0 LibCommon_Sync.PX_TSYNC_TIME_LIMIT := 30.0; LibCommon_Sync.PX_TSHUT_DOWN_TIME_LIMIT := 30.0; -LibHttp_Pics.PICS_HEADER_HOST := "try-mec.etsi.org" #"192.168.1.39" +LibHttp_Pics.PICS_HEADER_HOST := "mec-platform.etsi.org" #"192.168.1.39" LibHttp_Pics.PICS_HEADER_CONTENT_TYPE := "application/json" LibHttp_Pics.PICS_USE_TOKEN_HEADER := true @@ -48,7 +48,7 @@ LogEventTypes:= Yes [TESTPORT_PARAMETERS] # In this section you can specify parameters that are passed to Test Ports. -system.httpPort.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server=try-mec.etsi.org,port=443,use_ssl=1,trusted_ca_list=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem,privkey=/home/yann/var/ssl/archive/yanngarcia.ddns.net/privkey1.pem,certificate=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem)" +system.httpPort.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server=mec-platform.etsi.org,port=443,use_ssl=1,trusted_ca_list=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem,privkey=/home/yann/var/ssl/archive/yanngarcia.ddns.net/privkey1.pem,certificate=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem)" system.httpPort_notif.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server_mode=1,local_port=443,use_ssl=1,mutual_auth=1,mutual_tls=1,trusted_ca_list=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem,privkey=/home/yann/var/ssl/archive/yanngarcia.ddns.net/privkey1.pem,certificate=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem)" [DEFINE] -- GitLab From 86f7a2de5232298990038dfded30a3a693ca6534 Mon Sep 17 00:00:00 2001 From: garciay Date: Mon, 13 May 2024 09:58:09 +0200 Subject: [PATCH 78/99] First round of MEC 013 validation by xFlow --- ccsrc/Protocols/Json/json_codec.cc | 8 ++++++ ccsrc/Protocols/Json/json_codec_factory.hh | 2 +- .../AtsMec_Location_Sandbox.cf_ | 28 +++++++++---------- .../AtsMec_LocationAPI_TestCases.ttcn | 4 +++ .../ttcn/LocationAPI_Templates.ttcn | 4 +-- .../ttcn/LocationAPI_TypesAndValues.ttcn | 2 +- 6 files changed, 30 insertions(+), 18 deletions(-) diff --git a/ccsrc/Protocols/Json/json_codec.cc b/ccsrc/Protocols/Json/json_codec.cc index c117361..7957d41 100644 --- a/ccsrc/Protocols/Json/json_codec.cc +++ b/ccsrc/Protocols/Json/json_codec.cc @@ -191,6 +191,14 @@ int json_codec::decode (const OCTETSTRING& p_data, LibHttp__JsonMessageBodyTypes + } else if (it->second.find("\"notificationSubscriptionList\"") != 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::NotificationSubscriptionList notification_subscription_list; + notification_subscription_list.decode(LocationAPI__TypesAndValues::NotificationSubscriptionList_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); + msg.notificationSubscriptionList() = notification_subscription_list; diff --git a/ccsrc/Protocols/Json/json_codec_factory.hh b/ccsrc/Protocols/Json/json_codec_factory.hh index d3d27eb..7ac3454 100644 --- a/ccsrc/Protocols/Json/json_codec_factory.hh +++ b/ccsrc/Protocols/Json/json_codec_factory.hh @@ -1,7 +1,7 @@ /*! * \file json_codec_factory.hh * \brief Header file for ITS JSON/IP protocol codec factory. - * \author ETSI STF569 + * \author ETSI STF569 / TTF T027 * \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. diff --git a/etc/AtsMec_Location/AtsMec_Location_Sandbox.cf_ b/etc/AtsMec_Location/AtsMec_Location_Sandbox.cf_ index c2d6b7f..eb57861 100644 --- a/etc/AtsMec_Location/AtsMec_Location_Sandbox.cf_ +++ b/etc/AtsMec_Location/AtsMec_Location_Sandbox.cf_ @@ -8,29 +8,29 @@ LibCommon_Time.PX_TAC := 30.0 LibCommon_Sync.PX_TSYNC_TIME_LIMIT := 30.0; LibCommon_Sync.PX_TSHUT_DOWN_TIME_LIMIT := 30.0; -LibHttp_Pics.PICS_HEADER_HOST := "mec-platform.etsi.org" #"192.168.1.39" +LibHttp_Pics.PICS_HEADER_HOST := "192.168.1.21" #"192.168.1.39" LibHttp_Pics.PICS_HEADER_CONTENT_TYPE := "application/json" LibHttp_Pics.PICS_USE_TOKEN_HEADER := true #LibHttp_Pics.PICS_TOKEN_HEADER := "Basic WrongToken" -LibMec_Pics.PICS_ROOT_API := "/sbx1w3aaas/mep1" # Need to sign in on https://sandbox-mec.etsi.org/, section 'Try-it from your MEC application' +LibMec_Pics.PICS_ROOT_API := "/sbxykqjr17/mep1/" # Need to sign in on https://sandbox-mec.etsi.org/, section 'Try-it from your MEC application' LibMec_Pics.PICS_MEC_PLAT := true # Mec-013 LocationAPI -LocationAPI_Pics.PICS_LOCATION_API_SUPPORTED := true -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 := "1" -LocationAPI_Pixits.PX_CALLBACK_REF_URL := { notifyURL := "http://yanngarcia.ddns.net/location/v3/notif/1", callbackData := omit, notificationFormat := omit } -LocationAPI_Pixits.PX_AREA_SUB_CALLBACK_URI := { notifyURL := "http://yanngarcia.ddns.net/location/v3/notif/1", callbackData := omit, notificationFormat := omit } -LocationAPI_Pixits.PX_UE_DIST_SUB_CALLBACK_URI := { notifyURL := "http://yanngarcia.ddns.net/location/v3/notif/1", callbackData := omit, notificationFormat := omit } -LocationAPI_Pixits.PX_UE_COORD_LAT := 43.729538 -LocationAPI_Pixits.PX_UE_COORD_LONG := 7.413819 +LocationAPI_Pics.PICS_LOCATION_API_SUPPORTED := true +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 := "1" +LocationAPI_Pixits.PX_CALLBACK_REF_URL := "http://yanngarcia.ddns.net/location/v3/notif/1" +LocationAPI_Pixits.PX_AREA_SUB_CALLBACK_URI := "http://yanngarcia.ddns.net/location/v3/notif/1" +LocationAPI_Pixits.PX_UE_DIST_SUB_CALLBACK_URI := "http://yanngarcia.ddns.net/location/v3/notif/1" +LocationAPI_Pixits.PX_UE_COORD_LAT := 43.729538 +LocationAPI_Pixits.PX_UE_COORD_LONG := 7.413819 [LOGGING] # In this section you can specify the name of the log file and the classes of events diff --git a/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestCases.ttcn b/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestCases.ttcn index e4f5762..7db1fa6 100644 --- a/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestCases.ttcn +++ b/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestCases.ttcn @@ -1917,6 +1917,8 @@ module AtsMec_LocationAPI_TestCases { testcase TC_MEC_MEC013_SRV_UELOCLOOK_001_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; + var UserLocationEventNotification v_user_location_event_notification; + var charstring v_subscription_id; // Test control if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) { @@ -1931,6 +1933,7 @@ module AtsMec_LocationAPI_TestCases { // Test adapter configuration // Preamble + f_create_user_location_event_subscription(v_user_location_event_notification, v_subscription_id); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( @@ -1962,6 +1965,7 @@ module AtsMec_LocationAPI_TestCases { } // End of 'alt' statement // Postamble + f_delete_user_location_event_subscription(v_subscription_id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC013_SRV_UELOCLOOK_001_OK diff --git a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Templates.ttcn b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Templates.ttcn index e407685..a96f42f 100644 --- a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Templates.ttcn +++ b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Templates.ttcn @@ -215,7 +215,7 @@ module LocationAPI_Templates { } // End of template mw_subscription template (omit) NotificationSubscriptionList m_notification_subscription_list( - in template (value) ResourceURL p_resourceURL, + in template (value) LinkType p_resourceURL, in template (omit) Subscriptions p_subscription := omit ) := { subscription := p_subscription, @@ -223,7 +223,7 @@ module LocationAPI_Templates { } // End of template m_notification_subscription_list template (present) NotificationSubscriptionList mw_notification_subscription_list( - template (present) ResourceURL p_resourceURL := ?, + template (present) LinkType p_resourceURL := ?, template Subscriptions p_subscription := * ) := { subscription := p_subscription, diff --git a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn index e5c9bad..9e7a2e8 100644 --- a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn @@ -702,7 +702,7 @@ module LocationAPI_TypesAndValues { */ type record NotificationSubscriptionList { Subscriptions subscription optional, - ResourceURL resourceURL + LinkType resourceURL } /** -- GitLab From fbae3c524bffa76e625b5619b5b2cdf8d93c986a Mon Sep 17 00:00:00 2001 From: garciay Date: Wed, 15 May 2024 09:45:54 +0200 Subject: [PATCH 79/99] Bug fixed in f_create_user_location_event_subscription; Initiate JSON codec re-organization --- ccsrc/Protocols/Http/http_codec_mec.cc | 6 + ccsrc/Protocols/Json/json_codec.cc | 113 +---------- .../Json/json_codec_factory_mec013.hh | 46 +++++ .../Json/json_codec_factory_mec030.hh | 46 +++++ ccsrc/Protocols/Json/json_codec_mec013.cc | 177 ++++++++++++++++++ ccsrc/Protocols/Json/json_codec_mec013.hh | 22 +++ ccsrc/Protocols/Json/json_codec_mec030.cc | 152 +++++++++++++++ ccsrc/Protocols/Json/json_codec_mec030.hh | 25 +++ ccsrc/Protocols/Json/module.mk | 7 +- .../AtsMec_Location_Sandbox.cf_ | 4 +- .../AtsMec_V2XInformationService.cfg_ | 4 +- titan-test-system-framework | 2 +- .../ttcn/LocationAPI_Functions.ttcn | 5 +- 13 files changed, 489 insertions(+), 120 deletions(-) create mode 100644 ccsrc/Protocols/Json/json_codec_factory_mec013.hh create mode 100644 ccsrc/Protocols/Json/json_codec_factory_mec030.hh create mode 100644 ccsrc/Protocols/Json/json_codec_mec013.cc create mode 100644 ccsrc/Protocols/Json/json_codec_mec013.hh create mode 100644 ccsrc/Protocols/Json/json_codec_mec030.cc create mode 100644 ccsrc/Protocols/Json/json_codec_mec030.hh diff --git a/ccsrc/Protocols/Http/http_codec_mec.cc b/ccsrc/Protocols/Http/http_codec_mec.cc index 362bdac..f661673 100644 --- a/ccsrc/Protocols/Http/http_codec_mec.cc +++ b/ccsrc/Protocols/Http/http_codec_mec.cc @@ -27,6 +27,12 @@ bool http_codec_mec::encode_body_json(const LibHttp__JsonMessageBodyTypes::JsonB bool http_codec_mec::decode_body_json(const OCTETSTRING &p_data, LibHttp__JsonMessageBodyTypes::JsonBody &p_json_body, const std::string &p_content_type, params* p_params) { loggers::get_instance().log(">>> http_codec_mec::decode_body_json"); + loggers::get_instance().log("http_codec_mec::decode_body_json: len=%d", _codecs.size()); + loggers::get_instance().log("http_codec_mec::decode_body_json: first=%s", _codecs.cbegin()->first.c_str()); + loggers::get_instance().log("http_codec_mec::decode_body_json: second=%p", _codecs.cbegin()->second.get()); + loggers::get_instance().log("http_codec_mec::decode_body_json: pointer=%p", _codecs["json"].get()); + + if (_codecs["json"].get() != nullptr) { loggers::get_instance().log("http_codec::decode_body_json: Call 'json_codec'"); if (_codecs["json"]->decode(p_data, (Record_Type&)p_json_body, p_params) == -1) { diff --git a/ccsrc/Protocols/Json/json_codec.cc b/ccsrc/Protocols/Json/json_codec.cc index 7957d41..a611eb7 100644 --- a/ccsrc/Protocols/Json/json_codec.cc +++ b/ccsrc/Protocols/Json/json_codec.cc @@ -20,26 +20,6 @@ int json_codec::encode (const LibHttp__JsonMessageBodyTypes::JsonBody& msg, OCTE const UEidentityAPI__TypesAndValues::UeIdentityTagInfo& ue_identity_tag_info = msg.ueIdentityTagInfo(); ue_identity_tag_info.encode(UEidentityAPI__TypesAndValues::UeIdentityTagInfo_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); data = OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data()); - } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_userLocationEventSubscription)) { - const LocationAPI__TypesAndValues::UserLocationEventSubscription& user_location_event_subscription = msg.userLocationEventSubscription(); - user_location_event_subscription.encode(LocationAPI__TypesAndValues::UserLocationEventSubscription_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); - data = char2oct(CHARSTRING("{\"userLocationEventSubscription\": ")) + OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data()) + char2oct(CHARSTRING("}")); - } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_userLocationPeriodicSubscription)) { - const LocationAPI__TypesAndValues::UserLocationPeriodicSubscription& user_location_periodic_subscription = msg.userLocationPeriodicSubscription(); - user_location_periodic_subscription.encode(LocationAPI__TypesAndValues::UserLocationPeriodicSubscription_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); - data = char2oct(CHARSTRING("{\"userLocationPeriodicSubscription\": ")) + OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data()) + char2oct(CHARSTRING("}")); - } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_zoneLocationEventSubscription)) { - const LocationAPI__TypesAndValues::ZoneLocationEventSubscription& zone_location_event_subscription = msg.zoneLocationEventSubscription(); - zone_location_event_subscription.encode(LocationAPI__TypesAndValues::ZoneLocationEventSubscription_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); - data = char2oct(CHARSTRING("{\"zoneLocationEventSubscription\": ")) + OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data()) + char2oct(CHARSTRING("}")); - } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_userAreaSubscription)) { - const LocationAPI__TypesAndValues::UserAreaSubscription& notif = msg.userAreaSubscription(); - notif.encode(LocationAPI__TypesAndValues::UserAreaSubscription_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); - data = char2oct(CHARSTRING("{\"userAreaSubscription\": ")) + OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data()) + char2oct(CHARSTRING("}")); - } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_userDistanceSubscription)) { - const LocationAPI__TypesAndValues::UserDistanceSubscription& notif = msg.userDistanceSubscription(); - notif.encode(LocationAPI__TypesAndValues::UserDistanceSubscription_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); - data = char2oct(CHARSTRING("{\"userDistanceSubscription\": ")) + OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data()) + char2oct(CHARSTRING("}")); } else if (msg.ischosen(LibHttp__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); @@ -163,98 +143,7 @@ int json_codec::decode (const OCTETSTRING& p_data, LibHttp__JsonMessageBodyTypes loggers::get_instance().log("json_codec::decode: decoding_buffer='%c' / '%s'", str[0], str.c_str()); TTCN_Buffer decoding_buffer(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); - if (it->second.find("\"userList\"") != std::string::npos) { // Be careful to the order - // TODO To be refined, find("\"userList\"") 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::UserList user_list; - user_list.decode(LocationAPI__TypesAndValues::UserList_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); - msg.userList() = user_list; - } else if (it->second.find("\"accessPointList\"") != std::string::npos) { // Be careful to the order - 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; - } else if (it->second.find("\"userLocationEventSubscription\"") != 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::UserLocationEventSubscription user_location_event_subscription; - user_location_event_subscription.decode(LocationAPI__TypesAndValues::UserLocationEventSubscription_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); - msg.userLocationEventSubscription() = user_location_event_subscription; - - - - } else if (it->second.find("\"notificationSubscriptionList\"") != 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::NotificationSubscriptionList notification_subscription_list; - notification_subscription_list.decode(LocationAPI__TypesAndValues::NotificationSubscriptionList_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); - msg.notificationSubscriptionList() = notification_subscription_list; - - - - } else if (it->second.find("\"userLocationPeriodicSubscription\"") != 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::UserLocationPeriodicSubscription user_location_periodic_subscription; - user_location_periodic_subscription.decode(LocationAPI__TypesAndValues::UserLocationPeriodicSubscription_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); - msg.userLocationPeriodicSubscription() = user_location_periodic_subscription; - } else if (it->second.find("\"zoneLocationEventSubscription\"") != 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::ZoneLocationEventSubscription zone_location_event_subscription; - zone_location_event_subscription.decode(LocationAPI__TypesAndValues::ZoneLocationEventSubscription_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); - msg.zoneLocationEventSubscription() = zone_location_event_subscription; - } else if (it->second.find("\"userLocationPeriodicSubscription\"") != 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::UserLocationPeriodicSubscription periodic_tracking_subscription; - periodic_tracking_subscription.decode(LocationAPI__TypesAndValues::UserLocationPeriodicSubscription_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); - msg.userLocationPeriodicSubscription() = periodic_tracking_subscription; - } else if (it->second.find("\"accessPointId\"") != std::string::npos) { - LocationAPI__TypesAndValues::UserInfo user_info; - user_info.decode(LocationAPI__TypesAndValues::UserInfo_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); - msg.userInfo() = user_info; - } else if (it->second.find("\"terminalDistance\"") != 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::TerminalDistance terminal_distance; - 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::UserAreaSubscription notif; - notif.decode(LocationAPI__TypesAndValues::UserAreaSubscription_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); - msg.userAreaSubscription() = notif; - } else if (it->second.find("\"userDistanceSubscription\"") != 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::UserDistanceSubscription notif; - notif.decode(LocationAPI__TypesAndValues::UserDistanceSubscription_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); - msg.userDistanceSubscription() = notif; - } else if (it->second.find("\"ueIdentityTagInfo\"") != std::string::npos) { + 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); msg.ueIdentityTagInfo() = ue_identity_tag_info; diff --git a/ccsrc/Protocols/Json/json_codec_factory_mec013.hh b/ccsrc/Protocols/Json/json_codec_factory_mec013.hh new file mode 100644 index 0000000..ad8d9a7 --- /dev/null +++ b/ccsrc/Protocols/Json/json_codec_factory_mec013.hh @@ -0,0 +1,46 @@ +/*! + * \file json_codec_factory_mec013.hh + * \brief Header file for ITS JSON/IP protocol codec factory. + * \author ETSI STF569 / TTF T027 + * \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. + * \version 0.1 + */ +#pragma once + +#include "codec_stack_builder.hh" + +#include "json_codec_mec013.hh" + +class Record_Type; //! TITAN forward declaration + +/*! + * \class json_codec_factory_mec013 + * \brief This class provides a factory class to create an json_codec class instance + */ +class json_codec_factory_mec013: public codec_factory { + static json_codec_factory_mec013 _f; //! Reference to the unique instance of this class +public: //! \publicsection + /*! + * \brief Default constructor + * Create a new instance of the json_codec_factory_mec013 class + * \remark The HELD/IP codec identifier is HELD + */ + json_codec_factory_mec013() { + // register factory + codec_stack_builder::register_codec_factory("json_codec_mec013", this); + }; + /*! + * \fn codec* create_codec(const std::string & type, const std::string & param); + * \brief Create the codecs stack based on the provided codecs stack description + * \param[in] p_type The provided codecs stack description + * \param[in] p_params Optional parameters + * \return 0 on success, -1 otherwise + * \inline + */ + inline virtual codec_gen* create_codec() { + return (codec_gen*)new json_codec_mec013(); + }; +}; // End of class json_codec_factory_mec013 diff --git a/ccsrc/Protocols/Json/json_codec_factory_mec030.hh b/ccsrc/Protocols/Json/json_codec_factory_mec030.hh new file mode 100644 index 0000000..7944d49 --- /dev/null +++ b/ccsrc/Protocols/Json/json_codec_factory_mec030.hh @@ -0,0 +1,46 @@ +/*! + * \file json_codec_factory_mec030.hh + * \brief Header file for ITS JSON/IP protocol codec factory. + * \author ETSI STF569 / TTF T027 + * \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. + * \version 0.1 + */ +#pragma once + +#include "codec_stack_builder.hh" + +#include "json_codec_mec030.hh" + +class Record_Type; //! TITAN forward declaration + +/*! + * \class json_codec_factory_mec030 + * \brief This class provides a factory class to create an json_codec_mec030 class instance + */ +class json_codec_factory_mec030: public codec_factory { + static json_codec_factory_mec030 _f; //! Reference to the unique instance of this class +public: //! \publicsection + /*! + * \brief Default constructor + * Create a new instance of the json_codec_factory_mec030 class + * \remark The HELD/IP codec identifier is HELD + */ + json_codec_factory_mec030() { + // register factory + codec_stack_builder::register_codec_factory("json_codec_mec030", this); + }; + /*! + * \fn codec* create_codec(const std::string & type, const std::string & param); + * \brief Create the codecs stack based on the provided codecs stack description + * \param[in] p_type The provided codecs stack description + * \param[in] p_params Optional parameters + * \return 0 on success, -1 otherwise + * \inline + */ + inline virtual codec_gen* create_codec() { + return (codec_gen*)new json_codec_mec030(); + }; +}; // End of class json_codec_factory_mec030 diff --git a/ccsrc/Protocols/Json/json_codec_mec013.cc b/ccsrc/Protocols/Json/json_codec_mec013.cc new file mode 100644 index 0000000..6834392 --- /dev/null +++ b/ccsrc/Protocols/Json/json_codec_mec013.cc @@ -0,0 +1,177 @@ +#include +#include +#include + +#include "json_codec_factory_mec013.hh" + +#include "loggers.hh" + +#include "LibHttp_JsonMessageBodyTypes.hh" + +int json_codec_mec013::encode (const LibHttp__JsonMessageBodyTypes::JsonBody& msg, OCTETSTRING& data) +{ + loggers::get_instance().log_msg(">>> json_codec_mec013::encode: ", (const Base_Type&)msg); + + TTCN_EncDec::clear_error(); + TTCN_EncDec::set_error_behavior(TTCN_EncDec::ET_ALL, TTCN_EncDec::EB_DEFAULT); + TTCN_Buffer encoding_buffer; + + if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_userLocationEventSubscription)) { + const LocationAPI__TypesAndValues::UserLocationEventSubscription& user_location_event_subscription = msg.userLocationEventSubscription(); + user_location_event_subscription.encode(LocationAPI__TypesAndValues::UserLocationEventSubscription_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); + data = char2oct(CHARSTRING("{\"userLocationEventSubscription\": ")) + OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data()) + char2oct(CHARSTRING("}")); + } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_userLocationPeriodicSubscription)) { + const LocationAPI__TypesAndValues::UserLocationPeriodicSubscription& user_location_periodic_subscription = msg.userLocationPeriodicSubscription(); + user_location_periodic_subscription.encode(LocationAPI__TypesAndValues::UserLocationPeriodicSubscription_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); + data = char2oct(CHARSTRING("{\"userLocationPeriodicSubscription\": ")) + OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data()) + char2oct(CHARSTRING("}")); + } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_zoneLocationEventSubscription)) { + const LocationAPI__TypesAndValues::ZoneLocationEventSubscription& zone_location_event_subscription = msg.zoneLocationEventSubscription(); + zone_location_event_subscription.encode(LocationAPI__TypesAndValues::ZoneLocationEventSubscription_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); + data = char2oct(CHARSTRING("{\"zoneLocationEventSubscription\": ")) + OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data()) + char2oct(CHARSTRING("}")); + } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_userAreaSubscription)) { + const LocationAPI__TypesAndValues::UserAreaSubscription& notif = msg.userAreaSubscription(); + notif.encode(LocationAPI__TypesAndValues::UserAreaSubscription_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); + data = char2oct(CHARSTRING("{\"userAreaSubscription\": ")) + OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data()) + char2oct(CHARSTRING("}")); + } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_userDistanceSubscription)) { + const LocationAPI__TypesAndValues::UserDistanceSubscription& notif = msg.userDistanceSubscription(); + notif.encode(LocationAPI__TypesAndValues::UserDistanceSubscription_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); + data = char2oct(CHARSTRING("{\"userDistanceSubscription\": ")) + OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data()) + char2oct(CHARSTRING("}")); + } else { + return json_codec::encode(msg, data); + } + + loggers::get_instance().log("<<< json_codec_mec013::encode"); + return 0; +} + +int json_codec_mec013::decode (const OCTETSTRING& p_data, LibHttp__JsonMessageBodyTypes::JsonBody& msg, params* p_params) +{ + loggers::get_instance().log_msg(">>> json_codec_mec013::decode: p_data=", p_data); + + // Sanity checks + params::const_iterator it; + if (p_params == nullptr) { + loggers::get_instance().warning("json_codec_mec013::decode: Failed to access p_params (null pointer)"); + return -1; // TODO Use p_data instead of return -1 + } else { + it = p_params->find("decode_str"); + if (it == p_params->cend()) { + loggers::get_instance().warning("json_codec_mec013::decode: Failed to access p_params item (decode_str)"); + return -1; // TODO Use p_data instead of return -1 + } + loggers::get_instance().log("json_codec_mec013::decode: it->second='%c' / '%s'", it->second.c_str()[0], it->second.c_str()); + } + + // Remove data structure name (if present) ... + std::string str; + if ((it->second[0] != '[') && (it->second[0] != '{')) { + 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); + } else { + str = it->second; + } + // ..and create the decoding buffer + TTCN_EncDec::set_error_behavior(TTCN_EncDec::ET_ALL, TTCN_EncDec::EB_DEFAULT); + TTCN_EncDec::clear_error(); + loggers::get_instance().log("json_codec_mec013::decode: decoding_buffer='%c' / '%s'", str[0], str.c_str()); + TTCN_Buffer decoding_buffer(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); + + if (it->second.find("\"userList\"") != std::string::npos) { // Be careful to the order + // TODO To be refined, find("\"userList\"") 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::UserList user_list; + user_list.decode(LocationAPI__TypesAndValues::UserList_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); + msg.userList() = user_list; + } else if (it->second.find("\"accessPointList\"") != std::string::npos) { // Be careful to the order + 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; + } else if (it->second.find("\"userLocationEventSubscription\"") != 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::UserLocationEventSubscription user_location_event_subscription; + user_location_event_subscription.decode(LocationAPI__TypesAndValues::UserLocationEventSubscription_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); + msg.userLocationEventSubscription() = user_location_event_subscription; + } else if (it->second.find("\"notificationSubscriptionList\"") != 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::NotificationSubscriptionList notification_subscription_list; + notification_subscription_list.decode(LocationAPI__TypesAndValues::NotificationSubscriptionList_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); + msg.notificationSubscriptionList() = notification_subscription_list; + } else if (it->second.find("\"userLocationPeriodicSubscription\"") != 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::UserLocationPeriodicSubscription user_location_periodic_subscription; + user_location_periodic_subscription.decode(LocationAPI__TypesAndValues::UserLocationPeriodicSubscription_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); + msg.userLocationPeriodicSubscription() = user_location_periodic_subscription; + } else if (it->second.find("\"zoneLocationEventSubscription\"") != 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::ZoneLocationEventSubscription zone_location_event_subscription; + zone_location_event_subscription.decode(LocationAPI__TypesAndValues::ZoneLocationEventSubscription_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); + msg.zoneLocationEventSubscription() = zone_location_event_subscription; + } else if (it->second.find("\"userLocationPeriodicSubscription\"") != 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::UserLocationPeriodicSubscription periodic_tracking_subscription; + periodic_tracking_subscription.decode(LocationAPI__TypesAndValues::UserLocationPeriodicSubscription_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); + msg.userLocationPeriodicSubscription() = periodic_tracking_subscription; + } else if (it->second.find("\"accessPointId\"") != std::string::npos) { + LocationAPI__TypesAndValues::UserInfo user_info; + user_info.decode(LocationAPI__TypesAndValues::UserInfo_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); + msg.userInfo() = user_info; + } else if (it->second.find("\"terminalDistance\"") != 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::TerminalDistance terminal_distance; + 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::UserAreaSubscription notif; + notif.decode(LocationAPI__TypesAndValues::UserAreaSubscription_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); + msg.userAreaSubscription() = notif; + } else if (it->second.find("\"userDistanceSubscription\"") != 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::UserDistanceSubscription notif; + notif.decode(LocationAPI__TypesAndValues::UserDistanceSubscription_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); + msg.userDistanceSubscription() = notif; + } else if (it->second.find("\"detail\"") != std::string::npos) { + LibMec__TypesAndValues::ProblemDetails problem_details; + problem_details.decode(LibMec__TypesAndValues::ProblemDetails_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); + msg.problemDetails() = problem_details; + } else { + return json_codec::decode(p_data, msg, p_params); + } + + loggers::get_instance().log_msg("<<< json_codec_mec013::decode: ", (const Base_Type&)msg); + return 0; +} + +json_codec_factory_mec013 json_codec_factory_mec013::_f; diff --git a/ccsrc/Protocols/Json/json_codec_mec013.hh b/ccsrc/Protocols/Json/json_codec_mec013.hh new file mode 100644 index 0000000..91d2220 --- /dev/null +++ b/ccsrc/Protocols/Json/json_codec_mec013.hh @@ -0,0 +1,22 @@ +#pragma once + +#include "json_codec.hh" + +class Base_Type; +class TTCN_Typedescriptor_t; +class TTCN_Buffer; + +namespace LibHttp__JsonMessageBodyTypes { + class JsonBody; +} + +class json_codec_mec013: public json_codec +{ +public: + explicit json_codec_mec013() : json_codec() { }; + virtual ~json_codec_mec013() { }; + + int encode (const LibHttp__JsonMessageBodyTypes::JsonBody&, OCTETSTRING& data); + int decode (const OCTETSTRING& p_data, LibHttp__JsonMessageBodyTypes::JsonBody&, params* p_params = NULL); + +}; // End of class json_codec_mec013 diff --git a/ccsrc/Protocols/Json/json_codec_mec030.cc b/ccsrc/Protocols/Json/json_codec_mec030.cc new file mode 100644 index 0000000..49e7cbb --- /dev/null +++ b/ccsrc/Protocols/Json/json_codec_mec030.cc @@ -0,0 +1,152 @@ +#include +#include +#include + +#include "json_codec_factory_mec030.hh" + +#include "loggers.hh" + +#include "LibHttp_JsonMessageBodyTypes.hh" + +int json_codec_mec030::encode (const LibHttp__JsonMessageBodyTypes::JsonBody& msg, OCTETSTRING& data) +{ + loggers::get_instance().log_msg(">>> json_codec_mec030::encode: ", (const Base_Type&)msg); + + TTCN_EncDec::clear_error(); + TTCN_EncDec::set_error_behavior(TTCN_EncDec::ET_ALL, TTCN_EncDec::EB_DEFAULT); + TTCN_Buffer encoding_buffer; + + if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_predictedQos)) { + const V2XInformationServiceAPI__TypesAndValues::PredictedQos& predicted_qos = msg.predictedQos(); + predicted_qos.encode(V2XInformationServiceAPI__TypesAndValues::PredictedQos_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); + data = OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; + } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_v2xMsgDistributionServerInfo)) { + const V2XInformationServiceAPI__TypesAndValues::V2xMsgDistributionServerInfo& v2x_msg_distribution_server_info = msg.v2xMsgDistributionServerInfo(); + v2x_msg_distribution_server_info.encode(V2XInformationServiceAPI__TypesAndValues::V2xMsgDistributionServerInfo_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); + data = OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; + } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_provChgUuUniSubscription)) { + const V2XInformationServiceAPI__TypesAndValues::ProvChgUuUniSubscription& prov_chg_uu_uni_subscription = msg.provChgUuUniSubscription(); + prov_chg_uu_uni_subscription.encode(V2XInformationServiceAPI__TypesAndValues::ProvChgUuUniSubscription_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); + data = OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; + } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_provChgUuMbmsSubscription)) { + const V2XInformationServiceAPI__TypesAndValues::ProvChgUuMbmsSubscription& prov_chg_uu_mbms_subscription = msg.provChgUuMbmsSubscription(); + prov_chg_uu_mbms_subscription.encode(V2XInformationServiceAPI__TypesAndValues::ProvChgUuMbmsSubscription_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); + data = OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; + } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_provChgPc5Subscription)) { + const V2XInformationServiceAPI__TypesAndValues::ProvChgPc5Subscription& prov_chg_pc5_subscription = msg.provChgPc5Subscription(); + prov_chg_pc5_subscription.encode(V2XInformationServiceAPI__TypesAndValues::ProvChgPc5Subscription_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); + data = OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; + } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_v2xMsgSubscription)) { + const V2XInformationServiceAPI__TypesAndValues::V2xMsgSubscription& v2x_msg_subscription = msg.v2xMsgSubscription(); + v2x_msg_subscription.encode(V2XInformationServiceAPI__TypesAndValues::V2xMsgSubscription_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); + data = OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; + } else { + return json_codec::encode(msg, data); + } + + loggers::get_instance().log("<<< json_codec_mec030::encode"); + return 0; +} + +int json_codec_mec030::decode (const OCTETSTRING& p_data, LibHttp__JsonMessageBodyTypes::JsonBody& msg, params* p_params) +{ + loggers::get_instance().log_msg(">>> json_codec_mec030::decode: p_data=", p_data); + + // Sanity checks + params::const_iterator it; + if (p_params == nullptr) { + loggers::get_instance().warning("json_codec_mec030::decode: Failed to access p_params (null pointer)"); + return -1; // TODO Use p_data instead of return -1 + } else { + it = p_params->find("decode_str"); + if (it == p_params->cend()) { + loggers::get_instance().warning("json_codec_mec030::decode: Failed to access p_params item (decode_str)"); + return -1; // TODO Use p_data instead of return -1 + } + loggers::get_instance().log("json_codec_mec030::decode: it->second='%c' / '%s'", it->second.c_str()[0], it->second.c_str()); + } + + // Remove data structure name (if present) ... + std::string str; + if ((it->second[0] != '[') && (it->second[0] != '{')) { + 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); + } else { + str = it->second; + } + // ..and create the decoding buffer + TTCN_EncDec::set_error_behavior(TTCN_EncDec::ET_ALL, TTCN_EncDec::EB_DEFAULT); + TTCN_EncDec::clear_error(); + loggers::get_instance().log("json_codec_mec030::decode: decoding_buffer='%c' / '%s'", str[0], str.c_str()); + TTCN_Buffer decoding_buffer(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); + + if ((it->second.find("\"uuUnicastProvisioningInfo\"") != std::string::npos) || (it->second.find("\"proInfoUuUnicast\"") != std::string::npos)) { + V2XInformationServiceAPI__TypesAndValues::UuUnicastProvisioningInfo uu_unicast_provisioning_info; + TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); + uu_unicast_provisioning_info.decode(V2XInformationServiceAPI__TypesAndValues::UuUnicastProvisioningInfo_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); + msg.uuUnicastProvisioningInfo() = uu_unicast_provisioning_info; + } else if ((it->second.find("\"uuMbmsProvisioningInfo\"") != std::string::npos) || (it->second.find("\"proInfoUuMbms\"") != std::string::npos)) { + V2XInformationServiceAPI__TypesAndValues::UuMbmsProvisioningInfo uu_mbms_provisioning_info; + TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); + uu_mbms_provisioning_info.decode(V2XInformationServiceAPI__TypesAndValues::UuMbmsProvisioningInfo_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); + msg.uuMbmsProvisioningInfo() = uu_mbms_provisioning_info; + } else if ((it->second.find("\"pc5ProvisioningInfo\"") != std::string::npos) || (it->second.find("\"proInfoPc5\"") != std::string::npos)) { + V2XInformationServiceAPI__TypesAndValues::Pc5ProvisioningInfo pc5_provisioning_info; + TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); + pc5_provisioning_info.decode(V2XInformationServiceAPI__TypesAndValues::Pc5ProvisioningInfo_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); + msg.pc5ProvisioningInfo() = pc5_provisioning_info; + } else if ((it->second.find("\"predictedQos\"") != std::string::npos) || (it->second.find("\"locationGranularity\"") != std::string::npos)) { + V2XInformationServiceAPI__TypesAndValues::PredictedQos predicted_qos; + TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); + predicted_qos.decode(V2XInformationServiceAPI__TypesAndValues::PredictedQos_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); + msg.predictedQos() = predicted_qos; + } else if (it->second.find("\"ProvChgUuUniSubscription\"") != std::string::npos) { + V2XInformationServiceAPI__TypesAndValues::ProvChgUuUniSubscription prov_chg_uu_uni_subscription; + TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); + prov_chg_uu_uni_subscription.decode(V2XInformationServiceAPI__TypesAndValues::ProvChgUuUniSubscription_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); + msg.provChgUuUniSubscription() = prov_chg_uu_uni_subscription; + } else if (it->second.find("\"ProvChgUuMbmsSubscription\"") != std::string::npos) { + V2XInformationServiceAPI__TypesAndValues::ProvChgUuMbmsSubscription prov_chg_uu_mbms_subscription; + TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); + prov_chg_uu_mbms_subscription.decode(V2XInformationServiceAPI__TypesAndValues::ProvChgUuMbmsSubscription_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); + msg.provChgUuMbmsSubscription() = prov_chg_uu_mbms_subscription; + } else if (it->second.find("\"ProvChgPc5Subscription\"") != std::string::npos) { + V2XInformationServiceAPI__TypesAndValues::ProvChgPc5Subscription prov_chg_pc5_subscription; + TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); + prov_chg_pc5_subscription.decode(V2XInformationServiceAPI__TypesAndValues::ProvChgPc5Subscription_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); + msg.provChgPc5Subscription() = prov_chg_pc5_subscription; + } else if (it->second.find("\"V2xMsgSubscription\"") != std::string::npos) { + V2XInformationServiceAPI__TypesAndValues::V2xMsgSubscription v2x_msg_subscription; + TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); + v2x_msg_subscription.decode(V2XInformationServiceAPI__TypesAndValues::V2xMsgSubscription_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); + msg.v2xMsgSubscription() = v2x_msg_subscription; + } else if (it->second.find("\"ProvChgUuUniNotification\"") != std::string::npos) { + V2XInformationServiceAPI__TypesAndValues::ProvChgUuUniNotification prov_chg_uu_uni_notification; + TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); + prov_chg_uu_uni_notification.decode(V2XInformationServiceAPI__TypesAndValues::ProvChgUuUniNotification_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); + msg.provChgUuUniNotification() = prov_chg_uu_uni_notification; + } else if (it->second.find("\"ProvChgUuMbmsNotification\"") != std::string::npos) { + V2XInformationServiceAPI__TypesAndValues::ProvChgUuMbmsNotification prov_chg_uu_mbms_notification; + TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); + prov_chg_uu_mbms_notification.decode(V2XInformationServiceAPI__TypesAndValues::ProvChgUuMbmsNotification_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); + msg.provChgUuMbmsNotification() = prov_chg_uu_mbms_notification; + } else if (it->second.find("\"provChgPc5Notification\"") != std::string::npos) { + V2XInformationServiceAPI__TypesAndValues::ProvChgPc5Notification prov_chg_pc5_notification; + TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); + prov_chg_pc5_notification.decode(V2XInformationServiceAPI__TypesAndValues::ProvChgPc5Notification_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); + msg.provChgPc5Notification() = prov_chg_pc5_notification; + } else if (it->second.find("\"v2xMsgDistributionServer\"") != std::string::npos) { + V2XInformationServiceAPI__TypesAndValues::V2xMsgDistributionServerInfo v2x_msg_distribution_server_info; + TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); + v2x_msg_distribution_server_info.decode(V2XInformationServiceAPI__TypesAndValues::V2xMsgDistributionServerInfo_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); + msg.v2xMsgDistributionServerInfo() = v2x_msg_distribution_server_info; + } else { + return json_codec::decode(p_data, msg, p_params); + } + + loggers::get_instance().log_msg("<<< json_codec_mec030::decode: ", (const Base_Type&)msg); + return 0; +} + +json_codec_factory_mec030 json_codec_factory_mec030::_f; diff --git a/ccsrc/Protocols/Json/json_codec_mec030.hh b/ccsrc/Protocols/Json/json_codec_mec030.hh new file mode 100644 index 0000000..9b7dc70 --- /dev/null +++ b/ccsrc/Protocols/Json/json_codec_mec030.hh @@ -0,0 +1,25 @@ +#pragma once + +#include "codec_gen.hh" +#include "params.hh" + +#include "json_codec.hh" + +class Base_Type; +class TTCN_Typedescriptor_t; +class TTCN_Buffer; + +namespace LibHttp__JsonMessageBodyTypes { + class JsonBody; +} + +class json_codec_mec030: public json_codec +{ +public: + explicit json_codec_mec030() : json_codec() { }; + virtual ~json_codec_mec030() { }; + + virtual int encode (const LibHttp__JsonMessageBodyTypes::JsonBody&, OCTETSTRING& data); + virtual int decode (const OCTETSTRING& p_data, LibHttp__JsonMessageBodyTypes::JsonBody&, params* p_params = NULL); + +}; // End of class json_codec_mec030 diff --git a/ccsrc/Protocols/Json/module.mk b/ccsrc/Protocols/Json/module.mk index d5376a4..c9e3163 100644 --- a/ccsrc/Protocols/Json/module.mk +++ b/ccsrc/Protocols/Json/module.mk @@ -1,3 +1,8 @@ -sources := json_codec.cc +sources := \ + json_codec.cc \ + json_codec_mec013.cc \ + json_codec_mec030.cc \ + + includes := . diff --git a/etc/AtsMec_Location/AtsMec_Location_Sandbox.cf_ b/etc/AtsMec_Location/AtsMec_Location_Sandbox.cf_ index eb57861..b5c1ed0 100644 --- a/etc/AtsMec_Location/AtsMec_Location_Sandbox.cf_ +++ b/etc/AtsMec_Location/AtsMec_Location_Sandbox.cf_ @@ -48,8 +48,8 @@ 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=mec-platform.etsi.org,port=443,use_ssl=1,trusted_ca_list=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem,privkey=/home/yann/var/ssl/archive/yanngarcia.ddns.net/privkey1.pem,certificate=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem)" -system.httpPort_notif.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server_mode=1,local_port=443,use_ssl=1,mutual_auth=1,mutual_tls=1,trusted_ca_list=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem,privkey=/home/yann/var/ssl/archive/yanngarcia.ddns.net/privkey1.pem,certificate=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem)" +system.httpPort.params := "HTTP(codecs=json:json_codec_mec013)/TCP(debug=1,server=mec-platform.etsi.org,port=443,use_ssl=1,trusted_ca_list=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem,privkey=/home/yann/var/ssl/archive/yanngarcia.ddns.net/privkey1.pem,certificate=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem)" +system.httpPort_notif.params := "HTTP(codecs=json:json_codec_mec013)/TCP(debug=1,server_mode=1,local_port=443,use_ssl=1,mutual_auth=1,mutual_tls=1,trusted_ca_list=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem,privkey=/home/yann/var/ssl/archive/yanngarcia.ddns.net/privkey1.pem,certificate=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem)" [DEFINE] # In this section you can create macro definitions, diff --git a/etc/AtsMec_V2XInformationService/AtsMec_V2XInformationService.cfg_ b/etc/AtsMec_V2XInformationService/AtsMec_V2XInformationService.cfg_ index 9ea10db..5a8a384 100644 --- a/etc/AtsMec_V2XInformationService/AtsMec_V2XInformationService.cfg_ +++ b/etc/AtsMec_V2XInformationService/AtsMec_V2XInformationService.cfg_ @@ -44,8 +44,8 @@ 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=mec-platform.etsi.org,port=443,use_ssl=1,trusted_ca_list=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem,privkey=/home/yann/var/ssl/archive/yanngarcia.ddns.net/privkey1.pem,certificate=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem)" -system.httpPort_notif.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server_mode=1,local_port=443,use_ssl=1,mutual_auth=1,mutual_tls=1,trusted_ca_list=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem,privkey=/home/yann/var/ssl/archive/yanngarcia.ddns.net/privkey1.pem,certificate=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem)" +system.httpPort.params := "HTTP(codecs=json:json_codec_mec030)/TCP(debug=1,server=mec-platform.etsi.org,port=443,use_ssl=1,trusted_ca_list=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem,privkey=/home/yann/var/ssl/archive/yanngarcia.ddns.net/privkey1.pem,certificate=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem)" +system.httpPort_notif.params := "HTTP(codecs=json:json_codec_mec030)/TCP(debug=1,server_mode=1,local_port=443,use_ssl=1,mutual_auth=1,mutual_tls=1,trusted_ca_list=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem,privkey=/home/yann/var/ssl/archive/yanngarcia.ddns.net/privkey1.pem,certificate=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem)" [DEFINE] # In this section you can create macro definitions, diff --git a/titan-test-system-framework b/titan-test-system-framework index 6959b8b..d2fa285 160000 --- a/titan-test-system-framework +++ b/titan-test-system-framework @@ -1 +1 @@ -Subproject commit 6959b8be419f3755de6f888e24bfdc8de07383a7 +Subproject commit d2fa28595526041b73cd876a6130bfba4ad9e5af diff --git a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Functions.ttcn b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Functions.ttcn index 9f5531f..fc091ea 100644 --- a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Functions.ttcn +++ b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Functions.ttcn @@ -63,8 +63,9 @@ module LocationAPI_Functions { mw_http_response( mw_http_response_201_created( mw_http_message_body_json( - mw_body_json_user_location_event_notification( - mw_user_location_event_notification( + mw_body_json_user_location_event_subscription( + mw_user_location_event_subscription( + PX_CALLBACK_REF_URL, p_address )))))) -> value v_response { tc_ac.stop; -- GitLab From 7497201e41b58b2f7ec86ac0d9e02044e6e49122 Mon Sep 17 00:00:00 2001 From: garciay Date: Thu, 16 May 2024 10:00:29 +0200 Subject: [PATCH 80/99] Bug fixed in MEC 013 for user subscriptions; Change record of into set of to use superset --- .../AtsMec_Location_Sandbox.cf_ | 12 +- titan-test-system-framework | 2 +- .../AtsMec_LocationAPI_TestCases.ttcn | 174 +++++++++--------- ...tionMobilityServiceAPI_TypesAndValues.ttcn | 16 +- ...ndOperationGrantingAPI_TypesAndValues.ttcn | 56 +++--- ...pplicationInterfaceAPI_TypesAndValues.ttcn | 14 +- ...plicationEnablementAPI_TypesAndValues.ttcn | 26 +-- ...ederationEnablementAPI_TypesAndValues.ttcn | 2 +- ...sInformationServiceAPI_TypesAndValues.ttcn | 22 +-- .../IoTAPI/ttcn/IoTAPI_TypesAndValues.ttcn | 16 +- .../ttcn/LocationAPI_Functions.ttcn | 16 +- .../LocationAPI/ttcn/LocationAPI_Pixits.ttcn | 4 + .../ttcn/LocationAPI_Templates.ttcn | 22 ++- .../ttcn/LocationAPI_TypesAndValues.ttcn | 22 +-- .../RnisAPI/ttcn/RnisAPI_TypesAndValues.ttcn | 62 +++---- .../TrafficManagementAPI_TypesAndValues.ttcn | 12 +- .../UEAppInterfaceAPI_TypesAndValues.ttcn | 2 +- .../ttcn/UEidentityAPI_TypesAndValues.ttcn | 2 +- ...XInformationServiceAPI_TypesAndValues.ttcn | 38 ++-- .../WlanInformationAPI_TypesAndValues.ttcn | 24 +-- 20 files changed, 286 insertions(+), 258 deletions(-) diff --git a/etc/AtsMec_Location/AtsMec_Location_Sandbox.cf_ b/etc/AtsMec_Location/AtsMec_Location_Sandbox.cf_ index b5c1ed0..27f9263 100644 --- a/etc/AtsMec_Location/AtsMec_Location_Sandbox.cf_ +++ b/etc/AtsMec_Location/AtsMec_Location_Sandbox.cf_ @@ -77,7 +77,17 @@ system.httpPort_notif.params := "HTTP(codecs=json:json_codec_mec013)/TCP(debug=1 #AtsMec_TestControl.control # 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 +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UELOCLOOK_001_OK +# Check that the IUT responds with the subscription when queried by a MEC Application - UE location Event +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UELOCLOOK_002_OK_01 +# Check that the IUT responds with the subscription when queried by a MEC Application - UE location Periodic +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UELOCLOOK_002_OK_02 +# Check that the IUT responds with the subscription when queried by a MEC Application - UE location Event and address +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UELOCLOOK_002_OK_03 +# Check that the IUT responds with an error when inconsistent request was sent by a MEC Application - Invalid filter +AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UELOCLOOK_002_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_BR # Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application diff --git a/titan-test-system-framework b/titan-test-system-framework index d2fa285..c579f7c 160000 --- a/titan-test-system-framework +++ b/titan-test-system-framework @@ -1 +1 @@ -Subproject commit d2fa28595526041b73cd876a6130bfba4ad9e5af +Subproject commit c579f7c7175b34426e8392e1edd3885c4b9cd185 diff --git a/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestCases.ttcn b/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestCases.ttcn index 7db1fa6..3c06b8a 100644 --- a/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestCases.ttcn +++ b/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestCases.ttcn @@ -1917,7 +1917,7 @@ module AtsMec_LocationAPI_TestCases { testcase TC_MEC_MEC013_SRV_UELOCLOOK_001_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; - var UserLocationEventNotification v_user_location_event_notification; + var UserLocationEventSubscription v_user_location_event_subscription; var charstring v_subscription_id; // Test control @@ -1933,7 +1933,7 @@ module AtsMec_LocationAPI_TestCases { // Test adapter configuration // Preamble - f_create_user_location_event_subscription(v_user_location_event_notification, v_subscription_id); + f_create_user_location_event_subscription(v_user_location_event_subscription, v_subscription_id); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( @@ -1951,8 +1951,13 @@ module AtsMec_LocationAPI_TestCases { mw_http_response_ok( mw_http_message_body_json( mw_body_json_notification_subscription_list( - mw_notification_subscription_list // FIXME - ))))) { + mw_notification_subscription_list( + { href := pattern "http?+" & PICS_ROOT_API & PX_LOC_API_USERS_SUB_URI }, + superset( + mw_subscription( + v_user_location_event_subscription.subscriptionType, + v_user_location_event_subscription.links_.self_.href + )))))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of notification subscriptions ***"); @@ -1975,9 +1980,9 @@ module AtsMec_LocationAPI_TestCases { testcase TC_MEC_MEC013_SRV_UELOCLOOK_002_OK_01() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; - var UserLocationEventNotification v_user_location_event_notification; + var UserLocationEventSubscription v_user_location_event_subscription; var charstring v_user_location_event_subscription_id; - var UserLocationPeriodicNotification v_user_location_periodic_notification; + var UserLocationPeriodicSubscription v_user_location_periodic_subscription; var charstring v_user_location_periodic_subscription_id; // Test control @@ -1993,8 +1998,8 @@ module AtsMec_LocationAPI_TestCases { // Test adapter configuration // Preamble - f_create_user_location_event_subscription(v_user_location_event_notification, v_user_location_event_subscription_id); - f_create_user_location_periodic_subscription(v_user_location_periodic_notification, v_user_location_periodic_subscription_id); + f_create_user_location_event_subscription(v_user_location_event_subscription, v_user_location_event_subscription_id); + f_create_user_location_periodic_subscription(v_user_location_periodic_subscription, v_user_location_periodic_subscription_id); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( @@ -2013,16 +2018,12 @@ module AtsMec_LocationAPI_TestCases { mw_http_message_body_json( mw_body_json_notification_subscription_list( mw_notification_subscription_list( - -, // FIXME - { - *, - mw_subscription( - v_user_location_event_notification.notificationType, - v_user_location_event_notification.links_.self_.href - ), - * - } - )))))) { + { href := pattern "http?+" & PICS_ROOT_API & PX_LOC_API_USERS_SUB_URI }, + superset( + mw_subscription( + v_user_location_event_subscription.subscriptionType, + v_user_location_event_subscription.links_.self_.href + )))))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of notification subscriptions ***"); @@ -2046,9 +2047,9 @@ module AtsMec_LocationAPI_TestCases { testcase TC_MEC_MEC013_SRV_UELOCLOOK_002_OK_02() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; - var UserLocationEventNotification v_user_location_event_notification; + var UserLocationEventSubscription v_user_location_event_subscription; var charstring v_user_location_event_subscription_id; - var UserLocationPeriodicNotification v_user_location_periodic_notification; + var UserLocationPeriodicSubscription v_user_location_periodic_subscription; var charstring v_user_location_periodic_subscription_id; // Test control @@ -2064,8 +2065,8 @@ module AtsMec_LocationAPI_TestCases { // Test adapter configuration // Preamble - f_create_user_location_event_subscription(v_user_location_event_notification, v_user_location_event_subscription_id); - f_create_user_location_periodic_subscription(v_user_location_periodic_notification, v_user_location_periodic_subscription_id); + f_create_user_location_event_subscription(v_user_location_event_subscription, v_user_location_event_subscription_id); + f_create_user_location_periodic_subscription(v_user_location_periodic_subscription, v_user_location_periodic_subscription_id); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( @@ -2084,16 +2085,12 @@ module AtsMec_LocationAPI_TestCases { mw_http_message_body_json( mw_body_json_notification_subscription_list( mw_notification_subscription_list( - -, // FIXME - { - *, - mw_subscription( - v_user_location_periodic_notification.notificationType, - v_user_location_periodic_notification.links_.self_.href - ), - * - } - )))))) { + { href := pattern "http?+" & PICS_ROOT_API & PX_LOC_API_USERS_SUB_URI }, + superset( + mw_subscription( + v_user_location_event_subscription.subscriptionType, + v_user_location_event_subscription.links_.self_.href + )))))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of notification subscriptions ***"); @@ -2117,11 +2114,11 @@ module AtsMec_LocationAPI_TestCases { testcase TC_MEC_MEC013_SRV_UELOCLOOK_002_OK_03() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; - var UserLocationEventNotification v_user_location_event_notification_1; + var UserLocationEventSubscription v_user_location_event_subscription_1; var charstring v_user_location_event_subscription_id_1; - var UserLocationEventNotification v_user_location_event_notification_2; + var UserLocationEventSubscription v_user_location_event_subscription_2; var charstring v_user_location_event_subscription_id_2; - var UserLocationPeriodicNotification v_user_location_periodic_notification; + var UserLocationPeriodicSubscription v_user_location_periodic_subscription; var charstring v_user_location_periodic_subscription_id; // Test control @@ -2137,9 +2134,9 @@ module AtsMec_LocationAPI_TestCases { // Test adapter configuration // Preamble - f_create_user_location_event_subscription(v_user_location_event_notification_1, v_user_location_event_subscription_id_1); - f_create_user_location_event_subscription(v_user_location_event_notification_2, v_user_location_event_subscription_id_2, PX_USER_2); - f_create_user_location_periodic_subscription(v_user_location_periodic_notification, v_user_location_periodic_subscription_id); + f_create_user_location_event_subscription(v_user_location_event_subscription_1, v_user_location_event_subscription_id_1); + f_create_user_location_event_subscription(v_user_location_event_subscription_2, v_user_location_event_subscription_id_2, PX_USER_2); + f_create_user_location_periodic_subscription(v_user_location_periodic_subscription, v_user_location_periodic_subscription_id); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( @@ -2158,16 +2155,12 @@ module AtsMec_LocationAPI_TestCases { mw_http_message_body_json( mw_body_json_notification_subscription_list( mw_notification_subscription_list( - -, // FIXME - { - *, - mw_subscription( - v_user_location_periodic_notification.notificationType, - v_user_location_periodic_notification.links_.self_.href - ), - * - } - )))))) { + { href := pattern "http?+" & PICS_ROOT_API & PX_LOC_API_USERS_SUB_URI }, + superset( + mw_subscription( + v_user_location_event_subscription_2.subscriptionType, + v_user_location_event_subscription_2.links_.self_.href + )))))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of notification subscriptions ***"); @@ -2192,9 +2185,9 @@ module AtsMec_LocationAPI_TestCases { testcase TC_MEC_MEC013_SRV_UELOCLOOK_002_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; - var UserLocationEventNotification v_user_location_event_notification; + var UserLocationEventSubscription v_user_location_event_subscription; var charstring v_user_location_event_subscription_id; - var UserLocationPeriodicNotification v_user_location_periodic_notification; + var UserLocationPeriodicSubscription v_user_location_periodic_subscription; var charstring v_user_location_periodic_subscription_id; // Test control @@ -2210,8 +2203,8 @@ module AtsMec_LocationAPI_TestCases { // Test adapter configuration // Preamble - f_create_user_location_event_subscription(v_user_location_event_notification, v_user_location_event_subscription_id); - f_create_user_location_periodic_subscription(v_user_location_periodic_notification, v_user_location_periodic_subscription_id); + f_create_user_location_event_subscription(v_user_location_event_subscription, v_user_location_event_subscription_id); + f_create_user_location_periodic_subscription(v_user_location_periodic_subscription, v_user_location_periodic_subscription_id); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( @@ -2251,9 +2244,9 @@ module AtsMec_LocationAPI_TestCases { testcase TC_MEC_MEC013_SRV_UELOCLOOK_002_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; - var UserLocationEventNotification v_user_location_event_notification; + var UserLocationEventSubscription v_user_location_event_subscription; var charstring v_user_location_event_subscription_id; - var UserLocationPeriodicNotification v_user_location_periodic_notification; + var UserLocationPeriodicSubscription v_user_location_periodic_subscription; var charstring v_user_location_periodic_subscription_id; // Test control @@ -2269,8 +2262,8 @@ module AtsMec_LocationAPI_TestCases { // Test adapter configuration // Preamble - f_create_user_location_event_subscription(v_user_location_event_notification, v_user_location_event_subscription_id); - f_create_user_location_periodic_subscription(v_user_location_periodic_notification, v_user_location_periodic_subscription_id); + f_create_user_location_event_subscription(v_user_location_event_subscription, v_user_location_event_subscription_id); + f_create_user_location_periodic_subscription(v_user_location_periodic_subscription, v_user_location_periodic_subscription_id); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( @@ -2310,9 +2303,9 @@ module AtsMec_LocationAPI_TestCases { testcase TC_MEC_MEC013_SRV_UELOCLOOK_003_OK_01() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; - var UserLocationEventNotification v_user_location_event_notification; + var UserLocationEventSubscription v_user_location_event_subscription; var charstring v_user_location_event_subscription_id; - var UserLocationPeriodicNotification v_user_location_periodic_notification; + var UserLocationPeriodicSubscription v_user_location_periodic_subscription; var charstring v_user_location_periodic_subscription_id; // Test control @@ -2328,8 +2321,8 @@ module AtsMec_LocationAPI_TestCases { // Test adapter configuration // Preamble - f_create_user_location_event_subscription(v_user_location_event_notification, v_user_location_event_subscription_id); - f_create_user_location_periodic_subscription(v_user_location_periodic_notification, v_user_location_periodic_subscription_id); + f_create_user_location_event_subscription(v_user_location_event_subscription, v_user_location_event_subscription_id); + f_create_user_location_periodic_subscription(v_user_location_periodic_subscription, v_user_location_periodic_subscription_id); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( @@ -2348,7 +2341,7 @@ module AtsMec_LocationAPI_TestCases { mw_http_message_body_json( mw_body_json_user_location_event_subscription( mw_user_location_event_subscription( - v_user_location_event_notification.links_.self_.href + v_user_location_event_subscription.links_.self_.href )))))) { tc_ac.stop; @@ -2373,9 +2366,9 @@ module AtsMec_LocationAPI_TestCases { testcase TC_MEC_MEC013_SRV_UELOCLOOK_003_OK_02() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; - var UserLocationEventNotification v_user_location_event_notification; + var UserLocationEventSubscription v_user_location_event_subscription; var charstring v_user_location_event_subscription_id; - var UserLocationPeriodicNotification v_user_location_periodic_notification; + var UserLocationPeriodicSubscription v_user_location_periodic_subscription; var charstring v_user_location_periodic_subscription_id; // Test control @@ -2391,8 +2384,8 @@ module AtsMec_LocationAPI_TestCases { // Test adapter configuration // Preamble - f_create_user_location_event_subscription(v_user_location_event_notification, v_user_location_event_subscription_id); - f_create_user_location_periodic_subscription(v_user_location_periodic_notification, v_user_location_periodic_subscription_id); + f_create_user_location_event_subscription(v_user_location_event_subscription, v_user_location_event_subscription_id); + f_create_user_location_periodic_subscription(v_user_location_periodic_subscription, v_user_location_periodic_subscription_id); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( @@ -2411,7 +2404,7 @@ module AtsMec_LocationAPI_TestCases { mw_http_message_body_json( mw_body_json_user_location_periodic_subscription( mw_user_location_periodic_subscription( - v_user_location_periodic_notification.links_.self_.href + v_user_location_periodic_subscription.links_.self_.href )))))) { tc_ac.stop; @@ -2571,7 +2564,7 @@ module AtsMec_LocationAPI_TestCases { */ testcase TC_MEC_MEC013_SRV_UELOCSUB_001_OK_01_02() runs on HttpComponent system HttpTestAdapter { // Local variables - var UserLocationEventNotification v_user_location_event_notification; + var UserLocationEventSubscription v_user_location_event_subscription; var charstring v_subscription_id; // Test control @@ -2587,7 +2580,7 @@ module AtsMec_LocationAPI_TestCases { // Test adapter configuration // Preamble - f_create_user_location_event_subscription(v_user_location_event_notification, v_subscription_id); + f_create_user_location_event_subscription(v_user_location_event_subscription, v_subscription_id); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -2601,7 +2594,7 @@ module AtsMec_LocationAPI_TestCases { mw_body_json_user_location_event_notification( mw_user_location_event_notification( -, -, - v_user_location_event_notification.links_ + v_user_location_event_subscription.links_ )))))) { tc_ac.stop; @@ -2654,10 +2647,11 @@ module AtsMec_LocationAPI_TestCases { v_headers, m_http_message_body_json( m_body_json_user_location_periodic_subscription( - m_user_location_periodic_subscription( - PX_CALLBACK_REF_URL, - PX_USER, - PX_CLIENT_ID + m_user_location_periodic_subscription( + PX_CALLBACK_REF_URL, + PX_USER, + -, + PX_CLIENT_ID )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -2672,7 +2666,7 @@ module AtsMec_LocationAPI_TestCases { mw_user_location_periodic_subscription( PX_CALLBACK_REF_URL, PX_USER, - -, + -, -, PX_CLIENT_ID )))))) -> value v_response { tc_ac.stop; @@ -2710,7 +2704,7 @@ module AtsMec_LocationAPI_TestCases { */ testcase TC_MEC_MEC013_SRV_UELOCSUB_001_OK_02_02() runs on HttpComponent system HttpTestAdapter { // Local variables - var UserLocationPeriodicNotification v_user_location_periodic_notification; + var UserLocationPeriodicSubscription v_user_location_periodic_subscription; var charstring v_subscription_id; // Test control @@ -2726,7 +2720,7 @@ module AtsMec_LocationAPI_TestCases { // Test adapter configuration // Preamble - f_create_user_location_periodic_subscription(v_user_location_periodic_notification, v_subscription_id); + f_create_user_location_periodic_subscription(v_user_location_periodic_subscription, v_subscription_id); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -2740,7 +2734,7 @@ module AtsMec_LocationAPI_TestCases { mw_body_json_user_location_periodic_notification( mw_user_location_periodic_notification( -, -, - v_user_location_periodic_notification.links_ + v_user_location_periodic_subscription.links_ )))))) { tc_ac.stop; @@ -2851,6 +2845,7 @@ module AtsMec_LocationAPI_TestCases { m_user_location_periodic_subscription( "", PX_USER, + -, PX_CLIENT_ID )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -2883,7 +2878,7 @@ module AtsMec_LocationAPI_TestCases { testcase TC_MEC_MEC013_SRV_UELOCSUB_002_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; - var UserLocationEventNotification v_user_location_event_notification; + var UserLocationEventSubscription v_user_location_event_subscription; var charstring v_subscription_id; // Test control @@ -2899,7 +2894,7 @@ module AtsMec_LocationAPI_TestCases { // Test adapter configuration // Preamble - f_create_user_location_event_subscription(v_user_location_event_notification, v_subscription_id); + f_create_user_location_event_subscription(v_user_location_event_subscription, v_subscription_id); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -2988,7 +2983,7 @@ module AtsMec_LocationAPI_TestCases { testcase TC_MEC_MEC013_SRV_UELOCSUB_003_OK_01() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; - var UserLocationEventNotification v_user_location_event_notification; + var UserLocationEventSubscription v_user_location_event_subscription; var charstring v_subscription_id; // Test control @@ -3004,7 +2999,7 @@ module AtsMec_LocationAPI_TestCases { // Test adapter configuration // Preamble - f_create_user_location_event_subscription(v_user_location_event_notification, v_subscription_id); + f_create_user_location_event_subscription(v_user_location_event_subscription, v_subscription_id); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( @@ -3056,7 +3051,7 @@ module AtsMec_LocationAPI_TestCases { testcase TC_MEC_MEC013_SRV_UELOCSUB_003_OK_02() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; - var UserLocationPeriodicNotification v_user_location_periodic_notification; + var UserLocationPeriodicSubscription v_user_location_periodic_subscription; var charstring v_subscription_id; // Test control @@ -3072,7 +3067,7 @@ module AtsMec_LocationAPI_TestCases { // Test adapter configuration // Preamble - f_create_user_location_periodic_subscription(v_user_location_periodic_notification, v_subscription_id); + f_create_user_location_periodic_subscription(v_user_location_periodic_subscription, v_subscription_id); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( @@ -3084,6 +3079,7 @@ module AtsMec_LocationAPI_TestCases { m_user_location_periodic_subscription( PX_UE_NEW_SUB_CALLBACK_URI, PX_USER, + -, PX_CLIENT_ID )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -3099,7 +3095,7 @@ module AtsMec_LocationAPI_TestCases { mw_user_location_periodic_subscription( PX_UE_NEW_SUB_CALLBACK_URI, PX_USER, - -, + -, -, PX_CLIENT_ID )))))) { tc_ac.stop; @@ -3124,7 +3120,7 @@ module AtsMec_LocationAPI_TestCases { testcase TC_MEC_MEC013_SRV_UELOCSUB_003_BR_01() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; - var UserLocationEventNotification v_user_location_event_notification; + var UserLocationEventSubscription v_user_location_event_subscription; var charstring v_subscription_id; // Test control @@ -3140,7 +3136,7 @@ module AtsMec_LocationAPI_TestCases { // Test adapter configuration // Preamble - f_create_user_location_event_subscription(v_user_location_event_notification, v_subscription_id); + f_create_user_location_event_subscription(v_user_location_event_subscription, v_subscription_id); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( @@ -3185,7 +3181,7 @@ module AtsMec_LocationAPI_TestCases { testcase TC_MEC_MEC013_SRV_UELOCSUB_003_BR_02() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; - var UserLocationPeriodicNotification v_user_location_periodic_notification; + var UserLocationPeriodicSubscription v_user_location_periodic_subscription; var charstring v_subscription_id; // Test control @@ -3201,7 +3197,7 @@ module AtsMec_LocationAPI_TestCases { // Test adapter configuration // Preamble - f_create_user_location_periodic_subscription(v_user_location_periodic_notification, v_subscription_id); + f_create_user_location_periodic_subscription(v_user_location_periodic_subscription, v_subscription_id); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( @@ -3213,6 +3209,7 @@ module AtsMec_LocationAPI_TestCases { m_user_location_periodic_subscription( "", PX_USER, + -, PX_CLIENT_ID )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -3328,6 +3325,7 @@ module AtsMec_LocationAPI_TestCases { m_user_location_periodic_subscription( PX_UE_NEW_SUB_CALLBACK_URI, PX_USER, + -, PX_CLIENT_ID )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); diff --git a/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_TypesAndValues.ttcn b/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_TypesAndValues.ttcn index f6dc762..c9b400f 100644 --- a/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/ApplicationMobilityServiceAPI/ttcn/ApplicationMobilityServiceAPI_TypesAndValues.ttcn @@ -30,7 +30,7 @@ module ApplicationMobilityServiceAPI_TypesAndValues { DeviceInformation deviceInformation optional, Json.UInteger expiryTime optional } - type record of RegistrationInfo RegistrationInfos; + type set of RegistrationInfo RegistrationInfos; /** * @desc The identifier of service consumer requesting the Application Mobility Service @@ -42,7 +42,7 @@ module ApplicationMobilityServiceAPI_TypesAndValues { Json.String appInstanceId optional, Json.String mepId optional } - type record of ServiceConsumerId ServiceConsumerIds; + type set of ServiceConsumerId ServiceConsumerIds; /** * @desc Specifies the device served by the application instance which is registering the Application Mobility Service @@ -56,7 +56,7 @@ module ApplicationMobilityServiceAPI_TypesAndValues { AppMobilityServiceLevel appMobilityServiceLevel optional, ContextTransferState contextTransferState optional } - type record of DeviceInformation_ DeviceInformation; + type set of DeviceInformation_ DeviceInformation; /** * @desc Represents the state of transferring the user context to another application instance @@ -85,7 +85,7 @@ module ApplicationMobilityServiceAPI_TypesAndValues { MECHostInformation mecHostInformation optional, Json.String registeredInstanceId optional } - type record of AdjacentAppInstanceInfo AdjacentAppInstanceInfos; + type set of AdjacentAppInstanceInfo AdjacentAppInstanceInfos; /** * @desc This type represents a subscription to mobility procedure notifications from AMS @@ -109,7 +109,7 @@ module ApplicationMobilityServiceAPI_TypesAndValues { } with { variant (links) "name as '_links'"; } - type record of MobilityProcedureSubscription MobilityProcedureSubscriptions; + type set of MobilityProcedureSubscription MobilityProcedureSubscriptions; /** * @desc Hyperlink related to the resource @@ -133,7 +133,7 @@ module ApplicationMobilityServiceAPI_TypesAndValues { AssociateId associateId optional, MobilityStatus mobilityStatus optional } - type record of FilterCriteria FilterCriterias; + type set of FilterCriteria FilterCriterias; /** * @desc This type represents a subscription to notification about the change on adjacent application instance information from AMS @@ -157,7 +157,7 @@ module ApplicationMobilityServiceAPI_TypesAndValues { } with { variant (links) "name as '_links'"; } - type record of AdjacentAppInfoSubscription AdjacentAppInfoSubscriptions; + type set of AdjacentAppInfoSubscription AdjacentAppInfoSubscriptions; /** * @desc List of filtering criteria for the subscription @@ -253,7 +253,7 @@ module ApplicationMobilityServiceAPI_TypesAndValues { variant (links) "name as '_links'"; } - type record of TargetAppInfo AdjacentAppInfo; + type set of TargetAppInfo AdjacentAppInfo; /** * @desc This data type represents a notification from AMS with regards to expiry of the existing subscription diff --git a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.ttcn b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.ttcn index ba064e3..1a94526 100644 --- a/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/ApplicationPackageLifecycleAndOperationGrantingAPI/ttcn/ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.ttcn @@ -126,7 +126,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { type record SwImageDescriptor { // FIXME shall follow the definition in clause 7.1.6.5 of ETSI GS NFV‑IFA 001 [1], with the following consideration: } - type record of SwImageDescriptor SwImageDescriptors; + type set of SwImageDescriptor SwImageDescriptors; /** * @desc The VirtualStorageDescriptor data type describes the virtual storage required by a MEC application @@ -136,7 +136,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { 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: } - type record of VirtualStorageDescriptor VirtualStorageDescriptors; + type set of VirtualStorageDescriptor VirtualStorageDescriptors; /** * @desc The AppExternalCpd data type supports the specification of MEC application requirements related to external connection point @@ -149,7 +149,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { AdditionalServiceData additionalServiceData optional // FIXME inherited attributes } - type record of AppExternalCpd AppExternalCpds; + type set of AppExternalCpd AppExternalCpds; type record VirtualNetworkInterfaceRequirement { // FIXME For the definition of the VirtualNetworkInterfaceRequirements, please refer to clause 7.1.6.6 of ETSI GS NFV-IFA 001 [1]. For the definition of Cpd, please refer to clause 7.1.6.3 of ETSI GS NFV-IFA 001 [1] @@ -175,7 +175,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { Json.String version, TransportsSupported transportsSupported optional } - type record of ServiceDescriptor ServiceDescriptors; + type set of ServiceDescriptor ServiceDescriptors; /** * @desc Indicates transports and serialization formats supported made available to the service-consuming application @@ -198,7 +198,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { Json.String featureName, Json.String version } - type record of FeatureDependency FeatureDependencies; + type set of FeatureDependency FeatureDependencies; /** * @desc The TrafficRuleDescriptor data type describes traffic rules related to a MEC application @@ -220,7 +220,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { } with { variant (action_) "name as 'action'"; } - type record of TrafficRuleDescriptor TrafficRuleDescriptors; + type set of TrafficRuleDescriptor TrafficRuleDescriptors; /** * @desc Definition of filter type: per FLOW or PACKET @@ -344,7 +344,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { IpAddress ipAddress, Json.Integer ttl optional } - type record of DNSRuleDescriptor DNSRuleDescriptors; + type set of DNSRuleDescriptor DNSRuleDescriptors; /** * @desc The LatencyDescriptor data type describes latency requirements for a MEC application @@ -389,7 +389,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { TransportDependency serTransportDependencies optional, Json.String requestedPermissions optional } - type record of ServiceDependency ServiceDependencies; + type set of ServiceDependency ServiceDependencies; /** * @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) @@ -403,7 +403,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues.SerializerType serializers, Labels labels } - type record of TransportDependency TransportDependencies; + type set of TransportDependency TransportDependencies; type record length(1..infinity) of Json.String Labels; @@ -474,7 +474,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { type record OsContainerDescriptor { // FIXME shall follow the definition in clause 7.1.6.2 of ETSI GS NFV‑IFA 001 [1]. } - type record of OsContainerDescriptor OsContainerDescriptors; + type set of OsContainerDescriptor OsContainerDescriptors; /** * @desc The McioIdentificationData data type contains data needed to identify an MCIO when interworking with the CISM @@ -520,7 +520,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { Json.Integer caType, Json.String caValue } - type record of CivicAddressElement_ CivicAddressElement; + type set of CivicAddressElement_ CivicAddressElement; type record Geometry { Json.String type_, @@ -528,15 +528,15 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { } with { variant (type_) "name as 'type'"; } - type record of Json.Number Coordinate; - type record of Coordinate Coordinates; + type set of Json.Number Coordinate; + type set of Coordinate Coordinates; type record Property { Json.String key, Json.String value_ } with { variant (value_) "name as 'value'"; } - type record of Property Properties; + type set of Property Properties; type record Polygon { Json.String type_, Geometry geometry, @@ -602,7 +602,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { } with { variant (links) "name as '_links'"; } - type record of AppInstanceInfo AppInstanceInfoList; + type set of AppInstanceInfo AppInstanceInfoList; type enumerated InstantiationState { INSTANTIATED (0), @@ -687,7 +687,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { Json.String appSoftVersion, AppDVersion appDVersion optional } - type record of Json.String AppDVersion; + type set of Json.String AppDVersion; type record length(1..infinity) of Version Versions; @@ -867,7 +867,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { AppInstanceState appInstanceState optional, AppInstanceSubscriptionFilter appInstanceSubscriptionFilter optional } - type record of AppInstSubscriptionRequest AppInstSubscriptionRequestList; + type set of AppInstSubscriptionRequest AppInstSubscriptionRequestList; /** * @desc This data type represents an application lifecycle management operation occurrence @@ -895,7 +895,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { } with { variant (links) "name as '_links'"; } - type record of AppLcmOpOcc AppLcmOpOccList; + type set of AppLcmOpOcc AppLcmOpOccList; /** * @desc Input parameters of the LCM operation @@ -1034,7 +1034,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { KeyValuePairs extra optional } - type record of VimConnectionInfo VimConnectionInfos; + type set of VimConnectionInfo VimConnectionInfos; /** * @desc The data type represents a subscription link list of notification on application lifecycle management @@ -1368,7 +1368,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { } with { variant (links) "name as '_links'"; } - type record of AppPkgInfo AppPkgInfoList; + type set 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 @@ -1624,7 +1624,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { variant (type_) "name as 'type'"; } - type record of ResourceDefinition ResourceDefinitions; + type set of ResourceDefinition ResourceDefinitions; type enumerated ResourceDefinition_Type { COMPUTE (0), @@ -1633,7 +1633,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { OSCONTAINER (3) } - type record of Json.String ResourceTemplateId; + type set of Json.String ResourceTemplateId; /** * @desc Resource information for an existing resource @@ -1714,7 +1714,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { Json.String resourceGroupId optional, KeyValuePairs mcioConstraints optional } - type record of GrantInfo GrantInfos; + type set of GrantInfo GrantInfos; /** * @desc This type provides information regarding a resource zone @@ -1728,7 +1728,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { Json.String zoneId, Json.String vimConnectionId optional } - type record of ZoneInfo ZoneInfos; + type set of ZoneInfo ZoneInfos; /** * @desc This type provides information regarding a resource zone group @@ -1738,8 +1738,8 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { type record ZoneGroupInfo { ZoneIds zoneId } - type record of ZoneGroupInfo ZoneGroupInfos; - type record of Json.String ZoneIds; + type set of ZoneGroupInfo ZoneGroupInfos; + type set of Json.String ZoneIds; /** * @desc This type represents an external VL @@ -1757,7 +1757,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { AppExtCpData extCps, ExtLinkPortDatas extLinkPorts optional } - type record of ExtVirtualLinkData ExtVirtualLinkDatas; + type set of ExtVirtualLinkData ExtVirtualLinkDatas; /** * @desc This type represents an externally provided link port to be used to connect an external connection point to an external VL @@ -1769,7 +1769,7 @@ module ApplicationPackageLifecycleAndOperationGrantingAPI_TypesAndValues { Json.String id, ResourceHandle resourceHandle } - type record of ExtLinkPortData ExtLinkPortDatas; + type set of ExtLinkPortData ExtLinkPortDatas; /** * @desc This type represents the information that allows addressing a virtualised resource that is used by an application instance diff --git a/ttcn/LibMec/DeviceApplicationInterfaceAPI/ttcn/DeviceApplicationInterfaceAPI_TypesAndValues.ttcn b/ttcn/LibMec/DeviceApplicationInterfaceAPI/ttcn/DeviceApplicationInterfaceAPI_TypesAndValues.ttcn index 791a797..228478d 100644 --- a/ttcn/LibMec/DeviceApplicationInterfaceAPI/ttcn/DeviceApplicationInterfaceAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/DeviceApplicationInterfaceAPI/ttcn/DeviceApplicationInterfaceAPI_TypesAndValues.ttcn @@ -32,7 +32,7 @@ module DeviceApplicationInterfaceAPI_TypesAndValues { ApplicationList_AppInfo appInfo, VendorSpecificExt vendorSpecificExt optional } - type record of AppListItem AppList; + type set of AppListItem AppList; /** * @desc Information on available applications @@ -148,7 +148,7 @@ module DeviceApplicationInterfaceAPI_TypesAndValues { Json.AnyURI referenceURI optional, LocationConstraints appLocation optional } - type record of UserAppInstanceInfo UserAppInstanceInfoList; + type set of UserAppInstanceInfo UserAppInstanceInfoList; /** * @desc Information on locations available instantiation of new user application instances @@ -192,7 +192,7 @@ module DeviceApplicationInterfaceAPI_TypesAndValues { type record AvailableLocations { LocationConstraints appLocation optional } - type record of AvailableLocations AvailableLocationsList; + type set of AvailableLocations AvailableLocationsList; /** * @desc Notification from the UALCMP regarding a change in address of a user application instance @@ -258,7 +258,7 @@ module DeviceApplicationInterfaceAPI_TypesAndValues { CivicAddressElement civicAddressElement optional, Polygon area optional } - type record of LocationConstraints LocationConstraintsList; + type set of LocationConstraints LocationConstraintsList; /** * @desc Elements comprising the civic address @@ -295,8 +295,8 @@ module DeviceApplicationInterfaceAPI_TypesAndValues { } with { variant (type_) "name as 'type'"; } - type record of Json.Number Coordinate; - type record of Coordinate Coordinates; + type set of Json.Number Coordinate; + type set of Coordinate Coordinates; /** * @desc @@ -308,7 +308,7 @@ module DeviceApplicationInterfaceAPI_TypesAndValues { } with { variant (value_) "name as 'value'"; } - type record of Property Properties; + type set of Property Properties; } with { encode "JSON" diff --git a/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_TypesAndValues.ttcn b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_TypesAndValues.ttcn index fabb260..126717b 100644 --- a/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_TypesAndValues.ttcn @@ -252,7 +252,7 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { DestinationInterface_MacAddress dstMacAddress optional, DestinationInterface_IpAddress dstIpAddress optional } - type record of DestinationInterface DestinationInterfaceList; + type set of DestinationInterface DestinationInterfaceList; /** * @desc FQDN resolved by the DNS rule. @@ -309,7 +309,7 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { Ttl ttl, DnsRule_State state } - type record of DnsRule DnsRuleList; + type set of DnsRule DnsRuleList; /** * @desc Host portion of the address. @@ -635,7 +635,7 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { } with { variant (links) "name as '_links'"; } - type record of ServiceInfo ServiceInfoList; + type set of ServiceInfo ServiceInfoList; /** * @desc A link to the related subscription. @@ -721,7 +721,7 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { AuthenticationOption authenticationOption, AuthenticationKeyNum authenticationKeyNum } - type record of NtpServers NtpServersList; + type set of NtpServers NtpServersList; /** * @desc NTP server detail. @@ -731,7 +731,7 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { NtpServers_PtpMasterLocalPriority ptpMasterLocalPriority, DelayReqMaxRate delayReqMaxRate } - type record of TimingCaps_PtpMasters TimingCaps_PtpMastersList; + type set of TimingCaps_PtpMasters TimingCaps_PtpMastersList; /** * @desc This type represents the information provided by the mobile edge platform in response to the Timing capabilities Query message @@ -750,7 +750,7 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { * @desc Identify the traffic ip address. */ type Json.String TrafficFilter_Address; - type record of TrafficFilter_Address TrafficFilter_AddressList; + type set of TrafficFilter_Address TrafficFilter_AddressList; /** * @desc Used to match all IPv4 packets that have the same Differentiated Services Code Point (DSCP). @@ -767,7 +767,7 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { * @desc Protocol of the traffic filter. */ type Json.String TrafficFilter_Protocol; - type record of TrafficFilter_Protocol TrafficFilter_ProtocolList; + type set of TrafficFilter_Protocol TrafficFilter_ProtocolList; /** * @desc Used to match all packets that have the same Quality Class Indicator (QCI). @@ -783,19 +783,19 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { * @desc Used for tag based traffic rule. */ type Json.String TrafficFilter_Tag; - type record of TrafficFilter_Tag TrafficFilter_TagList; + type set of TrafficFilter_Tag TrafficFilter_TagList; /** * @desc Used for GTP tunnel based traffic rule. */ type Json.String TrafficFilter_TunnelAddress; - type record of TrafficFilter_TunnelAddress TrafficFilter_TunnelAddressList; + type set of TrafficFilter_TunnelAddress TrafficFilter_TunnelAddressList; /** * @desc Used for GTP tunnel based traffic rule. */ type Json.String TrafficFilter_TunnelPort; - type record of TrafficFilter_TunnelPort TrafficFilter_TunnelPortList; + type set of TrafficFilter_TunnelPort TrafficFilter_TunnelPortList; /** * @desc This type represents the traffic filter. @@ -829,7 +829,7 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { TrafficFilter_DSCP dSCP optional, TrafficFilter_TC tC optional } - type record of TrafficFilter TrafficFilterList; + type set of TrafficFilter TrafficFilterList; /** * @desc The action of the ME host data plane when a packet matches the trafficFilter. @@ -891,7 +891,7 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { } with { variant (action_) "name as 'action'"; } - type record of TrafficRule TrafficRuleList; + type set of TrafficRule TrafficRuleList; /** * @desc Human-readable description of this transport. @@ -964,7 +964,7 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { } with { variant (type_) "name as 'type'"; } - type record of TransportInfo TransportInfoList; + type set of TransportInfo TransportInfoList; /** * @desc The enumeration TransportType represents types of transports. diff --git a/ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_TypesAndValues.ttcn b/ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_TypesAndValues.ttcn index 640e6c2..77cf613 100644 --- a/ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_TypesAndValues.ttcn @@ -24,7 +24,7 @@ module FederationEnablementAPI_TypesAndValues { Json.String systemName, Json.String systemProvider } // End of type SystemInfo - type record of SystemInfo SystemInfoList; + type set of SystemInfo SystemInfoList; /** * @desc information provided by MEC orchestrator as a part of the "Update of MEC system(s) to the federation" diff --git a/ttcn/LibMec/FixedAccessInformationServiceAPI/ttcn/FixedAccessInformationServiceAPI_TypesAndValues.ttcn b/ttcn/LibMec/FixedAccessInformationServiceAPI/ttcn/FixedAccessInformationServiceAPI_TypesAndValues.ttcn index 2145c5c..8e6e6a9 100644 --- a/ttcn/LibMec/FixedAccessInformationServiceAPI/ttcn/FixedAccessInformationServiceAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/FixedAccessInformationServiceAPI/ttcn/FixedAccessInformationServiceAPI_TypesAndValues.ttcn @@ -160,8 +160,8 @@ module FixedAccessInformationServiceAPI_TypesAndValues { Json.Bool energyMgt1x1OperStatus, Json.Bool emDlsOperStatus } - type record of CmStatus_ CmStatus; - type record of Json.String IfIndexList; + type set of CmStatus_ CmStatus; + type set of Json.String IfIndexList; /** * @desc It defines the CM connectivity state. @@ -194,7 +194,7 @@ module FixedAccessInformationServiceAPI_TypesAndValues { } with { variant "JSON: as number" } - type record of CmRegState CmRegStateList; + type set of CmRegState CmRegStateList; /** * @desc It represents the DOCSIS Path Verify Statistics collected in the cable modem device @@ -366,7 +366,7 @@ module FixedAccessInformationServiceAPI_TypesAndValues { OnuIds onuId, AlarmList alarms optional } - type record of Json.String OnuIds; + type set of Json.String OnuIds; /** * @desc In case alarms is not included in the subscription request, the default value -1 = All shall be used and included in the response @@ -392,7 +392,7 @@ module FixedAccessInformationServiceAPI_TypesAndValues { } with { variant "JSON: as number" } - type record of Alarm AlarmList; + type set of Alarm AlarmList; /** * @desc This type represents a subscription to device information notifications from FAIS @@ -434,13 +434,13 @@ module FixedAccessInformationServiceAPI_TypesAndValues { * @desc Information (typically the serial number) to identify an Internet Gateway Device through which the customer premises device is connected. * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.3.3-1: Attributes of the DevInfoSubscription */ - type record of Json.String GatewayIdList; + type set of Json.String GatewayIdList; /** * @desc Typically, the serial number of the device. * @see ETSI GS MEC 029 V2.2.1 (2022-01) Table 6.3.3-1: Attributes of the DevInfoSubscription */ - type record of Json.String DeviceIdList; + type set of Json.String DeviceIdList; /** * @desc Current operational status of the device. @@ -452,7 +452,7 @@ module FixedAccessInformationServiceAPI_TypesAndValues { } with { variant "JSON: as number" } - type record of DeviceErrStatus_ DeviceErrStatus; + type set of DeviceErrStatus_ DeviceErrStatus; /** * @desc This type represents a subscription to cable modem connectivity state notifications from FAIS @@ -536,7 +536,7 @@ module FixedAccessInformationServiceAPI_TypesAndValues { Json.AnyURI href, SubscriptionType subscriptionType } - type record of Subscription_ SubscriptionList; + type set of Subscription_ SubscriptionList; /** * @desc Type of subscription @@ -597,7 +597,7 @@ module FixedAccessInformationServiceAPI_TypesAndValues { Json.String aniIndex, AlarmList alarms optional } - type record of AniId_ AniId + type set of AniId_ AniId /** * @desc This type represents a notification from FAIS with regards to ONU alarms @@ -714,7 +714,7 @@ module FixedAccessInformationServiceAPI_TypesAndValues { Json.Number longitude optional, Json.String postalCode optional } - type record of CpInfo_ CpInfo; + type set of CpInfo_ CpInfo; /** * @desc This type represents an IP-layer ping test diff --git a/ttcn/LibMec/IoTAPI/ttcn/IoTAPI_TypesAndValues.ttcn b/ttcn/LibMec/IoTAPI/ttcn/IoTAPI_TypesAndValues.ttcn index 20fe1aa..20969c4 100644 --- a/ttcn/LibMec/IoTAPI/ttcn/IoTAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/IoTAPI/ttcn/IoTAPI_TypesAndValues.ttcn @@ -55,9 +55,9 @@ module IoTAPI_TypesAndValues { Json.Bool enabled } // End of type DeviceInfo - type record of DeviceInfo DeviceInfoList; + type set of DeviceInfo DeviceInfoList; - type record of Json.String DeviceMetatData; + type set of Json.String DeviceMetatData; /** * @desc @@ -93,7 +93,7 @@ module IoTAPI_TypesAndValues { TransportInfoList customServicesTransportInfo optional, Json.Bool enabled } // End of IotPlatformInfo - type record of IotPlatformInfo IotPlatformInfoList; + type set of IotPlatformInfo IotPlatformInfoList; /** * @desc User transport based on a message bus @@ -119,7 +119,7 @@ module IoTAPI_TypesAndValues { EdgePlatformApplicationEnablementAPI_TypesAndValues.SecurityInfo security, ImplSpecificInfo implSpecificInfo } // End of type MBTransportInfo - type record of MBTransportInfo MBTransportInfoList; + type set of MBTransportInfo MBTransportInfoList; /** * @desc @@ -133,11 +133,11 @@ module IoTAPI_TypesAndValues { UplinkTopics uplinkTopics optional, DownlinkTopics downlinkTopics optional } // End of type ImplSpecificInfo - type record of Json.String EventTopics; - type record of Json.String UplinkTopics; - type record of Json.String DownlinkTopics; + type set of Json.String EventTopics; + type set of Json.String UplinkTopics; + type set of Json.String DownlinkTopics; - type record of EdgePlatformApplicationEnablementAPI_TypesAndValues.TransportInfo TransportInfoList; + type set of EdgePlatformApplicationEnablementAPI_TypesAndValues.TransportInfo TransportInfoList; /** * @desc Defines the format of the messages to be published on the user transport in order to provide application-specific information about events related to the established session between the IoT device and the end IoT application(s) diff --git a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Functions.ttcn b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Functions.ttcn index fc091ea..1c7d56e 100644 --- a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Functions.ttcn +++ b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Functions.ttcn @@ -38,7 +38,7 @@ module LocationAPI_Functions { import from LibMec_Pixits all; function f_create_user_location_event_subscription( - out UserLocationEventNotification p_user_location_event_notification, + out UserLocationEventSubscription p_user_location_event_subscription, out charstring p_subscription_id, in Address p_address := PX_USER ) runs on HttpComponent { @@ -79,8 +79,8 @@ module LocationAPI_Functions { "?+" & PX_LOC_API_USERS_SUB_URI & "/(?*)", 0 ); - p_user_location_event_notification := v_response.response.body.json_body.userLocationEventNotification; - log("f_create_user_location_event_subscription: INFO: IUT successfully responds to the subscription: ", p_user_location_event_notification); + p_user_location_event_subscription := v_response.response.body.json_body.userLocationEventSubscription; + log("f_create_user_location_event_subscription: INFO: IUT successfully responds to the subscription: ", p_user_location_event_subscription); log("f_create_user_location_event_subscription: INFO: p_subscription_id: ", p_subscription_id); } [] tc_ac.timeout { @@ -118,7 +118,7 @@ module LocationAPI_Functions { } // End of function f_delete_user_location_event_subscription function f_create_user_location_periodic_subscription( - out UserLocationPeriodicNotification p_user_location_periodic_notification, + out UserLocationPeriodicSubscription p_user_location_periodic_subscription, out charstring p_subscription_id ) runs on HttpComponent { var Headers v_headers; @@ -141,8 +141,8 @@ module LocationAPI_Functions { mw_http_response( mw_http_response_201_created( mw_http_message_body_json( - mw_body_json_user_location_periodic_notification( - mw_user_location_periodic_notification( + mw_body_json_user_location_periodic_subscription( + mw_user_location_periodic_subscription( PX_CALLBACK_REF_URL )))))) -> value v_response { tc_ac.stop; @@ -156,8 +156,8 @@ module LocationAPI_Functions { "?+" & PX_LOC_API_USERS_SUB_URI & "/(?*)", 0 ); - p_user_location_periodic_notification := v_response.response.body.json_body.userLocationPeriodicNotification; - log("f_create_user_location_periodic_subscription: INFO: IUT successfully responds to the subscription: ", p_user_location_periodic_notification); + p_user_location_periodic_subscription := v_response.response.body.json_body.userLocationPeriodicSubscription; + log("f_create_user_location_periodic_subscription: INFO: IUT successfully responds to the subscription: ", p_user_location_periodic_subscription); log("f_create_user_location_periodic_subscription: INFO: p_subscription_id: ", p_subscription_id); } [] tc_ac.timeout { diff --git a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Pixits.ttcn b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Pixits.ttcn index 8d6672e..602947f 100644 --- a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Pixits.ttcn +++ b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Pixits.ttcn @@ -82,5 +82,9 @@ module LocationAPI_Pixits { modulepar Json.UInteger PX_UPPER_NUM_USER_THRESHOLD := 10; modulepar Json.UInteger PX_LOWER_NUM_USER_THRESHOLD := 1; + + modulepar integer PX_REPORTING_AMOUNT := 0; + + modulepar integer PX_REPORTING_INTERVAL := 0; } // End of module LocationAPI_Pixits diff --git a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Templates.ttcn b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Templates.ttcn index a96f42f..319edbc 100644 --- a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Templates.ttcn +++ b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Templates.ttcn @@ -337,10 +337,10 @@ module LocationAPI_Templates { template (omit) UserLocationPeriodicSubscription m_user_location_periodic_subscription( in CallbackReference p_callbackReference, in Address p_address := PX_USER, + in template (value) PeriodicEventInfo p_periodicEventInfo := m_periodic_event_info, in template (omit) ClientCorrelator p_clientCorrelator := omit, in template (omit) Json.Bool p_requestTestNotification := omit, in template (omit) WebsockNotifConfig p_websockNotifConfig := omit, - in template (omit) PeriodicEventInfo p_periodicEventInfo := omit, in template (omit) TimeStamp p_expiryDeadline := omit ) := { subscriptionType := "UserLocationPeriodicSubscription", @@ -358,10 +358,10 @@ module LocationAPI_Templates { template (present) CallbackReference p_callbackReference := ?, template (present) Address p_address := ?, template (present) Links p_links_ := ?, + template (present) PeriodicEventInfo p_periodicEventInfo := mw_periodic_event_info, template ClientCorrelator p_clientCorrelator := *, template Json.Bool p_requestTestNotification := *, template WebsockNotifConfig p_websockNotifConfig := *, - template PeriodicEventInfo p_periodicEventInfo := *, template TimeStamp p_expiryDeadline := * ) := { subscriptionType := "UserLocationPeriodicSubscription", @@ -369,12 +369,28 @@ module LocationAPI_Templates { callbackReference := p_callbackReference, requestTestNotification := p_requestTestNotification, websockNotifConfig := p_websockNotifConfig, - links_ := omit, + links_ := p_links_, address_ := p_address, periodicEventInfo := p_periodicEventInfo, expiryDeadline := p_expiryDeadline } // End of template mw_user_location_periodic_subscription + template (value) PeriodicEventInfo m_periodic_event_info( + in ReportingAmount p_reportingAmount := PX_REPORTING_AMOUNT, + in ReportingInterval p_reportingInterval := PX_REPORTING_INTERVAL + ) := { + reportingAmount := p_reportingAmount, + reportingInterval := p_reportingInterval + } // End of template m_periodic_event_info + + template (present) PeriodicEventInfo mw_periodic_event_info( + template (present) ReportingAmount p_reportingAmount := ?, + template (present) ReportingInterval p_reportingInterval := ? + ) := { + reportingAmount := p_reportingAmount, + reportingInterval := p_reportingInterval + } // End of template mw_periodic_event_info + template (omit) ZoneLocationEventSubscription m_zone_location_event_subscription( in CallbackReference p_callbackReference, in Address p_address := PX_USER, diff --git a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn index 9e7a2e8..8df8f56 100644 --- a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn @@ -26,7 +26,7 @@ module LocationAPI_TypesAndValues { UserInfos user optional, ResourceURL resourceURL optional } - type record of UserInfo UserInfos; + type set of UserInfo UserInfos; /** * @desc This type represents configuration for the delivery of subscription notifications over Websockets @@ -92,12 +92,12 @@ module LocationAPI_TypesAndValues { /** * @desc Location latitude, expressed in the range -90° to +90° */ - type record of Json.Number Latitude; + type set of Json.Number Latitude; /** * @desc Location longitude, expressed in the range -180° to +180° */ - type record of Json.Number Longitude; + type set of Json.Number Longitude; /** * @desc This type represents the geographical location of a point @@ -109,7 +109,7 @@ module LocationAPI_TypesAndValues { Latitude latitude, Longitude longitude } // End of type Point - type record of Point Points; + type set of Point Points; /** * @desc A type containing location information with latitude, longitude and altitude, in addition the accuracy of the information are provided. @@ -223,7 +223,7 @@ module LocationAPI_TypesAndValues { NumberOfUsers numberOfUsers, ResourceURL resourceURL } - type record of ZoneInfo ZoneInfos; + type set of ZoneInfo ZoneInfos; /** * @desc Collection of the zone information list. @@ -265,7 +265,7 @@ module LocationAPI_TypesAndValues { /** * @desc Collection of the access point information list */ - type record of AccessPointInfo AccessPointInfos; + type set of AccessPointInfo AccessPointInfos; /** * @desc A type containing list of access points. @@ -285,7 +285,7 @@ module LocationAPI_TypesAndValues { * @desc Address of user (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI) */ type Json.AnyURI Address - type record of Address Addresses; + type set of Address Addresses; /** * @desc Reserved for future use. @@ -358,7 +358,7 @@ module LocationAPI_TypesAndValues { ENTERING_AREA_EVENT, LEAVING_AREA_EVENT } - type record of LocationEventType LocationEventCriteria; + type set of LocationEventType LocationEventCriteria; /** * @desc This enumeration represents the result of a localization associated with a notification @@ -466,7 +466,7 @@ module LocationAPI_TypesAndValues { /** * @desc List of user event values to generate notifications for (these apply to address specified). If this element is missing, a notification is requested to be generated for any change in user event. */ - type record of UserEventType UserEventCriteria; + type set of UserEventType UserEventCriteria; /** * @desc Definition of type CivicAddress @@ -666,7 +666,7 @@ module LocationAPI_TypesAndValues { } with { variant (address_) "name as 'address'"; } // End of type TerminalLocation - type record of TerminalLocation TerminalLocationList + type set of TerminalLocation TerminalLocationList /** * @desc Indicate a notification termination or cancellation @@ -692,7 +692,7 @@ module LocationAPI_TypesAndValues { Json.AnyURI href optional, Json.String subscriptionType } - type record of Subscription Subscriptions; + type set of Subscription Subscriptions; /** * @desc This type contains a list of subscriptions diff --git a/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_TypesAndValues.ttcn b/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_TypesAndValues.ttcn index f5066a6..7a08346 100644 --- a/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_TypesAndValues.ttcn @@ -25,7 +25,7 @@ module RnisAPI_TypesAndValues { AppInstanceId appInstanceId, Plmn_list plmn } - type record of PlmnInfo PlmnInfos; + type set of PlmnInfo PlmnInfos; /** * @desc This type represents the information on existing E-RABs that are associated with a specific MEC application instance. @@ -52,7 +52,7 @@ module RnisAPI_TypesAndValues { Ecgi ecgi, UeInfo ueInfo } - type record of RabInfo_CellUserInfo_ RabInfo_CellUserInfo; + type set of RabInfo_CellUserInfo_ RabInfo_CellUserInfo; /** * @desc Information on UEs in the specific cell @@ -64,7 +64,7 @@ module RnisAPI_TypesAndValues { AssociateId associateId optional, ErabInfo erabInfo } - type record of UeInfo_ UeInfo; + type set of UeInfo_ UeInfo; /** * @desc Information on E-RAB @@ -76,7 +76,7 @@ module RnisAPI_TypesAndValues { Json.UInteger erabId, ErabQosParameters erabQosParameters optional } - type record of ErabInfo_ ErabInfo; + type set of ErabInfo_ ErabInfo; /** * @desc QoS parameters for the E-RAB @@ -108,7 +108,7 @@ module RnisAPI_TypesAndValues { Json.UInteger erabGbrDl, Json.UInteger erabGbrUl } - type record of QosInformation_ QosInformation; + type set of QosInformation_ QosInformation; /** * @desc This type represents the information on S1-U bearer. @@ -135,7 +135,7 @@ module RnisAPI_TypesAndValues { Ecgi ecgi, S1BearerInfoDetailed s1BearerInfoDetailed } - type record of S1UeInfo_ S1UeInfo; + type set of S1UeInfo_ S1UeInfo; /** * @desc The temporary identifier allocated for the specific UE @@ -147,7 +147,7 @@ module RnisAPI_TypesAndValues { Mmec mmec, Mtmsi mtmsi } - type record of TempUeId_ TempUeId; + type set of TempUeId_ TempUeId; type Json.String Mmec; @@ -165,9 +165,9 @@ module RnisAPI_TypesAndValues { S1EnbInfo s1EnbInfo, SGwInfo sGwInfo } - type record of S1BearerInfoDetailed_ S1BearerInfoDetailed; + type set of S1BearerInfoDetailed_ S1BearerInfoDetailed; - type record of Json.UInteger ErabId; + type set of Json.UInteger ErabId; /** * @desc S1 bearer information on GW side @@ -248,7 +248,7 @@ module RnisAPI_TypesAndValues { UInt100 dl_nongbr_pdr_cell optional, UInt100 ul_nongbr_pdr_cell optional } - type record of L2Meas_CellInfo_ L2Meas_CellInfo; + type set of L2Meas_CellInfo_ L2Meas_CellInfo; /** * @desc The per cell measurement information @@ -292,7 +292,7 @@ module RnisAPI_TypesAndValues { integer dl_nongbr_data_volume_ue optional, integer ul_nongbr_data_volume_ue optional } - type record of L2Meas_CellUEInfo_ L2Meas_CellUEInfo; + type set of L2Meas_CellUEInfo_ L2Meas_CellUEInfo; /** * @desc Subscription to cell change notifications from Radio Network Information Service @@ -356,7 +356,7 @@ module RnisAPI_TypesAndValues { } with { variant "JSON: as number" } - type record of HoStatus HoStatus_list; + type set of HoStatus HoStatus_list; /** * @desc Subscription to RAB establishment notifications from Radio Network Information Service @@ -591,7 +591,7 @@ module RnisAPI_TypesAndValues { } with { variant "JSON: as number" } - type record of EventType_ EventType; + type set of EventType_ EventType; /** * @desc List of filtering criteria for the subscription @@ -629,7 +629,7 @@ module RnisAPI_TypesAndValues { LinkType href, Json.String subscriptionType } - type record of Subscription_ Subscription; + type set of Subscription_ Subscription; /** * @desc List of links related to currently existing subscriptions for the service consumer @@ -864,7 +864,7 @@ module RnisAPI_TypesAndValues { Json.UInt8 rsrqEx optional, Json.UInt8 sinr optional } - type record of EutraNeighbourCellMeasInfo_ EutraNeighbourCellMeasInfo; + type set of EutraNeighbourCellMeasInfo_ EutraNeighbourCellMeasInfo; /** * @desc This parameter can be repeated to contain information of all the carriers assign for Carrier Aggregation @@ -896,7 +896,7 @@ module RnisAPI_TypesAndValues { Json.UInt8 rsrqNeiEx optional, Json.UInt8 sinrNei optional } - type record of CarrierAggregationMeasInfo_ CarrierAggregationMeasInfo; + type set of CarrierAggregationMeasInfo_ CarrierAggregationMeasInfo; /** * @desc 5G New Radio secondary serving cells measurement information @@ -910,7 +910,7 @@ module RnisAPI_TypesAndValues { NrSCs nrSCs, NrBNCs nrBNCs optional } - type record of NewRadioMeasInfo_ NewRadioMeasInfo; + type set of NewRadioMeasInfo_ NewRadioMeasInfo; /** * @desc Measurement quantities concerning the 5G NR neighbours @@ -928,7 +928,7 @@ module RnisAPI_TypesAndValues { Json.UInt8 nrNCellRssi optional, RsIndexResults rsIndexResults optional } - type record of NewRadioMeasNeiInfo_ NewRadioMeasNeiInfo; + type set of NewRadioMeasNeiInfo_ NewRadioMeasNeiInfo; /** * @desc 5G NR neighbour cell info @@ -940,7 +940,7 @@ module RnisAPI_TypesAndValues { Plmn_list nrNCellPlmn, NrCellId nrNCellGId } - type record of NrNCellInfo_ NrNCellInfo; + type set of NrNCellInfo_ NrNCellInfo; /** * @desc Measurement quantities concerning the secondary serving cells @@ -969,7 +969,7 @@ module RnisAPI_TypesAndValues { Plmn_list nrSCellInfo, NrCellId_list nrSCellPlmn } - type record of NrSCellInfo_ NrSCellInfo; + type set of NrSCellInfo_ NrSCellInfo; /** * @desc Measurement quantities concerning the best neighbours of the secondary serving cells @@ -997,7 +997,7 @@ module RnisAPI_TypesAndValues { Plmn_list nrBNCellPlmn, NrCellId nrBNCellGId } - type record of NrBNCellInfo_ NrBNCellInfo; + type set of NrBNCellInfo_ NrBNCellInfo; /** * @desc This type represents a notification from RNIS with regards to UE Timing Advance measurements @@ -1054,7 +1054,7 @@ module RnisAPI_TypesAndValues { type record SecondaryCellAdd_ { Ecgi ecgi } - type record of SecondaryCellAdd_ SecondaryCellAdd; + type set of SecondaryCellAdd_ SecondaryCellAdd; /** * @desc @@ -1064,7 +1064,7 @@ module RnisAPI_TypesAndValues { type record SecondaryCellRemove_ { Ecgi ecgi } - type record of SecondaryCellRemove_ SecondaryCellRemove; + type set of SecondaryCellRemove_ SecondaryCellRemove; /** * @desc This parameter can be repeated to contain information of all the carriers assign for Carrier Aggregation @@ -1084,7 +1084,7 @@ module RnisAPI_TypesAndValues { Json.UInt8 rsrpNei optional, Json.UInt8 rsrqNei optional } - type record of CarrierAggregationMeasInfo_CaReconfNotification_ CarrierAggregationMeasInfo_CaReconfNotification; + type set of CarrierAggregationMeasInfo_CaReconfNotification_ CarrierAggregationMeasInfo_CaReconfNotification; /** * @desc This type represents a notification from RNIS with regards to expiry of the existing subscription @@ -1207,7 +1207,7 @@ module RnisAPI_TypesAndValues { Json.UInt8 rsrq optional, Json.UInt8 sinr optional } - type record of EutraNeighbourCellMeasInfo_NrMeasRepUeNotification_ EutraNeighbourCellMeasInfo_NrMeasRepUeNotification; + type set of EutraNeighbourCellMeasInfo_NrMeasRepUeNotification_ EutraNeighbourCellMeasInfo_NrMeasRepUeNotification; /** * @desc This type represents a notification from RNIS with regards to expiry of the existing subscription @@ -1227,7 +1227,7 @@ module RnisAPI_TypesAndValues { * @see ETSI GS MEC 012 V2.2.1 (2022-02) Table 6.6.2-1: CellId */ type Json.String NrCellId; - type record of NrCellId NrCellId_list; + type set of NrCellId NrCellId_list; /** * @desc Numeric value (0-255) corresponding to specified type of identifier @@ -1280,7 +1280,7 @@ module RnisAPI_TypesAndValues { variant (type_) "name as 'type'"; variant (value_) "name as 'value'"; } - type record of AssociateId_ AssociateId; + type set of AssociateId_ AssociateId; /** * @desc E-UTRAN CelI Global Identifier as defined in 3GPP TS 36.413 @@ -1292,7 +1292,7 @@ module RnisAPI_TypesAndValues { Json.String mcc, Json.String mnc } - type record of Plmn Plmn_list; + type set of Plmn Plmn_list; /** * @desc E-UTRAN CelI Global Identifier as defined in 3GPP TS 36.413 @@ -1304,7 +1304,7 @@ module RnisAPI_TypesAndValues { Plmn plmn, CellId cellId } - type record of Ecgi Ecgi_list; + type set of Ecgi Ecgi_list; /** * @desc New Radio CelI Global Identifier as defined in ETSI TS 138 423 @@ -1316,7 +1316,7 @@ module RnisAPI_TypesAndValues { Plmn plmn, NrCellId nrcellId } - type record of Nrcgi NRcgi_list; + type set of Nrcgi NRcgi_list; /** * @desc Beam level measurement results for a NR cell as defined in ETSI TS 138 331 @@ -1353,7 +1353,7 @@ module RnisAPI_TypesAndValues { UInt8 csiRsIndex, MeasQuantityResultsNr csiRsResults optional } - type record of ResultsPerCsiRsIndex_ ResultsPerCsiRsIndex; + type set of ResultsPerCsiRsIndex_ ResultsPerCsiRsIndex; /** * @desc Collection of UE reported NR measurement quantity results as defined in ETSI TS 138 331 diff --git a/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_TypesAndValues.ttcn b/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_TypesAndValues.ttcn index 52fde89..f9d5380 100644 --- a/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_TypesAndValues.ttcn @@ -29,7 +29,7 @@ module TrafficManagementAPI_TypesAndValues { FixedAllocation fixedAllocation, AllocationDirection allocationDirection } - type record of BwInfo BwInfoList; + type set of BwInfo BwInfoList; /** * @desc Conform to JSON merge patch format and processing rules specified IETF RFC 7396 [8], this type represents the attributes whose value are allowed to be updated with HTTP PATCH method in content format JSON @@ -90,7 +90,7 @@ module TrafficManagementAPI_TypesAndValues { * @desc Session filtering criteria, applicable when requestType is set as SESSION_SPECIFIC_BW_ALLOCATION. Any filtering criteria shall define a single session only. In case multiple sessions match sessionFilter the request shall be rejected * @see ETSI GS MEC 015 V2.2.1 (2022-12) Clause 7.2.2 Type: BwInfo */ - type record of SessionFilterItem SessionFilter; + type set of SessionFilterItem SessionFilter; /** * @desc Session filtering criteria, applicable when requestType is set as SESSION_SPECIFIC_BW_ALLOCATION. Any filtering criteria shall define a single session only. In case multiple sessions match sessionFilter the request shall be rejected * @member sourceIp Source address identity of session (including range) @@ -201,7 +201,7 @@ module TrafficManagementAPI_TypesAndValues { } with { variant "JSON: as number" } - type record of MtsMode MtsModes; + type set of MtsMode MtsModes; /** * @desc The information on access network connection as defined below @@ -215,7 +215,7 @@ module TrafficManagementAPI_TypesAndValues { AccessType accessType, Metered metered } - type record of MtsAccessInfo MtsAccessInfos; + type set of MtsAccessInfo MtsAccessInfos; /** * @desc Unique identifier for the access network connection @@ -280,7 +280,7 @@ module TrafficManagementAPI_TypesAndValues { MtsMode mtsMode, TrafficDirection trafficDirection } - type record of MtsSessionInfo MtsSessionInfos + type set of MtsSessionInfo MtsSessionInfos /** * @desc MTS session instance identifier @@ -308,7 +308,7 @@ module TrafficManagementAPI_TypesAndValues { Dscp dscp optional, Flowlabel flowlabel optional } - type record of FlowFilterItem FlowFilter; + type set of FlowFilterItem FlowFilter; /** * @desc The direction of the requested MTS session supported by the TMS diff --git a/ttcn/LibMec/UEAppInterfaceAPI/ttcn/UEAppInterfaceAPI_TypesAndValues.ttcn b/ttcn/LibMec/UEAppInterfaceAPI/ttcn/UEAppInterfaceAPI_TypesAndValues.ttcn index 3b78af7..3711395 100644 --- a/ttcn/LibMec/UEAppInterfaceAPI/ttcn/UEAppInterfaceAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/UEAppInterfaceAPI/ttcn/UEAppInterfaceAPI_TypesAndValues.ttcn @@ -65,7 +65,7 @@ module UEAppInterfaceAPI_TypesAndValues { /** * @desc User applications available for the UE application. */ - type record of AppInfoList AppInfo; + type set of AppInfoList AppInfo; /** * @desc User applications available for the UE application. diff --git a/ttcn/LibMec/UEidentityAPI/ttcn/UEidentityAPI_TypesAndValues.ttcn b/ttcn/LibMec/UEidentityAPI/ttcn/UEidentityAPI_TypesAndValues.ttcn index 5b1af3a..e7fe2cd 100644 --- a/ttcn/LibMec/UEidentityAPI/ttcn/UEidentityAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/UEidentityAPI/ttcn/UEidentityAPI_TypesAndValues.ttcn @@ -53,7 +53,7 @@ module UEidentityAPI_TypesAndValues { * @desc 1 to N tags presented by a ME Application instance to a ME Platform * @see ETSI GS MEC 014 V3.1.1 (2023-06) Table 6.2.2-1: Definition of type UeIdentityTagInfo */ - type record of UeIdentityTagItem UeIdentityTags; + type set of UeIdentityTagItem UeIdentityTags; } with { encode "JSON" diff --git a/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_TypesAndValues.ttcn b/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_TypesAndValues.ttcn index c881fa0..450308e 100644 --- a/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_TypesAndValues.ttcn @@ -39,7 +39,7 @@ module V2XInformationServiceAPI_TypesAndValues { V2xApplicationServer v2xApplicationServer, UuUniNeighbourCellInfoList neighbourCellInfo optional } - type record of ProInfoUuUnicast ProInfoUuUnicastList; + type set of ProInfoUuUnicast ProInfoUuUnicastList; /** * @desc Provisioning information required for V2X communication over Uu MBMS @@ -63,7 +63,7 @@ module V2XInformationServiceAPI_TypesAndValues { UuMbmsNeighbourCellInfoList neighbourCellInfo optional, V2xServerUsd v2xServerUsd } - type record of ProInfoUuMbms ProInfoUuMbmsList; + type set of ProInfoUuMbms ProInfoUuMbmsList; /** * @desc Provisioning information required for V2X communication over PC5 @@ -88,7 +88,7 @@ module V2XInformationServiceAPI_TypesAndValues { Json.String dstLayer2Id, Pc5NeighbourCellInfoList neighbourCellInfo optional } - type record of Pc5ProvisioningInfoProInfoPc5 Pc5ProvisioningInfoProInfoPc5List; + type set of Pc5ProvisioningInfoProInfoPc5 Pc5ProvisioningInfoProInfoPc5List; /** * @desc This type represents the information of one or more V2X Message Distribution Servers that is exchanged between the VIS and a service consumer (e.g. a MEC application) to enable a direct interaction among the service consumer and one or multiple V2X Message Distribution Servers @@ -150,7 +150,7 @@ module V2XInformationServiceAPI_TypesAndValues { type record Route { RouteInfoList routeinfo } - type record of Route Routes; + type set of Route Routes; /** * @desc Information relating to a specific route @@ -162,7 +162,7 @@ module V2XInformationServiceAPI_TypesAndValues { LocationInfo location, TimeStamp time optional } - type record of RouteInfo RouteInfoList; + type set of RouteInfo RouteInfoList; /** * @desc Predicted QoS at the related time and vehicular UE location @@ -181,7 +181,7 @@ module V2XInformationServiceAPI_TypesAndValues { type record Stream { QosKpiList qosKpi } - type record of Stream StreamList; + type set of Stream StreamList; /** * @desc This structure contains the prediction for a specific QoS KPI related to a given data stream @@ -195,7 +195,7 @@ module V2XInformationServiceAPI_TypesAndValues { Json.String kpiValue, Json.String confidence optional } - type record of QosKpi QosKpiList; + type set of QosKpi QosKpiList; /** * @desc V2X message that a service consumer publishes to VIS @@ -415,7 +415,7 @@ module V2XInformationServiceAPI_TypesAndValues { Json.AnyURI href, Json.String subscriptionType } - type record of Subscription_ SubscriptionList; + type set of Subscription_ SubscriptionList; /** * @desc Notification from VIS with regards to the provisioning information changes for V2X communication over Uu unicast @@ -521,7 +521,7 @@ module V2XInformationServiceAPI_TypesAndValues { Ecgi ecgi, LocationInfoGeoArea geoArea optional } - type record of LocationInfo LocationInfoList; + type set of LocationInfo LocationInfoList; /** * @desc Information of a geographical area @@ -640,7 +640,7 @@ module V2XInformationServiceAPI_TypesAndValues { FddInfo fddInfo, TddInfo tddInfo } - type record of UuUniNeighbourCellInfo UuUniNeighbourCellInfoList; + type set of UuUniNeighbourCellInfo UuUniNeighbourCellInfoList; /** * @desc Temporary Mobile Group Identity (TMGI), which is used within MBMS to uniquely identify Multicast and Broadcast bearer services @@ -668,7 +668,7 @@ module V2XInformationServiceAPI_TypesAndValues { Json.String mnc } - type record of Json.String ServiceAreaIdentifier; + type set of Json.String ServiceAreaIdentifier; /** * @desc SDP with IP multicast address and port number used for V2X communication via MBMS @@ -680,7 +680,7 @@ module V2XInformationServiceAPI_TypesAndValues { Json.String ipMulticastAddress, Json.String portNumber } - type record of SdpInfo SdpInfoList; + type set of SdpInfo SdpInfoList; /** * @desc Neighbour cell information in a visiting PLMN that supports V2X communication over Uu MBMS @@ -700,8 +700,8 @@ module V2XInformationServiceAPI_TypesAndValues { TddInfo tddInfo, MbmsServiceAreaIdentityList mbmsServiceAreaIdentity } - type record of Json.String MbmsServiceAreaIdentityList; - type record of UuMbmsNeighbourCellInfo UuMbmsNeighbourCellInfoList; + type set of Json.String MbmsServiceAreaIdentityList; + type set of UuMbmsNeighbourCellInfo UuMbmsNeighbourCellInfoList; /** * @desc Location information @@ -715,7 +715,7 @@ module V2XInformationServiceAPI_TypesAndValues { Ecgi ecgi, SystemInformationBlockType21 siV2xConfig } - type record of Pc5NeighbourCellInfo Pc5NeighbourCellInfoList; + type set of Pc5NeighbourCellInfo Pc5NeighbourCellInfoList; type Json.String SystemInformationBlockType21; // FIXME Not defined anywhere in ETSI GS MEC 030 V3.1.1 and previous versions @@ -766,7 +766,7 @@ module V2XInformationServiceAPI_TypesAndValues { // } with { // variant "JSON: as number" } - type record of MsgType MsgTypeList; + type set of MsgType MsgTypeList; /** * @desc This type represents the filter criteria that can be used when performing a subscription to notification of V2X messages @@ -782,7 +782,7 @@ module V2XInformationServiceAPI_TypesAndValues { MsgProtocolVersionList msgProtocolVersion optional, LocationInfoList locationInfo optional } - type record of Json.Integer MsgProtocolVersionList; + type set of Json.Integer MsgProtocolVersionList; /** * @desc This type represents the information about a V2X Message Distribution Server that can be exchanged between a service consumer (e.g. a MEC application) and the VIS @@ -794,7 +794,7 @@ module V2XInformationServiceAPI_TypesAndValues { InfoProtocol infoProtocol, InfoConnection infoConnection optional } - type record of V2xMsgDistributionServer V2xMsgDistributionServers; + type set of V2xMsgDistributionServer V2xMsgDistributionServers; /** * @desc Specifics of the application layer protocol of V2X Message Distribution Server @@ -820,7 +820,7 @@ module V2XInformationServiceAPI_TypesAndValues { } with { variant "JSON: as number" } - type record of MsgProtocol MsgProtocols + type set of MsgProtocol MsgProtocols /** * @desc Connection information of the V2X Message Distribution Server the service consumer can use for direct connection diff --git a/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_TypesAndValues.ttcn b/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_TypesAndValues.ttcn index e5d677e..2479f35 100644 --- a/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_TypesAndValues.ttcn @@ -39,7 +39,7 @@ module WlanInformationAPI_TypesAndValues { OBssLoad oBssLoad optional, ApLocation apLocation optional } - type record of ApInfo ApInfoList; + type set of ApInfo ApInfoList; /** * @desc Information on wireless stations available from the WLAN Access Information Service @@ -68,7 +68,7 @@ module WlanInformationAPI_TypesAndValues { ChannelLoad channelLoad optional } - type record of StaInfo StaInfoList; + type set of StaInfo StaInfoList; /** * @desc Different measurements configuration available from the WLAN Access Information Service @@ -147,7 +147,7 @@ module WlanInformationAPI_TypesAndValues { } with { variant (links) "name as '_links'"; } - type record of AssocStaSubscription AssocStaSubscriptionList; + type set of AssocStaSubscription AssocStaSubscriptionList; /** * @desc Set for trigger-based event notification reporting @@ -188,7 +188,7 @@ module WlanInformationAPI_TypesAndValues { } with { variant (links) "name as '_links'"; } - type record of StaDataRateSubscription StaDataRateSubscriptionList; + type set of StaDataRateSubscription StaDataRateSubscriptionList; /** * @desc Set for trigger-based event notification reporting @@ -229,7 +229,7 @@ module WlanInformationAPI_TypesAndValues { Json.AnyURI href, Json.String subscriptionType } - type record of Subscription_ Subscription; + type set of Subscription_ Subscription; /** * @desc This type represents a subscription to get measurement reports (Channel Load, Beacon Request, STA Statistics, or Neighbor Report) from targeted client station(s) @@ -354,8 +354,8 @@ module WlanInformationAPI_TypesAndValues { SsidList ssid optional, IpAddressList ipAddress optional } - type record of Json.String SsidList; - type record of Json.String IpAddressList; + type set of Json.String SsidList; + type set of Json.String IpAddressList; /** * @desc WLAN capabilities of the Access Point @@ -456,7 +456,7 @@ module WlanInformationAPI_TypesAndValues { Json.UInt8 phyType, Json.UInt8 bssTransitionCandidatePreference optional } - type record of NeighborReportItem NeighborReport; + type set of NeighborReportItem NeighborReport; /** * @desc Identifiers determining a specific client station @@ -472,7 +472,7 @@ module WlanInformationAPI_TypesAndValues { Json.String aid optional, IpAddressList ipAddress optional } - type record of StaIdentity StaIdentityList; + type set of StaIdentity StaIdentityList; /** * @desc Information for the Access Point that the client station is associated to @@ -705,7 +705,7 @@ module WlanInformationAPI_TypesAndValues { Json.UInteger staLastDataDownlinkRate optional, Json.UInteger staLastDataUplinkRate optional } - type record of StaDataRate StaDataRateList; + type set of StaDataRate StaDataRateList; /** * @desc Type of link @@ -795,7 +795,7 @@ module WlanInformationAPI_TypesAndValues { Json.UInt8 antennaId optional, Json.UInteger parentTsf optional } - type record of BeaconReport_ BeaconReport; + type set of BeaconReport_ BeaconReport; /** * @desc This type represents the Beacon Reporting Condition configuration @@ -1029,7 +1029,7 @@ module WlanInformationAPI_TypesAndValues { Json.UInt8 measurementDuration, Json.UInt8 channelLoad } - type record of ChannelLoad_ ChannelLoad; + type set of ChannelLoad_ ChannelLoad; /** * @desc The load of a Overlapping BSS -- GitLab From ad8158b593965be5bf80d8d2dea4e02cc2720c27 Mon Sep 17 00:00:00 2001 From: garciay Date: Thu, 16 May 2024 15:05:41 +0200 Subject: [PATCH 81/99] Bug fixed in MEC 013 for user info --- .../AtsMec_Location_Sandbox.cf_ | 52 +++++++-- .../AtsMec_LocationAPI_TestCases.ttcn | 101 +++++++++++++----- .../AtsMec_LocationAPI_TestControl.ttcn | 3 +- .../ttcn/LocationAPI_Templates.ttcn | 88 +++++++++++---- .../ttcn/LocationAPI_TypesAndValues.ttcn | 29 +++-- 5 files changed, 199 insertions(+), 74 deletions(-) diff --git a/etc/AtsMec_Location/AtsMec_Location_Sandbox.cf_ b/etc/AtsMec_Location/AtsMec_Location_Sandbox.cf_ index 27f9263..1878802 100644 --- a/etc/AtsMec_Location/AtsMec_Location_Sandbox.cf_ +++ b/etc/AtsMec_Location/AtsMec_Location_Sandbox.cf_ @@ -20,17 +20,18 @@ LibMec_Pics.PICS_MEC_PLAT := true # Mec-013 LocationAPI LocationAPI_Pics.PICS_LOCATION_API_SUPPORTED := true -LocationAPI_Pixits.PX_ZONE_ID := "zone01" -LocationAPI_Pixits.PX_ACCESS_POINT_ID := "4g-macro-cell-2" +LocationAPI_Pixits.PX_ZONE_ID := "zone03" +LocationAPI_Pixits.PX_ACCESS_POINT_ID := "4g-macro-cell-6" LocationAPI_Pixits.PX_USER := "4005C0A640001" -LocationAPI_Pixits.PX_IP_ADDRESS := "10.100.0.1" +LocationAPI_Pixits.PX_IP_ADDRESS := "10.1.0.1" +LocationAPI_Pixits.PX_IP_ADDRESS_1 := "10.100.0.1" LocationAPI_Pixits.PX_CLIENT_ID := "0123" LocationAPI_Pixits.PX_SUBSCRIPTION_ID := "1" LocationAPI_Pixits.PX_CALLBACK_REF_URL := "http://yanngarcia.ddns.net/location/v3/notif/1" LocationAPI_Pixits.PX_AREA_SUB_CALLBACK_URI := "http://yanngarcia.ddns.net/location/v3/notif/1" LocationAPI_Pixits.PX_UE_DIST_SUB_CALLBACK_URI := "http://yanngarcia.ddns.net/location/v3/notif/1" -LocationAPI_Pixits.PX_UE_COORD_LAT := 43.729538 -LocationAPI_Pixits.PX_UE_COORD_LONG := 7.413819 +LocationAPI_Pixits.PX_UE_COORD_LAT := 43.736515 +LocationAPI_Pixits.PX_UE_COORD_LONG := 7.421802 [LOGGING] # In this section you can specify the name of the log file and the classes of events @@ -76,6 +77,26 @@ system.httpPort_notif.params := "HTTP(codecs=json:json_codec_mec013)/TCP(debug=1 # In this section you can specify what parts of your test suite you want to execute. #AtsMec_TestControl.control +# Check that the IUT responds with the information pertaining to one or more UEs in a particular location when queried by a MEC Application - No Filter +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEINFLOOK_001_OK_01 +# Check that the IUT responds with the information pertaining to one or more UEs in a particular location when queried by a MEC Application - Filter with one address +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEINFLOOK_001_OK_02 +# Check that the IUT responds with the information pertaining to one or more UEs in a particular location when queried by a MEC Application - Filter with several addresses +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEINFLOOK_001_OK_03 +# Check that the IUT responds with the information pertaining to one or more UEs in a particular location when queried by a MEC Application - Filter with several zoneIds +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEINFLOOK_001_OK_04 +# 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 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 the subscription when queried by a MEC Application - UE location Event @@ -85,13 +106,24 @@ system.httpPort_notif.params := "HTTP(codecs=json:json_codec_mec013)/TCP(debug=1 # Check that the IUT responds with the subscription when queried by a MEC Application - UE location Event and address #AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UELOCLOOK_002_OK_03 # Check that the IUT responds with an error when inconsistent request was sent by a MEC Application - Invalid filter -AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UELOCLOOK_002_BR +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UELOCLOOK_002_BR +# Check that the IUT responds with an error when inconsistent request was sent by a MEC Application +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UELOCLOOK_002_NF_01 +# Check that the IUT responds with an error when inconsistent request was sent by a MEC Application - Using filter +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UELOCLOOK_002_NF_02 +# Check that the IUT responds with the subscription when queried by a MEC Application - UE location Event +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UELOCLOOK_003_OK_01 +# Check that the IUT responds with the subscription when queried by a MEC Application - UE location Periodoc +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UELOCLOOK_003_OK_02 +# Check that the IUT responds with an error when the non existing subscription is queried by a MEC Application +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UELOCLOOK_003_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_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 subscription by a MEC Application to notifications user location event #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 - Neither callbackReference nor websockNotifConfig provided diff --git a/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestCases.ttcn b/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestCases.ttcn index 3c06b8a..2799d7d 100644 --- a/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestCases.ttcn +++ b/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestCases.ttcn @@ -1607,8 +1607,10 @@ module AtsMec_LocationAPI_TestCases { mw_http_response_ok( mw_http_message_body_json( mw_body_json_user_list( - mw_user_list(-, ?) - ))))) { + mw_user_list( + pattern "http?+" & PICS_ROOT_API & PX_ME_APP_Q_USERS_LIST_URI, + ? + )))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a UserList ***"); @@ -1662,13 +1664,15 @@ module AtsMec_LocationAPI_TestCases { mw_http_message_body_json( mw_body_json_user_list( mw_user_list( - { - *, - mw_user_info(PX_IP_ADDRESS), - * - }, - ?) - ))))) { + pattern "http?+" & PICS_ROOT_API & PX_ME_APP_Q_USERS_LIST_URI, + superset( + mw_user_info( + PX_IP_ADDRESS, + PX_ACCESS_POINT_ID, + PX_ZONE_ID, + -, + pattern "http?+" & PICS_ROOT_API & PX_ME_APP_Q_USERS_LIST_URI & "?address=" & PX_IP_ADDRESS + )))))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a UserList ***"); @@ -1721,15 +1725,12 @@ module AtsMec_LocationAPI_TestCases { mw_http_response_ok( mw_http_message_body_json( mw_body_json_user_list( - mw_user_list( // FIXME Use superset? - { - *, - mw_user_info(PX_IP_ADDRESS), - mw_user_info(PX_IP_ADDRESS_1), - * - }, - ?) - ))))) { + mw_user_list( + pattern "http?+" & PICS_ROOT_API & PX_ME_APP_Q_USERS_LIST_URI, + superset( + mw_user_info(PX_IP_ADDRESS), + mw_user_info(PX_IP_ADDRESS_1) + ))))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a UserList ***"); @@ -1783,6 +1784,7 @@ module AtsMec_LocationAPI_TestCases { mw_http_message_body_json( mw_body_json_user_list( mw_user_list( // FIXME Use superset? + -, { *, mw_user_info(-, -, PX_ZONE_ID), @@ -2241,7 +2243,58 @@ module AtsMec_LocationAPI_TestCases { /** * @desc Check that the IUT responds with an error when inconsistent request was sent by a MEC Application */ - testcase TC_MEC_MEC013_SRV_UELOCLOOK_002_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UELOCLOOK_002_NF_01() 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_LOC_API_USERS_SUB_URI & "/" & PX_NON_EXISTENT_SUBSCRIPTION_ID, + 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_MEC013_SRV_UELOCLOOK_002_NF_01 + + /** + * @desc Check that the IUT responds with an error when inconsistent request was sent by a MEC Application - Using filter + */ + testcase TC_MEC_MEC013_SRV_UELOCLOOK_002_NF_02() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var UserLocationEventSubscription v_user_location_event_subscription; @@ -2268,7 +2321,7 @@ module AtsMec_LocationAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - PICS_ROOT_API & PX_LOC_API_USERS_SUB_URI & "?event&adress=" & PX_USER_2, + PICS_ROOT_API & PX_LOC_API_USERS_SUB_URI & "?event&address=" & PX_USER_2, v_headers ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -2295,7 +2348,7 @@ module AtsMec_LocationAPI_TestCases { f_delete_user_location_event_subscription(v_user_location_event_subscription_id); f_delete_user_location_periodic_subscription(v_user_location_periodic_subscription_id); f_cf_01_http_down(); - } // End of testcase TC_MEC_MEC013_SRV_UELOCLOOK_002_NF + } // End of testcase TC_MEC_MEC013_SRV_UELOCLOOK_002_NF_02 /** * @desc Check that the IUT responds with the subscription when queried by a MEC Application - UE location Event @@ -2341,7 +2394,7 @@ module AtsMec_LocationAPI_TestCases { mw_http_message_body_json( mw_body_json_user_location_event_subscription( mw_user_location_event_subscription( - v_user_location_event_subscription.links_.self_.href + v_user_location_event_subscription.callbackReference )))))) { tc_ac.stop; @@ -2404,7 +2457,7 @@ module AtsMec_LocationAPI_TestCases { mw_http_message_body_json( mw_body_json_user_location_periodic_subscription( mw_user_location_periodic_subscription( - v_user_location_periodic_subscription.links_.self_.href + v_user_location_periodic_subscription.callbackReference )))))) { tc_ac.stop; @@ -2424,7 +2477,7 @@ module AtsMec_LocationAPI_TestCases { } // End of testcase TC_MEC_MEC013_SRV_UELOCLOOK_003_OK_02 /** - * @desc Check that the IUT responds with the subscription when queried by a MEC Application - UE location Event + * @desc Check that the IUT responds with an error when the non existing subscription is queried by a MEC Application */ testcase TC_MEC_MEC013_SRV_UELOCLOOK_003_NF() runs on HttpComponent system HttpTestAdapter { // Local variables diff --git a/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestControl.ttcn b/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestControl.ttcn index 81b4e68..4b8c31f 100644 --- a/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestControl.ttcn +++ b/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestControl.ttcn @@ -55,7 +55,8 @@ module AtsMec_LocationAPI_TestControl { execute(TC_MEC_MEC013_SRV_UELOCLOOK_002_OK_02()); execute(TC_MEC_MEC013_SRV_UELOCLOOK_002_OK_03()); execute(TC_MEC_MEC013_SRV_UELOCLOOK_002_BR()); - execute(TC_MEC_MEC013_SRV_UELOCLOOK_002_NF()); + execute(TC_MEC_MEC013_SRV_UELOCLOOK_002_NF_01()); + execute(TC_MEC_MEC013_SRV_UELOCLOOK_002_NF_02()); execute(TC_MEC_MEC013_SRV_UELOCLOOK_003_OK_01()); execute(TC_MEC_MEC013_SRV_UELOCLOOK_003_OK_02()); execute(TC_MEC_MEC013_SRV_UELOCLOOK_003_NF()); diff --git a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Templates.ttcn b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Templates.ttcn index 319edbc..fc292a0 100644 --- a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Templates.ttcn +++ b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Templates.ttcn @@ -20,15 +20,15 @@ module LocationAPI_Templates { in TimeStamp p_timestamp, in ResourceURL p_resource_url := PX_RESOURCE_URL ) := { - address_ := p_address, - accessPointId := p_access_point_id, - zoneId := p_zone_id, - resourceURL := p_resource_url, - timestamp_ := p_timestamp, - locationInfo := omit, - civicInfo := omit, - contextLocationInfo := omit, - ancillaryInfo := omit + address_ := p_address, + accessPointId := p_access_point_id, + zoneId := p_zone_id, + resourceURL := p_resource_url, + timestamp_ := p_timestamp, + locationInfo := omit, + civicInfo := omit, + ancillaryInfo := omit, + relativeLocationInfo := omit } // End of template m_user_info template (present) UserInfo mw_user_info( @@ -38,15 +38,15 @@ module LocationAPI_Templates { template (present) TimeStamp p_timestamp := ?, template (present) ResourceURL p_resource_url := ? ) := { - address_ := p_address, - accessPointId := p_access_point_id, - zoneId := p_zone_id, - resourceURL := p_resource_url, - timestamp_ := p_timestamp, - locationInfo := *, - civicInfo := *, - contextLocationInfo := *, - ancillaryInfo := * + address_ := p_address, + accessPointId := p_access_point_id, + zoneId := p_zone_id, + resourceURL := p_resource_url, + timestamp_ := p_timestamp, + locationInfo := *, + civicInfo := *, + ancillaryInfo := *, + relativeLocationInfo := * } // End of template mw_user_info template (omit) UserList m_user_list( @@ -57,10 +57,10 @@ module LocationAPI_Templates { resourceURL := p_resource_url } // End of template m_user_list - template UserList mw_user_list( - template UserInfos p_userInfo := *, - template (present) ResourceURL p_resource_url := ? - ) := { + template (present) UserList mw_user_list( + template (present) ResourceURL p_resource_url := ?, + template UserInfos p_userInfo := * + ) := { user := p_userInfo, resourceURL := p_resource_url } // End of template mw_user_list @@ -110,6 +110,50 @@ module LocationAPI_Templates { velocity := * } // End of template mw_location_info + template (omit) RelativeLocationInfo m_relative_location_info( + in template (value) MapInfo p_mapInfo, + in Json.Number p_X, + in Json.Number p_Y, + in template (omit) Json.Number p_Z := omit + ) := { + mapInfo := p_mapInfo, + X := p_Y, + Y := p_Y, + Z := p_Z + } // End of template m_relative_location_info + + template (present) RelativeLocationInfo mw_relative_location_info( + template (present) MapInfo p_mapInfo := ?, + template (present) Json.Number p_X := ?, + template (present) Json.Number p_Y := ?, + template Json.Number p_Z := * + ) := { + mapInfo := p_mapInfo, + X := p_Y, + Y := p_Y, + Z := p_Z + } // End of template mw_relative_location_info + + template (omit) MapInfoOrigin m_map_info_origin( + in Json.Number p_latitude, + in Json.Number p_longitude, + in template (omit) Json.Number p_altitude := omit + ) :={ + latitude := p_latitude, + longitude := p_longitude, + altitude := p_altitude + } // End of template m_map_info_origin + + template (present) MapInfoOrigin mw_map_info_origin( + template (present) Json.Number p_latitude := ?, + template (present) Json.Number p_longitude := ?, + template Json.Number p_altitude := * + ) :={ + latitude := p_latitude, + longitude := p_longitude, + altitude := p_altitude + } // End of template mw_map_info_origin + template (value) ZoneInfo m_zone_info( in ZoneId p_zone_id := PX_ZONE_ID, in NumberOfAccessPoints p_number_of_access_points := PX_NB_ACCESS_POINTS, diff --git a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn index 8df8f56..e54bc89 100644 --- a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn @@ -319,11 +319,6 @@ module LocationAPI_TypesAndValues { UNKNOWN } - /** - * @desc Contextual information of a user location (e.g., aisle, floor, room number, etc.) - */ - type Json.String ContextLocationInfo; - /** * @desc Zone ID */ @@ -537,7 +532,7 @@ module LocationAPI_TypesAndValues { Json.String POM optional, Json.String usageRules optional, Json.String method optional, - Json.String providedBy + Json.String providedBy optional } /** @@ -554,15 +549,15 @@ module LocationAPI_TypesAndValues { * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.2.2 Type: UserInfo */ type record UserInfo { - Address address_, - AccessPointId accessPointId, - ZoneId zoneId, - ResourceURL resourceURL optional, - TimeStamp timestamp_, - LocationInfo locationInfo optional, - CivicAddress civicInfo optional, - ContextLocationInfo contextLocationInfo optional, - AncillaryInfo ancillaryInfo optional + Address address_, + AccessPointId accessPointId, + ZoneId zoneId, + ResourceURL resourceURL optional, + TimeStamp timestamp_, + LocationInfo locationInfo optional, + CivicAddress civicInfo optional, + AncillaryInfo ancillaryInfo optional, + RelativeLocationInfo relativeLocationInfo optional } with { variant (address_) "name as 'address'"; variant (timestamp_) "name as 'timestamp'"; @@ -591,8 +586,8 @@ module LocationAPI_TypesAndValues { * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.2.4 */ type record MapInfoOrigin { - Latitude latitude, - Longitude longitude, + Json.Number latitude, + Json.Number longitude, Json.Number altitude optional } -- GitLab From 14bc6d3d3cd1799c26d323092f48ca1352466233 Mon Sep 17 00:00:00 2001 From: garciay Date: Fri, 17 May 2024 10:56:50 +0200 Subject: [PATCH 82/99] Bug fixed un MEC 013 Subscription/notification --- ccsrc/Protocols/Json/json_codec_mec013.cc | 101 ++++++-- .../AtsMec_Location_Sandbox.cf_ | 107 +++------ gs032p3-ttcn-test-suite.code-workspace | 17 +- .../AtsMec_LocationAPI_TestCases.ttcn | 224 ++++++++++-------- .../ttcn/LocationAPI_Functions.ttcn | 29 ++- .../LocationAPI/ttcn/LocationAPI_Pixits.ttcn | 6 + .../ttcn/LocationAPI_Templates.ttcn | 14 +- .../ttcn/LocationAPI_TypesAndValues.ttcn | 12 +- 8 files changed, 295 insertions(+), 215 deletions(-) diff --git a/ccsrc/Protocols/Json/json_codec_mec013.cc b/ccsrc/Protocols/Json/json_codec_mec013.cc index 6834392..7743c0f 100644 --- a/ccsrc/Protocols/Json/json_codec_mec013.cc +++ b/ccsrc/Protocols/Json/json_codec_mec013.cc @@ -90,10 +90,29 @@ int json_codec_mec013::decode (const OCTETSTRING& p_data, LibHttp__JsonMessageBo 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); + // Replace '5G NR' ConnectionType enumerated by FiveG_NR + if (str.find("5G NR") != std::string::npos) { + idx_begin = 0; + std::string search("5G NR"); + std::string replace("FiveG_NR"); + //loggers::get_instance().log("xml_codec::patch_encode_agent_derivations: Apply TITAN workaround: %s --> %s", search.c_str(), replace.c_str()); + while ((idx_begin = str.find(search, idx_begin)) != std::string::npos) { + str.replace(idx_begin, search.length(), replace); + idx_begin += replace.length(); + } // End of 'while' statement + } 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; + } else if (it->second.find("\"notificationSubscriptionList\"") != 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::NotificationSubscriptionList notification_subscription_list; + notification_subscription_list.decode(LocationAPI__TypesAndValues::NotificationSubscriptionList_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); + msg.notificationSubscriptionList() = notification_subscription_list; } else if (it->second.find("\"userLocationEventSubscription\"") != std::string::npos) { int idx_begin = it->second.find(":"); int idx_end = it->second.rfind("}") - 1; // Remove the last '}' @@ -102,14 +121,14 @@ int json_codec_mec013::decode (const OCTETSTRING& p_data, LibHttp__JsonMessageBo LocationAPI__TypesAndValues::UserLocationEventSubscription user_location_event_subscription; user_location_event_subscription.decode(LocationAPI__TypesAndValues::UserLocationEventSubscription_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.userLocationEventSubscription() = user_location_event_subscription; - } else if (it->second.find("\"notificationSubscriptionList\"") != std::string::npos) { + } else if (it->second.find("\"userLocationEventNotification\"") != 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::NotificationSubscriptionList notification_subscription_list; - notification_subscription_list.decode(LocationAPI__TypesAndValues::NotificationSubscriptionList_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); - msg.notificationSubscriptionList() = notification_subscription_list; + LocationAPI__TypesAndValues::UserLocationEventNotification user_location_event_notification; + user_location_event_notification.decode(LocationAPI__TypesAndValues::UserLocationEventNotification_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); + msg.userLocationEventNotification() = user_location_event_notification; } else if (it->second.find("\"userLocationPeriodicSubscription\"") != std::string::npos) { int idx_begin = it->second.find(":"); int idx_end = it->second.rfind("}") - 1; // Remove the last '}' @@ -118,6 +137,30 @@ int json_codec_mec013::decode (const OCTETSTRING& p_data, LibHttp__JsonMessageBo LocationAPI__TypesAndValues::UserLocationPeriodicSubscription user_location_periodic_subscription; user_location_periodic_subscription.decode(LocationAPI__TypesAndValues::UserLocationPeriodicSubscription_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.userLocationPeriodicSubscription() = user_location_periodic_subscription; + } else if (it->second.find("\"userLocationPeriodicNotification\"") != 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::UserLocationPeriodicNotification user_location_periodic_notification; + user_location_periodic_notification.decode(LocationAPI__TypesAndValues::UserLocationPeriodicNotification_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); + msg.userLocationPeriodicNotification() = user_location_periodic_notification; + } else if (it->second.find("\"zoneStatusSubscription\"") != 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::ZoneStatusSubscription zone_status_subscription; + zone_status_subscription.decode(LocationAPI__TypesAndValues::ZoneStatusSubscription_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); + msg.zoneStatusSubscription() = zone_status_subscription; + } else if (it->second.find("\"zoneStatusNotification\"") != 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::ZoneStatusNotification zone_status_notification; + zone_status_notification.decode(LocationAPI__TypesAndValues::ZoneStatusNotification_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); + msg.zoneStatusNotification() = zone_status_notification; } else if (it->second.find("\"zoneLocationEventSubscription\"") != std::string::npos) { int idx_begin = it->second.find(":"); int idx_end = it->second.rfind("}") - 1; // Remove the last '}' @@ -126,42 +169,52 @@ int json_codec_mec013::decode (const OCTETSTRING& p_data, LibHttp__JsonMessageBo LocationAPI__TypesAndValues::ZoneLocationEventSubscription zone_location_event_subscription; zone_location_event_subscription.decode(LocationAPI__TypesAndValues::ZoneLocationEventSubscription_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.zoneLocationEventSubscription() = zone_location_event_subscription; - } else if (it->second.find("\"userLocationPeriodicSubscription\"") != std::string::npos) { + } else if (it->second.find("\"zoneLocationEventNotification\"") != 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::UserLocationPeriodicSubscription periodic_tracking_subscription; - periodic_tracking_subscription.decode(LocationAPI__TypesAndValues::UserLocationPeriodicSubscription_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); - msg.userLocationPeriodicSubscription() = periodic_tracking_subscription; - } else if (it->second.find("\"accessPointId\"") != std::string::npos) { - LocationAPI__TypesAndValues::UserInfo user_info; - user_info.decode(LocationAPI__TypesAndValues::UserInfo_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); - msg.userInfo() = user_info; - } else if (it->second.find("\"terminalDistance\"") != std::string::npos) { + LocationAPI__TypesAndValues::ZoneLocationEventNotification zone_location_event_notification; + zone_location_event_notification.decode(LocationAPI__TypesAndValues::ZoneLocationEventNotification_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); + msg.zoneLocationEventNotification() = zone_location_event_notification; + } else if (it->second.find("\"userAreaSubscription\"") != 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::TerminalDistance terminal_distance; - 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) { + LocationAPI__TypesAndValues::UserAreaSubscription user_area_subscription; + user_area_subscription.decode(LocationAPI__TypesAndValues::UserAreaSubscription_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); + msg.userAreaSubscription() = user_area_subscription; + } else if (it->second.find("\"userAreaNotification\"") != 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::UserAreaSubscription notif; - notif.decode(LocationAPI__TypesAndValues::UserAreaSubscription_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); - msg.userAreaSubscription() = notif; - } else if (it->second.find("\"userDistanceSubscription\"") != std::string::npos) { + LocationAPI__TypesAndValues::UserAreaNotification user_area_notification; + user_area_notification.decode(LocationAPI__TypesAndValues::UserAreaNotification_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); + msg.userAreaNotification() = user_area_notification; + } else if (it->second.find("\"accessPointId\"") != std::string::npos) { + if (it->second.find("\"address\"") != std::string::npos) { + LocationAPI__TypesAndValues::UserInfo user_info; + user_info.decode(LocationAPI__TypesAndValues::UserInfo_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); + msg.userInfo() = user_info; + } else { + 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::AccessPointInfo access_point_info; + access_point_info.decode(LocationAPI__TypesAndValues::AccessPointInfo_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); + msg.accessPointInfo() = access_point_info; + } + } else if (it->second.find("\"terminalDistance\"") != 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::UserDistanceSubscription notif; - notif.decode(LocationAPI__TypesAndValues::UserDistanceSubscription_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); - msg.userDistanceSubscription() = notif; + LocationAPI__TypesAndValues::TerminalDistance terminal_distance; + terminal_distance.decode(LocationAPI__TypesAndValues::TerminalDistance_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); + msg.terminalDistance() = terminal_distance; } else if (it->second.find("\"detail\"") != std::string::npos) { LibMec__TypesAndValues::ProblemDetails problem_details; problem_details.decode(LibMec__TypesAndValues::ProblemDetails_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); diff --git a/etc/AtsMec_Location/AtsMec_Location_Sandbox.cf_ b/etc/AtsMec_Location/AtsMec_Location_Sandbox.cf_ index 1878802..149a562 100644 --- a/etc/AtsMec_Location/AtsMec_Location_Sandbox.cf_ +++ b/etc/AtsMec_Location/AtsMec_Location_Sandbox.cf_ @@ -22,9 +22,13 @@ LibMec_Pics.PICS_MEC_PLAT := true LocationAPI_Pics.PICS_LOCATION_API_SUPPORTED := true LocationAPI_Pixits.PX_ZONE_ID := "zone03" LocationAPI_Pixits.PX_ACCESS_POINT_ID := "4g-macro-cell-6" +LocationAPI_Pixits.PX_AP_COORD_LAT := 43.737087 +LocationAPI_Pixits.PX_AP_COORD_LONG := 7.421007 +LocationAPI_Pixits.PX_CONNECTION_TYPE := LTE LocationAPI_Pixits.PX_USER := "4005C0A640001" LocationAPI_Pixits.PX_IP_ADDRESS := "10.1.0.1" LocationAPI_Pixits.PX_IP_ADDRESS_1 := "10.100.0.1" +LocationAPI_Pixits.PX_ZONE_ID_1 := "zone01" LocationAPI_Pixits.PX_CLIENT_ID := "0123" LocationAPI_Pixits.PX_SUBSCRIPTION_ID := "1" LocationAPI_Pixits.PX_CALLBACK_REF_URL := "http://yanngarcia.ddns.net/location/v3/notif/1" @@ -50,7 +54,8 @@ 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_mec013)/TCP(debug=1,server=mec-platform.etsi.org,port=443,use_ssl=1,trusted_ca_list=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem,privkey=/home/yann/var/ssl/archive/yanngarcia.ddns.net/privkey1.pem,certificate=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem)" -system.httpPort_notif.params := "HTTP(codecs=json:json_codec_mec013)/TCP(debug=1,server_mode=1,local_port=443,use_ssl=1,mutual_auth=1,mutual_tls=1,trusted_ca_list=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem,privkey=/home/yann/var/ssl/archive/yanngarcia.ddns.net/privkey1.pem,certificate=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem)" +system.httpPort_notif.params := "HTTP(codecs=json:json_codec_mec013)/TCP(debug=1,server_mode=1,use_ssl=0)" +#system.httpPort_notif.params := "HTTP(codecs=json:json_codec_mec013)/TCP(debug=1,server_mode=1,local_port=443,use_ssl=1,mutual_auth=1,mutual_tls=1,trusted_ca_list=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem,privkey=/home/yann/var/ssl/archive/yanngarcia.ddns.net/privkey1.pem,certificate=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem)" [DEFINE] # In this section you can create macro definitions, @@ -77,6 +82,35 @@ system.httpPort_notif.params := "HTTP(codecs=json:json_codec_mec013)/TCP(debug=1 # In this section you can specify what parts of your test suite you want to execute. #AtsMec_TestControl.control +# 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 +#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 responds with the radio nodes when queried by a MEC Application +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_RLOCLOOK_002_OK +# Check that the IUT responds with an error when the radio nodes does not exist +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_RLOCLOOK_002_NF +# Check that the IUT responds with a list of UE area subscriptions when queried by a MEC Application - No filter +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEAREALOOK_001_OK_01 +# Check that the IUT responds with a list of UE area subscriptions when queried by a MEC Application - Event filter +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEAREALOOK_001_OK_02 +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - Invalid filter +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEAREALOOK_001_BR +# Check that the IUT acknowledges the change of UE area subscription request when commanded by a MEC Application +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEAREALOOK_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_UEAREALOOK_002_NF +# Check that the IUT acknowledges the creation of UE area subscription request when commanded by a MEC Application +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEAREASUB_001_OK_01 +# Check that the IUT acknowledges the creation of UE area subscription request when commanded by a MEC Application +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEAREASUB_001_OK_02 +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - Neither callbackReference nor websockNotifConfig provided +AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEAREASUB_001_BR + + + + + # Check that the IUT responds with the information pertaining to one or more UEs in a particular location when queried by a MEC Application - No Filter #AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEINFLOOK_001_OK_01 # Check that the IUT responds with the information pertaining to one or more UEs in a particular location when queried by a MEC Application - Filter with one address @@ -88,15 +122,7 @@ system.httpPort_notif.params := "HTTP(codecs=json:json_codec_mec013)/TCP(debug=1 # 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 - - - - - - - - +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEINFLOOK_001_NF # 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 the subscription when queried by a MEC Application - UE location Event @@ -118,67 +144,6 @@ AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEINFLOOK_001_NF # Check that the IUT responds with an error when the non existing subscription is queried by a MEC Application #AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UELOCLOOK_003_NF - - - - - - -# Check that the IUT acknowledges the subscription by a MEC Application to notifications user location event -#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 - Neither callbackReference nor websockNotifConfig provided -#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UELOCSUB_001_BR_01 -# 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 acknowledges the subscription by a MEC Application to notifications user location periodic -#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UELOCSUB_001_OK_02 -# 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 responds with a list zones when queried by a MEC Application -#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.TP_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 - [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. diff --git a/gs032p3-ttcn-test-suite.code-workspace b/gs032p3-ttcn-test-suite.code-workspace index da72d48..759f5b5 100644 --- a/gs032p3-ttcn-test-suite.code-workspace +++ b/gs032p3-ttcn-test-suite.code-workspace @@ -60,7 +60,22 @@ "type_traits": "cpp", "tuple": "cpp", "typeinfo": "cpp", - "utility": "cpp" + "utility": "cpp", + "atomic": "cpp", + "codecvt": "cpp", + "compare": "cpp", + "concepts": "cpp", + "set": "cpp", + "algorithm": "cpp", + "iterator": "cpp", + "numeric": "cpp", + "random": "cpp", + "mutex": "cpp", + "numbers": "cpp", + "semaphore": "cpp", + "stop_token": "cpp", + "thread": "cpp", + "cinttypes": "cpp" } } } \ No newline at end of file diff --git a/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestCases.ttcn b/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestCases.ttcn index 2799d7d..f4f7838 100644 --- a/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestCases.ttcn +++ b/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestCases.ttcn @@ -150,6 +150,7 @@ module AtsMec_LocationAPI_TestCases { // Local variables var Headers v_headers; var HttpMessage v_response; + var charstring v_url := PICS_ROOT_API & PX_ME_APP_Q_ZONE_ID_URI & "/" & oct2char(unichar2oct(PX_ZONE_ID, "UTF-8")) & "/accessPoints/" & oct2char(unichar2oct(PX_ACCESS_POINT_ID, "UTF-8")); // Test control if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) { @@ -168,7 +169,7 @@ module AtsMec_LocationAPI_TestCases { 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/" & oct2char(unichar2oct(PX_ACCESS_POINT_ID, "UTF-8")), + v_url, v_headers ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -182,7 +183,10 @@ module AtsMec_LocationAPI_TestCases { mw_http_message_body_json( mw_body_json_access_point_info( mw_access_point_info( - PX_ACCESS_POINT_ID + PX_ACCESS_POINT_ID, + PX_CONNECTION_TYPE, + -, -, + pattern "http?+" & v_url )))))) -> value v_response { tc_ac.stop; @@ -260,7 +264,7 @@ module AtsMec_LocationAPI_TestCases { testcase TC_MEC_MEC013_SRV_UEAREALOOK_001_OK_01() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; - var UserAreaNotification v_user_area_notification; + var UserAreaSubscription v_user_area_subscription; var charstring v_subscription_id; // Test control @@ -276,7 +280,7 @@ module AtsMec_LocationAPI_TestCases { // Test adapter configuration // Preamble - f_create_user_area_subscription(v_user_area_notification, v_subscription_id); + f_create_user_area_subscription(v_user_area_subscription, v_subscription_id); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( @@ -295,16 +299,12 @@ module AtsMec_LocationAPI_TestCases { mw_http_message_body_json( mw_body_json_notification_subscription_list( mw_notification_subscription_list( - -, - { - *, - mw_subscription( - "UserAreaSubscription", - v_user_area_notification.links_.self_.href - ), - * - } - )))))) { + { href := pattern "http?+" & PICS_ROOT_API & PX_LOC_API_AREA_SUB_URI }, + superset( + mw_subscription( + "UserAreaSubscription", + v_user_area_subscription.links_.self_.href + )))))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of UserAreaSubscription ***"); @@ -327,8 +327,7 @@ module AtsMec_LocationAPI_TestCases { testcase TC_MEC_MEC013_SRV_UEAREALOOK_001_OK_02() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; - var HttpMessage v_response; - var UserAreaNotification v_user_area_notification; + var UserAreaSubscription v_user_area_subscription; var charstring v_subscription_id; // Test control @@ -344,7 +343,7 @@ module AtsMec_LocationAPI_TestCases { // Test adapter configuration // Preamble - f_create_user_area_subscription(v_user_area_notification, v_subscription_id); + f_create_user_area_subscription(v_user_area_subscription, v_subscription_id); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( @@ -363,16 +362,12 @@ module AtsMec_LocationAPI_TestCases { mw_http_message_body_json( mw_body_json_notification_subscription_list( mw_notification_subscription_list( - -, - { - *, - mw_subscription( - "UserAreaSubscription", - v_user_area_notification.links_.self_.href - ), - * - } - )))))) -> value v_response { + { href := pattern "http?+" & PICS_ROOT_API & PX_LOC_API_AREA_SUB_URI }, + superset( + mw_subscription( + "UserAreaSubscription", + v_user_area_subscription.links_.self_.href + )))))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of UserAreaSubscription ***"); @@ -395,7 +390,7 @@ module AtsMec_LocationAPI_TestCases { testcase TC_MEC_MEC013_SRV_UEAREALOOK_001_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; - var UserAreaNotification v_user_area_notification; + var UserAreaSubscription v_user_area_subscription; var charstring v_subscription_id; // Test control @@ -411,7 +406,7 @@ module AtsMec_LocationAPI_TestCases { // Test adapter configuration // Preamble - f_create_user_area_subscription(v_user_area_notification, v_subscription_id); + f_create_user_area_subscription(v_user_area_subscription, v_subscription_id); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( @@ -450,7 +445,7 @@ module AtsMec_LocationAPI_TestCases { testcase TC_MEC_MEC013_SRV_UEAREALOOK_002_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; - var UserAreaNotification v_user_area_notification; + var UserAreaSubscription v_user_area_subscription; var charstring v_subscription_id; // Test control @@ -466,7 +461,7 @@ module AtsMec_LocationAPI_TestCases { // Test adapter configuration // Preamble - f_create_user_area_subscription(v_user_area_notification, v_subscription_id); + f_create_user_area_subscription(v_user_area_subscription, v_subscription_id); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( @@ -483,8 +478,8 @@ module AtsMec_LocationAPI_TestCases { mw_http_response( mw_http_response_ok( mw_http_message_body_json( - mw_body_json_user_area_notification( - v_user_area_notification + mw_body_json_user_area_subscription( + v_user_area_subscription ))))) { tc_ac.stop; @@ -593,12 +588,15 @@ module AtsMec_LocationAPI_TestCases { m_area_info( ELLIPSOID_POINT_UNCERT_CIRCLE, { - m_point({PX_UE_COORD_LAT}, {PX_UE_COORD_LONG}) + m_point(PX_UE_COORD_LAT, PX_UE_COORD_LONG) }, PX_RADIUS - ), + ), // AreaInfo + { PX_IP_ADDRESS }, PX_TRACKIMNG_ACCURACY, - PX_CLIENT_ID //clientCorrelator + PX_CLIENT_ID, // TrackingAccuracy + -, -, + { ENTERING_AREA_EVENT } )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -609,9 +607,22 @@ module AtsMec_LocationAPI_TestCases { mw_http_response( mw_http_response_201_created( mw_http_message_body_json( - mw_body_json_user_area_notification( - mw_user_area_notification // FIXME To be refined - ))))) -> value v_response { + mw_body_json_user_area_subscription( + mw_user_area_subscription( + PX_AREA_SUB_CALLBACK_URI, // callbackReference + PX_USER, + -, + m_area_info( + ELLIPSOID_POINT_UNCERT_CIRCLE, + { + m_point(PX_UE_COORD_LAT, PX_UE_COORD_LONG) + }, + PX_RADIUS + ), // AreaInfo + { PX_IP_ADDRESS }, + PX_TRACKIMNG_ACCURACY, + PX_CLIENT_ID //clientCorrelator + )))))) -> value v_response { tc_ac.stop; // Check HTTP Location header @@ -623,7 +634,7 @@ module AtsMec_LocationAPI_TestCases { f_get_header(v_response.response.header, "Location", v_header_location); v_subscription_id := regexp( v_header_location[0], - "?+" & PX_LOC_API_USERS_SUB_URI & "/(?*)", + "?+" & PX_LOC_API_AREA_SUB_URI & "/(?*)", 0 ); @@ -647,7 +658,7 @@ module AtsMec_LocationAPI_TestCases { */ testcase TC_MEC_MEC013_SRV_UEAREASUB_001_OK_02() runs on HttpComponent system HttpTestAdapter { // Local variables - var UserAreaNotification v_user_area_notification; + var UserAreaSubscription v_user_area_subscription; var charstring v_subscription_id; // Test control @@ -663,7 +674,7 @@ module AtsMec_LocationAPI_TestCases { // Test adapter configuration // Preamble - f_create_user_area_subscription(v_user_area_notification, v_subscription_id); + f_create_user_area_subscription(v_user_area_subscription, v_subscription_id); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -676,8 +687,11 @@ module AtsMec_LocationAPI_TestCases { -, mw_http_message_body_json( mw_body_json_user_area_notification( - mw_user_area_notification // FIXME To be refined - ))))) { + mw_user_area_notification( + v_user_area_subscription.addressList[0], + v_user_area_subscription.locationEventCriteria[0], + v_user_area_subscription.links_ + )))))) { tc_ac.stop; // Send response @@ -733,10 +747,11 @@ module AtsMec_LocationAPI_TestCases { m_area_info( ELLIPSOID_POINT_UNCERT_CIRCLE, { - m_point({PX_UE_COORD_LAT}, {PX_UE_COORD_LONG}) + m_point(PX_UE_COORD_LAT, PX_UE_COORD_LONG) } // No radius ), + { PX_IP_ADDRESS }, // AreaInfo PX_TRACKIMNG_ACCURACY, PX_CLIENT_ID //clientCorrelator )))))); @@ -770,7 +785,7 @@ module AtsMec_LocationAPI_TestCases { testcase TC_MEC_MEC013_SRV_UEAREASUB_002_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; - var UserAreaNotification v_user_area_notification; + var UserAreaSubscription v_user_area_subscription; var charstring v_subscription_id; // Test control @@ -786,7 +801,7 @@ module AtsMec_LocationAPI_TestCases { // Test adapter configuration // Preamble - f_create_user_area_subscription(v_user_area_notification, v_subscription_id); + f_create_user_area_subscription(v_user_area_subscription, v_subscription_id); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( @@ -800,9 +815,10 @@ module AtsMec_LocationAPI_TestCases { PX_USER, m_area_info( ELLIPSOID_POINT_UNCERT_CIRCLE, - { m_point({PX_UE_COORD_LAT}, {PX_UE_COORD_LONG}) }, + { m_point(PX_UE_COORD_LAT, PX_UE_COORD_LONG) }, PX_RADIUS ), // AreaInfo + { PX_IP_ADDRESS }, PX_TRACKIMNG_ACCURACY // TrackingAccuracy @@ -817,7 +833,8 @@ module AtsMec_LocationAPI_TestCases { mw_http_response_ok( mw_http_message_body_json( mw_body_json_user_area_subscription( - mw_user_area_subscription(PX_UE_NEW_SUB_CALLBACK_URI + mw_user_area_subscription( + PX_UE_NEW_SUB_CALLBACK_URI )))))) { tc_ac.stop; @@ -868,9 +885,10 @@ module AtsMec_LocationAPI_TestCases { PX_USER, m_area_info( ELLIPSOID_POINT_UNCERT_CIRCLE, - { m_point({PX_UE_COORD_LAT}, {PX_UE_COORD_LONG}) }, + { m_point(PX_UE_COORD_LAT, PX_UE_COORD_LONG) }, PX_RADIUS ), // AreaInfo + { PX_IP_ADDRESS }, PX_TRACKIMNG_ACCURACY // TrackingAccuracy )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -904,7 +922,7 @@ module AtsMec_LocationAPI_TestCases { testcase TC_MEC_MEC013_SRV_UEAREASUB_003_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; - var UserAreaNotification v_user_area_notification; + var UserAreaSubscription v_user_area_subscription; var charstring v_subscription_id; // Test control @@ -920,7 +938,7 @@ module AtsMec_LocationAPI_TestCases { // Test adapter configuration // Preamble - f_create_user_area_subscription(v_user_area_notification, v_subscription_id); + f_create_user_area_subscription(v_user_area_subscription, v_subscription_id); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( @@ -936,7 +954,7 @@ module AtsMec_LocationAPI_TestCases { [] httpPort.receive( mw_http_response( mw_http_response_204_no_content - )) { + )) { tc_ac.stop; @@ -979,9 +997,7 @@ module AtsMec_LocationAPI_TestCases { m_http_request_delete( PICS_ROOT_API & PX_LOC_API_AREA_SUB_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_ID, "UTF-8")), v_headers - ) - ) - ); + ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -990,7 +1006,7 @@ module AtsMec_LocationAPI_TestCases { [] httpPort.receive( mw_http_response( mw_http_response_404_not_found - )) { + )) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with 404 Not Found ***"); @@ -1016,7 +1032,7 @@ module AtsMec_LocationAPI_TestCases { testcase TC_MEC_MEC013_SRV_UEDISTLOOK_001_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; - var UserDistanceNotification v_user_distance_notification; + var UserDistanceSubscription v_user_distance_subscription; var charstring v_subscription_id; // Test control @@ -1032,16 +1048,14 @@ module AtsMec_LocationAPI_TestCases { // Test adapter configuration // Preamble - f_create_user_distance_subscription(v_user_distance_notification, v_subscription_id); + f_create_user_distance_subscription(v_user_distance_subscription, v_subscription_id); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( m_http_request_get( PICS_ROOT_API & PX_LOC_API_DISTANCE_SUB_URI, v_headers - ) - ) - ); + ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -1054,15 +1068,11 @@ module AtsMec_LocationAPI_TestCases { mw_body_json_notification_subscription_list( mw_notification_subscription_list( -, - { - *, - mw_subscription( - "UserDistanceSubscription", - v_user_distance_notification.links_.self_.href - ), - * - } - )))))) { + superset( + mw_subscription( + "UserDistanceSubscription", + v_user_distance_subscription.links_.self_.href + )))))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a 200 OK ***"); @@ -1136,7 +1146,7 @@ module AtsMec_LocationAPI_TestCases { testcase TC_MEC_MEC013_SRV_UEDISTLOOK_002_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; - var UserDistanceNotification v_user_distance_notification; + var UserDistanceSubscription v_user_distance_subscription; var charstring v_subscription_id; // Test control @@ -1152,16 +1162,14 @@ module AtsMec_LocationAPI_TestCases { // Test adapter configuration // Preamble - f_create_user_distance_subscription(v_user_distance_notification, v_subscription_id); + f_create_user_distance_subscription(v_user_distance_subscription, v_subscription_id); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( m_http_request_get( PICS_ROOT_API & PX_LOC_API_DISTANCE_SUB_URI & v_subscription_id, v_headers - ) - ) - ); + ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -1170,8 +1178,9 @@ module AtsMec_LocationAPI_TestCases { [] httpPort.receive( mw_http_response( mw_http_response_ok( - mw_http_message_body_json(mw_body_json_user_distance_notification( - v_user_distance_notification + mw_http_message_body_json( + mw_body_json_user_distance_subscription( + v_user_distance_subscription ))))) { tc_ac.stop; @@ -1195,7 +1204,7 @@ module AtsMec_LocationAPI_TestCases { testcase TC_MEC_MEC013_SRV_UEDISTLOOK_002_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; - var UserDistanceNotification v_user_distance_notification; + var UserDistanceSubscription v_user_distance_subscription; var charstring v_subscription_id; // Test control @@ -1211,7 +1220,7 @@ module AtsMec_LocationAPI_TestCases { // Test adapter configuration // Preamble - f_create_user_distance_subscription(v_user_distance_notification, v_subscription_id); + f_create_user_distance_subscription(v_user_distance_subscription, v_subscription_id); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( @@ -1344,7 +1353,7 @@ module AtsMec_LocationAPI_TestCases { */ testcase TC_MEC_MEC013_SRV_UEDISTSUB_001_OK_02() runs on HttpComponent system HttpTestAdapter { // Local variables - var UserDistanceNotification v_user_distance_notification; + var UserDistanceSubscription v_user_distance_subscription; var charstring v_subscription_id; // Test control @@ -1360,7 +1369,7 @@ module AtsMec_LocationAPI_TestCases { // Test adapter configuration // Preamble - f_create_user_distance_subscription(v_user_distance_notification, v_subscription_id); + f_create_user_distance_subscription(v_user_distance_subscription, v_subscription_id); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -1372,8 +1381,8 @@ module AtsMec_LocationAPI_TestCases { -, -, mw_http_message_body_json( - mw_body_json_user_distance_notification( - v_user_distance_notification + mw_body_json_user_distance_subscription( + v_user_distance_subscription ))))) { tc_ac.stop; @@ -1465,7 +1474,7 @@ module AtsMec_LocationAPI_TestCases { testcase TC_MEC_MEC013_SRV_UEDISTSUB_002_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; - var UserDistanceNotification v_user_distance_notification; + var UserDistanceSubscription v_user_distance_subscription; var charstring v_subscription_id; // Test control @@ -1481,7 +1490,7 @@ module AtsMec_LocationAPI_TestCases { // Test adapter configuration // Preamble - f_create_user_distance_subscription(v_user_distance_notification, v_subscription_id); + f_create_user_distance_subscription(v_user_distance_subscription, v_subscription_id); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( @@ -1712,7 +1721,7 @@ module AtsMec_LocationAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - PICS_ROOT_API & PX_ME_APP_Q_USERS_LIST_URI & "?address=[" & PX_IP_ADDRESS & "," & PX_IP_ADDRESS_1 & "]", + PICS_ROOT_API & PX_ME_APP_Q_USERS_LIST_URI & "?address=" & PX_IP_ADDRESS & "&address=" & PX_IP_ADDRESS_1, v_headers ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -1728,8 +1737,16 @@ module AtsMec_LocationAPI_TestCases { mw_user_list( pattern "http?+" & PICS_ROOT_API & PX_ME_APP_Q_USERS_LIST_URI, superset( - mw_user_info(PX_IP_ADDRESS), - mw_user_info(PX_IP_ADDRESS_1) + mw_user_info( + PX_IP_ADDRESS, + -, -, -, + pattern "http?+" & PICS_ROOT_API & PX_ME_APP_Q_USERS_LIST_URI & "?address=" & PX_IP_ADDRESS + ), + mw_user_info( + PX_IP_ADDRESS_1, + -, -, -, + pattern "http?+" & PICS_ROOT_API & PX_ME_APP_Q_USERS_LIST_URI & "?address=" & PX_IP_ADDRESS_1 + ) ))))))) { tc_ac.stop; @@ -1770,7 +1787,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=[" & PX_ZONE_ID & "," & PX_ZONE_ID_1 & "]", + PICS_ROOT_API & PX_ME_APP_Q_USERS_LIST_URI & "?zoneId=" & PX_ZONE_ID & "&zoneId=" & PX_ZONE_ID_1, v_headers ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -1783,15 +1800,24 @@ module AtsMec_LocationAPI_TestCases { mw_http_response_ok( mw_http_message_body_json( mw_body_json_user_list( - mw_user_list( // FIXME Use superset? - -, - { - *, - mw_user_info(-, -, PX_ZONE_ID), - mw_user_info(-, -, PX_ZONE_ID_1), - * - } - )))))) { + mw_user_list( + pattern "http?+" & PICS_ROOT_API & PX_ME_APP_Q_USERS_LIST_URI, + superset( + mw_user_info( + PX_IP_ADDRESS, + -, + PX_ZONE_ID, + -, + pattern "http?+" & PICS_ROOT_API & PX_ME_APP_Q_USERS_LIST_URI & "?address=" & PX_IP_ADDRESS + ), + mw_user_info( + PX_IP_ADDRESS_1, + -, + PX_ZONE_ID_1, + -, + pattern "http?+" & PICS_ROOT_API & PX_ME_APP_Q_USERS_LIST_URI & "?address=" & PX_IP_ADDRESS_1 + ) + ))))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a UserList ***"); diff --git a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Functions.ttcn b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Functions.ttcn index 1c7d56e..8f3d4da 100644 --- a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Functions.ttcn +++ b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Functions.ttcn @@ -361,7 +361,7 @@ module LocationAPI_Functions { } // End of function f_delete_zone_status_subscription function f_create_user_area_subscription( - out UserAreaNotification p_user_area_notification, + out UserAreaSubscription p_user_area_subscription, out charstring p_subscription_id ) runs on HttpComponent { var Headers v_headers; @@ -379,11 +379,14 @@ module LocationAPI_Functions { PX_UE_DIST_SUB_CALLBACK_URI, // callbackReference PX_USER, m_area_info( - ELLIPSOID_POINT_UNCERT_CIRCLE, - { m_point({PX_UE_COORD_LAT}, {PX_UE_COORD_LONG}) }, - PX_RADIUS + ELLIPSOID_POINT_UNCERT_CIRCLE, + { m_point(PX_UE_COORD_LAT, PX_UE_COORD_LONG) }, + PX_RADIUS ), // AreaInfo - PX_TRACKIMNG_ACCURACY // TrackingAccuracy + { PX_IP_ADDRESS }, + PX_TRACKIMNG_ACCURACY, // TrackingAccuracy + -, -, -, + { ENTERING_AREA_EVENT } )))))); tc_ac.start; alt { @@ -391,8 +394,8 @@ module LocationAPI_Functions { mw_http_response( mw_http_response_201_created( mw_http_message_body_json( - mw_body_json_user_area_notification( - mw_user_area_notification( + mw_body_json_user_area_subscription( + mw_user_area_subscription( // FIXME PX_UE_DIST_SUB_CALLBACK_URI )))))) -> value v_response { tc_ac.stop; @@ -403,11 +406,11 @@ module LocationAPI_Functions { // Extract HTTP subssription id p_subscription_id := regexp( v_subscription_id[0], - "?+" & PX_LOC_API_USERS_SUB_URI & "/(?*)", + "?+" & PX_LOC_API_AREA_SUB_URI & "/(?*)", 0 ); - p_user_area_notification := v_response.response.body.json_body.userAreaNotification; - log("f_create_user_area_subscription: INFO: IUT successfully responds to the subscription: ", p_user_area_notification); + p_user_area_subscription := v_response.response.body.json_body.userAreaSubscription; + log("f_create_user_area_subscription: INFO: IUT successfully responds to the subscription: ", p_user_area_subscription); log("f_create_user_area_subscription: INFO: p_subscription_id: ", p_subscription_id); } [] tc_ac.timeout { @@ -444,7 +447,7 @@ module LocationAPI_Functions { } // End of function f_delete_user_area_subscription function f_create_user_distance_subscription( - out UserDistanceNotification p_user_distance_notification, + out UserDistanceSubscription p_user_distance_subscription, out charstring p_subscription_id ) runs on HttpComponent { var Headers v_headers; @@ -486,8 +489,8 @@ module LocationAPI_Functions { "?+" & PX_LOC_API_DISTANCE_SUB_URI & "/(?*)", 0 ); - p_user_distance_notification := v_response.response.body.json_body.userDistanceNotification; - log("f_create_user_distance_subscription: INFO: IUT successfully responds to the subscription: ", p_user_distance_notification); + p_user_distance_subscription := v_response.response.body.json_body.userDistanceSubscription; + log("f_create_user_distance_subscription: INFO: IUT successfully responds to the subscription: ", p_user_distance_subscription); log("f_create_user_distance_subscription: INFO: p_subscription_id: ", p_subscription_id); } [] tc_ac.timeout { diff --git a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Pixits.ttcn b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Pixits.ttcn index 602947f..d45af28 100644 --- a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Pixits.ttcn +++ b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Pixits.ttcn @@ -24,6 +24,12 @@ module LocationAPI_Pixits { modulepar ClientCorrelator PX_NON_EXISTENT_SUBSCRIPTION_ID := "subscription0666"; modulepar AccessPointId PX_ACCESS_POINT_ID := "zone1-poa1"; + + modulepar ConnectionType PX_CONNECTION_TYPE := LTE; + + modulepar Json.Number PX_AP_COORD_LAT := 43.737087; + + modulepar Json.Number PX_AP_COORD_LONG := 7.421007; modulepar ZoneId PX_ZONE_ID := "zone1"; diff --git a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Templates.ttcn b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Templates.ttcn index fc292a0..0e30113 100644 --- a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Templates.ttcn +++ b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Templates.ttcn @@ -549,6 +549,7 @@ module LocationAPI_Templates { in CallbackReference p_callbackReference, in Address p_address := PX_USER, in template (value) AreaInfo p_areaDefine, + in template (value) AddressList p_addressList, in Json.Number p_trackingAccuracy, in template (omit) ClientCorrelator p_clientCorrelator := omit, in template (omit) Json.Bool p_requestTestNotification := omit, @@ -565,6 +566,7 @@ module LocationAPI_Templates { websockNotifConfig := p_websockNotifConfig, links_ := omit, areaDefine := p_areaDefine, + addressList := p_addressList, trackingAccuracy := p_trackingAccuracy, locationEventCriteria := p_locationEventCriteria, reportingCtrl := p_reportingCtrl, @@ -577,6 +579,7 @@ module LocationAPI_Templates { template (present) Address p_address := ?, template (present) Links p_links_ := ?, template (present) AreaInfo p_areaDefine := ?, + template (present) AddressList p_addressList := ?, template (present) Json.Number p_trackingAccuracy := ?, template ClientCorrelator p_clientCorrelator := *, template Json.Bool p_requestTestNotification := *, @@ -591,8 +594,9 @@ module LocationAPI_Templates { callbackReference := p_callbackReference, requestTestNotification := p_requestTestNotification, websockNotifConfig := p_websockNotifConfig, - links_ := omit, + links_ := p_links_, areaDefine := p_areaDefine, + addressList := p_addressList, trackingAccuracy := p_trackingAccuracy, locationEventCriteria := p_locationEventCriteria, reportingCtrl := p_reportingCtrl, @@ -884,16 +888,16 @@ module LocationAPI_Templates { } // End of template mw_area_info template (value) Point m_point( - in Latitude p_latitude, - in Longitude p_longitude + in Json.Number p_latitude, + in Json.Number p_longitude ) := { latitude := p_latitude, longitude := p_longitude } // End of template m_point template (present) Point mw_point( - template (present) Latitude p_latitude := ?, - template (present) Longitude p_longitude := ? + template (present) Json.Number p_latitude := ?, + template (present) Json.Number p_longitude := ? ) := { latitude := p_latitude, longitude := p_longitude diff --git a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn index e54bc89..3003eb2 100644 --- a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn @@ -106,8 +106,8 @@ module LocationAPI_TypesAndValues { * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.5.8 Type: Point */ type record Point { - Latitude latitude, - Longitude longitude + Json.Number latitude, + Json.Number longitude } // End of type Point type set of Point Points; @@ -859,6 +859,7 @@ module LocationAPI_TypesAndValues { * @member websockNotifConfig Provides details to negotiate and signal the use of a Websocket connection between the location server and the service consumer for notifications * @member _links Hyperlink related to the resource * @member areaDefine The parameters describing the area to subscribe + * @member addressList The list of the users to be monitored * @member trackingAccuracy Number of meters of acceptable error * @member reportingCtrl Provides parameters that ctrl the reporting * @member locationEventCriteria List of user event values to generate notifications for (these apply to address specified) @@ -874,6 +875,7 @@ module LocationAPI_TypesAndValues { WebsockNotifConfig websockNotifConfig optional, Links links_ optional, AreaInfo areaDefine, + AddressList addressList, Json.Number trackingAccuracy, LocationEventCriteria locationEventCriteria optional, ReportingCtrl reportingCtrl optional, @@ -883,6 +885,12 @@ module LocationAPI_TypesAndValues { variant (links_) "name as '_links'"; } // End of type UserAreaSubscription + /** + * @desc List of the users to be monitored + * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.3.8 Type: UserAreaSubscription + */ + type set of Json.AnyURI AddressList; + /** * @desc This type represents a subscription to the notifications from location server about changes in the geographical relationships between monitored users or between monitored users and reference users * @member subscriptionType Shall be set to "UserLocationEventSubscription" -- GitLab From 46f958733dd107bbf940d6b92bc124f15558916d Mon Sep 17 00:00:00 2001 From: garciay Date: Tue, 21 May 2024 11:47:22 +0200 Subject: [PATCH 83/99] Bug fixed in UEDISTSUB --- ccsrc/Protocols/Json/json_codec.cc | 214 ------------------ .../Json/json_codec_factory_mec011.hh | 46 ++++ ccsrc/Protocols/Json/json_codec_mec011.cc | 185 +++++++++++++++ ccsrc/Protocols/Json/json_codec_mec011.hh | 25 ++ ccsrc/Protocols/Json/json_codec_mec013.cc | 16 ++ ccsrc/Protocols/Json/module.mk | 1 + ...PlatformApplicationEnablement_Sandbox.cfg_ | 12 +- .../AtsMec_Location_Sandbox.cf_ | 22 +- ...ormApplicationEnablementAPI_TestCases.ttcn | 2 +- .../AtsMec_LocationAPI_TestCases.ttcn | 36 ++- .../ttcn/LocationAPI_Functions.ttcn | 10 +- .../ttcn/LocationAPI_Templates.ttcn | 5 +- 12 files changed, 325 insertions(+), 249 deletions(-) create mode 100644 ccsrc/Protocols/Json/json_codec_factory_mec011.hh create mode 100644 ccsrc/Protocols/Json/json_codec_mec011.cc create mode 100644 ccsrc/Protocols/Json/json_codec_mec011.hh diff --git a/ccsrc/Protocols/Json/json_codec.cc b/ccsrc/Protocols/Json/json_codec.cc index a611eb7..f0c9464 100644 --- a/ccsrc/Protocols/Json/json_codec.cc +++ b/ccsrc/Protocols/Json/json_codec.cc @@ -28,38 +28,6 @@ int json_codec::encode (const LibHttp__JsonMessageBodyTypes::JsonBody& msg, OCTE 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(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_serviceInfo)) { - 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(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_appInfo__regapps)) { - const EdgePlatformApplicationEnablementAPI__TypesAndValues::AppInfo& app_info = msg.appInfo__regapps(); - app_info.encode(EdgePlatformApplicationEnablementAPI__TypesAndValues::AppInfo_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); - data = /*char2oct(CHARSTRING("{\"AppInfo\": ")) + */OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; - } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_appTerminationNotificationSubscription)) { - 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(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_appTerminationConfirmation)) { - const EdgePlatformApplicationEnablementAPI__TypesAndValues::AppTerminationConfirmation& app = msg.appTerminationConfirmation(); - app.encode(EdgePlatformApplicationEnablementAPI__TypesAndValues::AppTerminationConfirmation_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); - data = /*char2oct(CHARSTRING("{\"AppTerminationConfirmation\": ")) + */OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; - } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_appReadyConfirmation)) { - const EdgePlatformApplicationEnablementAPI__TypesAndValues::AppReadyConfirmation& app = msg.appReadyConfirmation(); - app.encode(EdgePlatformApplicationEnablementAPI__TypesAndValues::AppReadyConfirmation_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); - data = /*char2oct(CHARSTRING("{\"AppTerminationConfirmation\": ")) + */OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; - } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_dnsRule)) { - 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(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_serAvailabilityNotificationSubscription)) { - 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(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_trafficRule)) { - const EdgePlatformApplicationEnablementAPI__TypesAndValues::TrafficRule& traffic_rule = msg.trafficRule(); - traffic_rule.encode(EdgePlatformApplicationEnablementAPI__TypesAndValues::TrafficRule_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); - data = OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_bwInfo)) { const TrafficManagementAPI__TypesAndValues::BwInfo& bw_info = msg.bwInfo(); bw_info.encode(TrafficManagementAPI__TypesAndValues::BwInfo_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); @@ -68,32 +36,6 @@ int json_codec::encode (const LibHttp__JsonMessageBodyTypes::JsonBody& msg, OCTE const TrafficManagementAPI__TypesAndValues::MtsSessionInfo& mts_session_info = msg.mtsSessionInfo(); mts_session_info.encode(TrafficManagementAPI__TypesAndValues::MtsSessionInfo_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); data = OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; - } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_predictedQos)) { - const V2XInformationServiceAPI__TypesAndValues::PredictedQos& predicted_qos = msg.predictedQos(); - predicted_qos.encode(V2XInformationServiceAPI__TypesAndValues::PredictedQos_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); - data = OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; - } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_v2xMsgDistributionServerInfo)) { - const V2XInformationServiceAPI__TypesAndValues::V2xMsgDistributionServerInfo& v2x_msg_distribution_server_info = msg.v2xMsgDistributionServerInfo(); - v2x_msg_distribution_server_info.encode(V2XInformationServiceAPI__TypesAndValues::V2xMsgDistributionServerInfo_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); - data = OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; - } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_provChgUuUniSubscription)) { - const V2XInformationServiceAPI__TypesAndValues::ProvChgUuUniSubscription& prov_chg_uu_uni_subscription = msg.provChgUuUniSubscription(); - prov_chg_uu_uni_subscription.encode(V2XInformationServiceAPI__TypesAndValues::ProvChgUuUniSubscription_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); - data = OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; - } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_provChgUuMbmsSubscription)) { - const V2XInformationServiceAPI__TypesAndValues::ProvChgUuMbmsSubscription& prov_chg_uu_mbms_subscription = msg.provChgUuMbmsSubscription(); - prov_chg_uu_mbms_subscription.encode(V2XInformationServiceAPI__TypesAndValues::ProvChgUuMbmsSubscription_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); - data = OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; - } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_provChgPc5Subscription)) { - const V2XInformationServiceAPI__TypesAndValues::ProvChgPc5Subscription& prov_chg_pc5_subscription = msg.provChgPc5Subscription(); - prov_chg_pc5_subscription.encode(V2XInformationServiceAPI__TypesAndValues::ProvChgPc5Subscription_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); - data = OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; - } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_v2xMsgSubscription)) { - const V2XInformationServiceAPI__TypesAndValues::V2xMsgSubscription& v2x_msg_subscription = msg.v2xMsgSubscription(); - v2x_msg_subscription.encode(V2XInformationServiceAPI__TypesAndValues::V2xMsgSubscription_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); - data = OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; - - } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_assocStaSubscription)) { const WlanInformationAPI__TypesAndValues::AssocStaSubscription& assoc_sta_subscription = msg.assocStaSubscription(); assoc_sta_subscription.encode(WlanInformationAPI__TypesAndValues::AssocStaSubscription_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); @@ -147,90 +89,6 @@ int json_codec::decode (const OCTETSTRING& p_data, LibHttp__JsonMessageBodyTypes UEidentityAPI__TypesAndValues::UeIdentityTagInfo ue_identity_tag_info; ue_identity_tag_info.decode(UEidentityAPI__TypesAndValues::UeIdentityTagInfo_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.ueIdentityTagInfo() = ue_identity_tag_info; - } else if (it->second.find("\"serName\"") != std::string::npos) { // Be careful to the order - // TODO To be refined, find("\"accessPointList\"") is not optimal - if (it->second[0] == '[') { - 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()); - if ((str[it_start - 3] == 'n') || (str[it_start - 3] == 's')) { // fqdn or uris or addresses - str = str.substr(0, it_start) + "[]" + str.substr(it_stop); - } else { - 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 { - 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 - 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] == '[') { - 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 { - 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] == '[') { - 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 { - 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("\"_links\"") != std::string::npos) && (it->second.find("\"subscriptions\"") != std::string::npos)) { - 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("\"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) || (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) { - 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) { RnisAPI__TypesAndValues::CellChangeSubscription cell_change_subscription; cell_change_subscription.decode(RnisAPI__TypesAndValues::CellChangeSubscription_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); @@ -317,69 +175,6 @@ int json_codec::decode (const OCTETSTRING& p_data, LibHttp__JsonMessageBodyTypes TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); mts_session_info.decode(TrafficManagementAPI__TypesAndValues::MtsSessionInfo_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); msg.mtsSessionInfo() = mts_session_info; - } else if ((it->second.find("\"uuUnicastProvisioningInfo\"") != std::string::npos) || (it->second.find("\"proInfoUuUnicast\"") != std::string::npos)) { - V2XInformationServiceAPI__TypesAndValues::UuUnicastProvisioningInfo uu_unicast_provisioning_info; - TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); - uu_unicast_provisioning_info.decode(V2XInformationServiceAPI__TypesAndValues::UuUnicastProvisioningInfo_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); - msg.uuUnicastProvisioningInfo() = uu_unicast_provisioning_info; - } else if ((it->second.find("\"uuMbmsProvisioningInfo\"") != std::string::npos) || (it->second.find("\"proInfoUuMbms\"") != std::string::npos)) { - V2XInformationServiceAPI__TypesAndValues::UuMbmsProvisioningInfo uu_mbms_provisioning_info; - TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); - uu_mbms_provisioning_info.decode(V2XInformationServiceAPI__TypesAndValues::UuMbmsProvisioningInfo_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); - msg.uuMbmsProvisioningInfo() = uu_mbms_provisioning_info; - } else if ((it->second.find("\"pc5ProvisioningInfo\"") != std::string::npos) || (it->second.find("\"proInfoPc5\"") != std::string::npos)) { - V2XInformationServiceAPI__TypesAndValues::Pc5ProvisioningInfo pc5_provisioning_info; - TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); - pc5_provisioning_info.decode(V2XInformationServiceAPI__TypesAndValues::Pc5ProvisioningInfo_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); - msg.pc5ProvisioningInfo() = pc5_provisioning_info; - } else if ((it->second.find("\"predictedQos\"") != std::string::npos) || (it->second.find("\"locationGranularity\"") != std::string::npos)) { - V2XInformationServiceAPI__TypesAndValues::PredictedQos predicted_qos; - TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); - predicted_qos.decode(V2XInformationServiceAPI__TypesAndValues::PredictedQos_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); - msg.predictedQos() = predicted_qos; - } else if (it->second.find("\"ProvChgUuUniSubscription\"") != std::string::npos) { - V2XInformationServiceAPI__TypesAndValues::ProvChgUuUniSubscription prov_chg_uu_uni_subscription; - TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); - prov_chg_uu_uni_subscription.decode(V2XInformationServiceAPI__TypesAndValues::ProvChgUuUniSubscription_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); - msg.provChgUuUniSubscription() = prov_chg_uu_uni_subscription; - } else if (it->second.find("\"ProvChgUuMbmsSubscription\"") != std::string::npos) { - V2XInformationServiceAPI__TypesAndValues::ProvChgUuMbmsSubscription prov_chg_uu_mbms_subscription; - TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); - prov_chg_uu_mbms_subscription.decode(V2XInformationServiceAPI__TypesAndValues::ProvChgUuMbmsSubscription_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); - msg.provChgUuMbmsSubscription() = prov_chg_uu_mbms_subscription; - } else if (it->second.find("\"ProvChgPc5Subscription\"") != std::string::npos) { - V2XInformationServiceAPI__TypesAndValues::ProvChgPc5Subscription prov_chg_pc5_subscription; - TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); - prov_chg_pc5_subscription.decode(V2XInformationServiceAPI__TypesAndValues::ProvChgPc5Subscription_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); - msg.provChgPc5Subscription() = prov_chg_pc5_subscription; - } else if (it->second.find("\"V2xMsgSubscription\"") != std::string::npos) { - V2XInformationServiceAPI__TypesAndValues::V2xMsgSubscription v2x_msg_subscription; - TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); - v2x_msg_subscription.decode(V2XInformationServiceAPI__TypesAndValues::V2xMsgSubscription_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); - msg.v2xMsgSubscription() = v2x_msg_subscription; - - - } else if (it->second.find("\"ProvChgUuUniNotification\"") != std::string::npos) { - V2XInformationServiceAPI__TypesAndValues::ProvChgUuUniNotification prov_chg_uu_uni_notification; - TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); - prov_chg_uu_uni_notification.decode(V2XInformationServiceAPI__TypesAndValues::ProvChgUuUniNotification_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); - msg.provChgUuUniNotification() = prov_chg_uu_uni_notification; - } else if (it->second.find("\"ProvChgUuMbmsNotification\"") != std::string::npos) { - V2XInformationServiceAPI__TypesAndValues::ProvChgUuMbmsNotification prov_chg_uu_mbms_notification; - TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); - prov_chg_uu_mbms_notification.decode(V2XInformationServiceAPI__TypesAndValues::ProvChgUuMbmsNotification_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); - msg.provChgUuMbmsNotification() = prov_chg_uu_mbms_notification; - } else if (it->second.find("\"provChgPc5Notification\"") != std::string::npos) { - V2XInformationServiceAPI__TypesAndValues::ProvChgPc5Notification prov_chg_pc5_notification; - TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); - prov_chg_pc5_notification.decode(V2XInformationServiceAPI__TypesAndValues::ProvChgPc5Notification_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); - msg.provChgPc5Notification() = prov_chg_pc5_notification; - } else if (it->second.find("\"v2xMsgDistributionServer\"") != std::string::npos) { - V2XInformationServiceAPI__TypesAndValues::V2xMsgDistributionServerInfo v2x_msg_distribution_server_info; - TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); - v2x_msg_distribution_server_info.decode(V2XInformationServiceAPI__TypesAndValues::V2xMsgDistributionServerInfo_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); - msg.v2xMsgDistributionServerInfo() = v2x_msg_distribution_server_info; - } else if (it->second.find("\"AssocStaSubscription\"") != std::string::npos) { if (it->second.find("\"subscription\"") != std::string::npos) { // SubscriptionLinkList WlanInformationAPI__TypesAndValues::SubscriptionLinkList subscription_link_list; @@ -419,15 +214,6 @@ int json_codec::decode (const OCTETSTRING& p_data, LibHttp__JsonMessageBodyTypes 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; - - - - - - - - - } else if (it->second.find("\"detail\"") != std::string::npos) { LibMec__TypesAndValues::ProblemDetails problem_details; problem_details.decode(LibMec__TypesAndValues::ProblemDetails_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); diff --git a/ccsrc/Protocols/Json/json_codec_factory_mec011.hh b/ccsrc/Protocols/Json/json_codec_factory_mec011.hh new file mode 100644 index 0000000..7e8fa64 --- /dev/null +++ b/ccsrc/Protocols/Json/json_codec_factory_mec011.hh @@ -0,0 +1,46 @@ +/*! + * \file json_codec_factory_mec011.hh + * \brief Header file for ITS JSON/IP protocol codec factory. + * \author ETSI STF569 / TTF T027 + * \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. + * \version 0.1 + */ +#pragma once + +#include "codec_stack_builder.hh" + +#include "json_codec_mec011.hh" + +class Record_Type; //! TITAN forward declaration + +/*! + * \class json_codec_factory_mec011 + * \brief This class provides a factory class to create an json_codec class instance + */ +class json_codec_factory_mec011: public codec_factory { + static json_codec_factory_mec011 _f; //! Reference to the unique instance of this class +public: //! \publicsection + /*! + * \brief Default constructor + * Create a new instance of the json_codec_factory_mec011 class + * \remark The HELD/IP codec identifier is HELD + */ + json_codec_factory_mec011() { + // register factory + codec_stack_builder::register_codec_factory("json_codec_mec011", this); + }; + /*! + * \fn codec* create_codec(const std::string & type, const std::string & param); + * \brief Create the codecs stack based on the provided codecs stack description + * \param[in] p_type The provided codecs stack description + * \param[in] p_params Optional parameters + * \return 0 on success, -1 otherwise + * \inline + */ + inline virtual codec_gen* create_codec() { + return (codec_gen*)new json_codec_mec011(); + }; +}; // End of class json_codec_factory_mec011 diff --git a/ccsrc/Protocols/Json/json_codec_mec011.cc b/ccsrc/Protocols/Json/json_codec_mec011.cc new file mode 100644 index 0000000..e7ae15d --- /dev/null +++ b/ccsrc/Protocols/Json/json_codec_mec011.cc @@ -0,0 +1,185 @@ +#include +#include +#include + +#include "json_codec_factory_mec011.hh" + +#include "loggers.hh" + +#include "LibHttp_JsonMessageBodyTypes.hh" + +int json_codec_mec011::encode (const LibHttp__JsonMessageBodyTypes::JsonBody& msg, OCTETSTRING& data) +{ + loggers::get_instance().log_msg(">>> json_codec_mec011::encode: ", (const Base_Type&)msg); + + TTCN_EncDec::clear_error(); + TTCN_EncDec::set_error_behavior(TTCN_EncDec::ET_ALL, TTCN_EncDec::EB_DEFAULT); + TTCN_Buffer encoding_buffer; + + if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_serviceInfo)) { + 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(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_appInfo__regapps)) { + const EdgePlatformApplicationEnablementAPI__TypesAndValues::AppInfo& app_info = msg.appInfo__regapps(); + app_info.encode(EdgePlatformApplicationEnablementAPI__TypesAndValues::AppInfo_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); + data = /*char2oct(CHARSTRING("{\"AppInfo\": ")) + */OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; + } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_appTerminationNotificationSubscription)) { + 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(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_appTerminationConfirmation)) { + const EdgePlatformApplicationEnablementAPI__TypesAndValues::AppTerminationConfirmation& app = msg.appTerminationConfirmation(); + app.encode(EdgePlatformApplicationEnablementAPI__TypesAndValues::AppTerminationConfirmation_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); + data = /*char2oct(CHARSTRING("{\"AppTerminationConfirmation\": ")) + */OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; + } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_appReadyConfirmation)) { + const EdgePlatformApplicationEnablementAPI__TypesAndValues::AppReadyConfirmation& app = msg.appReadyConfirmation(); + app.encode(EdgePlatformApplicationEnablementAPI__TypesAndValues::AppReadyConfirmation_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); + data = /*char2oct(CHARSTRING("{\"AppTerminationConfirmation\": ")) + */OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; + } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_dnsRule)) { + 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(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_serAvailabilityNotificationSubscription)) { + 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(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_trafficRule)) { + const EdgePlatformApplicationEnablementAPI__TypesAndValues::TrafficRule& traffic_rule = msg.trafficRule(); + traffic_rule.encode(EdgePlatformApplicationEnablementAPI__TypesAndValues::TrafficRule_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); + data = OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; + } else { + loggers::get_instance().error("json_codec_mec011::encode: Not supported"); + } + + loggers::get_instance().log("<<< json_codec_mec011::encode"); + return 0; +} + +int json_codec_mec011::decode (const OCTETSTRING& p_data, LibHttp__JsonMessageBodyTypes::JsonBody& msg, params* p_params) +{ + loggers::get_instance().log_msg(">>> json_codec_mec011::decode: p_data=", p_data); + + // Sanity checks + params::const_iterator it; + if (p_params == nullptr) { + loggers::get_instance().warning("json_codec_mec011::decode: Failed to access p_params (null pointer)"); + return -1; // TODO Use p_data instead of return -1 + } else { + it = p_params->find("decode_str"); + if (it == p_params->cend()) { + loggers::get_instance().warning("json_codec_mec011::decode: Failed to access p_params item (decode_str)"); + return -1; // TODO Use p_data instead of return -1 + } + loggers::get_instance().log("json_codec_mec011::decode: it->second='%c' / '%s'", it->second.c_str()[0], it->second.c_str()); + } + + // Remove data structure name (if present) ... + std::string str; + if ((it->second[0] != '[') && (it->second[0] != '{')) { + 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); + } else { + str = it->second; + } + // ..and create the decoding buffer + TTCN_EncDec::set_error_behavior(TTCN_EncDec::ET_ALL, TTCN_EncDec::EB_DEFAULT); + TTCN_EncDec::clear_error(); + loggers::get_instance().log("json_codec_mec011::decode: decoding_buffer='%c' / '%s'", str[0], str.c_str()); + TTCN_Buffer decoding_buffer(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); + + 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] == '[') { + std::size_t it_start; + while ((it_start = str.find("null")) != std::string::npos) { + loggers::get_instance().log("json_codec_mec011::decode: id_start=%d", it_start); + loggers::get_instance().log("json_codec_mec011::decode: Before, str=%s", str.c_str()); + std::size_t it_stop = it_start + 4; + loggers::get_instance().log("json_codec_mec011::decode: id_stop=%d", it_stop); + loggers::get_instance().log("json_codec_mec011::decode: segment=%s", str.substr(it_start, it_stop - it_start).c_str()); + if ((str[it_start - 3] == 'n') || (str[it_start - 3] == 's')) { // fqdn or uris or addresses + str = str.substr(0, it_start) + "[]" + str.substr(it_stop); + } else { + str = str.substr(0, it_start) + "{}" + str.substr(it_stop); + } + loggers::get_instance().log("json_codec_mec011::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 { + 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 + std::size_t it_start; + while ((it_start = str.find("null")) != std::string::npos) { + loggers::get_instance().log("json_codec_mec011::decode: id_start=%d", it_start); + loggers::get_instance().log("json_codec_mec011::decode: Before, str=%s", str.c_str()); + std::size_t it_stop = it_start + 4; + loggers::get_instance().log("json_codec_mec011::decode: id_stop=%d", it_stop); + loggers::get_instance().log("json_codec_mec011::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_mec011::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] == '[') { + 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 { + 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] == '[') { + 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 { + 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("\"_links\"") != std::string::npos) && (it->second.find("\"subscriptions\"") != std::string::npos)) { + 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("\"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) || (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) { + EdgePlatformApplicationEnablementAPI__TypesAndValues::CurrentTime current_time; + current_time.decode(EdgePlatformApplicationEnablementAPI__TypesAndValues::CurrentTime_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); + msg.currentTime() = current_time; + } else { + loggers::get_instance().warning("json_codec_mec011::decode: Unsupported variant"); + return -1; + } + + loggers::get_instance().log_msg("<<< json_codec_mec011::decode: ", (const Base_Type&)msg); + return 0; +} + +json_codec_factory_mec011 json_codec_factory_mec011::_f; diff --git a/ccsrc/Protocols/Json/json_codec_mec011.hh b/ccsrc/Protocols/Json/json_codec_mec011.hh new file mode 100644 index 0000000..8843d8b --- /dev/null +++ b/ccsrc/Protocols/Json/json_codec_mec011.hh @@ -0,0 +1,25 @@ +#pragma once + +#include "codec_gen.hh" +#include "params.hh" + +#include "json_codec.hh" + +class Base_Type; +class TTCN_Typedescriptor_t; +class TTCN_Buffer; + +namespace LibHttp__JsonMessageBodyTypes { + class JsonBody; +} + +class json_codec_mec011: public json_codec +{ +public: + explicit json_codec_mec011() : json_codec() { }; + virtual ~json_codec_mec011() { }; + + int encode (const LibHttp__JsonMessageBodyTypes::JsonBody&, OCTETSTRING& data); + int decode (const OCTETSTRING& p_data, LibHttp__JsonMessageBodyTypes::JsonBody&, params* p_params = NULL); + +}; // End of class json_codec_mec011 diff --git a/ccsrc/Protocols/Json/json_codec_mec013.cc b/ccsrc/Protocols/Json/json_codec_mec013.cc index 7743c0f..edcf6a6 100644 --- a/ccsrc/Protocols/Json/json_codec_mec013.cc +++ b/ccsrc/Protocols/Json/json_codec_mec013.cc @@ -193,6 +193,22 @@ int json_codec_mec013::decode (const OCTETSTRING& p_data, LibHttp__JsonMessageBo LocationAPI__TypesAndValues::UserAreaNotification user_area_notification; user_area_notification.decode(LocationAPI__TypesAndValues::UserAreaNotification_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.userAreaNotification() = user_area_notification; + } else if (it->second.find("\"userDistanceSubscription\"") != 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::UserDistanceSubscription user_distance_subscription; + user_distance_subscription.decode(LocationAPI__TypesAndValues::UserDistanceSubscription_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); + msg.userDistanceSubscription() = user_distance_subscription; + } else if (it->second.find("\"userDistanceNotification\"") != 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::UserDistanceNotification user_distance_notification; + user_distance_notification.decode(LocationAPI__TypesAndValues::UserDistanceNotification_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); + msg.userDistanceNotification() = user_distance_notification; } else if (it->second.find("\"accessPointId\"") != std::string::npos) { if (it->second.find("\"address\"") != std::string::npos) { LocationAPI__TypesAndValues::UserInfo user_info; diff --git a/ccsrc/Protocols/Json/module.mk b/ccsrc/Protocols/Json/module.mk index c9e3163..d18b7e2 100644 --- a/ccsrc/Protocols/Json/module.mk +++ b/ccsrc/Protocols/Json/module.mk @@ -1,5 +1,6 @@ sources := \ json_codec.cc \ + json_codec_mec011.cc \ json_codec_mec013.cc \ json_codec_mec030.cc \ diff --git a/etc/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablement_Sandbox.cfg_ b/etc/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablement_Sandbox.cfg_ index 11eef44..03f49c4 100644 --- a/etc/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablement_Sandbox.cfg_ +++ b/etc/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablement_Sandbox.cfg_ @@ -19,11 +19,9 @@ LibMec_Pics.PICS_ROOT_API := "/sbxykqjr17/mep1/" # Need to sign i LibMec_Pics.PICS_MEC_PLAT := true # Application Instance ID -EdgePlatformApplicationEnablementAPI_Pixits.PX_APP_INSTANCE_ID := "6b618c24-51bd-4383-9a11-2a11937dc31d" # Copied from ETSI MEC Sandbox GUI +EdgePlatformApplicationEnablementAPI_Pixits.PX_APP_INSTANCE_ID := "2815c5ee-b4e3-4105-9112-0ef9f8a1b32d" # Copied from ETSI MEC Sandbox GUI # Callbacks -#AtsMec_EdgePlatformApplicationEnablementAPI_Pixits.PX_PROV_UU_UNI_SUB_CALLBACK := "https://yanngarcia.ddns.net:36001/epae/v2/" -#AtsMec_EdgePlatformApplicationEnablementAPI_Pixits.PX_PROV_V2X_SUB_CALLBACK := "https://yanngarcia.ddns.net:36001/epae/v2/" [LOGGING] # In this section you can specify the name of the log file and the classes of events @@ -41,8 +39,8 @@ 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=mec-platform.etsi.org,port=443,use_ssl=1,trusted_ca_list=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem,privkey=/home/yann/var/ssl/archive/yanngarcia.ddns.net/privkey1.pem,certificate=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem)" -system.httpPort_notif.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server_mode=1,local_port=443,use_ssl=1,mutual_auth=1,mutual_tls=1,trusted_ca_list=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem,privkey=/home/yann/var/ssl/archive/yanngarcia.ddns.net/privkey1.pem,certificate=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem)" +system.httpPort.params := "HTTP(codecs=json:json_codec_mec011)/TCP(debug=1,server=mec-platform.etsi.org,port=443,use_ssl=1,trusted_ca_list=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem,privkey=/home/yann/var/ssl/archive/yanngarcia.ddns.net/privkey1.pem,certificate=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem)" +system.httpPort_notif.params := "HTTP(codecs=json:json_codec_mec011)/TCP(debug=1,server_mode=1)" [DEFINE] # In this section you can create macro definitions, @@ -125,7 +123,7 @@ system.httpPort_notif.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server #AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_CONFTASK_002_NF # 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 +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 @@ -188,7 +186,7 @@ system.httpPort_notif.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server # Check that the IUT responds with 204 No Content when queried to delete an existing MEC Application registration #AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_REGAPPS_004_OK # Check that the IUT responds with an error when queried to delete an unknown MEC Application registration -AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_REGAPPS_004_NF +#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_REGAPPS_004_NF diff --git a/etc/AtsMec_Location/AtsMec_Location_Sandbox.cf_ b/etc/AtsMec_Location/AtsMec_Location_Sandbox.cf_ index 149a562..9ad89fb 100644 --- a/etc/AtsMec_Location/AtsMec_Location_Sandbox.cf_ +++ b/etc/AtsMec_Location/AtsMec_Location_Sandbox.cf_ @@ -33,6 +33,7 @@ LocationAPI_Pixits.PX_CLIENT_ID := "0123" LocationAPI_Pixits.PX_SUBSCRIPTION_ID := "1" LocationAPI_Pixits.PX_CALLBACK_REF_URL := "http://yanngarcia.ddns.net/location/v3/notif/1" LocationAPI_Pixits.PX_AREA_SUB_CALLBACK_URI := "http://yanngarcia.ddns.net/location/v3/notif/1" +LocationAPI_Pixits.PX_UE_NEW_SUB_CALLBACK_URI := "http://yanngarcia.ddns.net/location/v3/notification/1" LocationAPI_Pixits.PX_UE_DIST_SUB_CALLBACK_URI := "http://yanngarcia.ddns.net/location/v3/notif/1" LocationAPI_Pixits.PX_UE_COORD_LAT := 43.736515 LocationAPI_Pixits.PX_UE_COORD_LONG := 7.421802 @@ -105,8 +106,25 @@ system.httpPort_notif.params := "HTTP(codecs=json:json_codec_mec013)/TCP(debug=1 # Check that the IUT acknowledges the creation of UE area subscription request when commanded by a MEC Application #AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEAREASUB_001_OK_02 # Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - Neither callbackReference nor websockNotifConfig provided -AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEAREASUB_001_BR - +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEAREASUB_001_BR +# Check that the IUT acknowledges the change of UE area subscription request 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_UEAREALOOK_002_NF +# 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_003_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_003_NF +# Check that the IUT responds with the list of UE distance subscriptions 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 - Invalid filter +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEDISTLOOK_001_BR +# 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_002_OK +# Check that the IUT responds with an error when inconsistent request was sent by a MEC Application +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEDISTLOOK_002_NF +# 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_01 diff --git a/ttcn/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn b/ttcn/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn index bf99ea1..10174d2 100644 --- a/ttcn/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn +++ b/ttcn/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn @@ -1413,7 +1413,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { 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", + PICS_ROOT_API & PX_ME_APP_SUPPORT_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/confirm_termination", v_headers, m_http_message_body_json( m_body_json_app_termination_confirmation( diff --git a/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestCases.ttcn b/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestCases.ttcn index f4f7838..c19212b 100644 --- a/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestCases.ttcn +++ b/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestCases.ttcn @@ -595,7 +595,7 @@ module AtsMec_LocationAPI_TestCases { { PX_IP_ADDRESS }, PX_TRACKIMNG_ACCURACY, PX_CLIENT_ID, // TrackingAccuracy - -, -, + -, -, -, { ENTERING_AREA_EVENT } )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -803,6 +803,7 @@ module AtsMec_LocationAPI_TestCases { // Preamble f_create_user_area_subscription(v_user_area_subscription, v_subscription_id); f_init_default_headers_list(-, -, v_headers); + v_user_area_subscription.callbackReference := PX_UE_NEW_SUB_CALLBACK_URI; httpPort.send( m_http_request( m_http_request_put( @@ -810,19 +811,10 @@ module AtsMec_LocationAPI_TestCases { v_headers, m_http_message_body_json( m_body_json_user_area_subscription( - m_user_area_subscription( - PX_UE_NEW_SUB_CALLBACK_URI, // callbackReference - PX_USER, - m_area_info( - ELLIPSOID_POINT_UNCERT_CIRCLE, - { m_point(PX_UE_COORD_LAT, PX_UE_COORD_LONG) }, - PX_RADIUS - ), // AreaInfo - { PX_IP_ADDRESS }, - PX_TRACKIMNG_ACCURACY // TrackingAccuracy + v_user_area_subscription - )))))); + ))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -833,9 +825,8 @@ module AtsMec_LocationAPI_TestCases { mw_http_response_ok( mw_http_message_body_json( mw_body_json_user_area_subscription( - mw_user_area_subscription( - PX_UE_NEW_SUB_CALLBACK_URI - )))))) { + v_user_area_subscription + ))))) { tc_ac.stop; @@ -849,6 +840,7 @@ module AtsMec_LocationAPI_TestCases { } // End of 'alt' statement // Postamble + f_delete_user_area_subscription(v_subscription_id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC013_SRV_UEAREASUB_002_OK @@ -858,6 +850,8 @@ module AtsMec_LocationAPI_TestCases { testcase TC_MEC_MEC013_SRV_UEAREASUB_002_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; + var UserAreaSubscription v_user_area_subscription; + var charstring v_subscription_id; // Test control if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) { @@ -872,6 +866,7 @@ module AtsMec_LocationAPI_TestCases { // Test adapter configuration // Preamble + f_create_user_area_subscription(v_user_area_subscription, v_subscription_id); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( @@ -889,7 +884,10 @@ module AtsMec_LocationAPI_TestCases { PX_RADIUS ), // AreaInfo { PX_IP_ADDRESS }, - PX_TRACKIMNG_ACCURACY // TrackingAccuracy + PX_TRACKIMNG_ACCURACY, // TrackingAccuracy + v_user_area_subscription.clientCorrelator, + v_user_area_subscription.requestTestNotification, + v_user_area_subscription.links_ )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -1090,7 +1088,7 @@ module AtsMec_LocationAPI_TestCases { } // 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 - Invalid filter + * @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 @@ -1113,7 +1111,7 @@ module AtsMec_LocationAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - PICS_ROOT_API & PX_LOC_API_DISTANCE_SUB_URI & "?event", + PICS_ROOT_API & PX_LOC_API_DISTANCE_SUB_URI & "&event", v_headers ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -1167,7 +1165,7 @@ module AtsMec_LocationAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - PICS_ROOT_API & PX_LOC_API_DISTANCE_SUB_URI & v_subscription_id, + PICS_ROOT_API & PX_LOC_API_DISTANCE_SUB_URI & "/" & v_subscription_id, v_headers ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); diff --git a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Functions.ttcn b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Functions.ttcn index 8f3d4da..63ccf1a 100644 --- a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Functions.ttcn +++ b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Functions.ttcn @@ -385,7 +385,7 @@ module LocationAPI_Functions { ), // AreaInfo { PX_IP_ADDRESS }, PX_TRACKIMNG_ACCURACY, // TrackingAccuracy - -, -, -, + -, -, -, -, { ENTERING_AREA_EVENT } )))))); tc_ac.start; @@ -474,9 +474,11 @@ module LocationAPI_Functions { mw_http_response( mw_http_response_201_created( mw_http_message_body_json( - mw_body_json_user_distance_notification( - mw_user_distance_notification( - // FIXME PX_UE_DIST_SUB_CALLBACK_URI + mw_body_json_user_distance_subscription( + mw_user_distance_subscription( + PX_UE_DIST_SUB_CALLBACK_URI, + -, + PX_USER )))))) -> value v_response { tc_ac.stop; diff --git a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Templates.ttcn b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Templates.ttcn index 0e30113..3117de8 100644 --- a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Templates.ttcn +++ b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Templates.ttcn @@ -553,6 +553,7 @@ module LocationAPI_Templates { in Json.Number p_trackingAccuracy, in template (omit) ClientCorrelator p_clientCorrelator := omit, in template (omit) Json.Bool p_requestTestNotification := omit, + in template (omit) Links p_links_ := omit, in template (omit) WebsockNotifConfig p_websockNotifConfig := omit, in template (omit) LocationEventCriteria p_locationEventCriteria := omit, in template (omit) ReportingCtrl p_reportingCtrl := omit, @@ -619,7 +620,7 @@ module LocationAPI_Templates { in template (omit) ReportingCtrl p_reportingCtrl := omit, in template (omit) TimeStamp p_expiryDeadline := omit ) := { - subscriptionType := "UserAreaSubscription", + subscriptionType := "UserDistanceSubscription", clientCorrelator := p_clientCorrelator, callbackReference := p_callbackReference, requestTestNotification := p_requestTestNotification, @@ -651,7 +652,7 @@ module LocationAPI_Templates { template ReportingCtrl p_reportingCtrl := *, template TimeStamp p_expiryDeadline := * ) := { - subscriptionType := "UserAreaSubscription", + subscriptionType := "UserDistanceSubscription", clientCorrelator := p_clientCorrelator, callbackReference := p_callbackReference, requestTestNotification := p_requestTestNotification, -- GitLab From 39a499cd900108bec9473df38f589d63adb0009c Mon Sep 17 00:00:00 2001 From: garciay Date: Tue, 21 May 2024 15:37:09 +0200 Subject: [PATCH 84/99] Bug fixed in UELOCxxx --- ...PlatformApplicationEnablement_Sandbox.cfg_ | 2 +- .../AtsMec_Location_Sandbox.cf_ | 55 +++++++++++++- gs032p3-ttcn-test-suite.code-workspace | 3 + .../AtsMec_LocationAPI_TestCases.ttcn | 75 ++++++++----------- .../ttcn/LocationAPI_Functions.ttcn | 8 +- .../LocationAPI/ttcn/LocationAPI_Pixits.ttcn | 2 + .../ttcn/LocationAPI_Templates.ttcn | 4 +- .../ttcn/LocationAPI_TypesAndValues.ttcn | 34 ++++----- 8 files changed, 114 insertions(+), 69 deletions(-) diff --git a/etc/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablement_Sandbox.cfg_ b/etc/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablement_Sandbox.cfg_ index 03f49c4..cb9bf3f 100644 --- a/etc/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablement_Sandbox.cfg_ +++ b/etc/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablement_Sandbox.cfg_ @@ -40,7 +40,7 @@ LogEventTypes:= Yes [TESTPORT_PARAMETERS] # In this section you can specify parameters that are passed to Test Ports. system.httpPort.params := "HTTP(codecs=json:json_codec_mec011)/TCP(debug=1,server=mec-platform.etsi.org,port=443,use_ssl=1,trusted_ca_list=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem,privkey=/home/yann/var/ssl/archive/yanngarcia.ddns.net/privkey1.pem,certificate=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem)" -system.httpPort_notif.params := "HTTP(codecs=json:json_codec_mec011)/TCP(debug=1,server_mode=1)" +system.httpPort_notif.params := "HTTP(codecs=json:json_codec_mec013)/TCP(debug=1,server_mode=1,use_ssl=0)" [DEFINE] # In this section you can create macro definitions, diff --git a/etc/AtsMec_Location/AtsMec_Location_Sandbox.cf_ b/etc/AtsMec_Location/AtsMec_Location_Sandbox.cf_ index 9ad89fb..9132740 100644 --- a/etc/AtsMec_Location/AtsMec_Location_Sandbox.cf_ +++ b/etc/AtsMec_Location/AtsMec_Location_Sandbox.cf_ @@ -35,6 +35,9 @@ LocationAPI_Pixits.PX_CALLBACK_REF_URL := "http://yanngarcia.ddns.net/lo LocationAPI_Pixits.PX_AREA_SUB_CALLBACK_URI := "http://yanngarcia.ddns.net/location/v3/notif/1" LocationAPI_Pixits.PX_UE_NEW_SUB_CALLBACK_URI := "http://yanngarcia.ddns.net/location/v3/notification/1" LocationAPI_Pixits.PX_UE_DIST_SUB_CALLBACK_URI := "http://yanngarcia.ddns.net/location/v3/notif/1" + +LocationAPI_Pixits.PX_UE_MONITORED_IP_ADDRESS := "10.100.0.1" +LocationAPI_Pixits.PX_UE_REFERENCED_IP_ADDRESS := "10.100.0.3" LocationAPI_Pixits.PX_UE_COORD_LAT := 43.736515 LocationAPI_Pixits.PX_UE_COORD_LONG := 7.421802 @@ -125,10 +128,14 @@ system.httpPort_notif.params := "HTTP(codecs=json:json_codec_mec013)/TCP(debug=1 #AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEDISTLOOK_002_NF # 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_01 - - - - +# 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_02 +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - Neither callbackReference nor websockNotifConfig provided +#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 # Check that the IUT responds with the information pertaining to one or more UEs in a particular location when queried by a MEC Application - No Filter #AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEINFLOOK_001_OK_01 # Check that the IUT responds with the information pertaining to one or more UEs in a particular location when queried by a MEC Application - Filter with one address @@ -161,6 +168,46 @@ system.httpPort_notif.params := "HTTP(codecs=json:json_codec_mec013)/TCP(debug=1 #AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UELOCLOOK_003_OK_02 # Check that the IUT responds with an error when the non existing subscription is queried by a MEC Application #AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UELOCLOOK_003_NF +# Check that the IUT acknowledges the subscription by a MEC Application to notifications user location event +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UELOCSUB_001_OK_01_01 +# Check that the IUT acknowledges the subscription by a MEC Application to notifications user location event +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UELOCSUB_001_OK_01_02 +# Check that the IUT acknowledges the subscription by a MEC Application to notifications user location periodic +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UELOCSUB_001_OK_02_01 +# Check that the IUT acknowledges the subscription by a MEC Application to notifications user location periodic +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UELOCSUB_001_OK_02_02 +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - Neither callbackReference nor websockNotifConfig provided +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UELOCSUB_001_BR_01 +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - Neither callbackReference nor websockNotifConfig provided +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UELOCSUB_001_BR_02 +# 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 acknowledges a request to modify an existing subscription by a MEC Application +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UELOCSUB_003_OK_01 +# Check that the IUT acknowledges a request to modify an existing subscription by a MEC Application +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UELOCSUB_003_OK_02 +# Check that the IUT responds with an error when received an inconsistent request +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UELOCSUB_003_BR_01 +# Check that the IUT responds with an error when received an inconsistent request +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UELOCSUB_003_BR_02 +# Check that the IUT acknowledges a request to modify a not existing subscription by a MEC Application +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UELOCSUB_003_NF_01 +# Check that the IUT acknowledges a request to modify a not existing subscription by a MEC Application +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UELOCSUB_003_NF_02 +# Check that the IUT provides a test notification when requested by a MEC Application +AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UETESTNOT_001_OK +# Check that the IUT responds with a list zones when queried by a MEC Application +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEZONELOOK_001_OK +# Check that the IUT responds with the subscription when queried by a MEC Application - Zone location Event +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEZONELOOK_002_OK_01 +# Check that the IUT responds with the subscription when queried by a MEC Application - Zone Status +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEZONELOOK_002_OK_02 + + + + [GROUPS] # In this section you can specify groups of hosts. These groups can be used inside the diff --git a/gs032p3-ttcn-test-suite.code-workspace b/gs032p3-ttcn-test-suite.code-workspace index 759f5b5..5d03749 100644 --- a/gs032p3-ttcn-test-suite.code-workspace +++ b/gs032p3-ttcn-test-suite.code-workspace @@ -8,6 +8,9 @@ }, { "path": "../eurecom" + }, + { + "path": "../gs032p3-robot-test-suite" } ], "settings": { diff --git a/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestCases.ttcn b/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestCases.ttcn index c19212b..df77538 100644 --- a/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestCases.ttcn +++ b/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestCases.ttcn @@ -1293,7 +1293,8 @@ module AtsMec_LocationAPI_TestCases { PX_TRACKIMNG_ACCURACY, AllWithinDistance, -, // checkImmediate - PX_CLIENT_ID //clientCorrelator + PX_CLIENT_ID, //clientCorrelator + { PX_UE_REFERENCED_IP_ADDRESS } )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -3078,6 +3079,7 @@ module AtsMec_LocationAPI_TestCases { // Preamble f_create_user_location_event_subscription(v_user_location_event_subscription, v_subscription_id); f_init_default_headers_list(-, -, v_headers); + v_user_location_event_subscription.callbackReference := PX_UE_NEW_SUB_CALLBACK_URI; httpPort.send( m_http_request( m_http_request_put( @@ -3085,11 +3087,8 @@ module AtsMec_LocationAPI_TestCases { v_headers, m_http_message_body_json( m_body_json_user_location_event_subscription( - m_user_location_event_subscription( - PX_UE_NEW_SUB_CALLBACK_URI, - PX_USER, - PX_CLIENT_ID - )))))); + v_user_location_event_subscription + ))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -3100,12 +3099,8 @@ module AtsMec_LocationAPI_TestCases { mw_http_response_ok( mw_http_message_body_json( mw_body_json_user_location_event_subscription( - mw_user_location_event_subscription( - PX_UE_NEW_SUB_CALLBACK_URI, - PX_USER, - -, - PX_CLIENT_ID - )))))) { + v_user_location_event_subscription + ))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully updates userLocationPeriodicSubscription, SubscriptionId: ", v_subscription_id," ***"); @@ -3146,6 +3141,7 @@ module AtsMec_LocationAPI_TestCases { // Preamble f_create_user_location_periodic_subscription(v_user_location_periodic_subscription, v_subscription_id); f_init_default_headers_list(-, -, v_headers); + v_user_location_periodic_subscription.callbackReference := PX_UE_NEW_SUB_CALLBACK_URI; httpPort.send( m_http_request( m_http_request_put( @@ -3153,12 +3149,8 @@ module AtsMec_LocationAPI_TestCases { v_headers, m_http_message_body_json( m_body_json_user_location_periodic_subscription( - m_user_location_periodic_subscription( - PX_UE_NEW_SUB_CALLBACK_URI, - PX_USER, - -, - PX_CLIENT_ID - )))))); + v_user_location_periodic_subscription + ))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -3169,12 +3161,8 @@ module AtsMec_LocationAPI_TestCases { mw_http_response_ok( mw_http_message_body_json( mw_body_json_user_location_periodic_subscription( - mw_user_location_periodic_subscription( - PX_UE_NEW_SUB_CALLBACK_URI, - PX_USER, - -, -, - PX_CLIENT_ID - )))))) { + v_user_location_periodic_subscription + ))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully updates userLocationPeriodicSubscription, SubscriptionId: ", v_subscription_id," ***"); @@ -3315,11 +3303,13 @@ module AtsMec_LocationAPI_TestCases { } // End of testcase TC_MEC_MEC013_SRV_UELOCSUB_003_BR_02 /** - * @desc Check that the IUT acknowledges a request to modify a not existing subscription by a MEC Application + * @desc Check that the IUT responds with an error when received a request to modify a not existing subscription by a MEC Application */ testcase TC_MEC_MEC013_SRV_UELOCSUB_003_NF_01() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; + var UserLocationEventSubscription v_user_location_event_subscription; + var charstring v_subscription_id; // Test control if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) { @@ -3334,7 +3324,9 @@ module AtsMec_LocationAPI_TestCases { // Test adapter configuration // Preamble + f_create_user_location_event_subscription(v_user_location_event_subscription, v_subscription_id); f_init_default_headers_list(-, -, v_headers); + v_user_location_event_subscription.callbackReference := PX_UE_NEW_SUB_CALLBACK_URI; httpPort.send( m_http_request( m_http_request_put( @@ -3342,11 +3334,8 @@ module AtsMec_LocationAPI_TestCases { v_headers, m_http_message_body_json( m_body_json_user_location_event_subscription( - m_user_location_event_subscription( - PX_UE_NEW_SUB_CALLBACK_URI, - PX_USER, - PX_CLIENT_ID - )))))); + v_user_location_event_subscription + ))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -3368,6 +3357,7 @@ module AtsMec_LocationAPI_TestCases { } // End of 'alt' statement // Postamble + f_delete_user_location_periodic_subscription(v_subscription_id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC013_SRV_UELOCSUB_003_NF_01 @@ -3377,6 +3367,8 @@ module AtsMec_LocationAPI_TestCases { testcase TC_MEC_MEC013_SRV_UELOCSUB_003_NF_02() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; + var UserLocationPeriodicSubscription v_user_location_periodic_subscription; + var charstring v_subscription_id; // Test control if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) { @@ -3391,7 +3383,9 @@ module AtsMec_LocationAPI_TestCases { // Test adapter configuration // Preamble + f_create_user_location_periodic_subscription(v_user_location_periodic_subscription, v_subscription_id); f_init_default_headers_list(-, -, v_headers); + v_user_location_periodic_subscription.callbackReference := PX_UE_NEW_SUB_CALLBACK_URI; httpPort.send( m_http_request( m_http_request_put( @@ -3399,12 +3393,8 @@ module AtsMec_LocationAPI_TestCases { v_headers, m_http_message_body_json( m_body_json_user_location_periodic_subscription( - m_user_location_periodic_subscription( - PX_UE_NEW_SUB_CALLBACK_URI, - PX_USER, - -, - PX_CLIENT_ID - )))))); + v_user_location_periodic_subscription + ))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -3426,6 +3416,7 @@ module AtsMec_LocationAPI_TestCases { } // End of 'alt' statement // Postamble + f_delete_user_location_periodic_subscription(v_subscription_id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC013_SRV_UELOCSUB_003_NF_02 @@ -3763,8 +3754,8 @@ module AtsMec_LocationAPI_TestCases { { *, mw_subscription( - "ZoneLocationEventSubscription", - v_zone_location_event_notification.links_.self_.href + "ZoneLocationEventSubscription", + v_zone_location_event_notification.links_.subscription.href ), * } @@ -3831,7 +3822,7 @@ module AtsMec_LocationAPI_TestCases { *, mw_subscription( "ZoneStatusSubscription", - v_zone_status_notification.links_.self_.href + v_zone_status_notification.links_.subscription.href ), * } @@ -3902,7 +3893,7 @@ module AtsMec_LocationAPI_TestCases { *, mw_subscription( "ZoneLocationEventSubscription.", - v_zone_location_event_notification_2.links_.self_.href + v_zone_location_event_notification_2.links_.subscription.href ), * } @@ -4091,7 +4082,7 @@ module AtsMec_LocationAPI_TestCases { *, mw_subscription( "ZoneLocationEventSubscription.", - v_zone_location_event_notification.links_.self_.href + v_zone_location_event_notification.links_.subscription.href ), * } @@ -4158,7 +4149,7 @@ module AtsMec_LocationAPI_TestCases { *, mw_subscription( "ZoneLocationEventSubscription.", - v_zone_status_notification.links_.self_.href + v_zone_status_notification.links_.subscription.href ), * } diff --git a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Functions.ttcn b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Functions.ttcn index 63ccf1a..8a941fa 100644 --- a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Functions.ttcn +++ b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Functions.ttcn @@ -466,8 +466,10 @@ module LocationAPI_Functions { PX_USER, { PX_UE_MONITORED_IP_ADDRESS }, PX_DISTANCE, - PX_TRACKIMNG_ACCURACY - )))))); + PX_TRACKIMNG_ACCURACY, + -, -, -, + { PX_UE_REFERENCED_IP_ADDRESS } + )))))); tc_ac.start; alt { [] httpPort.receive( @@ -479,7 +481,7 @@ module LocationAPI_Functions { PX_UE_DIST_SUB_CALLBACK_URI, -, PX_USER - )))))) -> value v_response { + )))))) -> value v_response { tc_ac.stop; // Extract HTTP Location header diff --git a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Pixits.ttcn b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Pixits.ttcn index d45af28..2a02c71 100644 --- a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Pixits.ttcn +++ b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Pixits.ttcn @@ -60,6 +60,8 @@ module LocationAPI_Pixits { modulepar CallbackReference PX_UE_NEW_SUB_CALLBACK_URI := "http://clientApp.example.com/new_location_notifications/123456"; modulepar Address PX_UE_MONITORED_IP_ADDRESS := "acr:10.0.0.1"; + + modulepar Address PX_UE_REFERENCED_IP_ADDRESS := "acr:10.0.0.2"; modulepar Address PX_ACR_UNKNOWN_IP := "acr:10.0.0.254"; diff --git a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Templates.ttcn b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Templates.ttcn index 3117de8..1a665cc 100644 --- a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Templates.ttcn +++ b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Templates.ttcn @@ -614,9 +614,9 @@ module LocationAPI_Templates { in template (value) DistanceCriteria p_criteria := AllWithinDistance, in Json.Bool p_checkImmediate := true, in template (omit) ClientCorrelator p_clientCorrelator := omit, + in template (omit) Json.AnyURIArray p_referenceAddress := omit, in template (omit) Json.Bool p_requestTestNotification := omit, in template (omit) WebsockNotifConfig p_websockNotifConfig := omit, - in template (omit) Json.AnyURI p_referenceAddress := omit, in template (omit) ReportingCtrl p_reportingCtrl := omit, in template (omit) TimeStamp p_expiryDeadline := omit ) := { @@ -646,9 +646,9 @@ module LocationAPI_Templates { template (present) DistanceCriteria p_criteria := ?, template (present) Json.Bool p_checkImmediate := ?, template ClientCorrelator p_clientCorrelator := *, + template Json.AnyURIArray p_referenceAddress := *, template Json.Bool p_requestTestNotification := *, template WebsockNotifConfig p_websockNotifConfig := *, - template Json.AnyURI p_referenceAddress := *, template ReportingCtrl p_reportingCtrl := *, template TimeStamp p_expiryDeadline := * ) := { diff --git a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn index 3003eb2..e7f86e4 100644 --- a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn @@ -917,7 +917,7 @@ module LocationAPI_TypesAndValues { Json.Bool requestTestNotification optional, WebsockNotifConfig websockNotifConfig optional, Links links_ optional, - Json.AnyURI referenceAddress optional, + Json.AnyURIArray referenceAddress optional, Json.AnyURIArray monitoredAddress, Json.Number distance, Json.Number trackingAccuracy, @@ -976,7 +976,7 @@ module LocationAPI_TypesAndValues { RelativeLocationInfo relativeLocationInfo optional, ZoneId zoneId optional, AccessPointId accessPointId optional, - Links links_ + LinksSubscription links_ } with { variant (links_) "name as '_links'"; variant (address_) "name as 'address'"; @@ -1008,7 +1008,7 @@ module LocationAPI_TypesAndValues { ZoneId zoneId optional, AccessPointId accessPointId optional, Json.Bool isFinalNotification optional, - Links links_ + LinksSubscription links_ } with { variant (links_) "name as '_links'"; variant (address_) "name as 'address'"; @@ -1030,7 +1030,7 @@ module LocationAPI_TypesAndValues { Address address_, LocationEventType userLocationEvent, ZoneId zoneId optional, - Links links_ + LinksSubscription links_ } with { variant (links_) "name as '_links'"; variant (address_) "name as 'address'"; @@ -1048,13 +1048,13 @@ module LocationAPI_TypesAndValues { * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.4.7 Type: ZoneStatusNotification */ type record ZoneStatusNotification { - Json.String notificationType, - TimeStamp timeStamp optional, - UserNumEvent userNumEvent optional, - OperationStatus operationStatus optional, - ZoneId zoneId optional, - AccessPointId accessPointId optional, - Links links_ + Json.String notificationType, + TimeStamp timeStamp optional, + UserNumEvent userNumEvent optional, + OperationStatus operationStatus optional, + ZoneId zoneId optional, + AccessPointId accessPointId optional, + LinksSubscription links_ } with { variant (links_) "name as '_links'"; } // End of type ZoneStatusNotification @@ -1088,7 +1088,7 @@ module LocationAPI_TypesAndValues { CivicAddress civicInfo optional, RelativeLocationInfo relativeLocationInfo optional, LocationEventType userLocationEvent, - Links links_ + LinksSubscription links_ } with { variant (links_) "name as '_links'"; variant (address_) "name as 'address'"; @@ -1104,11 +1104,11 @@ module LocationAPI_TypesAndValues { * @see ETSI GS MEC 013 V3.1.1 (2023-01) Clause 6.4.9 Type: UserDistanceNotification */ type record UserDistanceNotification { - Json.String notificationType, - TimeStamp timeStamp optional, - UserList monitoredUsers, - DistanceCriteria distanceEvent, - Links links_ + Json.String notificationType, + TimeStamp timeStamp optional, + UserList monitoredUsers, + DistanceCriteria distanceEvent, + LinksSubscription links_ } with { variant (links_) "name as '_links'"; } // End of type UserDistanceNotification -- GitLab From 53c0540844f5abef62941719a8b7d10d7164d3a5 Mon Sep 17 00:00:00 2001 From: garciay Date: Thu, 23 May 2024 08:14:15 +0200 Subject: [PATCH 85/99] Bug fixed in TC_MEC_MEC011_SRV_SRVSUB_xxx --- ccsrc/Protocols/Json/json_codec.cc | 4 ---- ccsrc/Protocols/Json/json_codec_mec011.cc | 14 +++++++++----- ...PlatformApplicationEnablement_Sandbox.cfg_ | 10 +++++----- ...ormApplicationEnablementAPI_TestCases.ttcn | 19 ++++++------------- 4 files changed, 20 insertions(+), 27 deletions(-) diff --git a/ccsrc/Protocols/Json/json_codec.cc b/ccsrc/Protocols/Json/json_codec.cc index f0c9464..ebf7bf9 100644 --- a/ccsrc/Protocols/Json/json_codec.cc +++ b/ccsrc/Protocols/Json/json_codec.cc @@ -135,10 +135,6 @@ int json_codec::decode (const OCTETSTRING& p_data, LibHttp__JsonMessageBodyTypes UEAppInterfaceAPI__TypesAndValues::AppInfo appInfo; appInfo.decode(UEAppInterfaceAPI__TypesAndValues::AppInfo_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.appInfo() = appInfo; - } else if (it->second.find("\"appName\"") != std::string::npos) { - EdgePlatformApplicationEnablementAPI__TypesAndValues::AppInfo appInfo; - appInfo.decode(EdgePlatformApplicationEnablementAPI__TypesAndValues::AppInfo_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); - msg.appInfo__regapps() = appInfo; } else if ((it->second.find("\"bwInfo\"") != std::string::npos) || (it->second.find("\"fixedBWPriority\"") != std::string::npos)) { // Need to change some enumerated string not supported by TTCN-3 language while (true) { diff --git a/ccsrc/Protocols/Json/json_codec_mec011.cc b/ccsrc/Protocols/Json/json_codec_mec011.cc index e7ae15d..ee40f12 100644 --- a/ccsrc/Protocols/Json/json_codec_mec011.cc +++ b/ccsrc/Protocols/Json/json_codec_mec011.cc @@ -153,18 +153,18 @@ int json_codec_mec011::decode (const OCTETSTRING& p_data, LibHttp__JsonMessageBo dns_rule.decode(EdgePlatformApplicationEnablementAPI__TypesAndValues::DnsRule_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.dnsRule() = dns_rule; } + } else if ((it->second.find("\"SerAvailabilityNotificationSubscription\"") != std::string::npos) || (it->second.find("\"rel\"") != 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("\"_links\"") != std::string::npos) && (it->second.find("\"subscriptions\"") != std::string::npos)) { 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("\"AppTerminationNotificationSubscription\"") != std::string::npos) { + } else if ((it->second.find("\"AppTerminationNotificationSubscription\"") != std::string::npos) && (it->second.find("\"callbackReference\"") != 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) || (it->second.find("{\"timeStamp\"") == 0)) { EdgePlatformApplicationEnablementAPI__TypesAndValues::TimingCaps timing_caps; timing_caps.decode(EdgePlatformApplicationEnablementAPI__TypesAndValues::TimingCaps_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); @@ -173,6 +173,10 @@ int json_codec_mec011::decode (const OCTETSTRING& p_data, LibHttp__JsonMessageBo 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("\"appName\"") != std::string::npos) { + EdgePlatformApplicationEnablementAPI__TypesAndValues::AppInfo appInfo; + appInfo.decode(EdgePlatformApplicationEnablementAPI__TypesAndValues::AppInfo_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); + msg.appInfo__regapps() = appInfo; } else { loggers::get_instance().warning("json_codec_mec011::decode: Unsupported variant"); return -1; diff --git a/etc/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablement_Sandbox.cfg_ b/etc/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablement_Sandbox.cfg_ index cb9bf3f..a5fe529 100644 --- a/etc/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablement_Sandbox.cfg_ +++ b/etc/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablement_Sandbox.cfg_ @@ -19,7 +19,7 @@ LibMec_Pics.PICS_ROOT_API := "/sbxykqjr17/mep1/" # Need to sign i LibMec_Pics.PICS_MEC_PLAT := true # Application Instance ID -EdgePlatformApplicationEnablementAPI_Pixits.PX_APP_INSTANCE_ID := "2815c5ee-b4e3-4105-9112-0ef9f8a1b32d" # Copied from ETSI MEC Sandbox GUI +EdgePlatformApplicationEnablementAPI_Pixits.PX_APP_INSTANCE_ID := "6c6b308f-4849-413a-9b15-6cae37ee5fce" # Copied from ETSI MEC Sandbox GUI # Callbacks @@ -40,7 +40,7 @@ LogEventTypes:= Yes [TESTPORT_PARAMETERS] # In this section you can specify parameters that are passed to Test Ports. system.httpPort.params := "HTTP(codecs=json:json_codec_mec011)/TCP(debug=1,server=mec-platform.etsi.org,port=443,use_ssl=1,trusted_ca_list=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem,privkey=/home/yann/var/ssl/archive/yanngarcia.ddns.net/privkey1.pem,certificate=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem)" -system.httpPort_notif.params := "HTTP(codecs=json:json_codec_mec013)/TCP(debug=1,server_mode=1,use_ssl=0)" +system.httpPort_notif.params := "HTTP(codecs=json:json_codec_mec011)/TCP(debug=1,server_mode=1,use_ssl=0)" [DEFINE] # In this section you can create macro definitions, @@ -81,7 +81,7 @@ system.httpPort_notif.params := "HTTP(codecs=json:json_codec_mec013)/TCP(debug=1 #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# +# 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 @@ -123,7 +123,7 @@ system.httpPort_notif.params := "HTTP(codecs=json:json_codec_mec013)/TCP(debug=1 #AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_CONFTASK_002_NF # 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 +#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 @@ -149,7 +149,7 @@ AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_MSL_001_ # 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 +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 diff --git a/ttcn/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn b/ttcn/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn index 10174d2..cfbcd83 100644 --- a/ttcn/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn +++ b/ttcn/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn @@ -566,6 +566,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { // Preamble f_create_service_info(v_service_info, v_subscription_id); f_init_default_headers_list(-, -, v_headers); + v_service_info.version := PX_NEW_SERVICE_INFO_VERSION; httpPort.send( m_http_request( m_http_request_put( @@ -573,12 +574,8 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { v_headers, m_http_message_body_json( m_body_json_service_info( - m_service_info( - v_service_info.serName, - PX_NEW_SERVICE_INFO_VERSION, - -, -, -, -, -, - v_service_info.transportInfo - )))))); + v_service_info + ))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -589,12 +586,8 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { mw_http_response_ok( mw_http_message_body_json( mw_body_json_service_info( - mw_service_info( - v_service_info.serName, - PX_NEW_SERVICE_INFO_VERSION, - -, -, -, -, -, - v_service_info.transportInfo - )))))) { + v_service_info + ))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a modified ServiceInfo ***"); @@ -2362,7 +2355,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { m_app_info( PX_APP_NAME, -, -, -, - -, + -,//PX_APP_INSTANCE_ID, m_end_point_uris({PX_APP_ENDPOINT_URI}) )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); -- GitLab From cccc1ce3474141ffd7740718e5b0928df4fe2337 Mon Sep 17 00:00:00 2001 From: garciay Date: Thu, 23 May 2024 16:23:39 +0200 Subject: [PATCH 86/99] Validate TC_MEC_MEC011_SRV_MSL_xxx --- ccsrc/Protocols/Json/json_codec_mec011.cc | 8 ++ ...PlatformApplicationEnablement_Sandbox.cfg_ | 10 +- .../AtsMec_FederationEnablement_Mockoon.cf_ | 9 +- ...ormApplicationEnablementAPI_TestCases.ttcn | 43 ++++--- ...ormApplicationEnablementAPI_Functions.ttcn | 64 +++++++++++ ...atformApplicationEnablementAPI_Pixits.ttcn | 4 +- ...ormApplicationEnablementAPI_Templates.ttcn | 33 +++++- ...plicationEnablementAPI_TypesAndValues.ttcn | 9 ++ .../ttcn/LibHttp_JsonMessageBodyTypes.ttcn | 105 +++++++++--------- .../ttcn/LibHttp_JsonTemplates.ttcn | 12 ++ 10 files changed, 211 insertions(+), 86 deletions(-) diff --git a/ccsrc/Protocols/Json/json_codec_mec011.cc b/ccsrc/Protocols/Json/json_codec_mec011.cc index ee40f12..1462b00 100644 --- a/ccsrc/Protocols/Json/json_codec_mec011.cc +++ b/ccsrc/Protocols/Json/json_codec_mec011.cc @@ -44,6 +44,10 @@ int json_codec_mec011::encode (const LibHttp__JsonMessageBodyTypes::JsonBody& ms 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(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_serviceLivenessUpdate)) { + const EdgePlatformApplicationEnablementAPI__TypesAndValues::ServiceLivenessUpdate& service_liveness_update = msg.serviceLivenessUpdate(); + service_liveness_update.encode(EdgePlatformApplicationEnablementAPI__TypesAndValues::ServiceLivenessUpdate_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); + data = char2oct(CHARSTRING("{\"serviceLivenessUpdate\": ")) + OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data()) + char2oct(CHARSTRING("}")); } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_trafficRule)) { const EdgePlatformApplicationEnablementAPI__TypesAndValues::TrafficRule& traffic_rule = msg.trafficRule(); traffic_rule.encode(EdgePlatformApplicationEnablementAPI__TypesAndValues::TrafficRule_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); @@ -165,6 +169,10 @@ int json_codec_mec011::decode (const OCTETSTRING& p_data, LibHttp__JsonMessageBo 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("\"state\"") != std::string::npos) && (it->second.find("\"interval\"") != std::string::npos)) { + EdgePlatformApplicationEnablementAPI__TypesAndValues::ServiceLivenessInfo service_liveness_info; + service_liveness_info.decode(EdgePlatformApplicationEnablementAPI__TypesAndValues::ServiceLivenessInfo_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); + msg.serviceLivenessInfo() = service_liveness_info; } 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); diff --git a/etc/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablement_Sandbox.cfg_ b/etc/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablement_Sandbox.cfg_ index a5fe529..26362be 100644 --- a/etc/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablement_Sandbox.cfg_ +++ b/etc/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablement_Sandbox.cfg_ @@ -19,7 +19,7 @@ LibMec_Pics.PICS_ROOT_API := "/sbxykqjr17/mep1/" # Need to sign i LibMec_Pics.PICS_MEC_PLAT := true # Application Instance ID -EdgePlatformApplicationEnablementAPI_Pixits.PX_APP_INSTANCE_ID := "6c6b308f-4849-413a-9b15-6cae37ee5fce" # Copied from ETSI MEC Sandbox GUI +EdgePlatformApplicationEnablementAPI_Pixits.PX_APP_INSTANCE_ID := "bd880c4d-5d75-43d4-8541-d852db57f1ab" # Copied from ETSI MEC Sandbox GUI # Callbacks @@ -127,7 +127,7 @@ system.httpPort_notif.params := "HTTP(codecs=json:json_codec_mec011)/TCP(debug=1 # 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 +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 @@ -149,7 +149,7 @@ system.httpPort_notif.params := "HTTP(codecs=json:json_codec_mec011)/TCP(debug=1 # 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 +#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 @@ -188,10 +188,6 @@ AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_SRVSUB_0 # Check that the IUT responds with an error when queried to delete an unknown MEC Application registration #AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_REGAPPS_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 diff --git a/etc/AtsMec_FederationEnablement/AtsMec_FederationEnablement_Mockoon.cf_ b/etc/AtsMec_FederationEnablement/AtsMec_FederationEnablement_Mockoon.cf_ index a53911e..b152ef9 100644 --- a/etc/AtsMec_FederationEnablement/AtsMec_FederationEnablement_Mockoon.cf_ +++ b/etc/AtsMec_FederationEnablement/AtsMec_FederationEnablement_Mockoon.cf_ @@ -8,14 +8,12 @@ LibCommon_Time.PX_TAC := 30.0 LibCommon_Sync.PX_TSYNC_TIME_LIMIT := 30.0; LibCommon_Sync.PX_TSHUT_DOWN_TIME_LIMIT := 30.0; -LibHttp_Pics.PICS_HEADER_HOST := "try-mec.etsi.org" #"192.168.1.39" +LibHttp_Pics.PICS_HEADER_HOST := "192.168.1.39" LibHttp_Pics.PICS_HEADER_CONTENT_TYPE := "application/json" LibHttp_Pics.PICS_USE_TOKEN_HEADER := true #LibHttp_Pics.PICS_TOKEN_HEADER := "Basic WrongToken" -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 @@ -35,9 +33,8 @@ 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_notif.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server_mode=1,local_port=443,use_ssl=1)" +system.httpPort.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server=192.168.1.21,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=80,use_ssl=0)" [DEFINE] diff --git a/ttcn/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn b/ttcn/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn index cfbcd83..9d448a1 100644 --- a/ttcn/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn +++ b/ttcn/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn @@ -2081,6 +2081,9 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { } // End of group app_dns + /* + * LivenessInfo (MSL) + */ group msl { /** @@ -2091,6 +2094,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { var Headers v_headers; var ServiceInfo v_service_info; var charstring v_subscription_id; + var charstring v_uri; // Test control if (not(PICS_MEC_PLAT) or not (PICS_SERVICES) or not(PICS_APP_ENABLEMENT_API_SUPPORTED)) { @@ -2105,12 +2109,17 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { // Test adapter configuration // Preamble - f_create_service_info(v_service_info, v_subscription_id); + f_create_service_info_with_liveness(v_service_info, v_subscription_id); f_init_default_headers_list(-, -, v_headers); + v_uri := regexp( + oct2char(unichar2oct(v_service_info.links.liveness.href, "UTF-8")), + "?+" & PX_LINK_LIV & "/(?*)", + 0 + ); httpPort.send( m_http_request( m_http_request_get( - PICS_ROOT_API & PX_LINK_LIV, + PICS_ROOT_API & PX_LINK_LIV & "/" & v_uri, v_headers ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -2201,6 +2210,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { var Headers v_headers; var ServiceInfo v_service_info; var charstring v_subscription_id; + var charstring v_uri; // Test control if (not(PICS_MEC_PLAT) or not (PICS_SERVICES) or not(PICS_APP_ENABLEMENT_API_SUPPORTED)) { @@ -2217,19 +2227,20 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { // Preamble f_create_service_info(v_service_info, v_subscription_id); f_init_default_headers_list(-, -, v_headers); + v_uri := regexp( + oct2char(unichar2oct(v_service_info.links.liveness.href, "UTF-8")), + "?+" & PX_LINK_LIV & "/(?*)", + 0 + ); httpPort.send( m_http_request( m_http_request_patch( - PICS_ROOT_API & PX_LINK_LIV, + PICS_ROOT_API & PX_LINK_LIV & "/" & v_uri, 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 + m_body_json_srv_liveness_update( + m_service_liveness_update( + ACTIVE )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -2246,7 +2257,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { )))))) { tc_ac.stop; - log("*** " & testcasename() & ": PASS: IUT successfully responds with a new ServiceLivenessInfo ***"); + log("*** " & testcasename() & ": PASS: IUT successfully responds with an updated ServiceLivenessInfo ***"); f_selfOrClientSyncAndVerdict(c_tbDone, e_success); } [] tc_ac.timeout { @@ -2287,13 +2298,9 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { 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 + m_body_json_srv_liveness_update( + m_service_liveness_update( + INACTIVE )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); diff --git a/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Functions.ttcn b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Functions.ttcn index 5df5a05..08ce93a 100644 --- a/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Functions.ttcn +++ b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Functions.ttcn @@ -86,6 +86,70 @@ module EdgePlatformApplicationEnablementAPI_Functions { } // End of 'alt' statement } // End of function f_create_service_info + function f_create_service_info_with_liveness( + out ServiceInfo p_service_info, + out charstring p_subscription_id + ) 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_ME_APP_REG_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( + "REST", + "REST_HTTP", + REST_HTTP, + "HTTP", + "2.0", + m_end_point_uris({"/meMp1/service/MyEntryPoint"}), + m_security_info + ), + -, + PX_LIVENESS_INTERVAL + )))))); + 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, + -, -, -, + mw_service_info_link_liveness + )))))) -> value v_response { + tc_ac.stop; + + // Extract HTTP Location header + var charstring_list v_subscription_id; + f_get_header(v_response.response.header, "Location", v_subscription_id); + // Extract HTTP subssription id + p_subscription_id := regexp( + v_subscription_id[0], + "?+" & PX_ME_APP_REG_APPS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/services" & "/(?*)", + 0 + ); + p_service_info := v_response.response.body.json_body.serviceInfo; + log("f_create_service_info: INFO: IUT successfully responds to the service creation: ", p_service_info); + log("f_create_service_info: INFO: Resource URI: ", p_subscription_id); + } + [] tc_ac.timeout { + log("f_create_service_info: INCONC: Expected message not received"); + } + } // End of 'alt' statement + } // End of function f_create_service_info_with_liveness + function f_delete_service_info( in charstring p_subscription_id ) runs on HttpComponent { diff --git a/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Pixits.ttcn b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Pixits.ttcn index 3a7bcfd..3b54f9a 100644 --- a/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Pixits.ttcn +++ b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Pixits.ttcn @@ -38,6 +38,8 @@ module EdgePlatformApplicationEnablementAPI_Pixits { modulepar AppTerminationNotificationSubscription_CallbackReference PX_APP_TERM_NOTIF_CALLBACK_URI := "http://example.com/exampleAPI/location/v1/app_termination"; + modulepar Json.UInteger PX_LIVENESS_INTERVAL := 1; + modulepar Href PX_HREF := "http://www.etsi.org"; modulepar Href PX_SUBSCRIPTION_ID := "3"; @@ -66,6 +68,6 @@ module EdgePlatformApplicationEnablementAPI_Pixits { modulepar TrafficRule_Id PX_NON_EXISTENT_TRAFFIC_RULE_ID := "trafficRuleId99"; - modulepar charstring PX_LINK_LIV := "link/to/individual/mecServiceLiveness"; + modulepar charstring PX_LINK_LIV := "mec_service_mgmt/v1/resource_uri_allocated_by_MEC_platform"; } // End of module EdgePlatformApplicationEnablementAPI_Pixits diff --git a/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Templates.ttcn b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Templates.ttcn index 2121e7d..74c1915 100644 --- a/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Templates.ttcn +++ b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_Templates.ttcn @@ -59,6 +59,14 @@ module EdgePlatformApplicationEnablementAPI_Templates { alternative := * } // End of template mw_end_point_uris + template (omit) ServiceInfo_Link m_service_info_link_liveness( + in template (value) Href p_href, + in template (value) Href p_liveness_href + ) := { + self_ := { href := p_href}, + liveness := { href := p_liveness_href} + } // End of template m_service_info_link_liveness + template (omit) ServiceInfo_Link m_service_info_link( in template (value) Href p_href ) := { @@ -73,6 +81,14 @@ module EdgePlatformApplicationEnablementAPI_Templates { liveness := * } // End of template mw_service_info_link + template (present) ServiceInfo_Link mw_service_info_link_liveness( + template (present) Href p_href := ?, + template (present) Href p_liveness_href := ? + ) := { + self_ := { href := p_href}, + liveness := { href := p_liveness_href} + } // End of template mw_service_info_link_liveness + template (omit) ServiceInfo m_service_info( in SerName p_serName, in ServiceInfo_Version p_version := PX_SERVICE_INFO_VERSION, @@ -82,7 +98,8 @@ module EdgePlatformApplicationEnablementAPI_Templates { 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 + in template (omit) CategoryRef p_serCategory := omit, + in template (omit) Json.UInteger p_livenessInterval := omit ) := { serInstanceId := p_serInstanceId, serName := p_serName, @@ -95,7 +112,7 @@ module EdgePlatformApplicationEnablementAPI_Templates { scopeOfLocality := omit, consumedLocalOnly := omit, isLocal := omit, - livenessInterval := omit, + livenessInterval := p_livenessInterval, links := p_links } // End of template m_service_info @@ -255,6 +272,18 @@ module EdgePlatformApplicationEnablementAPI_Templates { interval := p_interval } // End of template mw_service_liveness_info + template (value) ServiceLivenessUpdate m_service_liveness_update( + in ServiceState p_state := ACTIVE + ) := { + state := p_state + } // End of template m_service_liveness_update + + template (present) ServiceLivenessUpdate mw_service_liveness_update( + template (present) ServiceState p_state := ACTIVE + ) := { + state := p_state + } // End of template mw_service_liveness_update + template (value) TransportInfo m_transport_info( in TransportInfo_Id p_id, in TransportInfo_Name p_name, diff --git a/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_TypesAndValues.ttcn b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_TypesAndValues.ttcn index 126717b..ad62b1c 100644 --- a/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/EdgePlatformApplicationEnablementAPI/ttcn/EdgePlatformApplicationEnablementAPI_TypesAndValues.ttcn @@ -124,6 +124,15 @@ module EdgePlatformApplicationEnablementAPI_TypesAndValues { integer interval } + /** + * @desc This type represents changes to the liveness information of a MEC service instance + * @member state Update to the state of the MEC service instance to indicate that the service is still alive. + * @see ETSI GS MEC 011 V3.2.1 Table 8.1.2.5-1: Attributes of ServiceLivenessUpdate + */ + type record ServiceLivenessUpdate { + ServiceState state + } + /** * @desc Reference of the catalogue. */ diff --git a/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn b/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn index 2dc8d1c..332f676 100644 --- a/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn +++ b/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn @@ -120,64 +120,65 @@ module LibHttp_JsonMessageBodyTypes { AppInstanceSubscriptionLinkList appInstSubscriptionLinkList, CancelMode cancelMode, AppInstNotification appInstNotification, - UEAppInterfaceAPI_TypesAndValues.AppContext appContext, - UEAppInterfaceAPI_TypesAndValues.AppInfo appInfo, - ServiceInfoList serviceInfoList, - ServiceInfo serviceInfo, + UEAppInterfaceAPI_TypesAndValues.AppContext appContext, + UEAppInterfaceAPI_TypesAndValues.AppInfo appInfo, + ServiceInfoList serviceInfoList, + ServiceInfo serviceInfo, EdgePlatformApplicationEnablementAPI_TypesAndValues.SubscriptionLinkList subscriptionLinkList_app_ens, - AppTerminationNotificationSubscription appTerminationNotificationSubscription, - AppTerminationConfirmation appTerminationConfirmation, - AppReadyConfirmation appReadyConfirmation, - ServiceLivenessInfo serviceLivenessInfo, - DnsRuleList dnsRuleList, - DnsRule dnsRule, - SerAvailabilityNotificationSubscription serAvailabilityNotificationSubscription, - TimingCaps timingCaps, - CurrentTime currentTime, + AppTerminationNotificationSubscription appTerminationNotificationSubscription, + AppTerminationConfirmation appTerminationConfirmation, + AppReadyConfirmation appReadyConfirmation, + ServiceLivenessInfo serviceLivenessInfo, + ServiceLivenessUpdate serviceLivenessUpdate, + DnsRuleList dnsRuleList, + DnsRule dnsRule, + SerAvailabilityNotificationSubscription serAvailabilityNotificationSubscription, + TimingCaps timingCaps, + CurrentTime currentTime, DeviceApplicationInterfaceAPI_TypesAndValues.ApplicationList applicationList, - DeviceApplicationInterfaceAPI_TypesAndValues.AppContext appContext_device_info, - ApplicationLocationAvailability applicationLocationAvailability, - ApInfoList apInfoList, - StaInfoList staInfoList, - AssocStaSubscription assocStaSubscription, - StaDataRateSubscription staDataRateSubscription, - AssocStaNotification assocStaNotification, - WlanInformationAPI_TypesAndValues.SubscriptionLinkList subscriptionLinkList_wlan, - MeasurementConfigLinkList measurementConfigLinkList, - MeasurementConfig measurementConfig, - FaInfo faInfo, + DeviceApplicationInterfaceAPI_TypesAndValues.AppContext appContext_device_info, + ApplicationLocationAvailability applicationLocationAvailability, + ApInfoList apInfoList, + StaInfoList staInfoList, + AssocStaSubscription assocStaSubscription, + StaDataRateSubscription staDataRateSubscription, + AssocStaNotification assocStaNotification, + WlanInformationAPI_TypesAndValues.SubscriptionLinkList subscriptionLinkList_wlan, + MeasurementConfigLinkList measurementConfigLinkList, + MeasurementConfig measurementConfig, + FaInfo faInfo, FixedAccessInformationServiceAPI_TypesAndValues.DeviceInfo deviceInfo, - CableLineInfo cableLineInfo, - PonInfo ponInfo, - OnuAlarmSubscription onuAlarmSubscription, - DevInfoSubscription devInfoSubscription, - CmConnSubscription cmConnSubscription, - AniAlarmSubscription aniAlarmSubscription, + CableLineInfo cableLineInfo, + PonInfo ponInfo, + OnuAlarmSubscription onuAlarmSubscription, + DevInfoSubscription devInfoSubscription, + CmConnSubscription cmConnSubscription, + AniAlarmSubscription aniAlarmSubscription, FixedAccessInformationServiceAPI_TypesAndValues.SubscriptionLinkList subscriptionLinkList_fai, - UuUnicastProvisioningInfo uuUnicastProvisioningInfo, - UuMbmsProvisioningInfo uuMbmsProvisioningInfo, - Pc5ProvisioningInfo pc5ProvisioningInfo, - PredictedQos predictedQos, - V2xMsgPublication v2xMsgPublication, + UuUnicastProvisioningInfo uuUnicastProvisioningInfo, + UuMbmsProvisioningInfo uuMbmsProvisioningInfo, + Pc5ProvisioningInfo pc5ProvisioningInfo, + PredictedQos predictedQos, + V2xMsgPublication v2xMsgPublication, V2XInformationServiceAPI_TypesAndValues.SubscriptionLinkList subscriptionLinkList_v2x, - ProvChgUuUniSubscription provChgUuUniSubscription, - ProvChgUuMbmsSubscription provChgUuMbmsSubscription, - ProvChgPc5Subscription provChgPc5Subscription, - V2xMsgDistributionServerInfo v2xMsgDistributionServerInfo, // ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.2.5-1: Attributes of the V2xMsgDistributionServerInfo - V2xMsgSubscription v2xMsgSubscription, - PredQosSubscription predQosSubscription, // ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.3.6-1: Attributes of the PredQosSubscription - ProvChgUuUniNotification provChgUuUniNotification, - ProvChgUuMbmsNotification provChgUuMbmsNotification, - ProvChgPc5Notification provChgPc5Notification, - SystemInfo systemInfo, // ETSI GS MEC 040 V3.1.1 Clause 6.2.2 Type: SystemInfo - SystemInfoList systemInfoList, // ETSI GS MEC 040 V3.1.1 Clause 6.2.2 Type: SystemInfo - SystemInfoUpdate systemInfoUpdate, // ETSI GS MEC 040 V3.1.1 Clause 6.2.3 Type: SystemInfoUpdate - IoTAPI_TypesAndValues.DeviceInfo deviceInfo_iot, // ETSI GS MEC 033 V3.1.1 Clause 6.2.2 Type: DeviceInfo - IoTAPI_TypesAndValues.DeviceInfoList deviceInfoList_iot, // ETSI GS MEC 033 V3.1.1 Clause 6.2.2 Type: DeviceInfo - IotPlatformInfoList iotPlatformInfoList, // ETSI GS MEC 033 V3.1.1 Clause 6.2.3 Type: IotPlatformInfo - IotPlatformInfo iotPlatformInfo, // ETSI GS MEC 033 V3.1.1 Clause 6.2.3 Type: IotPlatformInfo + ProvChgUuUniSubscription provChgUuUniSubscription, + ProvChgUuMbmsSubscription provChgUuMbmsSubscription, + ProvChgPc5Subscription provChgPc5Subscription, + V2xMsgDistributionServerInfo v2xMsgDistributionServerInfo, // ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.2.5-1: Attributes of the V2xMsgDistributionServerInfo + V2xMsgSubscription v2xMsgSubscription, + PredQosSubscription predQosSubscription, // ETSI GS MEC 030 V3.1.1 (2023-03) Table 6.3.6-1: Attributes of the PredQosSubscription + ProvChgUuUniNotification provChgUuUniNotification, + ProvChgUuMbmsNotification provChgUuMbmsNotification, + ProvChgPc5Notification provChgPc5Notification, + SystemInfo systemInfo, // ETSI GS MEC 040 V3.1.1 Clause 6.2.2 Type: SystemInfo + SystemInfoList systemInfoList, // ETSI GS MEC 040 V3.1.1 Clause 6.2.2 Type: SystemInfo + SystemInfoUpdate systemInfoUpdate, // ETSI GS MEC 040 V3.1.1 Clause 6.2.3 Type: SystemInfoUpdate + IoTAPI_TypesAndValues.DeviceInfo deviceInfo_iot, // ETSI GS MEC 033 V3.1.1 Clause 6.2.2 Type: DeviceInfo + IoTAPI_TypesAndValues.DeviceInfoList deviceInfoList_iot, // ETSI GS MEC 033 V3.1.1 Clause 6.2.2 Type: DeviceInfo + IotPlatformInfoList iotPlatformInfoList, // ETSI GS MEC 033 V3.1.1 Clause 6.2.3 Type: IotPlatformInfo + IotPlatformInfo iotPlatformInfo, // ETSI GS MEC 033 V3.1.1 Clause 6.2.3 Type: IotPlatformInfo // TODO Add here your custom variants - universal charstring raw + universal charstring raw } with { variant "" } diff --git a/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn b/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn index 553c55c..7154a4c 100644 --- a/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn +++ b/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn @@ -1034,6 +1034,18 @@ module LibHttp_JsonTemplates { serviceLivenessInfo := p_serviceLivenessInfo } // End of template mw_body_json_srv_liveness_info + template (value) JsonBody m_body_json_srv_liveness_update( + in template (value) ServiceLivenessUpdate p_serviceLivenessUpdate + ) := { + serviceLivenessUpdate := p_serviceLivenessUpdate + } // End of template m_body_json_srv_liveness_update + + template (present) JsonBody mw_body_json_srv_liveness_update( + template (present) ServiceLivenessUpdate p_serviceLivenessUpdate := ? + ) := { + serviceLivenessUpdate := p_serviceLivenessUpdate + } // End of template mw_body_json_srv_liveness_update + template (value) JsonBody m_body_json_transport_info_list( in template (value) EdgePlatformApplicationEnablementAPI_TypesAndValues.TransportInfoList p_transportInfoList ) := { -- GitLab From be0586203e31d0fea58f9379465741d4b9500e6a Mon Sep 17 00:00:00 2001 From: garciay Date: Thu, 23 May 2024 19:28:14 +0200 Subject: [PATCH 87/99] Validate TC_MEC_MEC011_SRV_MSL_xxx --- .../AtsMec_EdgePlatformApplicationEnablement_Sandbox.cfg_ | 2 +- .../AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/etc/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablement_Sandbox.cfg_ b/etc/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablement_Sandbox.cfg_ index 26362be..246a486 100644 --- a/etc/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablement_Sandbox.cfg_ +++ b/etc/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablement_Sandbox.cfg_ @@ -19,7 +19,7 @@ LibMec_Pics.PICS_ROOT_API := "/sbxykqjr17/mep1/" # Need to sign i LibMec_Pics.PICS_MEC_PLAT := true # Application Instance ID -EdgePlatformApplicationEnablementAPI_Pixits.PX_APP_INSTANCE_ID := "bd880c4d-5d75-43d4-8541-d852db57f1ab" # Copied from ETSI MEC Sandbox GUI +EdgePlatformApplicationEnablementAPI_Pixits.PX_APP_INSTANCE_ID := "11e9eb9a-1ed6-40ea-94f4-7300b80554ce" # Copied from ETSI MEC Sandbox GUI # Callbacks diff --git a/ttcn/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn b/ttcn/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn index 9d448a1..8bb0547 100644 --- a/ttcn/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn +++ b/ttcn/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn @@ -2225,7 +2225,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { // Test adapter configuration // Preamble - f_create_service_info(v_service_info, v_subscription_id); + f_create_service_info_with_liveness(v_service_info, v_subscription_id); f_init_default_headers_list(-, -, v_headers); v_uri := regexp( oct2char(unichar2oct(v_service_info.links.liveness.href, "UTF-8")), -- GitLab From 0cf410e8e7e05744655f4bba5eec7295c3c3bdb1 Mon Sep 17 00:00:00 2001 From: garciay Date: Fri, 24 May 2024 11:01:13 +0200 Subject: [PATCH 88/99] Create MEC 040 codec --- ccsrc/Protocols/Json/json_codec_mec011.cc | 7 ++- ccsrc/Protocols/Json/module.mk | 9 ++-- ...PlatformApplicationEnablement_Sandbox.cfg_ | 2 +- .../AtsMec_FederationEnablement_Mockoon.cf_ | 43 +++++++++++++++++-- ...Mec_FederationEnablementAPI_TestCases.ttcn | 30 +++++-------- .../FederationEnablementAPI_Functions.ttcn | 21 +++++---- .../ttcn/FederationEnablementAPI_Pixits.ttcn | 24 +++++------ 7 files changed, 81 insertions(+), 55 deletions(-) diff --git a/ccsrc/Protocols/Json/json_codec_mec011.cc b/ccsrc/Protocols/Json/json_codec_mec011.cc index 1462b00..e9f5baa 100644 --- a/ccsrc/Protocols/Json/json_codec_mec011.cc +++ b/ccsrc/Protocols/Json/json_codec_mec011.cc @@ -47,13 +47,13 @@ int json_codec_mec011::encode (const LibHttp__JsonMessageBodyTypes::JsonBody& ms } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_serviceLivenessUpdate)) { const EdgePlatformApplicationEnablementAPI__TypesAndValues::ServiceLivenessUpdate& service_liveness_update = msg.serviceLivenessUpdate(); service_liveness_update.encode(EdgePlatformApplicationEnablementAPI__TypesAndValues::ServiceLivenessUpdate_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); - data = char2oct(CHARSTRING("{\"serviceLivenessUpdate\": ")) + OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data()) + char2oct(CHARSTRING("}")); + data = /*char2oct(CHARSTRING("{\"serviceLivenessUpdate\": ")) + */OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_trafficRule)) { const EdgePlatformApplicationEnablementAPI__TypesAndValues::TrafficRule& traffic_rule = msg.trafficRule(); traffic_rule.encode(EdgePlatformApplicationEnablementAPI__TypesAndValues::TrafficRule_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); data = OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; } else { - loggers::get_instance().error("json_codec_mec011::encode: Not supported"); + return json_codec::encode(msg, data); } loggers::get_instance().log("<<< json_codec_mec011::encode"); @@ -186,8 +186,7 @@ int json_codec_mec011::decode (const OCTETSTRING& p_data, LibHttp__JsonMessageBo appInfo.decode(EdgePlatformApplicationEnablementAPI__TypesAndValues::AppInfo_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.appInfo__regapps() = appInfo; } else { - loggers::get_instance().warning("json_codec_mec011::decode: Unsupported variant"); - return -1; + return json_codec::decode(p_data, msg, p_params); } loggers::get_instance().log_msg("<<< json_codec_mec011::decode: ", (const Base_Type&)msg); diff --git a/ccsrc/Protocols/Json/module.mk b/ccsrc/Protocols/Json/module.mk index d18b7e2..4222e98 100644 --- a/ccsrc/Protocols/Json/module.mk +++ b/ccsrc/Protocols/Json/module.mk @@ -1,8 +1,9 @@ sources := \ - json_codec.cc \ - json_codec_mec011.cc \ - json_codec_mec013.cc \ - json_codec_mec030.cc \ + json_codec.cc \ + json_codec_mec011.cc \ + json_codec_mec013.cc \ + json_codec_mec030.cc \ + json_codec_mec040.cc \ includes := . diff --git a/etc/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablement_Sandbox.cfg_ b/etc/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablement_Sandbox.cfg_ index 246a486..a1e2e1e 100644 --- a/etc/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablement_Sandbox.cfg_ +++ b/etc/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablement_Sandbox.cfg_ @@ -19,7 +19,7 @@ LibMec_Pics.PICS_ROOT_API := "/sbxykqjr17/mep1/" # Need to sign i LibMec_Pics.PICS_MEC_PLAT := true # Application Instance ID -EdgePlatformApplicationEnablementAPI_Pixits.PX_APP_INSTANCE_ID := "11e9eb9a-1ed6-40ea-94f4-7300b80554ce" # Copied from ETSI MEC Sandbox GUI +EdgePlatformApplicationEnablementAPI_Pixits.PX_APP_INSTANCE_ID := "8b49cf3a-b5ea-4bcf-ab20-35f92990a922" # Copied from ETSI MEC Sandbox GUI # Callbacks diff --git a/etc/AtsMec_FederationEnablement/AtsMec_FederationEnablement_Mockoon.cf_ b/etc/AtsMec_FederationEnablement/AtsMec_FederationEnablement_Mockoon.cf_ index b152ef9..5c8c070 100644 --- a/etc/AtsMec_FederationEnablement/AtsMec_FederationEnablement_Mockoon.cf_ +++ b/etc/AtsMec_FederationEnablement/AtsMec_FederationEnablement_Mockoon.cf_ @@ -21,7 +21,7 @@ LibHttp_Pics.PICS_USE_TOKEN_HEADER := true # 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" +LogFile := "../logs/AtsMec_FederationEnablement/%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 | TESTCASE @@ -33,9 +33,9 @@ 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.21,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=80,use_ssl=0)" +system.httpPort.params := "HTTP(codecs=json:json_codec_mec040)/TCP(debug=1,server=192.168.1.12,port=30030,use_ssl=0)" +#system.httpPort.params := "HTTP(codecs=json:json_codec_mec040)/TCP(debug=1,server=try-mec.etsi.org,port=443,use_ssl=1)" +system.httpPort_notif.params := "HTTP(codecs=json:json_codec_mec040)/TCP(debug=1,server_mode=1,local_port=80,use_ssl=0)" [DEFINE] # In this section you can create macro definitions, @@ -62,6 +62,41 @@ system.httpPort_notif.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server # In this section you can specify what parts of your test suite you want to execute. #AtsMec_TestControl.control +# Check that the IUT responds with a list of all available systemInfo when requested by a MEC Orchestrator - No query parameters +#AtsMec_FederationEnablementAPI_TestCases.TC_MEC_MEC040_SRV_MEF_001_OK_01 +# Check that the IUT responds with a selection of all available systemInfo when requested by a MEC Orchestrator - SystemId query parameters +#AtsMec_FederationEnablementAPI_TestCases.TC_MEC_MEC040_SRV_MEF_001_OK_02 +# Check that the IUT responds with a selection of all available systemInfo when requested by a MEC Orchestrator - Multiple SystemId query parameters +#AtsMec_FederationEnablementAPI_TestCases.TC_MEC_MEC040_SRV_MEF_001_OK_03 +# Check that the IUT responds with a selection of all available systemInfo when requested by a MEC Orchestrator - Empty SystemId query parameters +#AtsMec_FederationEnablementAPI_TestCases.TC_MEC_MEC040_SRV_MEF_001_OK_04 +# Check that the IUT responds with a selection of all available systemInfo when requested by a MEC Orchestrator - SystemName query parameters +#AtsMec_FederationEnablementAPI_TestCases.TC_MEC_MEC040_SRV_MEF_001_OK_05 +# Check that the IUT responds with a selection of all available systemInfo when requested by a MEC Orchestrator - SystemName query parameters +#AtsMec_FederationEnablementAPI_TestCases.TC_MEC_MEC040_SRV_MEF_001_OK_05 +# Check that the IUT responds with a selection of all available systemInfo when requested by a MEC Orchestrator - Multiple SystemName query parameters +#AtsMec_FederationEnablementAPI_TestCases.TC_MEC_MEC040_SRV_MEF_001_OK_06 +# Check that the IUT responds with a selection of all available systemInfo when requested by a MEC Orchestrator - Empty SystemName query parameters +#AtsMec_FederationEnablementAPI_TestCases.TC_MEC_MEC040_SRV_MEF_001_OK_07 +# Check that the IUT responds with a selection of all available systemInfo when requested by a MEC Orchestrator - systemProvider query parameters +#AtsMec_FederationEnablementAPI_TestCases.TC_MEC_MEC040_SRV_MEF_001_OK_08 +# Check that the IUT responds with a selection of all available systemInfo when requested by a MEC Orchestrator - Multiple systemProvider query parameters +#AtsMec_FederationEnablementAPI_TestCases.TC_MEC_MEC040_SRV_MEF_001_OK_09 +# Check that the IUT responds with a selection of all available systemInfo when requested by a MEC Orchestrator - Empty systemProvider query parameters +#AtsMec_FederationEnablementAPI_TestCases.TC_MEC_MEC040_SRV_MEF_001_OK_10 +# Check that the IUT responds with a selection of all available systemInfo when requested by a MEC Orchestrator - Multiple query parameters +#AtsMec_FederationEnablementAPI_TestCases.TC_MEC_MEC040_SRV_MEF_001_OK_11 +# Check that the IUT responds with an error when selection is not applicable - SystemId +#AtsMec_FederationEnablementAPI_TestCases.TC_MEC_MEC040_SRV_MEF_001_NF_01 +# Check that the IUT responds with an error when selection is not applicable - SystemName +#AtsMec_FederationEnablementAPI_TestCases.TC_MEC_MEC040_SRV_MEF_001_NF_02 +# Check that the IUT responds with an error when selection is not applicable - SystemProvider +#AtsMec_FederationEnablementAPI_TestCases.TC_MEC_MEC040_SRV_MEF_001_NF_03 +# Check that the IUT responds with an error when request is malformed +AtsMec_FederationEnablementAPI_TestCases.TC_MEC_MEC040_SRV_MEF_001_BR + + + [GROUPS] # In this section you can specify groups of hosts. These groups can be used inside the diff --git a/ttcn/AtsMec_FederationEnablement/AtsMec_FederationEnablementAPI_TestCases.ttcn b/ttcn/AtsMec_FederationEnablement/AtsMec_FederationEnablementAPI_TestCases.ttcn index cda5f3b..05b2c29 100644 --- a/ttcn/AtsMec_FederationEnablement/AtsMec_FederationEnablementAPI_TestCases.ttcn +++ b/ttcn/AtsMec_FederationEnablement/AtsMec_FederationEnablementAPI_TestCases.ttcn @@ -34,9 +34,9 @@ module AtsMec_FederationEnablementAPI_TestCases { // Local variables var Headers v_headers; var SystemInfoList v_system_info_list := { - valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_1, PX_FED_SYSTEM_NAME_1, PX_FED_SYSTEM_ID_1)), - valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_2, PX_FED_SYSTEM_NAME_2, PX_FED_SYSTEM_ID_2)), - valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_3, PX_FED_SYSTEM_NAME_3, PX_FED_SYSTEM_ID_3)) + valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_1, PX_FED_SYSTEM_NAME_1)), + valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_2, PX_FED_SYSTEM_NAME_2)), + valueof(m_system_info(PX_FED_SYSTEM_PROVIDER_3, PX_FED_SYSTEM_NAME_3)) }; // Test control @@ -59,9 +59,7 @@ module AtsMec_FederationEnablementAPI_TestCases { m_http_request_get( PICS_ROOT_API & PX_FED_API_LIST_SYSTEM_INFO, v_headers - ) - ) - ); + ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -72,16 +70,12 @@ module AtsMec_FederationEnablementAPI_TestCases { mw_http_response_ok( mw_http_message_body_json( mw_body_json_fed_system_info_list( - { - *, - mw_system_info( - PX_FED_SYSTEM_PROVIDER_1, - PX_FED_SYSTEM_NAME_1, - PX_FED_SYSTEM_ID_1 - ), - * - } - ))))) { + superset( + mw_system_info( + PX_FED_SYSTEM_PROVIDER_1, + PX_FED_SYSTEM_NAME_1, + PX_FED_SYSTEM_ID_1 + ))))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a SystemInfoList ***"); @@ -130,9 +124,7 @@ module AtsMec_FederationEnablementAPI_TestCases { m_http_request_get( PICS_ROOT_API & PX_FED_API_LIST_SYSTEM_INFO & "?systemId=" & oct2char(unichar2oct(PX_FED_SYSTEM_ID_1, "UTF-8")), v_headers - ) - ) - ); + ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body diff --git a/ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_Functions.ttcn b/ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_Functions.ttcn index cdf7464..1c300b9 100644 --- a/ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_Functions.ttcn +++ b/ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_Functions.ttcn @@ -28,11 +28,13 @@ module FederationEnablementAPI_Functions { import from LibMec_Pixits all; function f_create_system_info( - out SystemInfo p_system_info + inout SystemInfo p_system_info ) runs on HttpComponent { var Headers v_headers; var HttpMessage v_response; + log(">>> f_create_system_info: ", p_system_info); + f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( @@ -41,10 +43,8 @@ module FederationEnablementAPI_Functions { v_headers, m_http_message_body_json( m_body_json_fed_system_info( - m_system_info( - PX_FED_SYSTEM_NAME_1, - PX_FED_SYSTEM_PROVIDER_1 - )))))); + p_system_info + ))))); tc_ac.start; alt { [] httpPort.receive( @@ -52,11 +52,8 @@ module FederationEnablementAPI_Functions { mw_http_response_201_created( mw_http_message_body_json( mw_body_json_fed_system_info( - mw_system_info( - PX_FED_SYSTEM_PROVIDER_1, - PX_FED_SYSTEM_NAME_1, - PX_FED_SYSTEM_ID_1 - )))))) -> value v_response { + p_system_info + ))))) -> value v_response { tc_ac.stop; p_system_info := v_response.response.body.json_body.systemInfo; @@ -98,8 +95,10 @@ module FederationEnablementAPI_Functions { } // End of function f_delete_system_info function f_create_system_info_list( - out SystemInfoList p_system_info_list + inout SystemInfoList p_system_info_list ) runs on HttpComponent { + log(">>> f_create_system_info_list: ", p_system_info_list); + for (var integer i := 0; i < lengthof(p_system_info_list); i := i + 1) { f_create_system_info(p_system_info_list[i]); } diff --git a/ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_Pixits.ttcn b/ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_Pixits.ttcn index a13a3bf..2697740 100644 --- a/ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_Pixits.ttcn +++ b/ttcn/LibMec/FederationEnablementAPI/ttcn/FederationEnablementAPI_Pixits.ttcn @@ -9,29 +9,29 @@ module FederationEnablementAPI_Pixits { // LibMec/FixedAccessInformationServiceAPI import from FederationEnablementAPI_TypesAndValues all; - modulepar Json.String PX_FED_SYSTEM_ID_1 := ""; + modulepar Json.String PX_FED_SYSTEM_ID_1 := "SYSTEM_ID"; - modulepar Json.String PX_FED_SYSTEM_NAME_1 := ""; + modulepar Json.String PX_FED_SYSTEM_NAME_1 := "systemName"; - modulepar Json.String PX_FED_SYSTEM_PROVIDER_1 := ""; + modulepar Json.String PX_FED_SYSTEM_PROVIDER_1 := "systemProvider"; - modulepar Json.String PX_FED_SYSTEM_ID_2 := ""; + modulepar Json.String PX_FED_SYSTEM_ID_2 := "SYSTEM_ID02"; - modulepar Json.String PX_FED_SYSTEM_NAME_2 := ""; + modulepar Json.String PX_FED_SYSTEM_NAME_2 := "systemName02"; - modulepar Json.String PX_FED_SYSTEM_PROVIDER_2 := ""; + modulepar Json.String PX_FED_SYSTEM_PROVIDER_2 := "systemProvider02"; - modulepar Json.String PX_FED_SYSTEM_ID_3 := ""; + modulepar Json.String PX_FED_SYSTEM_ID_3 := "SYSTEM_ID03"; - modulepar Json.String PX_FED_SYSTEM_NAME_3 := ""; + modulepar Json.String PX_FED_SYSTEM_NAME_3 := "systemName03"; - modulepar Json.String PX_FED_SYSTEM_PROVIDER_3 := ""; + modulepar Json.String PX_FED_SYSTEM_PROVIDER_3 := "systemProvider03"; - modulepar Json.String PX_FED_SYSTEM_ID_UNKNOWN := ""; + modulepar Json.String PX_FED_SYSTEM_ID_UNKNOWN := "SYSTEM_ID666"; - modulepar Json.String PX_FED_SYSTEM_NAME_UNKNOWN := ""; + modulepar Json.String PX_FED_SYSTEM_NAME_UNKNOWN := "systemName666"; - modulepar Json.String PX_FED_SYSTEM_PROVIDER_UNKNOWN := ""; + modulepar Json.String PX_FED_SYSTEM_PROVIDER_UNKNOWN := "systemProvider666"; modulepar Json.String PX_FED_ENDPOINT_URI_1 := ""; -- GitLab From 4888d1a6a0dc880ecb741663ee694087d0ba3d24 Mon Sep 17 00:00:00 2001 From: garciay Date: Fri, 24 May 2024 11:01:57 +0200 Subject: [PATCH 89/99] Create MEC 040 codec --- .../Json/json_codec_factory_mec040.hh | 46 +++++++++++ ccsrc/Protocols/Json/json_codec_mec040.cc | 82 +++++++++++++++++++ ccsrc/Protocols/Json/json_codec_mec040.hh | 25 ++++++ 3 files changed, 153 insertions(+) create mode 100644 ccsrc/Protocols/Json/json_codec_factory_mec040.hh create mode 100644 ccsrc/Protocols/Json/json_codec_mec040.cc create mode 100644 ccsrc/Protocols/Json/json_codec_mec040.hh diff --git a/ccsrc/Protocols/Json/json_codec_factory_mec040.hh b/ccsrc/Protocols/Json/json_codec_factory_mec040.hh new file mode 100644 index 0000000..cf458d2 --- /dev/null +++ b/ccsrc/Protocols/Json/json_codec_factory_mec040.hh @@ -0,0 +1,46 @@ +/*! + * \file json_codec_factory_mec040.hh + * \brief Header file for ITS JSON/IP protocol codec factory. + * \author ETSI STF569 / TTF T027 + * \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. + * \version 0.1 + */ +#pragma once + +#include "codec_stack_builder.hh" + +#include "json_codec_mec040.hh" + +class Record_Type; //! TITAN forward declaration + +/*! + * \class json_codec_factory_mec040 + * \brief This class provides a factory class to create an json_codec class instance + */ +class json_codec_factory_mec040: public codec_factory { + static json_codec_factory_mec040 _f; //! Reference to the unique instance of this class +public: //! \publicsection + /*! + * \brief Default constructor + * Create a new instance of the json_codec_factory_mec040 class + * \remark The HELD/IP codec identifier is HELD + */ + json_codec_factory_mec040() { + // register factory + codec_stack_builder::register_codec_factory("json_codec_mec040", this); + }; + /*! + * \fn codec* create_codec(const std::string & type, const std::string & param); + * \brief Create the codecs stack based on the provided codecs stack description + * \param[in] p_type The provided codecs stack description + * \param[in] p_params Optional parameters + * \return 0 on success, -1 otherwise + * \inline + */ + inline virtual codec_gen* create_codec() { + return (codec_gen*)new json_codec_mec040(); + }; +}; // End of class json_codec_factory_mec040 diff --git a/ccsrc/Protocols/Json/json_codec_mec040.cc b/ccsrc/Protocols/Json/json_codec_mec040.cc new file mode 100644 index 0000000..78ec67e --- /dev/null +++ b/ccsrc/Protocols/Json/json_codec_mec040.cc @@ -0,0 +1,82 @@ +#include +#include +#include + +#include "json_codec_factory_mec040.hh" + +#include "loggers.hh" + +#include "LibHttp_JsonMessageBodyTypes.hh" + +int json_codec_mec040::encode (const LibHttp__JsonMessageBodyTypes::JsonBody& msg, OCTETSTRING& data) +{ + loggers::get_instance().log_msg(">>> json_codec_mec040::encode: ", (const Base_Type&)msg); + + TTCN_EncDec::clear_error(); + TTCN_EncDec::set_error_behavior(TTCN_EncDec::ET_ALL, TTCN_EncDec::EB_DEFAULT); + TTCN_Buffer encoding_buffer; + + if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_systemInfo)) { + const FederationEnablementAPI__TypesAndValues::SystemInfo& system_info = msg.systemInfo(); + system_info.encode(FederationEnablementAPI__TypesAndValues::SystemInfo_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); + data = /*char2oct(CHARSTRING("{\"SystemInfo\": ")) + */OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; + } else { + return json_codec::encode(msg, data); + } + + loggers::get_instance().log("<<< json_codec_mec040::encode"); + return 0; +} + +int json_codec_mec040::decode (const OCTETSTRING& p_data, LibHttp__JsonMessageBodyTypes::JsonBody& msg, params* p_params) +{ + loggers::get_instance().log_msg(">>> json_codec_mec040::decode: p_data=", p_data); + + // Sanity checks + params::const_iterator it; + if (p_params == nullptr) { + loggers::get_instance().warning("json_codec_mec040::decode: Failed to access p_params (null pointer)"); + return -1; // TODO Use p_data instead of return -1 + } else { + it = p_params->find("decode_str"); + if (it == p_params->cend()) { + loggers::get_instance().warning("json_codec_mec040::decode: Failed to access p_params item (decode_str)"); + return -1; // TODO Use p_data instead of return -1 + } + loggers::get_instance().log("json_codec_mec040::decode: it->second='%c' / '%s'", it->second.c_str()[0], it->second.c_str()); + } + + // Remove data structure name (if present) ... + std::string str; + if ((it->second[0] != '[') && (it->second[0] != '{')) { + 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); + } else { + str = it->second; + } + // ..and create the decoding buffer + TTCN_EncDec::set_error_behavior(TTCN_EncDec::ET_ALL, TTCN_EncDec::EB_DEFAULT); + TTCN_EncDec::clear_error(); + loggers::get_instance().log("json_codec_mec040::decode: decoding_buffer='%c' / '%s'", str[0], str.c_str()); + TTCN_Buffer decoding_buffer(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); + + if (it->second.find("\"systemId\"") != std::string::npos) { // Be careful to the order + if (it->second[0] == '[') { + FederationEnablementAPI__TypesAndValues::SystemInfoList system_info_list; + system_info_list.decode(FederationEnablementAPI__TypesAndValues::SystemInfoList_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); + msg.systemInfoList() = system_info_list; + } else { + FederationEnablementAPI__TypesAndValues::SystemInfo system_info; + system_info.decode(FederationEnablementAPI__TypesAndValues::SystemInfo_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); + msg.systemInfo() = system_info; + } + } else { + return json_codec::decode(p_data, msg, p_params); + } + + loggers::get_instance().log_msg("<<< json_codec_mec040::decode: ", (const Base_Type&)msg); + return 0; +} + +json_codec_factory_mec040 json_codec_factory_mec040::_f; diff --git a/ccsrc/Protocols/Json/json_codec_mec040.hh b/ccsrc/Protocols/Json/json_codec_mec040.hh new file mode 100644 index 0000000..f257000 --- /dev/null +++ b/ccsrc/Protocols/Json/json_codec_mec040.hh @@ -0,0 +1,25 @@ +#pragma once + +#include "codec_gen.hh" +#include "params.hh" + +#include "json_codec.hh" + +class Base_Type; +class TTCN_Typedescriptor_t; +class TTCN_Buffer; + +namespace LibHttp__JsonMessageBodyTypes { + class JsonBody; +} + +class json_codec_mec040: public json_codec +{ +public: + explicit json_codec_mec040() : json_codec() { }; + virtual ~json_codec_mec040() { }; + + int encode (const LibHttp__JsonMessageBodyTypes::JsonBody&, OCTETSTRING& data); + int decode (const OCTETSTRING& p_data, LibHttp__JsonMessageBodyTypes::JsonBody&, params* p_params = NULL); + +}; // End of class json_codec_mec040 -- GitLab From 1645744818f9ed049fe51257c48b0413730f6106 Mon Sep 17 00:00:00 2001 From: garciay Date: Fri, 24 May 2024 11:13:31 +0200 Subject: [PATCH 90/99] Bug fixed in TC_MEC_MEC011_SRV_MSL_002_BR --- ...ec_EdgePlatformApplicationEnablement_Sandbox.cfg_ | 6 +++--- ...gePlatformApplicationEnablementAPI_TestCases.ttcn | 12 +++++++++++- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/etc/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablement_Sandbox.cfg_ b/etc/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablement_Sandbox.cfg_ index a1e2e1e..1735081 100644 --- a/etc/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablement_Sandbox.cfg_ +++ b/etc/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablement_Sandbox.cfg_ @@ -19,7 +19,7 @@ LibMec_Pics.PICS_ROOT_API := "/sbxykqjr17/mep1/" # Need to sign i LibMec_Pics.PICS_MEC_PLAT := true # Application Instance ID -EdgePlatformApplicationEnablementAPI_Pixits.PX_APP_INSTANCE_ID := "8b49cf3a-b5ea-4bcf-ab20-35f92990a922" # Copied from ETSI MEC Sandbox GUI +EdgePlatformApplicationEnablementAPI_Pixits.PX_APP_INSTANCE_ID := "35b117eb-d372-451f-9c98-f97807f44776" # Copied from ETSI MEC Sandbox GUI # Callbacks @@ -127,9 +127,9 @@ system.httpPort_notif.params := "HTTP(codecs=json:json_codec_mec011)/TCP(debug=1 # 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 +#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 +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 diff --git a/ttcn/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn b/ttcn/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn index 8bb0547..7af55f6 100644 --- a/ttcn/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn +++ b/ttcn/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn @@ -2277,6 +2277,9 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { testcase TC_MEC_MEC011_SRV_MSL_002_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; + var ServiceInfo v_service_info; + var charstring v_subscription_id; + var charstring v_uri; // Test control if (not(PICS_MEC_PLAT) or not (PICS_SERVICES) or not(PICS_APP_ENABLEMENT_API_SUPPORTED)) { @@ -2291,11 +2294,17 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { // Test adapter configuration // Preamble + f_create_service_info_with_liveness(v_service_info, v_subscription_id); f_init_default_headers_list(-, -, v_headers); + v_uri := regexp( + oct2char(unichar2oct(v_service_info.links.liveness.href, "UTF-8")), + "?+" & PX_LINK_LIV & "/(?*)", + 0 + ); httpPort.send( m_http_request( m_http_request_patch( - PICS_ROOT_API & PX_LINK_LIV, + PICS_ROOT_API & PX_LINK_LIV & "/" & v_uri, v_headers, m_http_message_body_json( m_body_json_srv_liveness_update( @@ -2323,6 +2332,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { } // End of 'alt' statement // Postamble + f_delete_service_info(v_subscription_id); f_cf_01_http_down(); } // End of testcase TC_MEC_MEC011_SRV_MSL_002_BR -- GitLab From 5420622e4d14a05e515dce42c150a0755d5e950e Mon Sep 17 00:00:00 2001 From: garciay Date: Tue, 4 Jun 2024 08:35:40 +0200 Subject: [PATCH 91/99] Update README.md file --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7ae085f..fef57fa 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ Unless specified otherwise, the content of this repository and the files contain See the attached LICENSE file or visit https://forge.etsi.org/legal-matters. ## Standard links -- Multi-access Edge Computating standards, accessible [here](https://www.etsi.org/standards#page=1&search=MEC&title=1&etsiNumber=1&content=1&version=0&onApproval=1&published=1&historical=1&startDate=1988-01-15&endDate=2019-05-06&harmonized=0&keyword=&TB=&stdType=&frequency=&mandate=&collection=&sort=1). +- Multi-access Edge Computating standards, accessible [here](https://www.etsi.org/standards#page=1&search=MEC&title=1&etsiNumber=1&content=1&version=0&onApproval=1&published=1&withdrawn=0&historical=0&isCurrent=1&superseded=1&startDate=1988-01-15&endDate=2029-12-06&harmonized=0&keyword=&TB=&stdType=&frequency=&mandate=&collection=&sort=1). ## RFC links - RFC 7159 - The JavaScript Object Notation (JSON) Data Interchange Format, accessible [here](https://tools.ietf.org/html/rfc7159.html) -- GitLab From ac5c99a1c6dd1b296128a4ede918ff8c6dfb7853 Mon Sep 17 00:00:00 2001 From: garciay Date: Tue, 11 Jun 2024 17:27:43 +0200 Subject: [PATCH 92/99] Bug fixed in TC_MEC_MEC011_SRV_REGAPPS_003_OK --- ...ePlatformApplicationEnablementAPI_TestCases.ttcn | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/ttcn/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn b/ttcn/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn index 7af55f6..953c494 100644 --- a/ttcn/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn +++ b/ttcn/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn @@ -3112,17 +3112,8 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { alt { [] httpPort.receive( mw_http_response( - mw_http_response_ok( - mw_http_message_body_json( - mw_body_json_app_info_regapps( - mw_app_info( - v_app_info.appName, - v_app_info.appProvider, - -, - v_app_info.appDId, - v_app_info.appInstanceId, - v_app_info.endpoint - )))))) { + mw_http_response_204_no_content + )) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct code ***"); -- GitLab From aed8471d33f2f255d73593de87b999c3ade5270f Mon Sep 17 00:00:00 2001 From: garciay Date: Tue, 11 Jun 2024 17:42:23 +0200 Subject: [PATCH 93/99] Bug fixed in TC__MEC_MEC011_SRV_CONFTASK_002_OK/NF --- ...AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ttcn/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn b/ttcn/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn index 953c494..29b7d54 100644 --- a/ttcn/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn +++ b/ttcn/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.ttcn @@ -1514,7 +1514,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { 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", + PICS_ROOT_API & PX_ME_APP_SUPPORT_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( @@ -1568,7 +1568,7 @@ module AtsMec_EdgePlatformApplicationEnablementAPI_TestCases { 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", + PICS_ROOT_API & PX_ME_APP_SUPPORT_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( -- GitLab From 57227b4a7cb791982504444c18d8a7750ae35a7e Mon Sep 17 00:00:00 2001 From: garciay Date: Mon, 17 Jun 2024 10:33:11 +0200 Subject: [PATCH 94/99] Start validation of MEC 028 --- ccsrc/Protocols/Json/json_codec.cc | 47 -------- .../Json/json_codec_factory_mec028.hh | 46 +++++++ ccsrc/Protocols/Json/json_codec_mec011.cc | 8 +- ccsrc/Protocols/Json/json_codec_mec028.cc | 114 ++++++++++++++++++ ccsrc/Protocols/Json/json_codec_mec028.hh | 25 ++++ ccsrc/Protocols/Json/module.mk | 1 + ...PlatformApplicationEnablement_Sandbox.cfg_ | 6 +- .../AtsMec_WlanInformation.cfg | 85 +++++++++++-- .../AtsMec_WlanInformationAPI_TestCases.ttcn | 28 +++-- .../ttcn/WlanInformationAPI_Functions.ttcn | 5 +- .../ttcn/WlanInformationAPI_Pixits.ttcn | 8 +- 11 files changed, 298 insertions(+), 75 deletions(-) create mode 100644 ccsrc/Protocols/Json/json_codec_factory_mec028.hh create mode 100644 ccsrc/Protocols/Json/json_codec_mec028.cc create mode 100644 ccsrc/Protocols/Json/json_codec_mec028.hh diff --git a/ccsrc/Protocols/Json/json_codec.cc b/ccsrc/Protocols/Json/json_codec.cc index ebf7bf9..012788d 100644 --- a/ccsrc/Protocols/Json/json_codec.cc +++ b/ccsrc/Protocols/Json/json_codec.cc @@ -36,14 +36,6 @@ int json_codec::encode (const LibHttp__JsonMessageBodyTypes::JsonBody& msg, OCTE const TrafficManagementAPI__TypesAndValues::MtsSessionInfo& mts_session_info = msg.mtsSessionInfo(); mts_session_info.encode(TrafficManagementAPI__TypesAndValues::MtsSessionInfo_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); data = OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; - } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_assocStaSubscription)) { - const WlanInformationAPI__TypesAndValues::AssocStaSubscription& assoc_sta_subscription = msg.assocStaSubscription(); - assoc_sta_subscription.encode(WlanInformationAPI__TypesAndValues::AssocStaSubscription_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); - data = OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; - } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_staDataRateSubscription)) { - const WlanInformationAPI__TypesAndValues::StaDataRateSubscription& sta_data_rate_subscription = msg.staDataRateSubscription(); - sta_data_rate_subscription.encode(WlanInformationAPI__TypesAndValues::StaDataRateSubscription_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); - data = OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; } else { loggers::get_instance().error("json_codec::encode: Not supported"); } @@ -171,45 +163,6 @@ int json_codec::decode (const OCTETSTRING& p_data, LibHttp__JsonMessageBodyTypes TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); mts_session_info.decode(TrafficManagementAPI__TypesAndValues::MtsSessionInfo_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); msg.mtsSessionInfo() = mts_session_info; - } else if (it->second.find("\"AssocStaSubscription\"") != std::string::npos) { - 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())); - ap_info_list.decode(WlanInformationAPI__TypesAndValues::ApInfoList_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); - msg.apInfoList() = ap_info_list; - - } else if ((it->second.find("\"staInfo\"") != std::string::npos) || (it->second.find("\"rssi\"") != std::string::npos)) { - WlanInformationAPI__TypesAndValues::StaInfoList sta_info_list; - 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; } else if (it->second.find("\"detail\"") != std::string::npos) { LibMec__TypesAndValues::ProblemDetails problem_details; problem_details.decode(LibMec__TypesAndValues::ProblemDetails_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); diff --git a/ccsrc/Protocols/Json/json_codec_factory_mec028.hh b/ccsrc/Protocols/Json/json_codec_factory_mec028.hh new file mode 100644 index 0000000..bc989bd --- /dev/null +++ b/ccsrc/Protocols/Json/json_codec_factory_mec028.hh @@ -0,0 +1,46 @@ +/*! + * \file json_codec_factory_mec028.hh + * \brief Header file for ITS JSON/IP protocol codec factory. + * \author ETSI STF569 / TTF T027 + * \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. + * \version 0.1 + */ +#pragma once + +#include "codec_stack_builder.hh" + +#include "json_codec_mec028.hh" + +class Record_Type; //! TITAN forward declaration + +/*! + * \class json_codec_factory_mec028 + * \brief This class provides a factory class to create an json_codec class instance + */ +class json_codec_factory_mec028: public codec_factory { + static json_codec_factory_mec028 _f; //! Reference to the unique instance of this class +public: //! \publicsection + /*! + * \brief Default constructor + * Create a new instance of the json_codec_factory_mec028 class + * \remark The HELD/IP codec identifier is HELD + */ + json_codec_factory_mec028() { + // register factory + codec_stack_builder::register_codec_factory("json_codec_mec028", this); + }; + /*! + * \fn codec* create_codec(const std::string & type, const std::string & param); + * \brief Create the codecs stack based on the provided codecs stack description + * \param[in] p_type The provided codecs stack description + * \param[in] p_params Optional parameters + * \return 0 on success, -1 otherwise + * \inline + */ + inline virtual codec_gen* create_codec() { + return (codec_gen*)new json_codec_mec028(); + }; +}; // End of class json_codec_factory_mec028 diff --git a/ccsrc/Protocols/Json/json_codec_mec011.cc b/ccsrc/Protocols/Json/json_codec_mec011.cc index e9f5baa..a885b51 100644 --- a/ccsrc/Protocols/Json/json_codec_mec011.cc +++ b/ccsrc/Protocols/Json/json_codec_mec011.cc @@ -157,14 +157,14 @@ int json_codec_mec011::decode (const OCTETSTRING& p_data, LibHttp__JsonMessageBo dns_rule.decode(EdgePlatformApplicationEnablementAPI__TypesAndValues::DnsRule_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.dnsRule() = dns_rule; } - } else if ((it->second.find("\"SerAvailabilityNotificationSubscription\"") != std::string::npos) || (it->second.find("\"rel\"") != 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("\"_links\"") != std::string::npos) && (it->second.find("\"subscriptions\"") != std::string::npos)) { 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("\"SerAvailabilityNotificationSubscription\"") != std::string::npos) && (it->second.find("\"callbackReference\"") != 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("\"AppTerminationNotificationSubscription\"") != std::string::npos) && (it->second.find("\"callbackReference\"") != std::string::npos)) { EdgePlatformApplicationEnablementAPI__TypesAndValues::AppTerminationNotificationSubscription app_term; app_term.decode(EdgePlatformApplicationEnablementAPI__TypesAndValues::AppTerminationNotificationSubscription_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); diff --git a/ccsrc/Protocols/Json/json_codec_mec028.cc b/ccsrc/Protocols/Json/json_codec_mec028.cc new file mode 100644 index 0000000..d025173 --- /dev/null +++ b/ccsrc/Protocols/Json/json_codec_mec028.cc @@ -0,0 +1,114 @@ +#include +#include +#include + +#include "json_codec_factory_mec028.hh" + +#include "loggers.hh" + +#include "LibHttp_JsonMessageBodyTypes.hh" + +int json_codec_mec028::encode (const LibHttp__JsonMessageBodyTypes::JsonBody& msg, OCTETSTRING& data) +{ + loggers::get_instance().log_msg(">>> json_codec_mec028::encode: ", (const Base_Type&)msg); + + TTCN_EncDec::clear_error(); + TTCN_EncDec::set_error_behavior(TTCN_EncDec::ET_ALL, TTCN_EncDec::EB_DEFAULT); + TTCN_Buffer encoding_buffer; + + if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_assocStaSubscription)) { + const WlanInformationAPI__TypesAndValues::AssocStaSubscription& assoc_sta_subscription = msg.assocStaSubscription(); + assoc_sta_subscription.encode(WlanInformationAPI__TypesAndValues::AssocStaSubscription_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); + data = OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; + } else if (msg.ischosen(LibHttp__JsonMessageBodyTypes::JsonBody::ALT_staDataRateSubscription)) { + const WlanInformationAPI__TypesAndValues::StaDataRateSubscription& sta_data_rate_subscription = msg.staDataRateSubscription(); + sta_data_rate_subscription.encode(WlanInformationAPI__TypesAndValues::StaDataRateSubscription_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); + data = OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; + } else { + return json_codec::encode(msg, data); + } + + loggers::get_instance().log("<<< json_codec_mec028::encode"); + return 0; +} + +int json_codec_mec028::decode (const OCTETSTRING& p_data, LibHttp__JsonMessageBodyTypes::JsonBody& msg, params* p_params) +{ + loggers::get_instance().log_msg(">>> json_codec_mec028::decode: p_data=", p_data); + + // Sanity checks + params::const_iterator it; + if (p_params == nullptr) { + loggers::get_instance().warning("json_codec_mec028::decode: Failed to access p_params (null pointer)"); + return -1; // TODO Use p_data instead of return -1 + } else { + it = p_params->find("decode_str"); + if (it == p_params->cend()) { + loggers::get_instance().warning("json_codec_mec028::decode: Failed to access p_params item (decode_str)"); + return -1; // TODO Use p_data instead of return -1 + } + loggers::get_instance().log("json_codec_mec028::decode: it->second='%c' / '%s'", it->second.c_str()[0], it->second.c_str()); + } + + // Remove data structure name (if present) ... + std::string str; + if ((it->second[0] != '[') && (it->second[0] != '{')) { + 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); + } else { + str = it->second; + } + // ..and create the decoding buffer + TTCN_EncDec::set_error_behavior(TTCN_EncDec::ET_ALL, TTCN_EncDec::EB_DEFAULT); + TTCN_EncDec::clear_error(); + loggers::get_instance().log("json_codec_mec028::decode: decoding_buffer='%c' / '%s'", str[0], str.c_str()); + TTCN_Buffer decoding_buffer(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); + + if (it->second.find("\"AssocStaSubscription\"") != std::string::npos) { + 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())); + ap_info_list.decode(WlanInformationAPI__TypesAndValues::ApInfoList_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); + msg.apInfoList() = ap_info_list; + } else if ((it->second.find("\"staInfo\"") != std::string::npos) || (it->second.find("\"rssi\"") != std::string::npos)) { + WlanInformationAPI__TypesAndValues::StaInfoList sta_info_list; + 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; + } else { + return json_codec::decode(p_data, msg, p_params); + } + + loggers::get_instance().log_msg("<<< json_codec_mec028::decode: ", (const Base_Type&)msg); + return 0; +} + +json_codec_factory_mec028 json_codec_factory_mec028::_f; diff --git a/ccsrc/Protocols/Json/json_codec_mec028.hh b/ccsrc/Protocols/Json/json_codec_mec028.hh new file mode 100644 index 0000000..604f7ea --- /dev/null +++ b/ccsrc/Protocols/Json/json_codec_mec028.hh @@ -0,0 +1,25 @@ +#pragma once + +#include "codec_gen.hh" +#include "params.hh" + +#include "json_codec.hh" + +class Base_Type; +class TTCN_Typedescriptor_t; +class TTCN_Buffer; + +namespace LibHttp__JsonMessageBodyTypes { + class JsonBody; +} + +class json_codec_mec028: public json_codec +{ +public: + explicit json_codec_mec028() : json_codec() { }; + virtual ~json_codec_mec028() { }; + + int encode (const LibHttp__JsonMessageBodyTypes::JsonBody&, OCTETSTRING& data); + int decode (const OCTETSTRING& p_data, LibHttp__JsonMessageBodyTypes::JsonBody&, params* p_params = NULL); + +}; // End of class json_codec_mec028 diff --git a/ccsrc/Protocols/Json/module.mk b/ccsrc/Protocols/Json/module.mk index 4222e98..593ce97 100644 --- a/ccsrc/Protocols/Json/module.mk +++ b/ccsrc/Protocols/Json/module.mk @@ -3,6 +3,7 @@ sources := \ json_codec_mec011.cc \ json_codec_mec013.cc \ json_codec_mec030.cc \ + json_codec_mec028.cc \ json_codec_mec040.cc \ diff --git a/etc/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablement_Sandbox.cfg_ b/etc/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablement_Sandbox.cfg_ index 1735081..0164f79 100644 --- a/etc/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablement_Sandbox.cfg_ +++ b/etc/AtsMec_EdgePlatformApplicationEnablement/AtsMec_EdgePlatformApplicationEnablement_Sandbox.cfg_ @@ -19,7 +19,7 @@ LibMec_Pics.PICS_ROOT_API := "/sbxykqjr17/mep1/" # Need to sign i LibMec_Pics.PICS_MEC_PLAT := true # Application Instance ID -EdgePlatformApplicationEnablementAPI_Pixits.PX_APP_INSTANCE_ID := "35b117eb-d372-451f-9c98-f97807f44776" # Copied from ETSI MEC Sandbox GUI +EdgePlatformApplicationEnablementAPI_Pixits.PX_APP_INSTANCE_ID := "a503822f-a3ff-4ac3-913b-c35acf610498" # Copied from ETSI MEC Sandbox GUI # Callbacks @@ -116,7 +116,7 @@ system.httpPort_notif.params := "HTTP(codecs=json:json_codec_mec011)/TCP(debug=1 # 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 that it has completed the application level termination -#AtsMec_EdgePlatformApplicationEnablementAPI_TestCases.TC_MEC_MEC011_SRV_CONFTASK_001_OK +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 with an error when a request for an indication is sent to an unknown application @@ -129,7 +129,7 @@ system.httpPort_notif.params := "HTTP(codecs=json:json_codec_mec011)/TCP(debug=1 # 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 +#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 diff --git a/etc/AtsMec_WlanInformation/AtsMec_WlanInformation.cfg b/etc/AtsMec_WlanInformation/AtsMec_WlanInformation.cfg index 2823043..4bd26ce 100644 --- a/etc/AtsMec_WlanInformation/AtsMec_WlanInformation.cfg +++ b/etc/AtsMec_WlanInformation/AtsMec_WlanInformation.cfg @@ -8,25 +8,29 @@ LibCommon_Time.PX_TAC := 30.0 LibCommon_Sync.PX_TSYNC_TIME_LIMIT := 30.0; LibCommon_Sync.PX_TSHUT_DOWN_TIME_LIMIT := 30.0; -LibHttp_Pics.PICS_HEADER_HOST := "sandbox-mec.etsi.org" #"192.168.1.39" +LibHttp_Pics.PICS_HEADER_HOST := "192.168.1.21" LibHttp_Pics.PICS_HEADER_CONTENT_TYPE := "application/json" LibHttp_Pics.PICS_USE_TOKEN_HEADER := true #LibHttp_Pics.PICS_TOKEN_HEADER := "Basic WrongToken" -LibMec_Pics.PICS_ROOT_API := "/sbx8tunqyy/mep1" # Need to sign in on https://sandbox-mec.etsi.org/, section 'Try-it from your MEC application' +LibMec_Pics.PICS_ROOT_API := "/sbxykqjr17/mep1/" # Need to sign in on https://mec-platform.etsi.org/, section 'Try-it from your MEC application' LibMec_Pics.PICS_MEC_PLAT := true + +WlanInformationAPI_Pixits.PX_WLAN_FILTER_VALUE := "005C0A0A0002" +WlanInformationAPI_Pixits.PX_MAC_ID := "005C07070707" + [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_WlanInformation/%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 := 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 @@ -34,8 +38,8 @@ 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=sandbox-mec.etsi.org,port=443,use_ssl=1,trusted_ca_list=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem,privkey=/home/yann/var/ssl/archive/yanngarcia.ddns.net/privkey1.pem,certificate=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem)" -system.httpPort_notif.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server_mode=1,local_port=443,use_ssl=1,mutual_auth=1,mutual_tls=1,trusted_ca_list=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem,privkey=/home/yann/var/ssl/archive/yanngarcia.ddns.net/privkey1.pem,certificate=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem)" +system.httpPort.params := "HTTP(codecs=json:json_codec_mec028)/TCP(debug=1,server=mec-platform.etsi.org,port=443,use_ssl=1,trusted_ca_list=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem,privkey=/home/yann/var/ssl/archive/yanngarcia.ddns.net/privkey1.pem,certificate=/home/yann/var/ssl/archive/yanngarcia.ddns.net/fullchain1.pem)" +system.httpPort_notif.params := "HTTP(codecs=json:json_codec_mec028)/TCP(debug=1,server_mode=1,use_ssl=0)" [DEFINE] # In this section you can create macro definitions, @@ -60,7 +64,70 @@ system.httpPort_notif.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server [EXECUTE] # In this section you can specify what parts of your test suite you want to execute. -AtsMec_TestControl.control +#AtsMec_TestControl.control + +# Need to activate a network scenario with Wi-Fi POA + +# 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 when the MEC Platform is queried using a filter on subscription type +#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 request +#AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_009_BR +# Check that the IUT responds with an error when an unknown subscription modification request +#AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_009_NF +# 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 +# Check that the IUT responds with the list of WLAN Access Point +#AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_012_OK +# Check that the IUT responds with a new measurement configuration +#AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_013_OK +# Check that the IUT responds with an error when an invalid request is sent +#AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_013_BR +# Check that the IUT responds with the specified measurement configuration +#AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_014_OK +# Check that the IUT responds with an error when an invalid request is sent +#AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_014_NF +# Check that the IUT responds with the modified measurement configuration +#AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_015_OK +# Check that the IUT responds with an error when an invalid request is sent +#AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_015_NF +# Check that the IUT responds with with 204 when requested to delete the specified measurement configuration +#AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_016_OK +# Check that the IUT responds with an error when an invalid request is sent +#AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_016_NF [GROUPS] # In this section you can specify groups of hosts. These groups can be used inside the diff --git a/ttcn/AtsMec_WlanInformation/AtsMec_WlanInformationAPI_TestCases.ttcn b/ttcn/AtsMec_WlanInformation/AtsMec_WlanInformationAPI_TestCases.ttcn index e1ee4e6..c14b13b 100644 --- a/ttcn/AtsMec_WlanInformation/AtsMec_WlanInformationAPI_TestCases.ttcn +++ b/ttcn/AtsMec_WlanInformation/AtsMec_WlanInformationAPI_TestCases.ttcn @@ -78,8 +78,12 @@ module AtsMec_WlanInformationAPI_TestCases { mw_http_response( mw_http_response_ok( mw_http_message_body_json( - mw_body_json_ap_info_list - )))) { + mw_body_json_ap_info_list( + superset( + mw_ap_info( + mw_ap_identity( + PX_MAC_ID + )))))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of ApInfo ***"); @@ -131,8 +135,12 @@ module AtsMec_WlanInformationAPI_TestCases { mw_http_response( mw_http_response_ok( mw_http_message_body_json( - mw_body_json_ap_info_list - )))) { + mw_body_json_ap_info_list( + superset( + mw_ap_info( + mw_ap_identity( + PX_MAC_ID + )))))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of ApInfo ***"); @@ -172,7 +180,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=(ee," & 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 query v_headers ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -288,8 +296,12 @@ module AtsMec_WlanInformationAPI_TestCases { mw_http_response( mw_http_response_ok( mw_http_message_body_json( - mw_body_json_sta_info_list - )))) { + mw_body_json_sta_info_list( + superset( + mw_sta_info( + mw_sta_identity( + PX_WLAN_FILTER_VALUE + )))))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a StaInfo list ***"); @@ -329,7 +341,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=(ee," & 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 query v_headers ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); diff --git a/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Functions.ttcn b/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Functions.ttcn index c97ae00..70575fe 100644 --- a/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Functions.ttcn +++ b/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Functions.ttcn @@ -73,8 +73,7 @@ module WlanInformationAPI_Functions { mw_body_json_assoc_sta_subscription( mw_assoc_sta_subscription( PX_ASSOC_STA_SUBSCRIPTION_CALLBACK, - -, - -, -, + -, -, -, ? )))))) -> value v_response { tc_ac.stop; @@ -83,11 +82,13 @@ module WlanInformationAPI_Functions { var charstring_list v_subscription_id; f_get_header(v_response.response.header, "Location", v_subscription_id); // Extract HTTP subssription id + log("f_create_assoc_sta_subscription: INFO: v_subscription_id: ", v_subscription_id); p_subscription_id := regexp( v_subscription_id[0], "?+" & PX_ME_WLAN_URI_SUB & "/(?*)", 0 ); + log("f_create_assoc_sta_subscription: INFO: p_subscription_id: ", p_subscription_id); p_assoc_sta_subscription := v_response.response.body.json_body.assocStaSubscription; log("f_create_assoc_sta_subscription: INFO: IUT successfully responds to the subscription: ", p_assoc_sta_subscription); log("f_create_assoc_sta_subscription: INFO: p_subscription_id: ", p_subscription_id); diff --git a/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Pixits.ttcn b/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Pixits.ttcn index 4f04fca..0c60f09 100644 --- a/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Pixits.ttcn +++ b/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Pixits.ttcn @@ -5,9 +5,13 @@ module WlanInformationAPI_Pixits { modulepar charstring PX_WLAN_FILTER_FIELD := "ap/macId"; - modulepar charstring PX_WLAN_FILTER_VALUE := "005C06060606"; + modulepar charstring PX_WLAN_FILTER_VALUE := "005C0A0A0002"; - modulepar Json.String PX_MAC_ID := "005C06060606"; + modulepar Json.String PX_MAC_ID := "005C07070707"; + + modulepar charstring PX_LATITUDE := "361447414"; + + modulepar charstring PX_LONGITUDE := "59145544"; modulepar Json.AnyURI PX_ASSOC_STA_SUBSCRIPTION_CALLBACK := "https://127.0.0.1/wai/v1/assoc_notif"; -- GitLab From dff4a180dbd773829e00d9b9bc1735e9bf9499fa Mon Sep 17 00:00:00 2001 From: garciay Date: Mon, 17 Jun 2024 10:34:38 +0200 Subject: [PATCH 95/99] Rename AtsMec_WlanInformation.cfg --- ...ec_WlanInformation.cfg => AtsMec_WlanInformation_Sandbox.cfg_} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename etc/AtsMec_WlanInformation/{AtsMec_WlanInformation.cfg => AtsMec_WlanInformation_Sandbox.cfg_} (100%) diff --git a/etc/AtsMec_WlanInformation/AtsMec_WlanInformation.cfg b/etc/AtsMec_WlanInformation/AtsMec_WlanInformation_Sandbox.cfg_ similarity index 100% rename from etc/AtsMec_WlanInformation/AtsMec_WlanInformation.cfg rename to etc/AtsMec_WlanInformation/AtsMec_WlanInformation_Sandbox.cfg_ -- GitLab From d81c0d4966202d2bb46d898906bdc764dacdb68c Mon Sep 17 00:00:00 2001 From: garciay Date: Mon, 17 Jun 2024 17:16:45 +0200 Subject: [PATCH 96/99] Bug fixed validating TC_MEC_MEC028_SRV_WAI_005_OK --- .../AtsMec_WlanInformationAPI_TestCases.ttcn | 13 +++++++------ .../ttcn/WlanInformationAPI_Functions.ttcn | 4 +--- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/ttcn/AtsMec_WlanInformation/AtsMec_WlanInformationAPI_TestCases.ttcn b/ttcn/AtsMec_WlanInformation/AtsMec_WlanInformationAPI_TestCases.ttcn index c14b13b..5bf70f2 100644 --- a/ttcn/AtsMec_WlanInformation/AtsMec_WlanInformationAPI_TestCases.ttcn +++ b/ttcn/AtsMec_WlanInformation/AtsMec_WlanInformationAPI_TestCases.ttcn @@ -391,11 +391,11 @@ module AtsMec_WlanInformationAPI_TestCases { // Preamble f_create_assoc_sta_subscription(v_assoc_sta_subscription, v_subscription_id); - f_create_assoc_sta_subscription(v_assoc_sta_subscription, v_subscription_id_1); + f_create_assoc_sta_subscription(v_assoc_sta_subscription_1, v_subscription_id_1); f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( - m_http_request_get( + m_http_request_get( PICS_ROOT_API & PX_ME_WLAN_URI_SUB, v_headers ))); @@ -406,9 +406,9 @@ module AtsMec_WlanInformationAPI_TestCases { alt { [] httpPort.receive( mw_http_response( - mw_http_response_ok( - mw_http_message_body_json( - mw_body_json_wlan_subscription_link_list( + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_wlan_subscription_link_list( mw_subscription_link_list( -, { @@ -420,7 +420,8 @@ module AtsMec_WlanInformationAPI_TestCases { mw_subscription( v_assoc_sta_subscription_1.links.self_.href, "AssocStaSubscription" - ), * + ), + * } )))))) { tc_ac.stop; diff --git a/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Functions.ttcn b/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Functions.ttcn index 70575fe..428941f 100644 --- a/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Functions.ttcn +++ b/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Functions.ttcn @@ -82,13 +82,11 @@ module WlanInformationAPI_Functions { var charstring_list v_subscription_id; f_get_header(v_response.response.header, "Location", v_subscription_id); // Extract HTTP subssription id - log("f_create_assoc_sta_subscription: INFO: v_subscription_id: ", v_subscription_id); p_subscription_id := regexp( v_subscription_id[0], "?+" & PX_ME_WLAN_URI_SUB & "/(?*)", 0 ); - log("f_create_assoc_sta_subscription: INFO: p_subscription_id: ", p_subscription_id); p_assoc_sta_subscription := v_response.response.body.json_body.assocStaSubscription; log("f_create_assoc_sta_subscription: INFO: IUT successfully responds to the subscription: ", p_assoc_sta_subscription); log("f_create_assoc_sta_subscription: INFO: p_subscription_id: ", p_subscription_id); @@ -110,7 +108,7 @@ module WlanInformationAPI_Functions { httpPort.send( m_http_request( m_http_request_delete( - PICS_ROOT_API & PX_ME_WLAN_URI & p_subscription_id, + PICS_ROOT_API & PX_ME_WLAN_URI_SUB & "/" & p_subscription_id, v_headers ))); -- GitLab From 8315f79a54171f567acdbb9ff6887d93ec1d4a16 Mon Sep 17 00:00:00 2001 From: garciay Date: Mon, 17 Jun 2024 20:35:31 +0200 Subject: [PATCH 97/99] Bug fixed validating TC_MEC_MEC028_SRV_WAI_011_OK --- ccsrc/Protocols/Json/json_codec_mec028.cc | 15 +++-- .../AtsMec_WlanInformation_Sandbox.cfg_ | 6 +- .../AtsMec_WlanInformationAPI_TestCases.ttcn | 56 +++++++++---------- .../ttcn/WlanInformationAPI_Templates.ttcn | 42 ++++++++++++++ .../ttcn/LibHttp_JsonTemplates.ttcn | 12 ++++ 5 files changed, 94 insertions(+), 37 deletions(-) diff --git a/ccsrc/Protocols/Json/json_codec_mec028.cc b/ccsrc/Protocols/Json/json_codec_mec028.cc index d025173..720a379 100644 --- a/ccsrc/Protocols/Json/json_codec_mec028.cc +++ b/ccsrc/Protocols/Json/json_codec_mec028.cc @@ -77,11 +77,21 @@ int json_codec_mec028::decode (const OCTETSTRING& p_data, LibHttp__JsonMessageBo assoc_sta_subscription.decode(WlanInformationAPI__TypesAndValues::AssocStaSubscription_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); msg.assocStaSubscription() = assoc_sta_subscription; } + } 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; } 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("\"StaDataRateNotification\"") != std::string::npos) { + // WlanInformationAPI__TypesAndValues::StaDataRateNotification assoc_sta_data_rate_notification; + // TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); + // assoc_sta_data_rate_notification.decode(WlanInformationAPI__TypesAndValues::StaDataRateNotification_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); + // msg.assocStaDataRateNotification() = assoc_sta_data_rate_notification; } 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; @@ -98,11 +108,6 @@ int json_codec_mec028::decode (const OCTETSTRING& p_data, LibHttp__JsonMessageBo 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; } else { return json_codec::decode(p_data, msg, p_params); } diff --git a/etc/AtsMec_WlanInformation/AtsMec_WlanInformation_Sandbox.cfg_ b/etc/AtsMec_WlanInformation/AtsMec_WlanInformation_Sandbox.cfg_ index 4bd26ce..08d4904 100644 --- a/etc/AtsMec_WlanInformation/AtsMec_WlanInformation_Sandbox.cfg_ +++ b/etc/AtsMec_WlanInformation/AtsMec_WlanInformation_Sandbox.cfg_ @@ -18,9 +18,9 @@ LibMec_Pics.PICS_ROOT_API := "/sbxykqjr17/mep1/" # Need to sign i LibMec_Pics.PICS_MEC_PLAT := true - WlanInformationAPI_Pixits.PX_WLAN_FILTER_VALUE := "005C0A0A0002" WlanInformationAPI_Pixits.PX_MAC_ID := "005C07070707" +WlanInformationAPI_Pixits.PX_ASSOC_STA_SUBSCRIPTION_CALLBACK := "http://yanngarcia.ddns.net/wais/v2/assoc_sta" [LOGGING] # In this section you can specify the name of the log file and the classes of events @@ -81,7 +81,7 @@ system.httpPort_notif.params := "HTTP(codecs=json:json_codec_mec028)/TCP(debug=1 # 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 +#AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_005_OK # Check that the IUT responds with the requested list of subscription when the MEC Platform is queried using a filter on subscription type #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 @@ -109,7 +109,7 @@ AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_005_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 +AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_011_OK # Check that the IUT responds with the list of WLAN Access Point #AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_012_OK # Check that the IUT responds with a new measurement configuration diff --git a/ttcn/AtsMec_WlanInformation/AtsMec_WlanInformationAPI_TestCases.ttcn b/ttcn/AtsMec_WlanInformation/AtsMec_WlanInformationAPI_TestCases.ttcn index 5bf70f2..975a420 100644 --- a/ttcn/AtsMec_WlanInformation/AtsMec_WlanInformationAPI_TestCases.ttcn +++ b/ttcn/AtsMec_WlanInformation/AtsMec_WlanInformationAPI_TestCases.ttcn @@ -468,7 +468,7 @@ module AtsMec_WlanInformationAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - PICS_ROOT_API & PX_ME_WLAN_URI_SUB & "subscription_type=assoc_sta", + PICS_ROOT_API & PX_ME_WLAN_URI_SUB & "?" & "subscription_type=assoc_sta", v_headers ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -535,7 +535,7 @@ module AtsMec_WlanInformationAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - PICS_ROOT_API & PX_ME_WLAN_URI & "/subscriptions/assoc_sta", + PICS_ROOT_API & PX_ME_WLAN_URI & "/subscriptions?assoc_sta", v_headers ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -641,12 +641,12 @@ module AtsMec_WlanInformationAPI_TestCases { f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( - m_http_request_post( - PICS_ROOT_API & PX_ME_WLAN_URI_SUB, - v_headers, - m_http_message_body_json( + m_http_request_post( + PICS_ROOT_API & PX_ME_WLAN_URI_SUB, + v_headers, + m_http_message_body_json( m_body_json_assoc_sta_subscription( - m_assoc_sta_subscription( + m_assoc_sta_subscription( PX_ASSOC_STA_SUBSCRIPTION_CALLBACK, m_ap_identity( PX_MAC_ID @@ -655,7 +655,7 @@ module AtsMec_WlanInformationAPI_TestCases { 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_get_current_timestamp_utc() / 1000 + 30 // Expiry time: T + 30 seconds ))))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -1052,7 +1052,7 @@ module AtsMec_WlanInformationAPI_TestCases { alt { [] httpPort.receive( mw_http_response( - mw_http_response_400_bad_request + mw_http_response_400_bad_request )) { tc_ac.stop; @@ -1119,7 +1119,7 @@ module AtsMec_WlanInformationAPI_TestCases { alt { [] httpPort.receive( mw_http_response( - mw_http_response_404_not_found + mw_http_response_404_not_found )) { tc_ac.stop; @@ -1163,9 +1163,9 @@ module AtsMec_WlanInformationAPI_TestCases { f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( - m_http_request_delete( - PICS_ROOT_API & PX_ME_WLAN_URI_SUB & v_subscription_id, - v_headers + m_http_request_delete( + PICS_ROOT_API & PX_ME_WLAN_URI_SUB & "/" & v_subscription_id, + v_headers ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -1174,8 +1174,8 @@ module AtsMec_WlanInformationAPI_TestCases { alt { [] httpPort.receive( mw_http_response( - mw_http_response_204_no_content - )) { + mw_http_response_204_no_content + )) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with an AssocStaSubscription ***"); @@ -1214,9 +1214,9 @@ module AtsMec_WlanInformationAPI_TestCases { f_init_default_headers_list(-, -, v_headers); httpPort.send( m_http_request( - m_http_request_delete( - PICS_ROOT_API & PX_ME_WLAN_URI_SUB & "unknown", - v_headers + m_http_request_delete( + PICS_ROOT_API & PX_ME_WLAN_URI_SUB & "unknown", + v_headers ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -1225,7 +1225,7 @@ module AtsMec_WlanInformationAPI_TestCases { alt { [] httpPort.receive( mw_http_response( - mw_http_response_404_not_found + mw_http_response_404_not_found )) { tc_ac.stop; @@ -1273,16 +1273,14 @@ module AtsMec_WlanInformationAPI_TestCases { [] httpPort_notif.receive( mw_http_request( mw_http_request_post( - -, - -, - mw_http_message_body_json( - mw_body_json_assoc_sta_subscription( - mw_assoc_sta_subscription( - PX_ASSOC_STA_SUBSCRIPTION_CALLBACK, - -, - -, -, - ? - )))))) { + -, + -, + mw_http_message_body_json( + mw_body_json_assoc_sta_notification( + mw_assoc_sta_notification( + mw_ap_identity( + PX_MAC_ID + ))))))) { tc_wait.stop; f_init_default_headers_list(-, -, v_headers); diff --git a/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Templates.ttcn b/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Templates.ttcn index d4c9abc..959a326 100644 --- a/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Templates.ttcn +++ b/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Templates.ttcn @@ -231,6 +231,48 @@ module WlanInformationAPI_Templates { expiryDeadline := p_expiryDeadline } // End of template mw_sta_data_rate_subscription + + + template (omit) AssocStaNotification m_assoc_sta_notification( + in template (value) ApIdentity p_apId, + in template (omit) TimeStamp p_timeStamp := omit, + in template (omit) StaIdentityList p_staId := omit + ) := { + notificationType := "AssocStaNotification", + timeStamp := p_timeStamp, + apId := p_apId, + staId := p_staId + } // End of template m_assoc_sta_notification + + template (present) AssocStaNotification mw_assoc_sta_notification( + template (present) ApIdentity p_apId := ?, + template TimeStamp p_timeStamp := *, + template StaIdentityList p_staId := * + ) := { + notificationType := "AssocStaNotification", + timeStamp := p_timeStamp, + apId := p_apId, + staId := p_staId + } // End of template mw_assoc_sta_notification + + template (omit) StaDataRateNotification m_sta_data_rate_notification( + in template (omit) TimeStamp p_timeStamp := omit, + in template (omit) StaDataRateList p_staDataRate := omit + ) := { + notificationType := "AssocStaDatarateNotification", + timeStamp := p_timeStamp, + staDataRate := p_staDataRate + } // End of template m_sta_data_rate_notification + + template (present) StaDataRateNotification mw_sta_data_rate_notification( + template TimeStamp p_timeStamp := *, + template StaDataRateList p_staDataRate := * + ) := { + notificationType := "AssocStaDatarateNotification", + timeStamp := p_timeStamp, + staDataRate := p_staDataRate + } // End of template mw_sta_data_rate_notification + template (omit) StaIdentity m_sta_identity( in Json.String p_macId, in template (omit) SsidList p_ssid := omit, diff --git a/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn b/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn index 7154a4c..fabd6e5 100644 --- a/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn +++ b/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn @@ -1268,6 +1268,18 @@ module LibHttp_JsonTemplates { staDataRateSubscription := p_staDataRateSubscription } // End of template m_body_json_sta_data_rate_subscription + template (value) JsonBody m_body_json_assoc_sta_notification( + in template (value) AssocStaNotification p_assocStaNotification + ) := { + assocStaNotification := p_assocStaNotification + } // End of template m_body_json_assoc_sta_notification + + template (present) JsonBody mw_body_json_assoc_sta_notification( + template (present) AssocStaNotification p_assocStaNotification := ? + ) := { + assocStaNotification := p_assocStaNotification + } // End of template mw_body_json_assoc_sta_notification + template (present) JsonBody mw_body_json_sta_data_rate_subscription( template (present) StaDataRateSubscription p_staDataRateSubscription := ? ) := { -- GitLab From 6d2eaaf14c66565b9b0667af6679f4dcfbd047a1 Mon Sep 17 00:00:00 2001 From: garciay Date: Mon, 4 Nov 2024 08:55:06 +0100 Subject: [PATCH 98/99] Add missing converstion unichar to char --- .../AtsMec_V2XInformationService.cfg_ | 6 +-- .../AtsMec_WlanInformation_Sandbox.cfg_ | 4 +- plantuml/__main__.py | 4 +- titan-test-system-framework | 2 +- .../AtsMec_LocationAPI_TestCases.ttcn | 38 +++++++++---------- ...viceApplicationInterfaceAPI_Functions.ttcn | 9 ++--- .../ttcn/WlanInformationAPI_Functions.ttcn | 4 +- 7 files changed, 34 insertions(+), 33 deletions(-) diff --git a/etc/AtsMec_V2XInformationService/AtsMec_V2XInformationService.cfg_ b/etc/AtsMec_V2XInformationService/AtsMec_V2XInformationService.cfg_ index 5a8a384..a2043ca 100644 --- a/etc/AtsMec_V2XInformationService/AtsMec_V2XInformationService.cfg_ +++ b/etc/AtsMec_V2XInformationService/AtsMec_V2XInformationService.cfg_ @@ -8,7 +8,7 @@ LibCommon_Time.PX_TAC := 30.0 LibCommon_Sync.PX_TSYNC_TIME_LIMIT := 30.0; LibCommon_Sync.PX_TSHUT_DOWN_TIME_LIMIT := 30.0; -LibHttp_Pics.PICS_HEADER_HOST := "mec-platform.etsi.org" #"192.168.1.39" +LibHttp_Pics.PICS_HEADER_HOST := "192.168.1.21" #"192.168.1.39" LibHttp_Pics.PICS_HEADER_CONTENT_TYPE := "application/json" LibHttp_Pics.PICS_USE_TOKEN_HEADER := true @@ -73,7 +73,7 @@ system.httpPort_notif.params := "HTTP(codecs=json:json_codec_mec030)/TCP(debug=1 #AtsMec_V2XInformationServiceAPI_TestControl.control # 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 +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 @@ -82,7 +82,7 @@ system.httpPort_notif.params := "HTTP(codecs=json:json_codec_mec030)/TCP(debug=1 #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 +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_002_OK_01 #AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_002_OK_02 #AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_002_BR #AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_002_NF diff --git a/etc/AtsMec_WlanInformation/AtsMec_WlanInformation_Sandbox.cfg_ b/etc/AtsMec_WlanInformation/AtsMec_WlanInformation_Sandbox.cfg_ index 08d4904..50d1b79 100644 --- a/etc/AtsMec_WlanInformation/AtsMec_WlanInformation_Sandbox.cfg_ +++ b/etc/AtsMec_WlanInformation/AtsMec_WlanInformation_Sandbox.cfg_ @@ -109,9 +109,9 @@ system.httpPort_notif.params := "HTTP(codecs=json:json_codec_mec028)/TCP(debug=1 # 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 # Check that the IUT responds with the list of WLAN Access Point -#AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_012_OK +AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_012_OK # Check that the IUT responds with a new measurement configuration #AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_013_OK # Check that the IUT responds with an error when an invalid request is sent diff --git a/plantuml/__main__.py b/plantuml/__main__.py index 5589e40..69134aa 100644 --- a/plantuml/__main__.py +++ b/plantuml/__main__.py @@ -121,7 +121,6 @@ def process_line(line): else: out_streams.write(f"hnote across #gray: error\n") out_streams.write(f"note left: {match['hours']}:{match['minutes']}:{match['seconds']}.{match['milliseconds']}\n") - out_streams.write('@enduml\n') else: logger.info('Got unsupported item') # End of 'if' statement @@ -168,6 +167,9 @@ def main(): process_line(line) line = in_stream.readline() # End of 'for' statement + # Add the end tag + out_streams.write('@enduml\n') + out_streams.flush() # End of 'with' statement # End of 'with' statement diff --git a/titan-test-system-framework b/titan-test-system-framework index c579f7c..a8db2ae 160000 --- a/titan-test-system-framework +++ b/titan-test-system-framework @@ -1 +1 @@ -Subproject commit c579f7c7175b34426e8392e1edd3885c4b9cd185 +Subproject commit a8db2aefc860cdfec0b76ae767f5c91fe7ec042f diff --git a/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestCases.ttcn b/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestCases.ttcn index df77538..23c0452 100644 --- a/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestCases.ttcn +++ b/ttcn/AtsMec_Location/AtsMec_LocationAPI_TestCases.ttcn @@ -521,7 +521,7 @@ module AtsMec_LocationAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - PICS_ROOT_API & PX_LOC_API_AREA_SUB_URI & "/" & PX_NON_EXISTENT_SUBSCRIPTION_ID, + PICS_ROOT_API & PX_LOC_API_AREA_SUB_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_ID, "UTF-8")), v_headers ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -871,7 +871,7 @@ module AtsMec_LocationAPI_TestCases { httpPort.send( m_http_request( m_http_request_put( - PICS_ROOT_API & PX_LOC_API_AREA_SUB_URI & "/" & PX_NON_EXISTENT_SUBSCRIPTION_ID, + PICS_ROOT_API & PX_LOC_API_AREA_SUB_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_ID, "UTF-8")), v_headers, m_http_message_body_json( m_body_json_user_area_subscription( @@ -1223,7 +1223,7 @@ module AtsMec_LocationAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - PICS_ROOT_API & PX_LOC_API_DISTANCE_SUB_URI & "/" & PX_NON_EXISTENT_SUBSCRIPTION_ID, + PICS_ROOT_API & PX_LOC_API_DISTANCE_SUB_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_ID, "UTF-8")), v_headers ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -1658,7 +1658,7 @@ module AtsMec_LocationAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - PICS_ROOT_API & PX_ME_APP_Q_USERS_LIST_URI & "?address=" & PX_IP_ADDRESS, + PICS_ROOT_API & PX_ME_APP_Q_USERS_LIST_URI & "?address=" & oct2char(unichar2oct(PX_IP_ADDRESS, "UTF-8")), v_headers ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -1720,7 +1720,7 @@ module AtsMec_LocationAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - PICS_ROOT_API & PX_ME_APP_Q_USERS_LIST_URI & "?address=" & PX_IP_ADDRESS & "&address=" & PX_IP_ADDRESS_1, + PICS_ROOT_API & PX_ME_APP_Q_USERS_LIST_URI & "?address=" & oct2char(unichar2oct(PX_IP_ADDRESS, "UTF-8")) & "&address=" & oct2char(unichar2oct(PX_IP_ADDRESS_1, "UTF-8")), v_headers ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -1786,7 +1786,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=" & PX_ZONE_ID & "&zoneId=" & PX_ZONE_ID_1, + PICS_ROOT_API & PX_ME_APP_Q_USERS_LIST_URI & "?zoneId=" & oct2char(unichar2oct(PX_ZONE_ID, "UTF-8")) & "&zoneId=" & oct2char(unichar2oct(PX_ZONE_ID_1, "UTF-8")), v_headers ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -1856,7 +1856,7 @@ module AtsMec_LocationAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - PICS_ROOT_API & PX_ME_APP_Q_USERS_LIST_URI & "?addr=" & PX_IP_ADDRESS, // Wrong name should trigger an error response. + PICS_ROOT_API & PX_ME_APP_Q_USERS_LIST_URI & "?addr=" & oct2char(unichar2oct(PX_IP_ADDRESS, "UTF-8")), // Wrong name should trigger an error response. v_headers ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -1907,7 +1907,7 @@ module AtsMec_LocationAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - PICS_ROOT_API & PX_ME_APP_Q_USERS_LIST_URI & "?address=" & PX_ACR_UNKNOWN_IP, + PICS_ROOT_API & PX_ME_APP_Q_USERS_LIST_URI & "?address=" & oct2char(unichar2oct(PX_ACR_UNKNOWN_IP, "UTF-8")), v_headers ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -2168,7 +2168,7 @@ module AtsMec_LocationAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - PICS_ROOT_API & PX_LOC_API_USERS_SUB_URI & "?event&adress=" & PX_USER_2, + PICS_ROOT_API & PX_LOC_API_USERS_SUB_URI & "?event&adress=" & oct2char(unichar2oct(PX_USER_2, "UTF-8")), v_headers ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -2289,7 +2289,7 @@ module AtsMec_LocationAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - PICS_ROOT_API & PX_LOC_API_USERS_SUB_URI & "/" & PX_NON_EXISTENT_SUBSCRIPTION_ID, + PICS_ROOT_API & PX_LOC_API_USERS_SUB_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_ID, "UTF-8")), v_headers ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -2346,7 +2346,7 @@ module AtsMec_LocationAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - PICS_ROOT_API & PX_LOC_API_USERS_SUB_URI & "?event&address=" & PX_USER_2, + PICS_ROOT_API & PX_LOC_API_USERS_SUB_URI & "?event&address=" & oct2char(unichar2oct(PX_USER_2, "UTF-8")), v_headers ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -2525,7 +2525,7 @@ module AtsMec_LocationAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - PICS_ROOT_API & PX_LOC_API_USERS_SUB_URI & "/" & PX_NON_EXISTENT_SUBSCRIPTION_ID, + PICS_ROOT_API & PX_LOC_API_USERS_SUB_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_ID, "UTF-8")), v_headers ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -3330,7 +3330,7 @@ module AtsMec_LocationAPI_TestCases { httpPort.send( m_http_request( m_http_request_put( - PICS_ROOT_API & PX_LOC_API_USERS_SUB_URI & "/" & PX_NON_EXISTENT_SUBSCRIPTION_ID, + PICS_ROOT_API & PX_LOC_API_USERS_SUB_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_ID, "UTF-8")), v_headers, m_http_message_body_json( m_body_json_user_location_event_subscription( @@ -3389,7 +3389,7 @@ module AtsMec_LocationAPI_TestCases { httpPort.send( m_http_request( m_http_request_put( - PICS_ROOT_API & PX_LOC_API_USERS_SUB_URI & "/" & PX_NON_EXISTENT_SUBSCRIPTION_ID, + PICS_ROOT_API & PX_LOC_API_USERS_SUB_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_ID, "UTF-8")), v_headers, m_http_message_body_json( m_body_json_user_location_periodic_subscription( @@ -3874,7 +3874,7 @@ module AtsMec_LocationAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - PICS_ROOT_API & PX_LOC_API_ZONES_SUB_URI & "?event&address=" & PX_USER_2, + PICS_ROOT_API & PX_LOC_API_ZONES_SUB_URI & "?event&address=" & oct2char(unichar2oct(PX_USER_2, "UTF-8")), v_headers ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -4007,7 +4007,7 @@ module AtsMec_LocationAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - PICS_ROOT_API & PX_LOC_API_ZONES_SUB_URI & "?event&address=" & PX_USER_2, + PICS_ROOT_API & PX_LOC_API_ZONES_SUB_URI & "?event&address=" & oct2char(unichar2oct(PX_USER_2, "UTF-8")), v_headers ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -4194,7 +4194,7 @@ module AtsMec_LocationAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - PICS_ROOT_API & PX_LOC_API_ZONES_SUB_URI & "/" & PX_NON_EXISTENT_SUBSCRIPTION_ID, + PICS_ROOT_API & PX_LOC_API_ZONES_SUB_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_ID, "UTF-8")), v_headers ))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); @@ -4846,7 +4846,7 @@ module AtsMec_LocationAPI_TestCases { httpPort.send( m_http_request( m_http_request_put( - PICS_ROOT_API & PX_LOC_API_ZONES_SUB_URI & PX_NON_EXISTENT_SUBSCRIPTION_ID, + PICS_ROOT_API & PX_LOC_API_ZONES_SUB_URI & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_ID, "UTF-8")), v_headers, m_http_message_body_json( m_body_json_zone_location_event_subscription( @@ -4957,7 +4957,7 @@ module AtsMec_LocationAPI_TestCases { httpPort.send( m_http_request( m_http_request_delete( - PICS_ROOT_API & PX_LOC_API_ZONES_SUB_URI & "/" & PX_NON_EXISTENT_SUBSCRIPTION_ID, + PICS_ROOT_API & PX_LOC_API_ZONES_SUB_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_ID, "UTF-8")), v_headers ) ) diff --git a/ttcn/LibMec/DeviceApplicationInterfaceAPI/ttcn/DeviceApplicationInterfaceAPI_Functions.ttcn b/ttcn/LibMec/DeviceApplicationInterfaceAPI/ttcn/DeviceApplicationInterfaceAPI_Functions.ttcn index f40ac61..0f43a1f 100644 --- a/ttcn/LibMec/DeviceApplicationInterfaceAPI/ttcn/DeviceApplicationInterfaceAPI_Functions.ttcn +++ b/ttcn/LibMec/DeviceApplicationInterfaceAPI/ttcn/DeviceApplicationInterfaceAPI_Functions.ttcn @@ -93,11 +93,10 @@ module DeviceApplicationInterfaceAPI_Functions { httpPort.send( m_http_request( m_http_request_delete( - PICS_ROOT_API & PX_DEVICE_APP_CTX_URI & "/" & p_device_info_app_context.contextId, - v_headers - ) - ) - ); + PICS_ROOT_API & PX_DEVICE_APP_CTX_URI & "/" & oct2char(unichar2oct(p_device_info_app_context.contextId, "UTF-8")), + v_headers + ) + )); tc_ac.start; alt { diff --git a/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Functions.ttcn b/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Functions.ttcn index 428941f..d80e08d 100644 --- a/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Functions.ttcn +++ b/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Functions.ttcn @@ -108,7 +108,7 @@ module WlanInformationAPI_Functions { httpPort.send( m_http_request( m_http_request_delete( - PICS_ROOT_API & PX_ME_WLAN_URI_SUB & "/" & p_subscription_id, + PICS_ROOT_API & PX_ME_WLAN_URI_SUB & "/" & oct2char(unichar2oct(p_subscription_id, "UTF-8")), v_headers ))); @@ -193,7 +193,7 @@ module WlanInformationAPI_Functions { httpPort.send( m_http_request( m_http_request_delete( - PICS_ROOT_API & PX_ME_WLAN_URI_MEAS & "/" & p_measurement_config_id, + PICS_ROOT_API & PX_ME_WLAN_URI_MEAS & "/" & oct2char(unichar2oct(p_measurement_config_id, "UTF-8")), v_headers ))); -- GitLab From 89745e757bcb0a030dda5e6f4a7671c803cb05de Mon Sep 17 00:00:00 2001 From: garciay Date: Mon, 4 Nov 2024 09:01:22 +0100 Subject: [PATCH 99/99] Update README.md file to use the install.sh script --- README.md | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index fef57fa..10188b7 100644 --- a/README.md +++ b/README.md @@ -84,18 +84,12 @@ Procedure on the host machine: ```sh $ git clone --recurse-submodules --branch devel https://forge.etsi.org/rep/mec/gs032p3-ttcn-test-suite.git -$ cd ./gs032p3-ttcn-test-suite/titan-test-system-framework/ -$ git checkout devel -$ cd ./ttcn/LibHttp -$ ln -sf module_mec.mk module.mk ``` - Apply patches ```sh -$ cd ../../.. -$ cp ./ttcn/patch_lib_common_titan/module.mk ./ttcn/LibCommon/ -$ cp ./ttcn/patch_lib_common_titan/ttcn/*.ttcn ./ttcn/LibCommon/ttcn +$ ./install.sh ``` - From the ETSI MEC Test System root directory, build the Docker image executing the following commands: @@ -290,18 +284,12 @@ Procedure: ```sh $ git clone --recurse-submodules --branch devel https://forge.etsi.org/rep/mec/gs032p3-ttcn-test-suite.git ./gs032p3-ttcn-test-suite -$ cd /home/etsi/dev/gs032p3-ttcn-test-suite/titan-test-system-framework -$ git checkout devel -$ cd /home/etsi/dev/gs032p3-ttcn-test-suite/titan-test-system-framework/ttcn/LibHttp -$ ln -sf module_mec.mk module.mk ``` - Apply patches ```sh -$ cd /home/etsi/dev/gs032p3-ttcn-test-suite -$ cp ./ttcn/patch_lib_common_titan/module.mk ./ttcn/LibCommon/ -$ cp ./ttcn/patch_lib_common_titan/ttcn/*.ttcn ./ttcn/LibCommon/ttcn +$ ./install.sh ``` - Update your default environment with the content of the script $HOME/dev/gs032p3-ttcn-test-suite/scripts/devenv.bash.ubuntu -- GitLab

      72c$-7tU|eYhEPRQB2p1=o{NvGfgJL^{_;oYWJy@6%`e+PbJoqwNs1zR+)D7|I zV&C>|Wdx@OtJ{TinKU&$EIH))=Po>CjrdZS0<4N=eok3U$;Ft+Av(Vg8|Z2IF{*;i zkrNMX$}P~QFi`Dmu}1@G6PgX}iHz~%RyT|Doryo+qdn~R_XuRqfhd2Y&S~5LkAn}) zKNKmrs!k=>6UQpK30#lvjlzOI&P%-SJFonNYw0-qVIXMVX=Wl`%J$n#LtmkU_J5ur zoWMXS>M*$uTyogTl&e*EDL-@)MX z;1`o`kqKvgXTG}N8h@TO7SBt|-YFmEdSA)rRvjztf z6SfV;=feazr`v(<2F}`7OG7mHh%@bJng-<;6ajVT z4qd`zFCK^N6sc2w=sC!?qEK3KV1%=ps!+T!G8fI-Cre**m??$gtQVzIz;-EcsF)B^ z9rQ(MX1tL$q1R$CAezudbK`Oqd`|QI;x*@E|F(^&cKdGG&4Pk; zyN@HfdpRkp>%q=wk|dD|vaaT+l3!1@)&+M^xrx0LoP`svjg=d4=f`^@1~bvlMfxGO zd8_0!y~jz z(v{wf)tN;;YKn&plr}3gdXwTKNf6rOepV-?5-QnHaCt zqUX-|YU-i}QZuyZbbtQ{p27!wrM0kGa}i zC+yL?vk72#v-<8h3x$3O>~4aT%{1C0^O(oEn3(Kp7jb^d^)vAG=J`Ux)FOB*4m+3{ z^H9%MhfHe~YC4MgopA5Z_R5FRxsRU>I`SRT`F)Q+S9GDa{y6vXxIc{UF7P6+gn^`p zz2gP3pjTAki*{{_jm!4JTH!JqV4&_BU2hTXhKgovSGm71qxeuPWV5@2w~d1-ndOk$Iq}y~#TjGcde$Vcop@ z{$(1wt9fHM|M>a4WwiB%572|m1f*W5cscEIRm}o*OfL$m9tT@Q;0IJU!rJlLX*$Z< z4M42Otq`t1NrZve>MPfCVsWJyKXI{EX}8WkQgUPgfk9vZ805S8_!k(&Dn@31UPl>3 z4IOW?T4IT6)kJe5{SH+%DNpWbd$<|*EE8qliPcX4i3};^rVXkiL|sMthN$tu<1O%JMXAP z@ZEkZ{ya3FVe}~HUvuRV*~I#AF1gA}mX1pz|1_cWQJ8unNuOhpFoyP8RHW);Lc21{ zU?WeP2`Nr~Wb#`-lr$s9RUyIybiDKLsj9Ynb7s31Gb@4FB)AgVe$HKd9LM{S5;9i= zRk73p`4bkw8&a|^xp0jHL)g;m8Hg-bqZ{k)1Fa@1Rbg;ND#F8c!F-9~(%N*97B(m> zED%mAukgVUGCVuOqJ@@s5OVLpJ=P;CTCvNl6OmlZbE}lM*`;wbvB4E}O=G`gwQh1J z1_L~$ybKnr>arMT@^o3hq zB}=jhwJ*0 zCSPbA($Llo$i8*KlNcg{2A9^nqkGbpXtVDZ)Wrdmh#UndIBDl)a0d9+{ zJwLz5Z@+fEpJ|dH$9toE%Y1{fp-hv(0kK#ZIg|L_3ERc(>}I0IuH54}6=1#M_z>>n zuvLPGS9DIPt#xE%y9^V>U|NSRVjE_F8Fg$oybJM8cF}a<8*?-gCly?J{_`{t2r>&E z9GFl6=CJx)Nap&qd-=L1Q61k$dmp@igg!1BQEJ&8m|T2S6rfDrE3m#}g1Su^VLaY` zH-U7Go@C3AuA(p)9FI~%Zu0T$vX^w5t~Jyu-sSmK#vzN7l?!dud%}Jip?-{GnRgpr zUMr(R9ObBZkP&d0LCwA87s{r+z%;6TripFResZCIABdpKm>6(u1233dof;jxW7g-F zvRq@VukX02Nx=n$@3t1vF`8t_rH+Etsa3R*WQS-^7Ug99NsEBBco9CZgFseJC^NVw zd$*?xSq~>Q@-*n1;!N46o$wi33a*ClsyTXCvN^xuoEN82nXJmQSuux z;UbFVDpMI4cRwWN_5}nFdmxj^fq~uHTBWrwHF6naoZdFqT#6Zo`4wEchnT;6mI2SE zp!X_cMY3DqD1-@@wk>^*)dfDjZP0qNJR2ekr}%_BFGBa`qTOg8nXvAtn9V2Iv25GD z)!i7NJ*E?WB|L>7DeEyD442$*!utUW+Qfa1vz7Z}nFdX)3XGhn^Wm#xW_nQ(!Nsbk zr9rrlA=0u7bJWoscau5*sAI44uMZjccY@8=r=Fr`_{~t>jdsGc+h-4sdKp)p4mW+U0QYtV_sx)EdtP zvU=nS^;InJ8ro#T2GAYeFQpo=1>g0DBqK(KL&=Zt@>2#|Asowe9w#r@an`ltM^gI| zG~DUZ1?8I5Hf*QX)R#Mtchoz#a%j{oD$vReGEH*^GIrFzymmaXWbKHUCWpOtG-PRK zRAdci!=zWDr{hcMSV2%ka2ub8IjX%oD=n+P&)gu0Y(J8t%O{jUq~L=soSITZl9sUx z_nVk?4`h3~Ei{3%tj9_@xWRTyXr2xY`)w>Ck;39TPGbE)V`c?#r;e&R(0QIV0Agi%o?q2!{n{4 zii3#4cYBW=Uql>L+C}Sx>o|wXyydxuc@&2yY@(5N&r_UhR(e@KYAK z6ZnD?Wp+d4rDY(Om6obd-pjywEojOMX5*kX?Zej>YeAVg3z>UGSMcz#yv8Yr+$+jE z!PtoK#7>syy_$0qTdsj=3;Wf7!^H+GE)pf>6lI+_p7^)r)#eh^#lHx=em8aPt63I+ zFVgFma+%A23Yu0E&V_E0JiEniH|g?MZwA)BCxFIHGg=Zy1)TTF$iiH#lm%6=xO(xO zYr9x6BOjFn=Xy$gYNP7A7ZDxABn6_akX-9q2)RP&lOV@G!n4$8EqhCPwG^3t#CiWb z2@OJW++!#huE)Tb_Zc?y0P}h9Ng`+~mkNQUlUb`r-gvoQCFr=*iMQ`=kD=N%?h<>C z)5p}4B~-r4Oe`7%oSb_g?Q(^sS>~_t=6vAWtm0IR*e&&r z?iqN0V{;Y9Wlh0;4!6ke>vCtjubpV!xkNi$IQDmMkD`iddteq!g9(XY6#0{*F#N`S z&nBep?$+DB67|bsXKbANZL-7l*EP8+fFpzXuqPE`Mfx8PN!St!@0z|O@6CI7KwDFc zBX~=gRj6h)rx7cHZrBN{?6r^?xolAs^F$}MV)J;2Md1OM?rl=n(2%&D{qnI~p&h^W z0C{)AQ!ppIO*Do`5uHcg4ltPN6XZ~Jtv~}-+L2Fe3_Iz=WUdm=;ygdwlr8*bEwI00 zIfA=MO~>cEo~QSO4}wRQ;*&%s-SAqobHs}7hMZ?`Eg}2gro?Wx{M>QR%Fj%E*r`OF zyhl|68~g38RO(TmELVEF2d9}iLaMl6Hy>YNr@}h01%DpcZ#c!3(?(stnNye#=5PO~ zgWw(YLW@$JBI~mCJ3Ibv(YB9wU;nXg_(kz*u6lf`ONeZ@c<0kbt>EW$q6%KJfj?LM zx!PI=26%~I23Hi~e&A{tfUZ(K#}t`hwdbUJJs{|?vt?IYtqr@MMW*P*^YRg?!Fvpm zAyz$3W6x=={HXMH=)mfZa;dFx>~p0x*>oD}+a=KKEhD&zpQFg$n+9dR1vN9Ror)z` z9_?(ls!?-JVm{AWQ?tISV7QjiGbt!@gq0Mjfzd}|(a*=X0h;eC)-8CC?LokOimk24 z=@lyF)r4QDJkG$n*Y{PXukT#))rM?7nY~w?$(JcGbjfNmIs)BrS67vvHykO^e|Tun zKK8uB?P04|WGVg40 zE%_yTIZir66Gl&*YX^t8&hl_))wO)hjK>?^VV-N)y$2!6U68*a%BOhcbw}sg%FzC` z`%aZA!>lQ0Z~GA_nq`3*#4`{ygIGYY_n+>O-lAl$cOmUxzDr^&`U0b7D+0wyS4+`Pf}|H!#m=M$7F^K8F)7NxCW=BkB1qFcA8@em ztTpacWjAK;e)8~%amdd9@bJvOV8h#pPs+<^joT1BR0C)Co)5APXyWa>b_Nl`kEmJ?}6xQ(?slChc!(@FEbFq3gG~irS2IxL;HL^^5~U*3W0WpEpPs{|yJQ z(T(@N>0e%$!N%CorltGbdHjlEv5J`n*Aw?G-nm|cbDdSN_CxJ#%kWsLtc1JAGk(py z(5KTR+|E*KT^iSSzXE5Wfw4%ZAMhJlweRB_-;%m-@+wri65}&82DqB5vokRHm%eRY zU9#kKc`F*I0^TYVr?I&f#NvS8IgwHaWaf_lT+yDr3W_29pXN$+jN{ zmGtw4w7C8*J+D?zv7hh z*HQuSj|25F1!xdGL_~CYDI(H>2z}>*EyZ&Ax$Z2#EUERB5yGL_X#ak?D}8>5pm1N$ zf#az|=c%vVFh}S+PL@_QkA+hvclLq?j;YG31KKQy*6K9pIaf{t5^84UJmz5Kkl&W?{|2v|5$P+GFG~Fy~Z#wAg%WioQY7U9MI7n`x4r5 zPHB!K`d2z}8n`rG!a_F+x0gSj)-5?(-h&nZTWh6l)Mfgoy6JIl)VMCR4tbIcWB(O{XFy=;GFIVu#ATUZjeu!df$ESU?6=lFrgr(@_y*f zfi}yo3Fi$%y!&NfP0!Vp+jkC#3)VV^5m6s^^c7k(mEjAIot%P=8lef;R0g}y$TGT$ zByJtFA-T3?fiWLe1SqqE4;wy{AQ6*@U~ zmFmvL75Sib#_OhiqBM#9^Cb~*BiMD*euHcGd+ROrkV~LjcMPT!hDjOtA3H90rj?Is!mQ!r>%;X?R}0VnOioW-sX!hUQ@E-D){2Mi$%fT z>hPJzdM<#25AE7=M~^Hsy%U?+%3lY^w2b5z90bi+#3*6biEp(+ETzXP7Rx%|BP`=u--&sqV5n3=GD-q_geZ@gBVQ)U)+IYbAuQw`X*`Z|N%dw1Y9oDY|K%kwBC}HHZ zJGP#xEBb;xi{ay!#y3=u^0iiz(4+_@u#Hghc4+vYX=GDW(P>tb)6EadvXV;K&qhoZ z@$g>rmffN|CLdVmQAT+Hx-&S99mXrz^EZmVqhjMWQ2fDh$BW`>`oDBLZ_G#i=cUwn_$%-a?@vv>G&9+|NL&n8njPCf%2|}4 zNbXc;WgVsk=iQJwzANRx141TGkZY`mreMRg&FaktMD0JQg|Hr$Ck=kkdt4yYKE>V8D>W8OVr(_3P98kn z#PWpX^;>m@7CipL#+?Ocdg|SmWPu_d#_yzNWKU+N_S%`wKKhuWU(l9nSHXy}p1&ZQ!M!a?o+;%62(Wer>Z-j1lk2u6XkAQeW$3-o{PmH&p>SP zOEXDv8PGgJW>I*m9Cnuoar%itG37A}UG9M#|8h5~%vD{oZQnEYe$=Tm9KHLy!1ocj zZQrHf*<{w7-+Ky^*}`hAyvoexX^GuW}?GoPcXQjPnHBMy6HyGa@4*jQ7kjLTG(K7#Y7 zmf%VrE7N{3Il1E9A%3cPq|?_z|^*^ZlS5iT7CFz~4b4=Ue|Z-CJG#aap+h zu82YCG8JcMz68jvixY)t20v=sY`_ zmkD=yJz##fmJP{q4ttpO8wvx6;sm{y84CauCP5W{r%SQjI_Frbfb{`$O#k!;=6EF2 z?Qa5RT@Q%yJk_`WNRdYC0a8psZ9aa54KxnHL7gTkhIipTmW;}J+0{{_9VJo$JUup_ z*H(M zc$(}SM7~o5(U}mP3An{Q|6G@C|74=hD^bqrU0d?JK5fTsaBa8cqtP&DB$p;G0gAVH zrx>3$+0vr0v8Qc@-~*tTs@LXkl|R)^N8Am9_3z0a8{NBcZfSPCUcKVMn@>Fq3|W-E zQ@>h!TXWbt)y!E)!`%$7a6dCH_Dn^UOGT9&rzrb^<^py($)6(?V!a0cM&xWQz$G2C zf4TdzVI^uCuMLH8ctr*w_cD$zk;!73yd8{u|Jf*)UUcxkCR>_W3S5rfW%F$L+n&y& zDreWSFFhtoVC-qE7^2aZFF!VCv^9;OCZD7N?b`H0QPE+&b)UN@OW8KXxzbBn0h$r} z!(-yD_aVBl)Qr88{=t15`{z$mPwMArE(SA{c~o{+*LjukYM(1^pR&j6!T`!uOj}_8 z4Ac9}Ssf;@B^7jbvJ=!v<+3cZT1Bp7+@iJ(^M050kmC6WG3VC0ePhR|I^Mw`*X@l@9g&{L<)cAj=W7cW zk-}MWr}Tk3Sob^z+P-e7rJuuHF4FZUe!}|UelE(BjGY8Ad546Krm86V?>%Z7Z}|en z0EuLq-6ol%(cDdLq3G^acN1e3y?t_d&p_}7u*W+)FZb0+9!1|iU9~K|C7rqk(=?z@ zL_&63`2`df4*>SqBalobq&!L0mLvcAlSjhUX?qjngETMdXR{kr z>50mfS~$;q+{apPK67z|zS%hw7d5O(?`X8u@M5(n<8(|NKjD)7rGc4!Kzxd$SzWhX z1q%SCf-%o%Lc+8FBzxy_L#=tmeRlWl(jm^WEmpu+j?J{gkIM@h@ov=M z#~f>o%qE^5=6VkZhvIS|#Qmhda%RQ2#QP6tl{)-`hssQhjP)mG5p)^F99K;A*4cYx z=`S6WO42VTs1ZT(NW)bWo_Y=+*Y=FV=W>(+4X?+xCbl)vR*C8P@66KbhH+*l4jV2r zZtozk0&)U%?M?3Smi-15>Aq{4N`rmINIF7omNdh|6;XpP-RLZbyWO6dpJ_3|J%97O zsaAaX`<6c!6H`8(|A#s` z@8=4OW}xbSsq@sX>}%PHWlB_J^WAqY{c6c7qGyr@(M9ynVWMR zS0+BQ+Zn|cVKAod`A8J-BOYAaInCGBL>uYmN9~>70F$VvRMjlpz=Tpz1(1&9@S4J< z>UMf|h8Oymm!EM0*}o|@4llkfn?%c_p|Q(8u2Q~6Zc_6+auA-}kB;{^5_%-`=!Ju! zkJ&JNtv(HKUP0&@Yt2W3bpoac39z~z@ZYQ*K08F#4wWIQ7BZc)3Hc^Ut+P>H` zL&7dwDpAUGi9qmyP8wJj9PuSGQk}mnxR3B8xwnvCxS=60FwHIz9O4uUI7Py5iG5Ts z0o)FnQQBeKv*D_{MVH;_K#R@PyGbzhBsd*~-j~+E8t3*L>vS3-D)+)_3i4VTHf#O9BQ3A$baQXSg8TNBm9r=Nbu`BTC}Fz ziWc3C8Ag#1@2lQ$^~$i&hF+3 zw!@2Ez(-1RNSFKkz)u;3rNA$)7cFDJg4Cp(L zd*3?w#E49iZYc?;%HU}r6GAfBfZ#!qIos;P@0N283JttEzM;X*)VV#aAODn*OYWLw zAGf-q3qqgWTCS(*`0qFn>zy`CGLf(g;zy9{R2=2|zllN}w{vB_y zD)J!<6mb*Br+J@2u)!O0V!ulivreQav<-4UHYE5iLR$m?L{tDk#7cvl03muu>VJgu znVHBS{(diXAPn+Vlk5x6Xw@)0jPtyZQ3_b0oH7R-wk2*06|DNVrYoXd%F#8AxCi~3 zV1aRwi_+U;)8Ta-nAu9WL?$y>I3Xm$bKe+EA0z<|WUhcDKsc}6wDe<{cUE_qU{ZV> z@Til|v1cu`atDbLxeg*Gf;Kw-vHJSq1*_#- zqNl^{@#rOr7g)I31W$cndmcsermS~5U&7m`m+$$0b>GxPFt03Ktp5 ze$~p}QK>L3|vUkb)GmRVeJ! zxx&&laQ1#_ys^F1gcan>U%c;9>TkSnv%spEEn0`S`SR<%9oU*Dv|r%x#0;S*<{H`O zCfxxM;MNwh9Nia^ah(*Jg_*DVx+kZ1JsjjxQnGJ*(EwpetD|Nz=02{YHz!SJN5-IS zwfHqip2TAB3nKvWk35Ok*dk-a+TF?OHfs0KS7Q>A1HS%Zp0j7G7iJ({&cS&E&Sw$~ zNW&a|t-|hfg6brzpo|sEaf4(A9-h#Hd|$^R=~yy(#SK*`%%Z$}{%UgO3T(0Ug@yhQ9+K)%0BEO>Tda|*8KCz9|)$*SzZ_%o}5ruf@!ZiX& zZq;rT7gcMN8E|wlUoN_a|Gw;HXWToQhWIH9*fEqQ#AH<@JGzL^00r@@7_^e#6vW?- zK5zLq6mEbX@vGzxXW-eOB>C}d3{&MS#sJSogadfN&AW}T^Wli`llAYYf4&O`$0YDB zX6iF@x1-C-I`?3ey%RPEqx0SiGB`v!3BE)Jp0BCln#d}=Gps5Go4VSqnksB8?^GQz z9p)4@4Do66Y_nR5*X!geqqt$t#h6)r)ArLUyU<=CW@^Xwn_5!J;}|eMd~bEY}~#^ZlduXVD1D-+)qIseO)W&hZ8n?>U*#4B;2& zXZ~wUC!xh8XUjk367L`BN;3`km7JZxA0mJ_Iyn&w=XQl?$>p4yWoip`TV_1=cyfAj zF>SnGDneS;<_8sFXLT+Od*P&u>LNufkw&^tG^N{G>h~aI$d{J!y2p^wvJ1~DRp1mq z`(nHFJij;`)24}ko5}Px_x6*jxNgOZ3ap)4o$>?qo!AJ~T9lj^&F>Qoa(p?ikqR~^ z)$tY7Fq}7|P;7n{)`faZGBY^+pKj-6)-&Em0#vBB>W$6R<%^eG=bzFOQ3)YYWh+CF zo;)Isdkq{qNkToZ{MfeDeneC0X)Yt};~ff(8KlB16aXF;Y!vxuwSaHh<;DpTB{E55aBY-jXKoym8azA zG>~xOl;Razth4HKTKu_kv@K<90U#p@vY2{ZmQ#FVeJ)^WPpn_u`6A-bfv-nA_dS8= z%ea5;Kgg~lU7uik8s|u4$HHx=9B$XKr2Rta%2l%tL~?7qI+FL_I!?y252}1tl90fB zHV*ZQl;v`+K%zyjGd{rw5|@9uli$YD0CfRkt7u?*WKC9 zhk+VIrAAf2fiHG&O-jyI;Rs34Ta!d8QMxk)p3=i_E=5T5GPJn zcNd$d?R}o!oI1vEgox+-pgV*GZQB2*-Ow1vpqgDEo^EzwWVgo=w?rdd`92 zk&Cj7#*og3a0j{K14`?nQnjHO&TW_l$yFK3jL_oKWn0g?X&#OfkDKP1a- zg4Z2llcTl;Hq=Y=w=cplzBOeDP_NAw?8O9xe-fvS#w2>Jut-Qv^i+K-;`4f6)eDmu zCy!3V?elSz!m;m2$c^HE2lOGSu?y7wGfo&q1rf1-Cn31m!D?ha6MS%nyiUQHdE}r62X9c_;ZZo6iDzIr{l*T3=W*_@5 zVD>@1Od&bj6rdpv?0J8_r`f2w66C@St{WHwbh-B?Km>%Qn#NM)V;%BoWbgE0=ygoWp6_Ul${21_}D(0>{715SjhaMnZ3Z+HR=HbvS~G z7Z}0~bF78w=wN6cKV5!#cJe?$j$^*u6Q#{mZFRfkr`(cZdM$FKu!%R#nz-w%StD(i zzk~h*qkPasuKc5m#7@yS7NN^jHo=jzphzugK7N2TtXLY3)J;up3!>K>SD!9_88P8f zac++KUx8Ag`&FQvkY;K$U=9UclNxfKi*I@U5Y`@vo^92E=ycoo9Hkn1lX_$5QlDwc>U!3?{0UoH42z&|tXX z1F<<{e)%1_^@0^!N!yUE(vbkjJdjoUh-3JC9t}cqA48=9q{Z=uf*Zqgbf#};pn)#U za2psPL83lx1dVq2@{}K{4dk7wL33oHxbw#WUL|cSXZrz|4p$*M{Y{~1jQ_n$EQ}0Z zY(Mq}CWMx67*h{JJTQy-ERwwPHJfC$uLoojvcUIdXH=VSr73YM7MR?2*+72P^aVx3 zS;XFJ0@(X!he96idN)UMt#pRj+ep1TRI2?tIlQpPFeXAm0X<`b$AQUq^;64IeYzXR zC1+LR4$srSJvxdT;@yF6J5F1)tFI%~tn<&h_h7Bpe1~RNP_{&h$2jPLqrv|nyIszX z)M0n7uyzS(fN_fvN+JgLX8^!ofsHwJc2jrx+*Di2qhyvWVnAxZtbpKuh=2NSH+FEv z9^;bDrWU1Ynq!%lYA6GHA(11X^WN7gn8OYOIE0QWVzd{EEN9s7y*<%_u*mZ@RHCc( zM%ybnUp%z(dpi2Gioj)I@iHg%SSNQAk&VpuDxyItk*ob#Y*-@3jha1s+gnzrm>0L8 z40x;19*t-3@}XV4$I|s)IKhS-FtAApOvgJc)DAldLh(deHTP zRc`P4$|z+0^!kui-tIfDunW`P9l^l*5v&)BB29x>m$Rl3rC6pFp&JiG5FPW=)Fiyb zal=#(1_RQ^!DFJ5U$99j=lEc3Usq$UQ)Pa`vyV!5krX*+iji?3vPIL!hS2f}Tb=X@ zFaCnnxJ32b*X)=6#UOsv!Fot{zEIaA)N0ZzEF}c$bN4@}(@woWe!EZ_x~tn)CCgD7 zh&}Um*X^K@aS)D35&^F~@anRFrm9cd!_4na21+|)hKKwSxx;%OvmpQjnJK=;s=^|D z9Jq%mUSXRvZsp!%MaNWml2d?RB>Oaw7Ckzh;$_e=q+Tj_vje%CGo} z=bg}`^C_vvZ#LK6x$})OkEwXd$tD>vf-*nxAZ5O-o#290MVPAcwU@;Jg-w%_M zHJuXGavk_)W(_HN{{-O0WIr~K^+UW}IlpHyWodeKbH_nLTtt1_SftY4!K_nc+m@>h zi05cH(rh@-ZQ$^lZ~P<%I~3u8nk92jU&&tJ0%Glt@8Skr<(-yu;{ly#%qaTaFQ2Cd z4)}^R@=u-T-P352Pb)B*{&(u;-hbf1xvQgmlS*|V8_;zZ{_3yY+db7<2#obpG=SH_M#Pp*or zf@@9X%2SWN8{D}PVlt#?NEpA&R`~L0BdeXNW?)5T_Wd2Nwn~*KnN@?b-3N<-rgC_X zI&9kE9zzXqPg!UM4b|tCDT4m@PTx7(rnT#m?KO{;M;-DTas2HtEglcRL3H<}>)l#L z($r!tSep@w{@j&{Q`$fcGk~`U>ao-snxH)|a8EFX$@5R1LVK`bfI>`~c41>$vkrR2+BRums2Wi90Y!d1E zFwiE*+3|Gwm;72Kvzk@Fk@cDYKZV$O2@=9`)_m4>55QXmD(PReqdO6in#-u6Ly2kfq&YxOnB zR5F0wwT&XU%xSG2SmCqNQ<{Icsv{>d0Oyz#wZPRlHhU=(DxOl>4Oi;2j?3`^s3$Nh zBym*4F|5wpemhepKZp@Ay~wvf-4K!G5Ok)L>#!4ymYmOuM22`ni&w2A^)YQ&9f?nXQ;1aSL4tv?4I_IVYh9{7V0_UK3CMZZzG)x*ref{YN+eaZ|>0S zoApfn-U>B_iZ2@|xsTy|3bG)N0~r|I?oeD67RE|^{o;3Q^7pWqJY9dvaeq{xMMlgD zD-pA+(=k`ZI*brhs$U9int3h?UK7&jl&BbM;>KazGt?_ZV+{=hf`9*1>pElq)(_2_P=>I+=%`~^Ob$HM} z)_(U%?t$Y|zNF5hq3^ctP9nGdQI^KYjY92_x1*;@1rbkv$b$hGgl#fs9k4*s0Qx>e z{DnP*`@F6wu=_EA!`Ipk0rxWN{)%6UmVD*eBv9%@+S>>rZ_f^Dx8Bq?X)V9Pxb|}P zEhHBSa026^%zZ~m0*0|y1Xvm0s+9fYbk1QHDWdvJH9~Ff5Ee%>KD;J?Xh&THs6yZ( zpU#EUK7ic$3WrPa+=*f`Dt-Y#Etg_pk~3V!<=AmpV|!*IX)JRJVK z*nzobW_r(gp-BH=<)seJJOwH90o|Ok)Oaw2^5BW|%HZv%juM4MZ)6~r%LyanNBU4m zsPN#DBHH)$Eg*suZ!zX}4_5y@GM{81Vjt6M1pFKVF^7r7GH|AG)mlk&^t~W+h*|@6 zplqYbtzz>YvjS3QEcgkfOyyQC863<@dV#1b6TQ78c(Oa+uB9vNL`SvIdTqv!G|Iy# z^N!a{Onpo&haK{m1@)=6nU{Fyv;58@BE&Q_^K;V6_y$Z{(`kOH-5YmUH!XQe@l6r+ zCz(bfOVeTQc{XqjHCLlKHFtQ!2AQ?(e#pV^Cb=ipr0~I1BWNMmrP^_5zjWXnNMYQO zXsaIcUU=ReaLqNmRSrfd%=0wc7NTt_Fy0kEUmh3l`7RsyDc6y9iJ}9Z?tD68ytN8h z6CcunNi98UvK0oZ0Ijr@Ghrhw?ZAw0)hQ`}w!+P-O;Bcefs$V@!+Xt&Ce=Mbkc{hl z7}Zx8rMxGrYzyg-hJAK}9oEU;4x@A^G7#XW-O-utv64QwX`F~8jqF_%%!6{ACK(z& zr{)nmO?BQ$P)DPSP(JbxxFyz6q9MVBtbLG!9*F%|4h0;B4X?Dh z485B^f=#n~uXiG*UwT|`b{mjmXU+hy z2e=jp_7Jx%17ME`DJJ`X5%!6aHUx&JR9Ie-&m>fa-@abBbo`n~R(y8K7<@1@LC~eI zsy0J%8mwRFvO3mrNDty{xgulRmQZWZMjtXW@}sLq@AXqe0ou5&A=CyFpp6M$h8z7P zxq*?X4$C{JGO)y*%liUBe_EOi*CaLR)lX!MfK=XE z2fxANTvB(SzWwTyx)4IrZ3iDb3*a4(JRB&Kf&K|VEag;krh23fdyh4r$uBwSSOEh4 zF9#_gfxfSDJsmp;RoLQiJS9bHVg^pB8_#U5s(7jz3ZM!?_G&W~07C=Y0pba_*(Ip1 zF*qs{Thy|`XGidCNpT=z2!&In9|&d1Uxf0N&$F&IXJ3QbG=AU!piYRg1~V>0lDkR; zI@Xex`$xzNC{_~LX=YA<&jfza?zT^_Wpa$EA$Z!Cy{ z1UBQ1JQhb|`R@$@E)#Jiq*2d~x;$vCoT==5J$im-p#bRi4uEb0RFb6q(g0V>Dlr_J z4PAct9cBinSJBBU`A6eJ)+x}ApgU#?x?=|W-#k*&L|*joyV(LD(by#}96afR_u&J` z`_N1N%eY`}(EGAJ5`JJTAjytCwXD5v*D(+NhWb@1m--j1bSC{<^)o~_Iy(lyM`*no z*b!{&sH5hUnXrJHKs_v3Pb^bcP)5lcvjYU{P^K4m)URiY2PJ8&#J`gkkX`M1ruInJR%OxGgy zB~iMsPZf~{CltjBgUGefQj%(&>*gGJv-9=dI+KFW=A2w56G-3lE}#YIQ9(H!Q<}1i z(iLUcl5d;8L80~jbY(r5*gh=RTi&?isY~zAjY%~=((!@|l(F>*glyU}5rTA@{jjB8 zap+t!eAl*a#r$s9o<&{;Lse>!**dWo&{p_#X<=*30HB2e2(&0@Cp<5e?5CPvOh49H zUiE8l`!hrCZBouL{h;leF8=~X+auU;!fuxPB9ZQo`j7k^V3N%yfX7usPUY29 z4BRkTTCkl|G!jRoJ&VWQ0u#~OiA2ykX+?CjzM18Mi{r*8Kz8)ZwK9?DuwBJ4OE;z(P1(~#uD$52iswg<`54gvf9*}2CnN;X~4jp_M=ZF@8UO8 z`O|@AVv+-FfO>4@@%OQP5B7rjkI1^RqT;>6Z5y9qB#Jrd%s)nc1e2>JA*6#-6dWM+ zTD#PPEs2FlOmZXdMcBVoBA1N(=q~=p>%k=o8GP_jLf~JpUs2Azh2iVE(7~x%h;`me zn7Ruz`Dz1DS56rCr9qB~Ye)Ty3ErO##Hrq+P4;5wdM}=W%D&A~V0t9H_W&L9HhX?* z(T0>pqnbz=hAt|J!YdKufR?cDI~PYaJbK6y{U>v;(%PK7GR!dEg3l1-F$ zEbh--S`&GrdIRoSt@?c?GG%P*IGQ28`c+kKT}mg^9m=LMX4v8xZ%ac8)TSR4095!VPV& z?B1$fbJu2ud+#S9A~vNr1L|oG^g z;C}_(!lN~Gslu{f#H|#3{tLn`^6#4H`7FldP=kULXriG zRvMs?^Hg?(VMIN)8-2*E=*a307cTa_8BbwnHBAUJy12LgQZTz{OJzh_-DopZ$@Vm( z!S$f_OjMY8sv6?#Ol94IKqS{hO?jE2i2Vf^##|WiW_hXWK%3|Yycx0aF4saWRRXzC zW{8b#Qj90V5xN$i&^SVB9-V!9n;vDT0pTf2 z0gO6EfMQCVhjX9u)hX`ah$H?hMGda{L!I}*1!rCjbcJJ~mO0SAn#X6BDA?)nwp(OV z`5yTGuLhtFpNWe}v76uvf+QVkPA6>VPDPBLHW;oMGbgY1PFJ+{==#?c#Uhk|$;<{> z$3Esm@7M480MrV^A(Z13wNBgQ-?4j^TuU}Cv94Nr@3KkHU%Sm~j^{sHxG^`Hx|`Jx z28TlnfmN7-V@b}5$u@hPimKocS4DS$v42g2>`IFH^T zb+DVMj30(ERFQ&#(^Iv}^LL?~?H~j=19!qYJjIZTeej_8_2d|vL|whLT3^BY0jL5b zPyl7=YZNK#3sK<)BK~6o03dJ3HtX3lSkX6RUE;2-z?tiSSpSwhNaGpUtT$sp>)k-T zPfO%Dg7K?rg8a$}9gAEL49{ukGniH7DzJ3v7$WKa*dQsUL}b^QmcL~9``y_d-LVKH z+D;XNpM*D-^07=3j~!~FdB15@lxo}lYV+x;%KPpjD??%Pr0}C>g^&W+)T{{KQ{Wt= z?<+s25h=VyyK<*CP&x}s(qA&(n3r4^lP+BEFI+{JG43@I!l6W!R`f{1FmM+y0qKW? zmhzZvJ^I|4Blo?3lou6}?5pXw_?Ra~F0l5~1YHFJ^a(c-iV+^NA~;fY7PdN9LpIx2 z%#0jTiJl#Po;6F?^2O_+DaQPM>0`8-uh64le@xpS?budMD8yH2ZhV8@pASelH;i;8 zZAdQn-ZsgdXMERl-oU|H0~*&~=5`C!E5}|{!piyh<(suxRi}c_KwgGydhLCLqDUBT zOKnXjg}2x8gBe1lE6=ziJyYo?!$*W`_n=vlk2;O$kV{I?E>Fm2M;EO4OA;Lrlu>~9r7wB0FU&Gg|jfb&K!r9K~-$r3gl`R%!AH6xlU`ro9oz*X?ZT`?Pq=Pz! zd=gZErgTh;8I^T(*=5mY*FM=;Q zEyvjo2h4KSTb*K|J7$0el2a!5->p(M&?<@d?|j%t9sLJKApfCp=iNjw^fSA{hXI;u_peAv;w2=hF~#QFjB*x%&7%Y)x~4HkX=zj*6?0AK(J?hy$Kg zY?nr1FO4zt{V9QKFjYwhLXkioo}-u@Kc-}Z{jr@EKN8Zhpf3igh=Y1XjFijf;q zz(~1tm6{}U2wT&*QHz-9~lYs$(u&{J>UkUt= z+i{@1V`7s_ENWDEDQfOKP|!uOVG{mIKvNwKmbh6kkPe`CL2l_b=z|Gad)@2xLU(P5 z7|8&OT9@z4nwKOGL3FLm0gX97_3Nm3$UDY*1^<;Xk;6mRnK#S_kKO{Qm!sDfijxq{ zb04BNwcpUW^W;3EDiR~L|Mco+XnuBGO`_r7wMVM<2&ak&G;NPmIBM*Isqeq+Jpmvv z?&MLo9}t)nXJdZDZCi>nzu(#zKuujpKS*zO$?lpi?rxZxoBLQTybk%L7oWA!)1%No zrk&K}2>_%NzmUg~3xU;9lh#(u>)rP4Y>iQtbJxOuS91ld0?{Lr#HU6TSa&9|t#4oq zwmlwv4+%WSKi9va+n8d zqWP<~0r3-?;_w`vvS3%!T2xyy-}Llh86wS%F24eD13nrm!5MIevm%!h0`s5}m%$_C zl`R_$ph#$_K=M$%W(R6STHb0K)2t@&rD&w%I*R^nm;ilf(()`vCEDq~S8xlWf4Eo$ zvokKK8P33^U8@-_$GyaP_gflw-^Y(tUj0HvnU02M{EZ}P=9mlDWCV0Q*8$U^FTu9C zGq;UmIsfg|lq+C|;Gn1#=Hq)vRJfQ@+WTJq1u#jgeE^hKFB*h@DX)T|PMHi8r2tFT z3RVYYNNz^|HQ!K<*V+D{|qc}UQw~eivuJfw80$Hz=FW@5jtnr>XuM#Qt z_B>f1=+kue1N0> zfBP=U%3?9DnmvWeOvTWYEXH2B?y`R%Uc9>~Yz*puL}^_GAAb&{-Ll{X@gLF(Ko6ES zb~Xr$vN26>n`{jr_y>zxo`eWE?(4VMUHD(()#pbAUy46-qOYf=9)|3*Tr8|d&p51S z(yZ&<3%xwQ3%&_^)p|+Nm25Vrykf=6d!!GDOvp`aPnbHC|9uBhoug(@z22;wXzbrF zfU8=!X4dlw_D0?KT*|EgyQs5IQoz(Fsl@I+(SN7ETFJY#hT+}_u(`O&r>MLdeWiF| zWZm!Eq4lVlO%7?fnEwq5Ht!J#CWI2xIlJGQ7yT!J8`ci-ZjtYr=Fy%6GU6~_s}dp| zz9;IL{W4Ac2VG;uz^JK-s`7s(S1Cw#)yE?Y%2;5GTuX7_ZeW9grN9(R@PQ~o{pVbZ ztgI4UpL_tR?hu76(C3Hp{*T2A=rDK13Y2c)R;U^7b3XPCf4SX^Z5mH!%w_99*4^b3 zzj(07p9}-rN)%v`=QZA*tE(%y&EOKSDdegp-j|ZyduMXI-!1G#hADuFm7LXuXw^Yf zdOR7};eHFp_WsYBaQWTq1jj7ra^XDVd1O4D>26e>fc8d24P?2rQ6?D88^U|_AfSBh zlY;2+`-<@E4*{xvN!J1@jv4l9HKVp!?%lA{v=gj^!@2KCL^BQ?e>|MuZAF$N_D8&r z9ZL=XI6%k0W8tR6*6ncO9SFhdU|xbF*!`pwf~)<|g%<9n?h1F_bHVu<<6dm^-k5h6><~x;`%#r8mj59p@H*Qa4avBm zF4<)fm8y%S7z4J?|ACH-I^VBO-=ZIv-NgfFcXz|s{$HR92^O$g+sC*dVKJ6Z&|m(* ztTpeTrnr~#U|lqZu^-+3U4nck2uo9QhW;tb`d+J26IJBS8PYF;Pf)?EEtfVk-?IF4 z(c>G#k7VIFs#<3&Jry%}TpU9s*VRdzAojp^3takRKrIZx@{d~hp_vNwPZR5MAE@lg zr4^N+u?cyqK|lGAf=TQwQmeD4O533wkerCpGONgE7}hY~c9T%tw3Zd1E+~1F-sEI_ zK)>wAu<`zS%7l<8JLk)UwL8;s<=&BKc$RB=x1cE&u>)i`B7}GS%5I!=iU90CY5sC5 zIL=AdK&SHRNY`YYnR$TcN!?RqXdm`@;6awn&`vQQ+;&-0**HG}4y|{#m8?zbwD4_R zd_ZFHm;XUxvFRm04WDf!#SQ)v(rX;1PLyTVJAUH7V;4af4gRioL|f4KATsz$a;T{& z+8A6x?XdWCO^y4p(mZrermGm4w%48a5$2S`6h*xt%QeuRFC%$#w%7RADr|kFh^@C} zub$V891Z#g|CY)~*YB~lyQH2L^r|B`?l+PXMv-_L4h=BGWAReDmD!!TV26zIq`0Se zY!+i|T0MIU1sB-^A{l1>v6rf^j_$c(OxII-<7qGv ztvK~KuEXRk8qyA+if4>+UjgwSji9Krcg_(X(Y`-K`pr!%&D!QZN2ZXIbyQ*$t<$_1 z1!Xa*xJR`w6`UU|Iqc?7=e3J4)}0kSY}$R@piTSN{wX-4!=#xx4)1jLR8mXJMQ_ry zE-fuVGk(`ywn-E3#T#%%wT>Pi8y{z5ZZ7jB$6Z0jMC~Nrm5=psZ{E}QKZc6hM@^#> zhiIp2u1GQK0SKmZ0HFszuvOX(7MdQff$v1=Q(YVR>Y27n_vU&*`XCy@H?Rq9;*fp` zHzkSfd&2HFt>FCr)Q)?2E_2n-d_aPu?qbIb8o?~Sqqg>+>J%A!p(!YQ!^s)9iob1@ zkIU|iYXhqRZ3K|kpSB}QrRVDe$~Rlho7H6i;v>5)?Dz~@)PT081k~0v|7vR%DbCMa zNRNYKeWG6yz4Z6FB&+R@J0ibAezE`LNkuQM=-0bDe65am&os1)aW!T@ixvduJ5iX6 z^CGRZw)2(ENca7~*(?!V@`M1@*8u1Uw8BdK{8zLerATjaZ z+gS5j2Qhc5i)97fcP$_OC77M@d(F5X!^nBcz%afQEr6^V_k3 z?Wv8c(XXu$t-+{TL+3YLD}4Mh#M(opu{zRbvuSQGW*BY}Bq^;QG1*En0Xf&T|#fqdXkr z@K0Y$YT+;>WjmZw#bugmU1z4&mlx0vHSl1B9b3HtRBKIvTfkCKT8?g8l6}y5mJ$M~ z-Md@+STjF6khh=B8+5pR9IP~Gs7kKEYEF%43yUxVXC@rSAPDy&e0jg%?tML~^T1}8 z{_cZONa1aED8vib0HlXa^mNv*Kp?)UzN??6!cx5j?f5Ex= z%I@F;9VJD85Y z$>yn%`00XVDh=;n+uh1gE$`kQo5H!*>iN=PrKTY0<>sos^aH@|Y{Tpsp&m#FzO5R} zWSoD4hI4goSrG~{Sd51jlAHmi(1cVV=MSIdm9@0KkUV$O1}5r$zx$S0X}qzp;hpLbQy(Qz>{ zwn3jS)oLF{Q-u0vl&Jb1tbQhmCtkG?2V?y=bl?c%F1!KX3M(Sx%4r+4S6wb?y)d=( z_}>%n)Ox#q2AfGi_7d9f(oLhDkfymI?E5Tv`#(dL9~AyifQQqxw$30RRfiu6BsmUK zP5UJ|wwdjBpx-CBdZJeUC^i_9lb&0pbdQP#4J(eN#lG|n=L<}~i07?cS|I6U069L0 zg)ruig)*Uf&9r0sAl#_>Dck^_6z+TEUEKS&NvSB&# zM?R;g$dfGr*Ly?_yjy7i(lebtzLzA`SW1kY;;-$ocQ_B5F!xp2AY!=?^%H?V zC!!T-0?N<{K;moLy7zC5%M}oOD$Bql4%Wtw1Ia))8K@bzB$6Q}li&io4OdrkvV!700fJVT>3(|C1bxLMS~-mUZNO{&@>_Rix)GQ z1Ki5{khq0;s~8!HPmewEXXg%8Z^lF7#;u626UVHvg6xMmJ90x)CetW;H)*w34a0r}5Y=}&#h#Ve(^L;8+}i9$h1pgApxzWl|q zFCEGUPC%8-IU*wFK2tgTpMAR2(vnkUGnlJ@=EJ4o`XM}X0ZmRP4#hE<1u;7dd&<6^ zF#o1l##I|UnIWjb-Sevd%U&IE{cN%rP^~Y z))!2oHqG74;BHm6epz`O12oY@LI*&2g3&uM*O}DGe|>k^LjU6pGW!VA;rxaCjqI`f zGxBu1UFG)!3zv{z6T61=zE&Oh*UZFE|D`vvRDrc!g@YekeY(yFL_KcPBmGZbi*osM z5|F~%;4XDdLg1pi&%0o0Pz!3S4XFA|>J4_PBU$Qf-v!ab$;8F;>^)!+61xje^63(P z>G5xm5NPS~nwv}}JrBKR{N{KQb#ON2+r5c*T|$xA5VIsQ{=LkOaH+Fnh#9bPy1*{l zo%$aN)S<3t7_2y-T}SO%|Wu>J+-+Ne#r>fU(m9EBV|j*^hj02<%HKo);sU-|eW zq7{2+*v_ThAF*}7x#svIqVMm=0qOrE*ttz^ARJ8n1({w;L;r$I6O!)@(fPjcw@Pu- zsq*!{L5V$3S+>!bG`l!whh^bqHZeJ>U+>c<`*F+>1}V^sgM_c^k>9c`Ob!*JIsWz- zx}6FY$4$Cxlc0bO9&3F~6PL066!(A!hNEq}4cHPIc?HuN$ekW{!~>rv-$7NSbb{u;Pq$Q4EoaJ;To)?G10g9Ojfjt^;0`krF>MJcxCb&i~aU)#pm_f`VOw5GDuMN7y|!tLI7} z9U=XLj&LOI!{F5>PUaDv%bk@Q ze#f!oSm}OF{g0HOUpo`q=b5KB|9Yx)mutt27ihrmOBu|CqVRKpn76MmCh7pq0Emu| z0XE4Jq6Vq~wQ+52K6vW1-IcL|o|WQ=f;|a;kkl`?=c=CxW&j*>Jv?C@O6Sj$^?)h? zSk;3D9^ZHvCX)1<;M{Chj4!HC!goFLvibHurPpj|R`=;#v9Eja`<}sNSz#F;qVJw` z)Ib|s;k|xZJ{aDW${8|X+t50CTcc~MonY=l!DYC)EBshls0Km#E8C|TT)&YyKn7|@ zI;VCLBG`JoSQPiBph;nMDzTIs5%weRsX!iAFDDOex``LNQGb5z;DrQyvz@K!b@#>d zSycw+0ctImnr>SzjP=292j`!>E>U+}&E|`-veOnnEzN7FSybT==dQ9M1A4}A|P z53jkZ4ac9kh^@$r;=skDKuA7h)zo;&2E&O_r~uixZ1BNcZ1tjS^E>S0Hx4F$yX()= zcK5$Z7N`y0up*VW-ua8wVh*c1mb%!+D<_P}>>>S)dXw1}fn&|CI32 z?-s4Q%W5=1Hd#gI@nb3})E^b=*0U|s+CiBvs*bHZSq+uB9SO2nPz9MX6|El4y-;XQ zKc~iD-;$z1xmGrjnhLbfq|ZsqfmE5V9x_P8M=pLMx1J`N)of`z|CKDZ)7%!^kqrQN zcHlnONkQcuCxXF#dT%N7@4M7%yko~RVhYjJL#39E2Y-LP9HtN^?BXQQMLo!03%R&v z&b!S&kPpzG>BdQ_hRcKnwz!5bsR>_{GDq8wA8h>)PpWBhJ0R=48}+Nx12QWKFQtWn zW+L$T#<-XE$St^aSB-Q0TM&V=;uh=YGM;~wSg4rUGdUNp*lDPpxfuU4s1Y!?M0y?&bl?csPsp;#W}{ywhPhZ@*6wCtXMA5K-u`2cJAYOWO20cS$~XDH?FepSw?>2uTg~j)%6T$01{y{-`N(w?5r`Z)dJJ zSI6l}+MbPP@rC#6Kp zA?{2JjOW2F;@;>}P}El%5Oj*(_`$s?XT5#ZoTP6HaUh4g{|Lxc{a^0t^RH-Pd<|E_ zwCd`rz5{{do`UFPXa76Ni?JRU<*NsK-mTI=*3VuQ2;Mc4tlra)xu6~qW4Zj0nYPP; z5^2yg3#tGT&Fw~PZ#$!bqYqLC@*1kdH31>ZRftS2OY7^5l4pA@u*u=s%c-IKI?o{L zQvKJV1vYA`sY7s#EhesXvy^h8oVqHU&oX;JbLx#g!YtKO;(v&S%!6O}0byiS&2s@D zAl$;#$_~q8Niu?Gq3~hUX4#TazHeg<)eq-=g&~p4FJgK?<^>P;NP66*k zl(be*gx!}a#6%ptK^x#?2C;%0q?;W|^BU>Fd&@5k==UX7OCrB-CZiHpq$#xx&kets z1N;y=LuKbNH_8L@u^e@W&Xsd~4}yO}t?vx}CM3sy&-&?n{@tzL2CurT6*ifg)2;P{}JvtFETPd4IDm_K&qf}E8kAJHyt?6zopd1fpE5| zmfmKlAsF(YX828C=U^wL$^a1+2 z+m|F;6aGor_RKi`;cC%5oPq5R@p;InKjQODrf=?$KmOOeoKWGZ+WQIPdbdCIIEl;G ziC}CFH~y2^8#>^uA8@J?v6uFrSeC4BXNm4B+h|BJ20p~vflLm7#S@q%_*CeA4o!>W zE3?+Qp)Os_+&P7n$}C0!_v$yhQkBGc9(_F#ho;(S0q&g;L(I%ilaugb$LnDB?R6Iu zyk?EUUVs+r_zAF3^+JCx)b+AZ^!2r7P?u_O=<~lW)lL6*S@~?q|NiMOS-H3^(|&JY z>5IO68{F}6z}OU#lNd*0*9T%wFEWqjLKi3$ak zvrM3zrLJh_YP-1ens4dyv>|D_xHAtCMK*uaLTKTLMCkdP4Y=ta>@v%P?oP<}S8oKG zf#Y%-&sXcg$$--XTm6tg$K_1o-m19OgXHKD{R&+7$HE%!NdDhw&YV{#zDEPA6_%n_ zYOoSWw05SEP_+O8u7c#mJML-@Cd8N$V{t%XMIrA4fv_SU@?VAC{Ipr}`pB%arwG8! zX9Y8YEn;4vbo_oo(WDb7HY)ELM@)tDY&b6it7_M^Pz;Q|P79e0m=Xq&u0hdLL&PH9 z_XbE^NUKuRfW+P%kl1_3p-HV_w;XF(Nv5-oQ{5_3+RTOV2AD;d-8~}TbMApnrp1Zo zOGP^}dTp$XDAN#|`QRRYgJ&~kQ{r@yY6jyU-~>PI{ZRn*e?n@C+!KfASFzX!%;T4l z`xXcM!Xi4p$DRrBlAaNO42$rm`N*7@Tk+v)Hm%=HBS($gB3<$vHx#-<963seKRly_ zHZBmB@+mug^YAsla-Niasa-|rN2^NLMn4TU$DsC~i(QlGzCiJQfe^;{CLry%ixLRo zI)E>3?x>xdD@6(L^f8D>1=2-E63;i-4`-Z5tVqYPLlesaYZ8RgYJ?Xb+HTiJ;z zus(o7&0F*rZr--d@kUobfTct4_A=xb>iz2!h%cEBP}o6bQ}6D<%f9?`=1R_T`*AZX zY0v{$M_MrXxx+54BYjvHFFo)LoaK=4Dj^PW{;u3UPb>ec$o4}*+gm&!e7~>M)Of#s z)~-#G&Wn4_jx_CcG8|nBnFL+X3m~2i=%j#$fr5knj0!Uea>*2v_*PY|EyL~Nwt42` z>MYpygHw@D<;T}CQ&?PunvPma_JBaNLZOr9>qY+v_?5N43o*o9g3hz~70@zLnvKtP z$aau4kc*Rc=}g1S$)ifsFRo2eIt|Kh+*r`M3^><(qb=W~OC!uqXF%##ivs09C&Ayq z@rAP?uo^!{&sEFwo%e`nCMZY!)O6O55c1(*?G&p-!SBKjOL^z-)BtR$e;unO_O17?ktS`KE zTt#KjeDzc60n?fD^2sSk>LJbfc46|(z^)Acy%F`Cm%34c>jRDnVfS<5%sgN-5X<;u z^0qRsd(GH8t>y5SU1gP{>iB#*@pavj{h*-y@&#qvmMX8U%DqOZy2*M@h3eTkIwx=O zELTUK3)@IL8&!f?&Al3TD9(05~|rvG7%>0W>8j4>h2YC1p1!6 z8_9*Fa^UBjV`@I7FB+e4@ZH86ybfyb+VooHniVZ)m7kIQt7*weIdf2)`8fYY_XA~z zZDdheLsg8hIRw5hV6#+!-EI!1D(AAjfXos_Rr%yC zZ)qQ1MTg&~_fzUS5qamFuBf~$=P~SO+PcyvgUQU*&8nfzsxiLbwQ045)tn{GeeC$0 zKxWr;8z(gH&Zf7sVcyMy!$D#YlxS>Mdby)C)|@(n{-k6MGECm*Ier({@t@qNR&h4t zE}YU|S8-i*ccU!bM6R?l2Lrk=q|*mo*q%t4a$@Fa!Ebikypz~D8#~KBWjnI}CeB1T zqltZnq8qV$7MY@>1~&d{Ya=!q`~i zH$*86Zn32#U#9D2Z(D!zii$GX&pLM~oZ-^({HP5?V9)O?sKIs|^K<`bRGWg62-Z|n zj-)KPfbr(pAMs_{w}=%VGFBiu1F3c{wU)m)#DgYrY{>sj;=-F->@S7uDfYc`#bp9C z6Gna9aq>d>f9OFC{l}ulXBy^;*~{5&;{#XomS1!mP?KUEIC6@Mp^S!@NQNy&$zF!s zpr$%Mk*B*js-JFH=}<-TbJ-DEIL(fEUryNmaG)U2=bh-|u!6$HAq_NdV6;HlivnZK z%Sg|oF4YW$mV6nxKhy)LX8lM{FJZ-0_)_(tBGC@=`%qWqTjT2%)j=xtPwN=E4)^4? zeNT9>-Kh$fwOdgKd#E-9MdQm@=Us0kO+H#FZv5(wqJFhsK z5w<#@OjlfdE49N&6S@8gMH&1{x2VMFw}|Hpto&q-BL=O+=7ki)VlQuYqH>ZVmR})? zsMLj78yi%WMbnY z{Evu;9Mtmn9G$$mf4#?{+xeX7z}(NSkbD5PJ3kIn1VF|1=w7s|zg1yG%q&38E6O<> zYw5)$BL7R%HGaW}a<1FKGT#~gHi7GE%C7y+k?jbZBk#*iR{pa_P(r{n&VLdDa#Ve7 z>dKBrrz-|-u+QJpYo&#HkfBuSxR#QitEsCBoF~*4x4a?cZjSink0EJ=w2o=B$)dkNxGO^6iZy zR~{(L)$NG8VUO2?D32MQwOS$`Ao_lP>f{DzG+heCCbq?Q2Yq3PdBuNdV00A`7kP8y zx8tj7>IAFPA-ss*8#0X+PkMh)fgx|Unsb~ppjJCJ;u5W3<+GP>Oi|RqxXzD1?HSgt z8k^_ne*TKVDYtd6x_mGQ&xWbu>iwe@vA2-jk~&X2bnritHMl3w7KdJY?QyCWxpO=>YEhqIk`TK5}WSR?I{*RFsqlZjta zxk7|Ns?DzK0lzX&e6PkfYM0Gt_}{Sm*LWy>9qBwSmNFQZkmI`{@2*m?2a>?gChGQrOS_Bzeu%8gu$l(4^AfMiC=zpKDD=rX@2q8 z?!@U<0aoSGq(w;uc7gw?4>2bQ_;F`od&+^xuLox5`NW>S zM}BO<-zZ2_%Dl&Y!NPeVn|O{~?Gj`cU2cVo-_+C9wpI;mJ zz0&?Sf^$EN;EQDU=`nz~*S%$$m2&K_9SM_Zj>~d3q@9{r7YFKMB+}tL1xf&NG+jy{Dl3?s{V8;=~(D? zkfmiZi6#3^>PHQEL)b3VbMOmI*<#nZ@0MU2tBqf%O_!$#GW!u}Pz+4_j}-oip#tl_ zx*nG&2kn=1?*8ofC?gMO>75=<;!XE$8m3sA^SxF3tu|_mrnZWyu?MNQ;K_sSpCZ_( zcA^87c|NyR%2==!Bzyz=Q}`yh+CuC6MAOmN&pF~?%D|nJT9vl@Pj0h$U}-HVBJv;F z;2&KG#lDBFbx`LnkceK{Hs#ech8g{ETy@B=1$IX6EXVB*NNfk!4?>I)SN@@#Rdj8SM2#z0#ZDDw z{_+i)-5Kj<1*ojHDImsbyJvC_Rt|jXQ(xgm?C-Mb7_sYr(y7~ChAMOP|v}HU9bC-SzE!o z$qT1(iRJ_+Q@n3J`!tsf@-nR}iZC}!J zX>fwu0rwui|90&V!k#{o;Y$y`g&%N=_@CP!5G0k}Zh%s7_Y!r_reW4rIpt-h&EIso zhsn1YX9aNN%A&NQqx0{Shkm3ub_J2PKhkUac~YTgFuA@-y7?!8p8{*r21h9IC_o)B zSjZuEakUhzwp=F}uzT6Q6m=!=W)2(r{NWrVUo(sl*$+>*w)q@($ZOLEot=fq^ocY8 zNf!mtT54f)H}ZM`7ppFY-BsO%1>y zdix}H|GiER@81i`+d!Qi_~VqXpE~vZOV%rs(zaO+C}Z2FsI!A6kY7M@eBai@njR`i zCznYF%{zWzuRe%q0*)CoKkCVNWCbFo0%b{Qpxmj%N-ov}23|cCXz(#p_{v3Z3FX{+ z3ES&yh8HRed^1pJ72A?}b6HgTJr;&WZrD2r4FO?&;jd-_!m(Sjl2WRDjJDb--yse} zYi_7Uy=G{gtGLm|ZUX0Cwmk6&%GSO#c~RV`GsMjHG-npL^%WicGtf|l`Mx4 z>G7L3Q)OQr?|+V8!;21P5<9A$ay|!wp1eUd$$*v?=kM@hP zG<@dB9a{~U&oV!=ONXl*YK!f7M*x9>gU$W%quPMhYJlGl!xam7{N3-Tf*&dvtSb<& z@XtNU9JrQHHjkx8UPg96BN?C$_W==E6ovh{!+SGid}(A&rX znZ0Attc5_+q%mpzK*N5+Ad)%mA9bu-jY^yH;2VqZ#%0|^dt8IHx7g%r|4k`2aeOhq z%Ca$y?oZ~Yiy5U`8dtIZUIFz#?L-}TaA2TGlFr_O>nH2F?aF%4icmV8q5P4})jzGA zBvzVYl-bMD??PJ6Rn{z+{_CJ{uw~$&@a|+jCs0^dgeuoogluKPzH`k{tU$cA3&<}6 z@voW+HLuh+LjXCv1Hf@kpi@YzwyNZRm;nVT3t^Y)+-P$dU+X-XkZrBRo(^Pq48!%9 zkQu*c!R9Rz#Fo9sXCn@!3Ju8Sf_CHc8E(7U_4D`pr4`N-^9^q5hBtspN1y9#98@B~ zG#P;siD37Sn+6^^JWfRYm&B*1izeyG$SO!}GpBa%C>mLUL%7bYx}vgLn@;3j&I$xrErGD^I zG^JhMv06~-LZN|^wH*WVv@b^fa{+?FEo)h#aRO|3{7mEn9{CglJZI=AW%ceq4N9;gFS&z|z zmsh=rn< zkiN=Z>VUcpNWPmhzYRK~vY@m(Uyz~}g+F>=T=g$?)>74IsDtuBB{$Y_XZde~!vWoT zRAA;&g-AGqN6(qar9)Py_=A4;-=SB2@@z8NTj*)|ajMHdbhCZYcT1_a1}Gz&>EwyG z^vmTyY;A>=@m~h{J!!){2rhTJV!lcHI>%J4r_Bx@c__iMj{+C%s;fOD>lnm1M=9HR zo|8iQ)MEVa{~lpraQn1i1B5Q_Ply4oBiBD&N2-U&bxTtf6k^vw>p-HNpsD7e!^qQ zIiEHEIJ-x;r@)3^yU&urAdG(qol@2@h|E{-9b8e0Cx}6|6l{nB2rhs@4kX1|qq<%L z#T1-5mVjak=wb~2h$)b&I#`P+ur*fWnq`*Wh0sYjdy8}alVuhUr1{A*+r8M0SeC~d z&~`nJT{^aPqz*NWfoKm4Bpm~q(tQ3?&>1Qb{s%5@Qujy^87c99iIFc*0$Z32jRDw9 z3klu79ZyL8?S8)PtsMt4v$ad$(e!YreIGs`U-G_w)p`Sd)>;YR**`BkYQ4JN%Q-D> z$v^!KUxQ4D0PKVM;*zxQc!j;FQq|$?+DHeS;3_`49h&1-tPI{8M#HJkFCn%BMMB9F!?x zNZ%8sm(o(TXAzR!>ZR1{Km=pMU#Yo>vYi><1W{0x4`P_3l6t*|NqV31SV9_<^jISX z%Y<*`zi`BFSuprx@b297ndvV83@&7wXb8~mga6H+f0Fx&1 zm3AuJtX+6N(VM196*@k_qXga;kWJeifNFj{Yq3d?UH_P}?#kjI(AnzjVtMTTeL9y{ z-vwQ6{5`lXNsS;Kf8}dJy<_6g^}fEfKlD=m+y3 zM;EnBP$=#@J)!V2-($FZsbVd&i}OTik?nbe7IV3&8`#B;~COw(L>GgE!9^i69H_JGp7{A@lfOYH)@^RbL&pTUo(WY@9IYFZ@Y8Vg*1iR)XMrq(A! z0~G-FH)MxoYtUSmi{{~_eMfQWc%(wBiOKdevf^ME5>pktmtfS;k|!}FD5r5 z=TF~|pk187hgASNqR}x8U3Yi80x2ZA1>x{y@hQ-oAfw1j2eK zR_qPQYgu2N3ycdl{0WgtpWIc>3^Yx*m@ZoZ-T<6kn{Kho!|tBjSB`OCjae@wiw^>jfC_YM(k%%YV z9Y4fo=y3aNKug6Z^CO!2l!k!4z?o$3bgVmPfa~0=*K;Hu!1J)JIOT}{;|v1yDxRvB zMYUO-GHc@wxJvly%JBUkJ*@5ZRL<#HC*&)aKg_FY4d3{oIC)rcFpD5gZ6^OjAfT5k z27oXgkm18XlO3dQ0t4xre(knHL#7@#0MjR@)ADzwj|PIGN44YR<|r!hyJy^>kNNHU zRg>+&FTCg|>s*BB}D2=sI(6y+Z;d}oSQG0 zUnqa8lv2M2Q2{l(m~lau-i%9xtq@$}16 zPKfai*>Oo(4`op0-ea^iG^~|=Vc zKHe4%+Ga;N_r&uHJoAi7OcAh9os0sAj54fOk; zA)g0NkI-oRU|+FgN$f!LlP5gMr@iyCtUvPj--oO--Ax@Dc-}AUvq|;SiVp5yLti33 zxVoOu`F4Vk7_s&8Z&`=c!ubmWk+KUfh%Z%DWTAh8?SAdQgY9ZdbMA4!8h$I@k{4iy z`nz}?tWj1RES*L<$5Np)Kq?B%Ln;b{-Op4MGL9|!yUj~MjO3?}KBMzKq5?%lR?Vg3 zH!QvB$HTcTVWr-#-QnjJ1rvfEN39O`noYL7#RWFieP0`=(i7W$h+|^Lg*z-e+c=1I zs=*rH%MUxx&k!R(XV%ZowG?$5*xMb>RhrG^){dyyF8?2jHJya@zOem`?W#Fr`ZuZ( zHcx}0BE#|PN!+f?tyE$pE>yJUgeKx*w?UK<$_FcD>ORw>>@o+lDMYG}+yn6)*oRXi z@bVSuCPJk&D;#)A`}Ya>{Jny6*eB!H`-UVZyFf-_uzwqgjjoh#9#NOLsZ>pa^|E$AN z^7W`y)$5k7oUy&OPl7L85XxB=-CJZydLP3_&_Teg(m}AJdbtQqjXDjHe-3n zyclQx^dm-Bw(}H-(cM#Bz3L+7JuTI-!IQaj zH97Ql)!&a=tge7XRtqd{#N5r@1^+zL3EaOuOIa-kRBimcYE>Ud% zQ$5Rxp=$qeU(j6fq`06?4v`(beq%Zpv=M%g@DC6e?s9&nM z#De?!hW5Fc!Iyk=G`KlV76jXI`ajbrxk0Oe1bm(`U_iuc2 zQV94|M*IN4{5UWemjs4osB&p{>~?>Omahax7E|&5EIVY9v%mo}==gcKY1_0q^yS0B zS~;p9LLN9z4*J~c3O`>hH6JpT>dBh_*I*G3o!aq>`x~e4sYzTWjrBYn68F$ovlE*0 zia$g4=!}2roioOJ#MkM@k`}H@X@K({=VwL#JLk+-=5BpqKXW*+0akR7^(9o)<=fnL zTMgLI2M0d&DebUb^kUmIZDrD4?MN|m6+|;9Zf|MyhaCXL;TPEfoe~IDb>2Z*J)LLq zm+)POf+@BFi&%;O;VeiGPA;kXEiMSIcp$RaVkLEm6XBoMLFK3AxChbytmTNNRZUc) zze}P0qYi@iFJSCDJN|4KHH}T;JoobhjCd_W^aF>Q5i@Kcv7JyriuRu(2OaCR5>iq z$;fhcHQr+w&id~uD~I_TN%sk?7DXy7Ef*;x+AA$by?+~*S99)khd)*T0WwGB?QdYp z`x{?VNcsYU($DGsHJ-!FM|fvv@XlA=k=v_+-2sgUSY8M%ZrP3+wuwR1>axqcST}e& z%KwU!0CLGo73XQ=H7CbkL>Q&1S5cEqxO> zC=mHtaJsBRKTxx~d!i|_Ch4sjtu9yiEscX>nT|IXftkNIzx6+owWgqNKO}3M+y*zt z;9~6yk$Z}`*NZuSqmm++?yqV*thYc6pmMN0r8DY-#f%-z#*H4c4ZRR5$2PSI7G8h^R{DeG)O=x2r&GcCZW z&{;89X~i#hs}D3Kc;w7-mwV_1wal-Ik^pN+Qxn#oCwI1Tf)2}jI}jxZ?C*QRP9Rwn zklK790eYeXRj5SC*_&f*;>|MFu4YT1aE?C=N{z1$!H^ax)SzeJhTd=&cZKTV%542B zU`9*z6enl4LC}g*dRbsx*@|X%oZ(CEk-=LPmCH80G7IEsdKYm8n^>mo{OYK^ZA@XA zOGW~kf*Xx6jXgikFqo{n-cmTlvIFpixT)wCWAwmPe-@WHE=lpbMtUJQ=b>^}wunQ{ z1zoP^`(Vz>=r^e4ciQ*0!Eg2|&#yR=i@tPIC|vZYPGevuj@}@iW=O+NDKX~Psht7WGVjQK4fe8oPH9(FG<=m$+XXb8VoxOv|9=A2ac*85AP$?(hgL)AY&IyN>Tb z(_N|GdHgX90h7+UJEx0$&yA7V8p=9;z(@>mgh}fn9?-#ZD{}&Iz5-F-whI+AR9j@* z=60_fORn@~9M)x#Mp1#0XuBfB!|Sz$(i&p}u1!RNsJkIz9>x_1g8Q?h}~YV-yQ zO)4k8l76j$cFIM%DZja8F`~}3`oAs#a(LNV=9Xv>P`ET$)&Cc62Fs)|(f!!TcwcSt z#j>HwL9=58Qy-&Pd>?+1tB(VjJ(hXr=TO6&O4qShFGwHPgO%sW3RQrABB`-VfA9B_ zUh!mgVs+U2mC)Wz$#oEfc+HJH8y2K*qZ-<`B%y;Y8VN2E=a=J0Q$b*NdNcDZM)!jb zjGVI*T<5WeSs;Im`@;#7+$woL{V~f$JCfInr3v~M@L|Mj_iLti!gU3y_dO>c6P2z~ z3m$F7PzSoExGcqebk7=ORLI(8eCPhI&zzNhK=#q;`>6J}fgkund|oQ>v2n+a6PdFv zTtd;}p7>JJfF+20=Y*IdlkNg#VwQG9lts%4|L>3rVsTZFPMnz3K7v+k@HA+JH2Gjg zX&BJ{M_&h$Sy{Hao1554CT@&#m0x2t`;J-Tx@=wDlOmIiBdmG) zL*t7qUx?Sxbz?@ckc}59-|Q{>z0bX z3XA0DeDo@_rvvfyQi&!m$UdZ>szs!-F9}jMhAliE`!)5#n`4uB=I36oR)+QBtBG=* zUrVT#@IGV0J8Zg(x8Bi}`0{V~PWHz^EliP4Oz3m*CVSya|Jv5YJAzwwBR|a{Gq~I@ zK&Y07xQ3Gur1WIWw7w?quNjxHrPN*8dzJY61olIzj_Nz}uI+c~=*v$;oj}+|3{~tu ziE7_%hiyfihzH_&f)6P*MO;$vX==TjpZrBAbhh_t*+uh)Aou%cjTicAlmgkHJ3MM| zFl0O9y}+^SzSn?o#v)X$)S@|0i$x28AkhpQfJ0rA@@rVFs~Mxn(Z=f#nlnfnsTz1V zBMEt}w!hmE&y}4RnPH!KS z7+mlMTWrd12D-Crq{Fh^@5~(1&y1etn3@lX8ULQt*BGS=i;f^L%)AG(2db~(U5szk ze9CXCPIYhdUIHh2_;2XlfQ^mL9rO+d{P&7(51gEH9!urFYueEOmqh`w_+5aguA>v5 z`SOh(ULv`k??Y+{-J27isiJudl(HJPpeq?&zQTyh_)Mk5XE{!lQ z??V@rxir>=h{M`xQ?$8!9Eec(Z)T>DJX{>Fff)pK$M6O#I^0_N49LV&rfUFcuX29L zQ<|s0^}$AR{G$f{_G|!zsuOJ&*B>=@c`xxh9+jBHhfS?gD6P2{;Vru}avRlCWCCiq z7?zD&(=%I5e6CI|(-Mt%#{T62Vh%Nqj$320 zaJjw_Rr1MQi-=BwlBKsN%{3fx4*ZV)k^zi}U+tAw)EKp9{Nw&tA^GXWa4hW^z}14v zSclOR8O07uyz!uUQ1KFa0juD*EZ@qCfIHUU!?rGwiKqqW!!!~aI%mTAFPGxq*^^XS z%DY?M!nf|fBcUcGn}2(gFG>C5I5@2iWX(sVzfK)$@3>Z38aN+1T>8|#iX^N$zXIXB zn416zh5v4O0mvE#Fw;|d;fcwbWv3tsw$BMHeb>#YGEY?~mVHa~aQHYw+JB}N?`fX^ z2H|IHQ`$#PZs($yGmFNGST!Q`4w`m?JutP%f&Y@pp{gJk>|UJbIZHtOc|@EO$;q

      )@4(x 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

      ;#Kq?0M&y8Eje&RGxtA2Z@mv$ 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 z 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%0DNX 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