Commit 5dd9e087 authored by YannGarcia's avatar YannGarcia
Browse files

Merge branch v2.2.1-dev into master

parents c56308e2 b3d46463
#!/bin/bash
# Copyright ETSI 2018
# Copyright ETSI 2018-2021
# See: https://forge.etsi.org/etsi-forge-copyright-statement.txt
#set -vx
set -vx
#set -e
cd "$(dirname "$0")"
cd $(dirname $0)
cd ./docker
run_dir="$(pwd)"
run_dir=`pwd`
./build.sh
# Docker version 2
cd ./virtualization/docker
./build.sh #--force-stfubuntu
#./run.sh
cd -
exit 0
if [ "$1" == "--remove" ]
then
docker rmi --force ttf_t012_mec:latest
fi
cd -
......@@ -203,10 +203,24 @@ Procedure:
- Clone the ETSI MEC Testing Framework project into $HOME/dev folder
```sh
$ git clone
$ git clone --recurse-submodules --branch TTF012_Mec https://forge.etsi.org/rep/mec/gs032p3-ttcn-test-suite.git ./TTF012_Mec
$ cd /home/etsi/dev/TTF012_Mec/ttcn/LibIts
$ rm -fr t3q
$ cd ttcn && rm -fr Common
```
- Update your default environment with the content of the script $HOME/dev/STF569_Mec/scripts/devenv.bash.ubuntu
- Apply patches
```sh
$ cd /home/etsi/dev/TTF012_Mec
$ cp ./ttcn/patch_lib_common_titan/module.mk ./ttcn/LibCommon/
$ cp ./ttcn/patch_lib_common_titan/*.ttcn ./ttcn/LibCommon/
$ cp ./ttcn/patch_lib_http/*.ttcn ./ttcn/LibIts/ttcn/Http/
$ cp ./ttcn/patch_lib_its/module.mk ./ttcn/LibIts/
```
- Update your default environment with the content of the script $HOME/dev/TTF012_Mec/scripts/devenv.bash.ubuntu
- Switch to the next clause (Usage)
......@@ -223,16 +237,17 @@ Procedure using Eclipse TITAN:
- Start eclipse using a new workspace, (e.g. with the name workspace_titan)
- Download and follow the steps to install Eclipse plugins for TITAN, accessible [here]{https://www.eclipse.org/downloads/download.php?file=/titan/Eclipse_installationguide.pdf}
- Open the workspace_titan
- Create a new TITAN project (e.g. STF569_Mec)
- Create a new TITAN project (e.g. TTF012_Mec)
<TODO>
Procedure in TITAN command line:
- Open several SSH session (PuTTY...)
- Change to the directory ~/dev/STF569_Mec/src/AtsMec/objs
- Change to the directory ~/dev/TTF012_Mec/src/AtsMec/objs
- Build the test suite AtsMec
```sh
$ ../bin/mec_generate_makefile.bash
$ cd ~/dev/TTF012_Mec/ && export ATS=AtsMec
$ make
...
```
......@@ -243,7 +258,8 @@ $ ../bin/mec_generate_makefile.bash
- To run the test suite, execute the following command:
```sh
$ ../bin/run-all.bash
$ cd ~/dev/TTF012_Mec/scripts/
$ ./run-all.bash
...
```
......
......@@ -81,6 +81,8 @@ public: //! \publicsection
static const std::string& server; //! HTTP server address (e.g. www.etsi.org)
static const std::string& port; //! HTTP server port. Default: 80
static const std::string& use_ssl; //! Set to 1 to use SSL to communicate with the HTTP server. Default: false
static const std::string& mutual_auth; //! Set to 1 to use mutual authentication. Default: false
static const std::string& trusted_ca_list; //! List of trusted CA certificates
static const std::string& server_mode; //! Does the test sytem acting as a server. Default: 0
static const std::string& local_port; //! Local listener port. Default: 80
......
......@@ -73,6 +73,8 @@ const std::string& params::interface_id = std::string("interface_id");
const std::string& params::server = std::string("server");
const std::string& params::port = std::string("port");
const std::string& params::use_ssl = std::string("use_ssl");
const std::string& params::mutual_auth = std::string("mutual_auth");
const std::string& params::trusted_ca_list = std::string("trusted_ca_list");
const std::string& params::server_mode = std::string("server_mode");
const std::string& params::local_port = std::string("local_port");
......
......@@ -57,6 +57,7 @@ int http_codec::decode (const OCTETSTRING& data, LibItsHttp__TypesAndValues::Htt
return -1;
}
loggers::get_instance().log_msg("http_codec::decode: message_id: ", message_id);
// Extract parameters
try {
std::string str(static_cast<const char*>(message_id));
......@@ -535,7 +536,7 @@ int http_codec::decode_body(TTCN_Buffer& decoding_buffer, LibItsHttp__MessageBod
}
loggers::get_instance().log("http_codec::decode_body: counter=%d", counter);
body = OCTETSTRING(body.lengthof() - counter, static_cast<const unsigned char*>(body));
if (_dc.chunked){
if (_dc.chunked) {
int counter = 0;
int prev = 0;
OCTETSTRING os(0, nullptr);
......@@ -555,6 +556,14 @@ int http_codec::decode_body(TTCN_Buffer& decoding_buffer, LibItsHttp__MessageBod
loggers::get_instance().log("http_codec::decode_body: str: '%s'", str.c_str());
int len = std::stoi(str, nullptr, 16);//converter::get_instance().string_to_int(str);
loggers::get_instance().log("http_codec::decode_body: Chunk len: %d", len);
if (len > body.lengthof()) { // Missing data :(
loggers::get_instance().warning("http_codec::decode_body: Missing data and chunked mode");
_params->insert(std::pair<std::string, std::string>("missing_data", "1"));
_params->log();
OCTETSTRING raw_trunk(len, idx + static_cast<const unsigned char*>(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
......
......@@ -11,7 +11,7 @@ using namespace std; // Required for isnan()
#include "LibItsHttp_TypesAndValues.hh"
#include "LibItsHttp_TestSystem.hh"
http_layer::http_layer(const std::string & p_type, const std::string & param) : t_layer<LibItsHttp__TestSystem::HttpPort>(p_type), _params(), _device_mode{false}
http_layer::http_layer(const std::string & p_type, const std::string & param) : t_layer<LibItsHttp__TestSystem::HttpPort>(p_type), _params(), _device_mode{false}, _stream_buffer(0, NULL)
{
loggers::get_instance().log(">>> http_layer::http_layer: %s, %s", to_string().c_str(), param.c_str());
// Setup parameters
......@@ -83,12 +83,37 @@ void http_layer::send_data(OCTETSTRING& data, params& params) {
void http_layer::receive_data(OCTETSTRING& data, params& params)
{
loggers::get_instance().log_msg(">>> http_layer::receive_data: ", data);
loggers::get_instance().log_msg(">>> http_layer::receive_data: _stream_buffer= ", _stream_buffer);
// Decode HTTP message
LibItsHttp__TypesAndValues::HttpMessage http_message;
if (_codec.decode(data, http_message) == -1) {
loggers::get_instance().warning("http_layer::receive_data: Failed to decode data");
return;
if (!_stream_buffer.is_bound() || (_stream_buffer.lengthof() == 0)) {
if (data.lengthof() < 6) { // 'HTTP/' or 'GET /'
loggers::get_instance().warning("http_layer::receive_data: Inconsistant buffer length");
return;
}
if (_codec.decode(data, http_message, &params) == -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, &params) == -1) {
loggers::get_instance().warning("http_layer::receive_data (1): Failed to decode data");
return;
}
}
params::const_iterator it = params.find("missing_data");
if (it != params.cend()) { // Transport layer didn't reassemble chunks, keep current state and wait for the next chunk
// Store data and wait for the next stream
loggers::get_instance().warning("http_layer::receive_data: Missing data, save current stream");
_stream_buffer += data;
return; // Terminate here
} else {
// Reset stream buffer and continue
loggers::get_instance().log("http_layer::receive_data: Reset stream buffer");
_stream_buffer.clean_up();
}
if (_device_mode) {
OCTETSTRING os;
......@@ -120,8 +145,8 @@ void http_layer::receive_data(OCTETSTRING& data, params& params)
loggers::get_instance().warning("http_layer::receive_data: An HTTP response is expected");
}
} else {
// Pass it to the ports
to_all_upper_ports(http_message, params);
// Pass it to the ports
to_all_upper_ports(http_message, params);
}
}
......
......@@ -34,6 +34,7 @@ class http_layer : public t_layer<LibItsHttp__TestSystem::HttpPort> {
params _params;
http_codec _codec;
bool _device_mode;
OCTETSTRING _stream_buffer;
public: //! \publicsection
/*!
......
This diff is collapsed.
......@@ -77,12 +77,33 @@ tcp_layer::tcp_layer(const std::string & p_type, const std::string & param) : la
set_server_mode(server_mode);
if (server_mode) {
parameter_set("serverPort", _params[params::local_port].c_str());
if (ssl_mode) { // Add certificate bundle
parameter_set(ssl_verifycertificate_name(), "no");
parameter_set(ssl_private_key_file_name(), "../certificates/out/privates/486c4cb43fcbcdb5f564824ad201cffb405f3d3659fc1facd5f5cb21d4ea64e0_server_rsa.key.pem");
parameter_set(ssl_certificate_file_name(), "../certificates/out/certs/486c4cb43fcbcdb5f564824ad201cffb405f3d3659fc1facd5f5cb21d4ea64e0_server_rsa.cert.pem");
parameter_set(ssl_trustedCAlist_file_name(), "../certificates/out/certs/486c4cb43fcbcdb5f564824ad201cffb405f3d3659fc1facd5f5cb21d4ea64e0_server_rsa.cert.pem"); // FIXME Use a parameter
}
if (ssl_mode) { // Add certificate bundle
// Check mutual authentication param
_params.insert(std::pair<std::string, std::string>(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, std::string>(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, std::string>(std::string("mutual_tls"), it->second));
} else {
parameter_set(ssl_trustedCAlist_file_name(), "/usr/share/ca-certificates/mozilla/Amazon_Root_CA_1.crt");
}*/
// Set additional certificates
parameter_set(ssl_trustedCAlist_file_name(), "../certificates/out/certs/CA_rsa.cert.pem"); // FIXME Use a parameter
parameter_set(ssl_private_key_file_name(), "../certificates/out/privates/96ea9868b49aebca76608fa2579e9c4884c14cc2c867d34423a4841e2225342d_server_rsa.key.pem");
parameter_set(ssl_certificate_file_name(), "../certificates/out/certs/96ea9868b49aebca76608fa2579e9c4884c14cc2c867d34423a4841e2225342d_server_rsa.cert.pem");
} else {
parameter_set(ssl_trustedCAlist_file_name(), "../certificates/out/certs/CA_rsa.cert.pem"); // FIXME Use a parameter
parameter_set(ssl_certificate_file_name(), "../certificates/out/certs/96ea9868b49aebca76608fa2579e9c4884c14cc2c867d34423a4841e2225342d_client_rsa.cert.pem");
}
set_ttcn_buffer_usercontrol(false);
set_handle_half_close(true);
......@@ -91,11 +112,11 @@ tcp_layer::tcp_layer(const std::string & p_type, const std::string & param) : la
parameter_set(client_TCP_reconnect_name(), "yes");
if (!server_mode) {
if (server_mode == 0) {
loggers::get_instance().log("tcp_layer::tcp_layer: Establish connection: %s/%s", _params[params::server].c_str(), _params[params::port].c_str());
open_client_connection(_params[params::server].c_str(), _params[params::port].c_str(), NULL, NULL);
}
}
}
tcp_layer::~tcp_layer() {
loggers::get_instance().log(">>> tcp_layer::~tcp_layer: %d", _client_id);
......@@ -175,11 +196,10 @@ int tcp_layer::send_message_on_fd(int p_client_id, const unsigned char * message
{
loggers::get_instance().log(">>> tcp_layer::send_message_on_fd: %d", p_client_id);
if(get_user_data(p_client_id))
{
loggers::get_instance().log("tcp_layer::send_message_on_fd: SSL mode");
return SSL_Socket::send_message_on_fd(p_client_id, message_buffer, length_of_message);
}
if(get_user_data(p_client_id)) {
loggers::get_instance().log("tcp_layer::send_message_on_fd: SSL mode");
return SSL_Socket::send_message_on_fd(p_client_id, message_buffer, length_of_message);
}
loggers::get_instance().log("tcp_layer::send_message_on_fd: Non secured mode");
return Abstract_Socket::send_message_on_fd(p_client_id, message_buffer, length_of_message);
......@@ -189,11 +209,10 @@ int tcp_layer::send_message_on_nonblocking_fd(int p_client_id, const unsigned ch
{
loggers::get_instance().log(">>> tcp_layer::send_message_on_nonblocking_fd: %d", p_client_id);
if(get_user_data(p_client_id))
{
loggers::get_instance().log("tcp_layer::send_message_on_nonblocking_fd: SSL mode");
return SSL_Socket::send_message_on_nonblocking_fd(p_client_id, message_buffer, length_of_message);
}
if(get_user_data(p_client_id)) {
loggers::get_instance().log("tcp_layer::send_message_on_nonblocking_fd: SSL mode");
return SSL_Socket::send_message_on_nonblocking_fd(p_client_id, message_buffer, length_of_message);
}
loggers::get_instance().log("tcp_layer::send_message_on_nonblocking_fd: Non secured mode");
return Abstract_Socket::send_message_on_nonblocking_fd(p_client_id, message_buffer, length_of_message);
......@@ -210,6 +229,9 @@ int tcp_layer::receive_message_on_fd(int p_client_id)
}
loggers::get_instance().log("tcp_layer::receive_message_on_fd: Non secured mode");
if (_params[std::string("tcp_fragmented")].compare("1") == 0) {
sleep(5); // FIXME When HTTP paquet is fragmented into several TCP packets, a timer is required. This is a Q&D solution
}
return Abstract_Socket::receive_message_on_fd(p_client_id);
}
......
This diff is collapsed.
[MODULE_PARAMETERS]
# This section shall contain the values of all parameters that are defined in your TTCN-3 modules.
# IUT roles
LibCommon_Time.PX_TAC := 30.0
#LibCommon_Time.PX_TWAIT := 30.0
LibCommon_Sync.PX_TSYNC_TIME_LIMIT := 30.0;
LibCommon_Sync.PX_TSHUT_DOWN_TIME_LIMIT := 30.0;
LibItsHttp_Pics.PICS_HEADER_HOST := "172.22.1.6"
LibItsHttp_Pics.PICS_HEADER_CONTENT_TYPE := "application/json"
LibItsHttp_Pics.PICS_USE_TOKEN_HEADER := true
#LibItsHttp_Pics.PICS_TOKEN_HEADER := "Basic WrongToken"
LibMec_Pics.PICS_ROOT_API := "etsi-013"
LibMec_Pics.PICS_MEC_PLAT := true
LibMec_Pics.PICS_SERVICES := true
LibMec_Pics.PICS_RNIS := true
LibMec_Pics.PICS_RNIS_QUERY := true
LibMec_Pics.PICS_RNIS_ALL_SUBSCRIPTIONS := true
LibMec_Pics.PICS_RNIS_NOTIFICATIONS := true
LocationAPI_Pics.PICS_LOCATION_API_SUPPORTED := true
UEidentityAPI_Pics.PICS_UE_IDENTITY_API_SUPPORTED := false
BwManagementAPI_Pics.PICS_BWMANAGEMENT_API_SUPPORTED := false
#AppEnablementAPI_Pics.PICS_APP_ENABLEMENT_API_SUPPORTED := true
#AppEnablementAPI_Pics.PICS_ME_APP_SUPPORT_TIMING_CAPS_URI
[LOGGING]
# In this section you can specify the name of the log file and the classes of events
# you want to log into the file or display on console (standard error).
LogFile := "../logs/%e.%h-%r.%s"
FileMask := LOG_ALL | USER | DEBUG | MATCHING
ConsoleMask := LOG_ALL | USER | DEBUG | MATCHING
#FileMask := ERROR | WARNING | USER | MATCHING | EXECUTOR_RUNTIME | VERDICTOP
#ConsoleMask := ERROR | WARNING | USER | MATCHING | EXECUTOR_RUNTIME | VERDICTOP
LogSourceInfo := Stack
LogEntityName:= Yes
LogEventTypes:= Yes
#TimeStampFormat := DateTime
[TESTPORT_PARAMETERS]
# In this section you can specify parameters that are passed to Test Ports.
system.httpPort.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server=172.22.1.6,port=31007,use_ssl=0)"
#system.httpPort.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server=172.28.4.253,port=30007,use_ssl=0)"
system.httpPort_notif.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server_mode=1,local_port=8081,use_ssl=0)"
[DEFINE]
# In this section you can create macro definitions,
# that can be used in other configuration file sections except [INCLUDE] and [ORDERED_INCLUDE].
[INCLUDE]
# To use configuration settings given in other configuration files,
# the configuration files just need to be listed in this section, with their full or relative pathnames.
[ORDERED_INCLUDE]
# To use configuration settings given in other configuration files,
# the configuration files just need to be listed in this section, with their full or relative pathnames.
[EXTERNAL_COMMANDS]
# This section can define external commands (shell scripts) to be executed by the ETS
# whenever a control part or test case is started or terminated.
#BeginTestCase := ""
#EndTestCase := ""
#BeginControlPart := ""
#EndControlPart := ""
[EXECUTE]
# In this section you can specify what parts of your test suite you want to execute.
#AtsMec_TestControl.control
#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_001_OK
#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_001_BR
#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_001_NF
#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_002_OK
#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_002_BR
#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_002_PF
# ETSI GS MEC 013
AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCLOOK_001_OK
AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCLOOK_001_BR
AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCLOOK_001_NF
AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_001_OK
#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_001_BR
#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_002_OK
#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_002_NF
AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_001_OK
#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_001_BR
#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_002_OK
#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_002_NF
#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFLOOK_001_OK
#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFLOOK_001_BR
#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFLOOK_001_NF
#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_001_OK
#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_001_BR
#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_002_OK
#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_002_NF
AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_RLOCLOOK_001_OK
AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_RLOCLOOK_001_NF
#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_011_OK
#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_012_OK
#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_011_BR
#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_012_BR
#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_016_OK
#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_017_OK
#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_018_OK
#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_019_OK
#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_016_BR
#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_016_NF
#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_017_BR
#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_017_NF
#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_018_BR
#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_018_NF
#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_019_BR
#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_019_NF
#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_001_OK
#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_002_OK
#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_003_OK
#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_004_OK
#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_005_OK
#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_006_OK
#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_007_OK
#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_008_OK
#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRANS_001_OK
#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_001_OK
#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_002_OK
#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_001_NF
[GROUPS]
# In this section you can specify groups of hosts. These groups can be used inside the
# [COMPONENTS] section to restrict the creation of certain PTCs to a given set of hosts.
[COMPONENTS]
# This section consists of rules restricting the location of created PTCs.
[MAIN_CONTROLLER]
# The options herein control the behavior of MC.
KillTimer := 10.0
LocalAddress := 127.0.0.1
TCPPort := 12000
NumHCs := 1
This diff is collapsed.
This diff is collapsed.
[MODULE_PARAMETERS]
# This section shall contain the values of all parameters that are defined in your TTCN-3 modules.
# IUT roles
LibCommon_Time.PX_TAC := 30.0
#LibCommon_Time.PX_TWAIT := 30.0
LibCommon_Sync.PX_TSYNC_TIME_LIMIT := 30.0;
LibCommon_Sync.PX_TSHUT_DOWN_TIME_LIMIT := 30.0;
LibItsHttp_Pics.PICS_HEADER_HOST := "127.0.0.1"
LibItsHttp_Pics.PICS_HEADER_CONTENT_TYPE := "application/json"
LibItsHttp_Pics.PICS_USE_TOKEN_HEADER := true
#LibItsHttp_Pics.PICS_TOKEN_HEADER := "Basic WrongToken"
LibMec_Pics.PICS_ROOT_API := "" # Need to sign in on https://try-mec.etsi.org/, section 'Try-it from your MEC application'
# LibMec_Pixits
LibMec_Pixits.PX_ME_APP_Q_ZONE_ID_URI := "/location/v2/queries/zones"
LibMec_Pixits.PX_ME_APP_Q_USERS_LIST_URI := "/location/v2/queries/users"
LibMec_Pixits.PX_RNIS_SUBSCRITIONS_URI := "/rni/v2/subscriptions"
LibMec_Pixits.PX_RNIS_QUERIES_URI := "/rni/v2/queries"
LibMec_Pixits.PX_MEC_SVC_MGMT_APPS_URI := "/mec_service_mgmt/v2/applications"
LibMec_Pixits.PX_ME_APP_SUPPORT_URI := "/mec_app_support/v2/applications"
LibMec_Pixits.PX_SVC_MGMT_TRANS_URI := "/mec_service_mgmt/v2/transports"
LibMec_Pixits.PX_ME_APP_SUPPORT_TIMING_CAPS_URI := "/mec_app_support/v2/timing/timing_caps"
LibMec_Pixits.PX_ME_APP_SUPPORT_TIMING_CURRENT_URI := "/mec_app_support/v2/timing/current_time"
# Mec-011 AppEnblementAPI
AppEnablementAPI_Pixits.PX_APP_INSTANCE_ID := "appInst01"
AppEnablementAPI_Pixits.PX_SERVICE_NAME := "serName"
AppEnablementAPI_Pixits.PX_SERVICE_ID := "serInst01"
AppEnablementAPI_Pixits.PX_SERVICE_INFO_VERSION := "1.0.0"
AppEnablementAPI_Pixits.PX_NEW_SERVICE_INFO_VERSION := "1.0.0"
AppEnablementAPI_Pixits.PX_SERVICE_INFO_STATE := ACTIVE
AppEnablementAPI_Pixits.PX_SUBSCRIPTION_ID := "7777"
AppEnablementAPI_Pixits.PX_DNS_RULE_ID := "route2home"
AppEnablementAPI_Pixits.PX_DOMAIN_NAME := "etsi.org"
AppEnablementAPI_Pixits.PX_IP_ADDRESS := "10.10.0.2"
AppEnablementAPI_Pixits.PX_TTL := 8
AppEnablementAPI_Pixits.PX_TRAFFIC_RULE_ID := "trafficRuleId01"
# Mec-012 RnisAPI
RnisAPI_Pixits.PX_SUBSCRIPTION_HREF_VALUE := "cell_change"
RnisAPI_Pixits.PX_SUBSCRIPTION_TYPE := CELL_CHANGE
RnisAPI_Pixits.PX_SUBSCRIPTION_ID := "7777"
RnisAPI_Pixits.PX_ASSOCIATE_ID_VALUE := "192.0.0.2"
RnisAPI_Pixits.PX_CELL_ID := "0x4040404"
RnisAPI_Pixits.PX_C_ID := "0xFFFFFFFF"
RnisAPI_Pixits.PX_APP_INS_ID := "01"
RnisAPI_Pixits.PX_APP_ID := "19"
RnisAPI_Pixits.PX_E_RAB_ID := 0
RnisAPI_Pixits.PX_QCI := 0
# Mec-013 LocationAPI
LocationAPI_Pics.PICS_LOCATION_API_SUPPORTED := true
LocationAPI_Pixits.PX_ZONE_ID := "zone02"
LocationAPI_Pixits.PX_ACCESS_POINT_ID := "4g-macro-cell-4"
LocationAPI_Pixits.PX_USER := "10.10.0.1"
LocationAPI_Pixits.PX_CLIENT_ID := "0123"
LocationAPI_Pixits.PX_SUBSCRIPTION_ID := "subscription0123"
UEidentityAPI_Pics.PICS_UE_IDENTITY_API_SUPPORTED := false
BwManagementAPI_Pics.PICS_BWMANAGEMENT_API_SUPPORTED := false
[LOGGING]
# In this section you can specify the name of the log file and the classes of events
# you want to log into the file or display on console (standard error).
LogFile := "../logs/AtsMec/%e.%h-%r.%s"
FileMask := LOG_ALL | USER | DEBUG | MATCHING
ConsoleMask := LOG_ALL | USER | DEBUG | MATCHING
#FileMask := ERROR | WARNING | USER | MATCHING | EXECUTOR_RUNTIME | VERDICTOP | PORTEVENT
#ConsoleMask := ERROR | WARNING | USER | MATCHING | EXECUTOR_RUNTIME | VERDICTOP | PORTEVENT
LogSourceInfo := Stack
LogEntityName:= Yes
LogEventTypes:= Yes
#TimeStampFormat := DateTime
[TESTPORT_PARAMETERS]
# In this section you can specify parameters that are passed to Test Ports.
#system.httpPort.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server=try-mec.etsi.org,port=443,use_ssl=1)"
system.httpPort.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server=127.0.0.1,port=8081,use_ssl=0)"
system.httpPort_notif.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server_mode=1,local_port=8082,use_ssl=1)"
[DEFINE]
# In this section you can create macro definitions,
# that can be used in other configuration file sections except [INCLUDE] and [ORDERED_INCLUDE].
[INCLUDE]
# To use configuration settings given in other configuration files,
# the configuration files just need to be listed in this section, with their full or relative pathnames.
[ORDERED_INCLUDE]
# To use configuration settings given in other configuration files,
# the configuration files just need to be listed in this section, with their full or relative pathnames.
[EXTERNAL_COMMANDS]
# This section can define external commands (shell scripts) to be executed by the ETS
# whenever a control part or test case is started or terminated.
#BeginTestCase := ""
#EndTestCase := ""
#BeginControlPart := ""
#EndControlPart := ""
[EXECUTE]
# In this section you can specify what parts of your test suite you want to execute.
#AtsMec_TestControl.control
#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_001_OK
#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_001_BR
#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_001_NF
#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_002_OK
#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_002_BR
#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_002_PF
# ETSI GS MEC 013
AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCLOOK_001_OK
#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCLOOK_001_BR
#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCLOOK_001_NF
#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_001_OK
#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_001_BR
#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_002_OK
#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_002_NF
#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_001_OK
#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_001_BR
#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_002_OK
#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_002_NF
#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFLOOK_001_OK
#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFLOOK_001_BR
#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFLOOK_001_NF
#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_001_OK
#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_001_BR
#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_002_OK
#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_002_NF
#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_RLOCLOOK_001_OK
#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_RLOCLOOK_001_NF
#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_001_OK
#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_001_BR
#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_002_OK
#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_002_NF
#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTLOOK_001_OK
#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTLOOK_001_BR
#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTSUB_001_OK
#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTSUB_001_BR
#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTSUB_002_OK