From 2be74c99360fcc661e995d118343a8787bded9d5 Mon Sep 17 00:00:00 2001 From: YannGarcia Date: Tue, 13 Aug 2019 01:10:38 -0700 Subject: [PATCH] Finalyze RnisQuery_BV/RnisQuery_BI_BO tests --- TODO.md | 29 + ccsrc/Protocols/Json/json_codec.cc | 114 +++- etc/AtsMec/AtsMec.cfg | 13 +- ttcn/AtsMec/AtsMec_RnisAPI_TestCases.ttcn | 589 +++++++++++++++++- ttcn/AtsMec/AtsMec_TestControl.ttcn | 12 +- ttcn/LibIts | 2 +- ttcn/LibMec/Ams/ttcn/Ams_Templates.ttcn | 64 +- ttcn/LibMec/RnisAPI/json/RnisAPI.json | 28 +- ttcn/LibMec/RnisAPI/ttcn/RnisAPI_Pixits.ttcn | 10 +- .../RnisAPI/ttcn/RnisAPI_Templates.ttcn | 359 ++++++----- .../RnisAPI/ttcn/RnisAPI_TypesAndValues.ttcn | 57 +- .../LibItsHttp_JsonMessageBodyTypes.ttcn | 41 +- .../LibItsHttp_JsonTemplates.ttcn | 271 ++------ 13 files changed, 1112 insertions(+), 477 deletions(-) diff --git a/TODO.md b/TODO.md index 8ff1e43..2fc4976 100644 --- a/TODO.md +++ b/TODO.md @@ -27,8 +27,37 @@ https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purpo https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisSpecificSubscription_BV.tplan2 - TC_MEC_SRV_RNIS_011_OK To be tested + - TC_MEC_SRV_RNIS_012_OK To be tested +- TC_MEC_SRV_RNIS_011_BR To be tested + +- TC_MEC_SRV_RNIS_012_BR To be tested + +- TC_MEC_SRV_RNIS_016_OK To be tested + +- TC_MEC_SRV_RNIS_016_BR To be tested + +- TC_MEC_SRV_RNIS_016_NF To be tested + +- TC_MEC_SRV_RNIS_017_OK To be tested + +- TC_MEC_SRV_RNIS_017_BR To be tested + +- TC_MEC_SRV_RNIS_017_NF To be tested + +- TC_MEC_SRV_RNIS_018_OK To be tested + +- TC_MEC_SRV_RNIS_018_BR To be tested + +- TC_MEC_SRV_RNIS_018_NF To be tested + +- TC_MEC_SRV_RNIS_019_OK To be tested + +- TC_MEC_SRV_RNIS_019_BR To be tested + +- TC_MEC_SRV_RNIS_019_NF To be tested + ### SAQ ### SRVSUB diff --git a/ccsrc/Protocols/Json/json_codec.cc b/ccsrc/Protocols/Json/json_codec.cc index d1759ce..2ab1698 100644 --- a/ccsrc/Protocols/Json/json_codec.cc +++ b/ccsrc/Protocols/Json/json_codec.cc @@ -99,14 +99,126 @@ int json_codec::decode (const OCTETSTRING& p_data, LibItsHttp__JsonMessageBodyTy traffic_rule.decode(AppEnablementAPI__TypesAndValues::TrafficRule_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.trafficRule() = traffic_rule; } else if (it->second.find("\"CellChangeSubscription\"") != std::string::npos) { + // Replace "type": "1" by type": "EU_IPV4_ADDRESS", "type": "2"... + // TODO Create a method instead of copy/past + //loggers::get_instance().log("json_codec::decode: Before, str=%s", str.c_str()); + std::size_t it_start = str.find("\"type\""); + loggers::get_instance().log("json_codec::decode: id_start=%d", it_start); + if (it_start != std::string::npos) { + std::size_t it_stop = str.find(",", it_start); + //loggers::get_instance().log("json_codec::decode: id_stop=%d", it_stop); + //loggers::get_instance().log("json_codec::decode: segment=%s", str.substr(it_start, it_stop - it_start).c_str()); + std::size_t it = str.find("1", it_start, 1); + //loggers::get_instance().log("json_codec::decode: it=%d", it); + if ((it != std::string::npos) && (it < it_stop)) { + str = str.substr(0, it) + "UE_IPV4_ADDRESS" + str.substr(it + 1); + } else { + it = str.find("2", it_start, 1); + //loggers::get_instance().log("json_codec::decode: it=%d", it); + if ((it != std::string::npos) && (it < it_stop)) { + str = str.substr(0, it) + "UE_IPV6_ADDRESS" + str.substr(it + 1); + } else { + it = str.find("3", it_start, 1); + //loggers::get_instance().log("json_codec::decode: it=%d", it); + if ((it != std::string::npos) && (it < it_stop)) { + str = str.substr(0, it) + "NATED_IP_ADDRESS" + str.substr(it + 1); + } else { + it = str.find("4", it_start, 1); + //loggers::get_instance().log("json_codec::decode: it=%d", it); + if ((it != std::string::npos) && (it < it_stop)) { + str = str.substr(0, it) + "GTP_TEID" + str.substr(it + 1); + } + } + } + } + } + //loggers::get_instance().log("json_codec::decode: After, str=%s", str.c_str()); + decoding_buffer.clear(); + decoding_buffer.put_os(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); RnisAPI__TypesAndValues::CellChangeSubscription cell_change_subscription; cell_change_subscription.decode(RnisAPI__TypesAndValues::CellChangeSubscription_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.cellChangeSubscription() = cell_change_subscription; //TODO Continue with other ChangeSubscription } else if (it->second.find("\"RabInfo\"") != std::string::npos) { + // Replace "type": "1" by type": "EU_IPV4_ADDRESS", "type": "2"... + // TODO Create a method instead of copy/past + // loggers::get_instance().log("json_codec::decode: Before, str=%s", str.c_str()); + std::size_t it_start = str.find("\"type\""); + loggers::get_instance().log("json_codec::decode: id_start=%d", it_start); + if (it_start != std::string::npos) { + std::size_t it_stop = str.find(",", it_start); + //loggers::get_instance().log("json_codec::decode: id_stop=%d", it_stop); + //loggers::get_instance().log("json_codec::decode: segment=%s", str.substr(it_start, it_stop - it_start).c_str()); + std::size_t it = str.find("1", it_start, 1); + //loggers::get_instance().log("json_codec::decode: it=%d", it); + if ((it != std::string::npos) && (it < it_stop)) { + str = str.substr(0, it) + "UE_IPV4_ADDRESS" + str.substr(it + 1); + } else { + it = str.find("2", it_start, 1); + //loggers::get_instance().log("json_codec::decode: it=%d", it); + if ((it != std::string::npos) && (it < it_stop)) { + str = str.substr(0, it) + "UE_IPV6_ADDRESS" + str.substr(it + 1); + } else { + it = str.find("3", it_start, 1); + //loggers::get_instance().log("json_codec::decode: it=%d", it); + if ((it != std::string::npos) && (it < it_stop)) { + str = str.substr(0, it) + "NATED_IP_ADDRESS" + str.substr(it + 1); + } else { + it = str.find("4", it_start, 1); + //loggers::get_instance().log("json_codec::decode: it=%d", it); + if ((it != std::string::npos) && (it < it_stop)) { + str = str.substr(0, it) + "GTP_TEID" + str.substr(it + 1); + } + } + } + } + } + //loggers::get_instance().log("json_codec::decode: After, str=%s", str.c_str()); + decoding_buffer.clear(); + decoding_buffer.put_os(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); RnisAPI__TypesAndValues::RabInfo rab_info; rab_info.decode(RnisAPI__TypesAndValues::RabInfo_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.rabInfo() = rab_info; + } else if (it->second.find("\"S1BearerInfo\"") != std::string::npos) { + // Replace "type": "1" by type": "EU_IPV4_ADDRESS", "type": "2"... + // TODO Create a method instead of copy/past + // loggers::get_instance().log("json_codec::decode: Before, str=%s", str.c_str()); + std::size_t it_start = str.find("\"type\""); + loggers::get_instance().log("json_codec::decode: id_start=%d", it_start); + if (it_start != std::string::npos) { + std::size_t it_stop = str.find(",", it_start); + //loggers::get_instance().log("json_codec::decode: id_stop=%d", it_stop); + //loggers::get_instance().log("json_codec::decode: segment=%s", str.substr(it_start, it_stop - it_start).c_str()); + std::size_t it = str.find("1", it_start, 1); + //loggers::get_instance().log("json_codec::decode: it=%d", it); + if ((it != std::string::npos) && (it < it_stop)) { + str = str.substr(0, it) + "UE_IPV4_ADDRESS" + str.substr(it + 1); + } else { + it = str.find("2", it_start, 1); + //loggers::get_instance().log("json_codec::decode: it=%d", it); + if ((it != std::string::npos) && (it < it_stop)) { + str = str.substr(0, it) + "UE_IPV6_ADDRESS" + str.substr(it + 1); + } else { + it = str.find("3", it_start, 1); + //loggers::get_instance().log("json_codec::decode: it=%d", it); + if ((it != std::string::npos) && (it < it_stop)) { + str = str.substr(0, it) + "NATED_IP_ADDRESS" + str.substr(it + 1); + } else { + it = str.find("4", it_start, 1); + //loggers::get_instance().log("json_codec::decode: it=%d", it); + if ((it != std::string::npos) && (it < it_stop)) { + str = str.substr(0, it) + "GTP_TEID" + str.substr(it + 1); + } + } + } + } + } + //loggers::get_instance().log("json_codec::decode: After, str=%s", str.c_str()); + decoding_buffer.clear(); + decoding_buffer.put_os(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); + RnisAPI__TypesAndValues::S1BearerInfo s1_nearer_info; + s1_nearer_info.decode(RnisAPI__TypesAndValues::S1BearerInfo_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); + msg.s1BearerInfo() = s1_nearer_info; } else if (it->second.find("\"PlmnInfo\"") != std::string::npos) { RnisAPI__TypesAndValues::PlmnInfo plmn_info; plmn_info.decode(RnisAPI__TypesAndValues::PlmnInfo_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); @@ -139,7 +251,7 @@ int json_codec::decode (const OCTETSTRING& p_data, LibItsHttp__JsonMessageBodyTy RnisAPI__TypesAndValues::ProblemDetails problem_details; problem_details.decode(RnisAPI__TypesAndValues::ProblemDetails_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); - msg.problemDetails__rni() = problem_details; + msg.problemDetails__rnis() = problem_details; } else { diff --git a/etc/AtsMec/AtsMec.cfg b/etc/AtsMec/AtsMec.cfg index 72661f9..e9ce60d 100644 --- a/etc/AtsMec/AtsMec.cfg +++ b/etc/AtsMec/AtsMec.cfg @@ -104,7 +104,18 @@ system.httpPort.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server=192.1 #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_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_AppEnablementAPI_TestCases.TC_MEC_SRV_TRANS_001_OK #AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_001_OK diff --git a/ttcn/AtsMec/AtsMec_RnisAPI_TestCases.ttcn b/ttcn/AtsMec/AtsMec_RnisAPI_TestCases.ttcn index 30e65fa..abe21a4 100644 --- a/ttcn/AtsMec/AtsMec_RnisAPI_TestCases.ttcn +++ b/ttcn/AtsMec/AtsMec_RnisAPI_TestCases.ttcn @@ -355,7 +355,7 @@ module AtsMec_RnisAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - "/" & PICS_ROOT_API & PX_RNIS_QUERIES_URI & "?cell_id=" & oct2char(unichar2oct(PX_CELL_ID, "UTF-8")), + "/" & PICS_ROOT_API & PX_RNIS_QUERIES_URI & "/rab_info?cell_id=" & oct2char(unichar2oct(PX_CELL_ID, "UTF-8")), v_headers ) ) @@ -374,11 +374,15 @@ module AtsMec_RnisAPI_TestCases { mw_time_stamp, PX_APP_INS_ID, -, - mw_cell_user_info( - mw_ecgi( - mw_plmn, - PX_CELL_ID - )))))))) { + { + mw_cell_user_info( + mw_ecgi( + mw_plmn, + PX_CELL_ID + ) + ) + } + )))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a RAB information ***"); @@ -419,7 +423,7 @@ module AtsMec_RnisAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( - "/" & PICS_ROOT_API & PX_RNIS_QUERIES_URI & "?cell_id=" & oct2char(unichar2oct(PX_CELL_ID, "UTF-8")), + "/" & PICS_ROOT_API & PX_RNIS_QUERIES_URI & "/plmn_info?app_ins_id=" & oct2char(unichar2oct(PX_APP_INS_ID, "UTF-8")), v_headers ) ) @@ -437,10 +441,8 @@ module AtsMec_RnisAPI_TestCases { mw_plmn_info( mw_time_stamp, PX_APP_INS_ID, - mw_ecgi( - mw_plmn, - PX_CELL_ID - ))))))) { + { mw_plmn } + )))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a PLMN information ***"); @@ -456,7 +458,572 @@ module AtsMec_RnisAPI_TestCases { f_cf_01_http_down(); } // End of testcase TC_MEC_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_SRV_RNIS_018_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var HeaderLines 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_time_stamp, + { + mw_s1_ue_info( + { mw_temp_ue_id }, + { mw_associate_id }, + { *, mw_ecgi(mw_plmn, PX_CELL_ID), * }, + { + mw_s1_bearer_info_detailed + // TODO To be refined + }) + })))))) { + 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_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_SRV_RNIS_019_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var HeaderLines v_headers; + + // Test control + if (not(PICS_RNIS) or not(PICS_RNIS_QUERY)) { + log("*** " & testcasename() & ": PICS_RNIS and PICS_RNIS_QUERY required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + + // Test Body + log("*** " & testcasename() & ": INCONC: Too many changes in JSON data description, not implemented ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_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_SRV_RNIS_016_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var HeaderLines 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?c_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( + mw_http_message_body_json( + mw_body_json_rni_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_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_SRV_RNIS_016_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var HeaderLines 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_NOT_EXISTENT_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( + mw_http_message_body_json( + mw_body_json_rni_problem_details( + mw_problem_details( + -, -, 404 + )))))) { + 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_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_SRV_RNIS_017_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var HeaderLines 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_id=" & oct2char(unichar2oct(PX_APP_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_rni_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_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_SRV_RNIS_017_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var HeaderLines 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( + mw_http_message_body_json( + mw_body_json_rni_problem_details( + mw_problem_details( + -, -, 404 + )))))) { + 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_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_SRV_RNIS_018_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var HeaderLines 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?c_id=" & oct2char(unichar2oct(PX_C_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_rni_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_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_SRV_RNIS_018_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var HeaderLines 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_NOT_EXISTENT_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( + mw_http_message_body_json( + mw_body_json_rni_problem_details( + mw_problem_details( + -, -, 404 + )))))) { + 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_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_SRV_RNIS_019_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var HeaderLines 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?c_id=" & oct2char(unichar2oct(PX_C_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_rni_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_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_SRV_RNIS_019_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var HeaderLines 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_NOT_EXISTENT_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( + mw_http_message_body_json( + mw_body_json_rni_problem_details( + mw_problem_details( + -, -, 404 + )))))) { + 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_SRV_RNIS_019_NF + + } // End of group rnis_query_bi_bo + } // End of module AtsMec_RnisAPI_TestCases diff --git a/ttcn/AtsMec/AtsMec_TestControl.ttcn b/ttcn/AtsMec/AtsMec_TestControl.ttcn index ddbcae6..95fee74 100644 --- a/ttcn/AtsMec/AtsMec_TestControl.ttcn +++ b/ttcn/AtsMec/AtsMec_TestControl.ttcn @@ -78,7 +78,17 @@ module AtsMec_TestControl { } if (PICS_RNIS_QUERY) { execute(TC_MEC_SRV_RNIS_016_OK()); - + execute(TC_MEC_SRV_RNIS_016_BR()); + execute(TC_MEC_SRV_RNIS_016_NF()); + execute(TC_MEC_SRV_RNIS_017_OK()); + execute(TC_MEC_SRV_RNIS_017_BR()); + execute(TC_MEC_SRV_RNIS_017_NF()); + execute(TC_MEC_SRV_RNIS_018_OK()); + execute(TC_MEC_SRV_RNIS_018_BR()); + execute(TC_MEC_SRV_RNIS_018_NF()); + execute(TC_MEC_SRV_RNIS_019_OK()); + execute(TC_MEC_SRV_RNIS_019_BR()); + execute(TC_MEC_SRV_RNIS_019_NF()); } } diff --git a/ttcn/LibIts b/ttcn/LibIts index 806e133..1e93108 160000 --- a/ttcn/LibIts +++ b/ttcn/LibIts @@ -1 +1 @@ -Subproject commit 806e133118639e261fc589daeffb078559ca605c +Subproject commit 1e93108a94eaa6f95f5b508194bd0632c11f1a1b diff --git a/ttcn/LibMec/Ams/ttcn/Ams_Templates.ttcn b/ttcn/LibMec/Ams/ttcn/Ams_Templates.ttcn index 974f2d7..e50246d 100644 --- a/ttcn/LibMec/Ams/ttcn/Ams_Templates.ttcn +++ b/ttcn/LibMec/Ams/ttcn/Ams_Templates.ttcn @@ -10,43 +10,41 @@ module Ams_Templates { import from Ams_TypesAndValues all; import from Ams_Pixits all; - template (value) 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 + 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 ) := { - appMobilityServiceId := p_app_mobility_service_id, - registeredAppMobilityService := p_registration_info + 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 := omit, - in String p_app_mobility_service_id + template (present) RegistrationInfos p_registration_info := ?, + template (present) String p_app_mobility_service_id := ? ) := { - appMobilityServiceId := p_app_mobility_service_id, - registeredAppMobilityService := p_registration_info + registeredAppMobilityService := p_registration_info, + appMobilityServiceId := p_app_mobility_service_id } - - - - template (value) RegistrationRequest m_registration_request ( - in template (omit) ServiceConsumerId p_service_consumer_id := omit, - in template (omit) DeviceInformations p_device_info := omit, - in UInt32 p_expire_time + + template (omit) RegistrationRequest m_registration_request ( + in template (omit) ServiceConsumerId p_service_consumer_id := omit, + in template (omit) DeviceInformations p_device_info := omit, + in UInt32 p_expire_time ) := { serviceConsumerId := p_service_consumer_id, deviceInformation := p_device_info, - expiryTime := p_expire_time + expiryTime := p_expire_time } - template (present) RegistrationRequest mw_registration_request ( - in template (present) ServiceConsumerId p_service_consumer_id := omit, - in template (present) DeviceInformations p_device_info := omit, - in UInt32 p_expire_time := omit + 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 := omit, - expiryTime := omit + deviceInformation := p_device_info, + expiryTime := p_expire_time } @@ -60,13 +58,13 @@ module Ams_Templates { expiryTime := p_expire_time } - template (present) RegistrationInfo mw_registration_info ( - in template (present) ServiceConsumerId p_service_consumer_id := omit, - in template (present) DeviceInformations p_device_info := omit, - in UInt32 p_expire_time + template (present) RegistrationInfo mw_registration_info( + template (present) ServiceConsumerId p_service_consumer_id := ?, + template (present) DeviceInformations p_device_info := ?, + template (present) UInt32 p_expire_time ) := { serviceConsumerId := p_service_consumer_id, - deviceInformation := omit, + deviceInformation := p_device_info, expiryTime := p_expire_time } @@ -90,12 +88,12 @@ module Ams_Templates { - template (omit) ServiceConsumerId mw_service_consumer_id ( - in String p_app_instance_id, - in String p_mep_id + template ServiceConsumerId mw_service_consumer_id( + template (present) String p_app_instance_id := ?, + template (present) String p_mep_id := ? ) := { - appInstanceId := omit, - mepId := omit + appInstanceId := p_app_instance_id, + mepId := p_mep_id } diff --git a/ttcn/LibMec/RnisAPI/json/RnisAPI.json b/ttcn/LibMec/RnisAPI/json/RnisAPI.json index f3a79b3..a6c7ee5 100644 --- a/ttcn/LibMec/RnisAPI/json/RnisAPI.json +++ b/ttcn/LibMec/RnisAPI/json/RnisAPI.json @@ -5645,7 +5645,7 @@ "type": "object", "required": [ "appInsId", - "ecgi" + "plmn" ], "properties": { "timeStamp": { @@ -5654,8 +5654,11 @@ "appInsId": { "$ref": "#/definitions/AppInsId" }, - "ecgi": { - "$ref": "#/definitions/Ecgi" + "plmn": { + "type": "array", + "items": { + "$ref": "#/definitions/Plmn" + } } } }, @@ -5703,7 +5706,6 @@ "S1UeInfo": { "type": "object", "required": [ - "tempUeId", "ecgi", "s1BearerInfoDetailed" ], @@ -5739,13 +5741,14 @@ "type": "object", "required": [ "erabId", - "s1EnbInfo" + "enbInfo", + "sGwInfo" ], "properties": { "erabId": { "$ref": "#/definitions/ErabId" }, - "s1EnbInfo": { + "enbInfo": { "$ref": "#/definitions/S1EnbInfo" }, "sGwInfo": { @@ -5962,10 +5965,10 @@ "example": "UE_IPV4_ADDRESS" }, "value": { - "type": "integer", - "format": "int32", + "type": "String", + "format": "String", "description": "Value for the identifier", - "example": 1 + "example": "192.0.0.2" } } }, @@ -5975,8 +5978,11 @@ "qci": { "$ref": "#/definitions/Qci" }, - "qci_information": { - "$ref": "#/definitions/QosInformation" + "qosInformation": { + "type": "array", + "items": { + "$ref": "#/definitions/QosInformation" + } } } }, diff --git a/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_Pixits.ttcn b/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_Pixits.ttcn index f4302fb..3edeabf 100644 --- a/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_Pixits.ttcn +++ b/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_Pixits.ttcn @@ -18,10 +18,18 @@ module RnisAPI_Pixits { modulepar CallbackReference PX_CALLBACK_REFERENCE := "http://meAppClient.example.com/rni/v2/notifications/cell_change/77777"; - modulepar UInt32 PX_ASSOCIATE_ID_VALUE := 1; + modulepar JSON.String PX_ASSOCIATE_ID_VALUE := "192.0.0.2"; modulepar CellId PX_CELL_ID := "0x0800000A"; + modulepar CellId PX_C_ID := "0xFFFFFFFF"; + + modulepar CellId PX_NOT_EXISTENT_CELL_ID := "0x8000099"; + modulepar AppInsId PX_APP_INS_ID := "01"; + modulepar AppInsId PX_APP_ID := "19"; + + modulepar AppInsId PX_NOT_EXISTENT_APP_INS_ID := "99"; + } // End of module RnisAPI_Pixits diff --git a/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_Templates.ttcn b/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_Templates.ttcn index 8c29fd5..8c895d7 100644 --- a/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_Templates.ttcn +++ b/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_Templates.ttcn @@ -72,6 +72,45 @@ module RnisAPI_Templates { subscriptionType := p_subscriptionType } // End of temlate mw_subscription + template (omit) CellChangeSubscription m_cell_change_subscription( + in template (value) CallbackReference p_callbackReference, + in template (value) Link p_links, + in template (value) FilterCriteriaAssocHo p_filterCriteria, + in template (omit) TimeStamp p_expiryDeadline := omit + ) := { + subscriptionType := CELL_CHANGE, + callbackReference := p_callbackReference, + links := p_links, + filterCriteria := p_filterCriteria, + expiryDeadline := p_expiryDeadline + } // End of template m_cell_change_subscription + + template (omit) CellChangeSubscription m_cell_change_subscription_wrong_subscription_type( + in template (value) CallbackReference p_callbackReference, + in template (value) Link p_links, + in template (value) FilterCriteriaAssocHo p_filterCriteria, + in template (omit) TimeStamp p_expiryDeadline := omit + ) modifies m_cell_change_subscription := { + subscriptionType := WRONG_PARAMETER + } // End of template m_cell_change_subscription_wrong_subscription_type + + template CellChangeSubscription mw_cell_change_subscription( + template (present) CallbackReference p_callbackReference := ?, + template (present) Link p_links := ?, + template (present) FilterCriteriaAssocHo p_filterCriteria := ?, + template TimeStamp p_expiryDeadline := * + ) := { + subscriptionType := CELL_CHANGE, + callbackReference := p_callbackReference, + links := p_links, + filterCriteria := p_filterCriteria, + expiryDeadline := p_expiryDeadline + } // End of template mw_cell_change_subscription + + } // End of group subscriptions + + group info_request { + template (value) RabInfo m_rab_info( in template (value) TimeStamp p_timeStamp, in AppInsId p_appInsId, @@ -97,25 +136,69 @@ module RnisAPI_Templates { } // End of temlate mw_rab_info template (value) PlmnInfo m_plmn_info( - in template (value) TimeStamp p_timeStamp, - in AppInsId p_appInsId, - in template (value) Ecgi p_ecgi + in template (value) TimeStamp p_timeStamp, + in AppInsId p_appInsId, + in template (value) Plmns p_plmn ) := { timeStamp := p_timeStamp, appInsId := p_appInsId, - ecgi := p_ecgi + plmn := p_plmn } // End of temlate m_plmn_info template (present) PlmnInfo mw_plmn_info( - template (present) TimeStamp p_timeStamp := ?, - template (present) AppInsId p_appInsId := ?, - template (present) Ecgi p_ecgi := ? + template (present) TimeStamp p_timeStamp := ?, + template (present) AppInsId p_appInsId := ?, + template (present) Plmns p_plmn := ? ) := { timeStamp := p_timeStamp, appInsId := p_appInsId, - ecgi := p_ecgi + plmn := p_plmn } // End of temlate mw_plmn_info + template (value) S1BearerInfo m_s1_bearer_info( + in template (value) TimeStamp p_timeStamp, + in template (value) S1UeInfo p_s1UeInfo + ) := { + timeStamp := p_timeStamp, + s1UeInfo := p_s1UeInfo + } // End of temlate m_s1_bearer_info + + template (present) S1BearerInfo mw_s1_bearer_info( + template (present) TimeStamp p_timeStamp := ?, + template (present) S1UeInfo p_s1UeInfo := ? + ) := { + timeStamp := p_timeStamp, + s1UeInfo := p_s1UeInfo + } // End of temlate mw_s1_bearer_info + + } // End of group info_request + + group sub_types { + + template (value) S1UeInfo_ m_s1_ue_info( + in template (value) TempUeId p_tempUeId, + in template (value) AssociateId p_associateId, + in template (value) Ecgis p_ecgi, + in template (value) S1BearerInfoDetailed p_s1BearerInfoDetailed + ) := { + tempUeId := p_tempUeId, + associateId := p_associateId, + ecgi := p_ecgi, + s1BearerInfoDetailed := p_s1BearerInfoDetailed + } // End of m_s1_ue_info + + template (present) S1UeInfo_ mw_s1_ue_info( + template (present) TempUeId p_tempUeId := ?, + template (present) AssociateId p_associateId := ?, + template (present) Ecgis p_ecgi := ?, + template (present) S1BearerInfoDetailed p_s1BearerInfoDetailed := ? + ) := { + tempUeId := p_tempUeId, + associateId := p_associateId, + ecgi := p_ecgi, + s1BearerInfoDetailed := p_s1BearerInfoDetailed + } // End of mw_s1_ue_info + template (value) TimeStamp m_time_stamp( in UInt32 p_seconds, in UInt32 p_nanoSeconds := 0 @@ -132,138 +215,134 @@ module RnisAPI_Templates { nanoSeconds := p_nanoSeconds } // End of temlate mw_time_stamp - group cell { - - template (omit) CellChangeSubscription m_cell_change_subscription( - in template (value) CallbackReference p_callbackReference, - in template (value) Link p_links, - in template (value) FilterCriteriaAssocHo p_filterCriteria, - in template (omit) TimeStamp p_expiryDeadline := omit - ) := { - subscriptionType := CELL_CHANGE, - callbackReference := p_callbackReference, - links := p_links, - filterCriteria := p_filterCriteria, - expiryDeadline := p_expiryDeadline - } // End of template m_cell_change_subscription - - template (omit) CellChangeSubscription m_cell_change_subscription_wrong_subscription_type( - in template (value) CallbackReference p_callbackReference, - in template (value) Link p_links, - in template (value) FilterCriteriaAssocHo p_filterCriteria, - in template (omit) TimeStamp p_expiryDeadline := omit - ) modifies m_cell_change_subscription := { - subscriptionType := WRONG_PARAMETER - } // End of template m_cell_change_subscription_wrong_subscription_type - - template CellChangeSubscription mw_cell_change_subscription( - template (present) CallbackReference p_callbackReference := ?, - template (present) Link p_links := ?, - template (present) FilterCriteriaAssocHo p_filterCriteria := ?, - template TimeStamp p_expiryDeadline := * - ) := { - subscriptionType := CELL_CHANGE, - callbackReference := p_callbackReference, - links := p_links, - filterCriteria := p_filterCriteria, - expiryDeadline := p_expiryDeadline - } // End of template mw_cell_change_subscription - - template (value) FilterCriteriaAssocHo m_filter_criteria( - in AppInsId p_appInsId, - in template (value) AssociateId p_associateId, - in template (value) Plmn p_plmn, - in template (value) CellId p_cellId, - in HoStatus p_hoStatus - ) := { - appInsId := p_appInsId, - associateId := p_associateId, - plmn := p_plmn, - cellId := p_cellId, - hoStatus := p_hoStatus - } // End of template m_filter_criteria - - template (present) FilterCriteriaAssocHo mw_filter_criteria( - template (present) AppInsId p_appInsId := ?, - template (present) AssociateId p_associateId := ?, - template (present) Plmn p_plmn := ?, - template (present) CellId p_cellId := ?, - template (present) HoStatus p_hoStatus := ? - ) := { - appInsId := p_appInsId, - associateId := p_associateId, - plmn := p_plmn, - cellId := p_cellId, - hoStatus := p_hoStatus - } // End of template mw_filter_criteria - - template (value) CellUserInfo m_cell_user_info( - in template (value) Ecgi p_ecgi, - in template (value) UeInfo p_ueInfo - ) := { - ecgi := p_ecgi, - ueInfo := p_ueInfo - } // End of template m_cell_user_info - - template (present) CellUserInfo mw_cell_user_info( - template (present) Ecgi p_ecgi := ?, - template (present) UeInfo p_ueInfo := ? - ) := { - ecgi := p_ecgi, - ueInfo := p_ueInfo - } // End of template mw_cell_user_info - - template (value) AssociateId_ m_associate_id( - in AssociateId_type p_type_, - in UInt32 p_value_ - ) := { - type_ := p_type_, - value_ := p_value_ - } // End of template m_associate_id - - template (present) AssociateId_ mw_associate_id( - template (present) AssociateId_type p_type_ := ?, - template (present) UInt32 p_value_ := ? - ) := { - type_ := p_type_, - value_ := p_value_ - } // End of template mw_associate_id - - template (value) Ecgi m_ecgi( - in template (value) Plmn p_plmn, - in template (value) CellId p_cellId - ) := { - plmn := p_plmn, - cellId := p_cellId - } // End of template m_ecgi - - template (present) Ecgi mw_ecgi( - in template (present) Plmn p_plmn := ?, - in template (present) CellId p_cellId := ? - ) := { - plmn := p_plmn, - cellId := p_cellId - } // End of template mw_ecgi - - template (value) Plmn m_plmn( - 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 := ? - ) := { - mcc := p_mcc, - mnc := p_mnc - } // End of template mw_plmn - - } // End of group cell + template (value) FilterCriteriaAssocHo m_filter_criteria( + in AppInsId p_appInsId, + in template (value) AssociateId p_associateId, + in template (value) Plmn p_plmn, + in template (value) CellId p_cellId, + in HoStatus p_hoStatus + ) := { + appInsId := p_appInsId, + associateId := p_associateId, + plmn := p_plmn, + cellId := p_cellId, + hoStatus := p_hoStatus + } // End of template m_filter_criteria - } // End of group subscriptions - + template (present) FilterCriteriaAssocHo mw_filter_criteria( + template (present) AppInsId p_appInsId := ?, + template (present) AssociateId p_associateId := ?, + template (present) Plmn p_plmn := ?, + template (present) CellId p_cellId := ?, + template (present) HoStatus p_hoStatus := ? + ) := { + appInsId := p_appInsId, + associateId := p_associateId, + plmn := p_plmn, + cellId := p_cellId, + hoStatus := p_hoStatus + } // End of template mw_filter_criteria + + template (value) CellUserInfo_ m_cell_user_info( + in template (value) Ecgi p_ecgi, + in template (value) UeInfo p_ueInfo + ) := { + ecgi := p_ecgi, + ueInfo := p_ueInfo + } // End of template m_cell_user_info + + template (present) CellUserInfo_ mw_cell_user_info( + template (present) Ecgi p_ecgi := ?, + template (present) UeInfo p_ueInfo := ? + ) := { + ecgi := p_ecgi, + ueInfo := p_ueInfo + } // End of template mw_cell_user_info + + template (value) AssociateId_ m_associate_id( + in AssociateId_type p_type_, + in JSON.String p_value_ + ) := { + type_ := p_type_, + value_ := p_value_ + } // End of template m_associate_id + + template (present) AssociateId_ mw_associate_id( + template (present) AssociateId_type p_type_ := ?, + template (present) JSON.String p_value_ := ? + ) := { + type_ := p_type_, + value_ := p_value_ + } // End of template mw_associate_id + + template (value) Ecgi m_ecgi( + in template (value) Plmn p_plmn, + in template (value) CellId p_cellId + ) := { + plmn := p_plmn, + cellId := p_cellId + } // End of template m_ecgi + + template (present) Ecgi mw_ecgi( + in template (present) Plmn p_plmn := ?, + in template (present) CellId p_cellId := ? + ) := { + plmn := p_plmn, + cellId := p_cellId + } // End of template mw_ecgi + + template (value) Plmn m_plmn( + 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 := ? + ) := { + mcc := p_mcc, + mnc := p_mnc + } // End of template mw_plmn + + template (value) TempUeId_ m_temp_ue_id( + in Mmec p_mmec, + in Mtmsi p_mtmsi + ) := { + mmec := p_mmec, + mtmsi := p_mtmsi + } // End of template m_temp_ue_id + + template (present) TempUeId_ mw_temp_ue_id( + template (present) Mmec p_mmec := ?, + template (present) Mtmsi p_mtmsi := ? + ) := { + mmec := p_mmec, + mtmsi := p_mtmsi + } // End of template mw_temp_ue_id + + template (value) S1BearerInfoDetailed_ m_s1_bearer_info_detailed( + in ErabId p_erabId, + in template (value) S1EnbInfo p_enbInfo, + in template (value) SGwInfo p_sGwInfo + ) := { + erabId := p_erabId, + enbInfo := p_enbInfo, + sGwInfo := p_sGwInfo + } // End of template m_s1_bearer_info_detailed + + template (present) S1BearerInfoDetailed_ mw_s1_bearer_info_detailed( + template (present) ErabId p_erabId := ?, + template (present) S1EnbInfo p_enbInfo := ?, + template (present) SGwInfo p_sGwInfo := ? + ) := { + erabId := p_erabId, + enbInfo := p_enbInfo, + sGwInfo := p_sGwInfo + } // End of template mw_s1_bearer_info_detailed + + } // End of group sub_types } // End of module RnisAPI_Templates diff --git a/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_TypesAndValues.ttcn b/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_TypesAndValues.ttcn index 2e0442d..a11cdf3 100644 --- a/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/RnisAPI/ttcn/RnisAPI_TypesAndValues.ttcn @@ -38,7 +38,7 @@ module RnisAPI_TypesAndValues { type record PlmnInfo { TimeStamp timeStamp optional, AppInsId appInsId, - Ecgi ecgi + Plmns plmn } /** @@ -73,22 +73,23 @@ module RnisAPI_TypesAndValues { * @member ecgi * @member s1BearerInfoDetailed */ - type record S1UeInfo { - TempUeId tempUeId, + type record S1UeInfo_ { + TempUeId tempUeId optional, AssociateId associateId optional, Ecgis 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 s1EnbInfo - * @member sGwInfo + * @member enbInfo S1 bearer information on eNB side + * @member sGwInfo S1 bearer information on GW side */ type record S1BearerInfoDetailed_ { ErabId erabId, - S1EnbInfo s1EnbInfo, + S1EnbInfo enbInfo, SGwInfo sGwInfo } type record of S1BearerInfoDetailed_ S1BearerInfoDetailed; @@ -100,10 +101,11 @@ module RnisAPI_TypesAndValues { * @member mmec MMEC as defined in ETSI TS 136 413 * @member mtmsi M-TMSI as defined in ETSI TS 136 413 */ - type record TempUeId { + type record TempUeId_ { Mmec mmec, Mtmsi mtmsi } + type record of TempUeId_ TempUeId; type JSON.String Mmec; @@ -154,10 +156,11 @@ module RnisAPI_TypesAndValues { * @member ecgi * @member ueInfo */ - type record CellUserInfo { + type record CellUserInfo_ { Ecgi ecgi, UeInfo ueInfo } + type record of CellUserInfo_ CellUserInfo; /** * @desc E-UTRAN CelI Global Identifier as defined in 3GPP TS 36.413 @@ -179,6 +182,7 @@ module RnisAPI_TypesAndValues { 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 @@ -192,7 +196,7 @@ module RnisAPI_TypesAndValues { */ type record UeInfo_ { AssociateId associateId optional, - ErabQosParameters erabInfo + ErabInfo erabInfo } type record of UeInfo_ UeInfo; @@ -203,7 +207,7 @@ module RnisAPI_TypesAndValues { */ type record AssociateId_ { AssociateId_type type_, - UInt32 value_ + JSON.String value_ } with { variant (type_) "name as 'type'"; variant (value_) "name as 'value'"; @@ -214,21 +218,27 @@ module RnisAPI_TypesAndValues { * @desc Numeric value (0-255) corresponding to specified type of identifier */ type enumerated AssociateId_type { - RESERVED, - UE_IPV4_ADDRESS, - UE_IPV6_ADDRESS, - NATED_IP_ADDRESS, - GTP_TEID + RESERVED (0), + UE_IPV4_ADDRESS (1), + UE_IPV6_ADDRESS (2), + NATED_IP_ADDRESS (3), + GTP_TEID (4) } + type record ErabInfo_ { + ErabId erabId, + ErabQosParameters erabQosParameters + } + type record of ErabInfo_ ErabInfo; + /** * @desc * @member qci QoS Class Identifier as defined in TS 23.401 * @member qci_information */ type record ErabQosParameter { - UInt32 qci, - QosInformation qci_information + Qci qci, + QosInformation qosInformation optional } type record of ErabQosParameter ErabQosParameters; @@ -238,18 +248,19 @@ module RnisAPI_TypesAndValues { type UInt32 Qci; /** - * @desc + * @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 */ - type enumerated QosInformation { - erabGbrDl, - erabGbrUl, - erabMbrDl, - erabMbrUl + type record QosInformation_ { + UInt32 erabMbrDl, + UInt32 erabMbrUl, + UInt32 erabGbrDl, + UInt32 erabGbrUl } + type record of QosInformation_ QosInformation; /** * @desc diff --git a/ttcn/patch_lib_http/LibItsHttp_JsonMessageBodyTypes.ttcn b/ttcn/patch_lib_http/LibItsHttp_JsonMessageBodyTypes.ttcn index 58f757c..2775a57 100644 --- a/ttcn/patch_lib_http/LibItsHttp_JsonMessageBodyTypes.ttcn +++ b/ttcn/patch_lib_http/LibItsHttp_JsonMessageBodyTypes.ttcn @@ -8,15 +8,11 @@ module LibItsHttp_JsonMessageBodyTypes { import from RnisAPI_TypesAndValues all; // LibMec/BwManagementApi import from BwManagementAPI_TypesAndValues all; -<<<<<<< HEAD // LibMec/Ams import from Ams_TypesAndValues all; - -======= // LibMec/AppEnablementAPI import from AppEnablementAPI_TypesAndValues all; - ->>>>>>> b55fa1944c45eb362e0dd6ad00f2cda74f727b50 + /** * This file volontary contains a trivial declaration of the type JsonBody. * In accordance with your TTCN-3 module LibItsHttp_JSONTypes, you have to change the JsonBody typing. @@ -25,7 +21,6 @@ module LibItsHttp_JsonMessageBodyTypes { type union JsonBody { // TODO Add here your custom variants -<<<<<<< HEAD UserInfo userInfo, UserList userList, ZoneInfo zoneInfo, @@ -36,34 +31,20 @@ module LibItsHttp_JsonMessageBodyTypes { UeIdentityTagInfo ueIdentityTagInfo, SubscriptionLinkList subscriptionLinkList, CellChangeSubscription cellChangeSubscription, + RabInfo rabInfo, + PlmnInfo plmnInfo, + S1BearerInfo s1BearerInfo, RnisAPI_TypesAndValues.ProblemDetails problemDetails_rnis, BwInfo bwInfo, BwManagementAPI_TypesAndValues.ProblemDetails problemDetails_bw_management, - AppMobilityServiceInfo appMobilityServiceInfo, - Ams_TypesAndValues.ProblemDetails problemDetails_ams, - Ams_TypesAndValues.RegistrationRequest registrationRequest_ams, + TransportInfoList transportInfoList, + TrafficRuleList trafficRuleList, + TrafficRule trafficRule, + AppEnablementAPI_TypesAndValues.ProblemDetails problemDetails_svc_mgmt, + AppMobilityServiceInfo appMobilityServiceInfo, + Ams_TypesAndValues.ProblemDetails problemDetails_ams, + Ams_TypesAndValues.RegistrationRequest registrationRequest_ams, Ams_TypesAndValues.AmsSubscriptionLinkLists subscriptionLinkList_ams, -======= - UserInfo userInfo, - UserList userList, - ZoneInfo zoneInfo, - AccessPointList accessPointList, - UserTrackingSubscription userTrackingSubscription, - ZonalTrafficSubscription zonalTrafficSubscription, - UEidentityAPI_TypesAndValues.ProblemDetails problemDetails_ue_identity, - UeIdentityTagInfo ueIdentityTagInfo, - SubscriptionLinkList subscriptionLinkList, - CellChangeSubscription cellChangeSubscription, - RabInfo rabInfo, - PlmnInfo plmnInfo, - RnisAPI_TypesAndValues.ProblemDetails problemDetails_rni, - BwInfo bwInfo, - BwManagementAPI_TypesAndValues.ProblemDetails problemDetails_bw_management, - TransportInfoList transportInfoList, - TrafficRuleList trafficRuleList, - TrafficRule trafficRule, - AppEnablementAPI_TypesAndValues.ProblemDetails problemDetails_svc_mgmt, ->>>>>>> b55fa1944c45eb362e0dd6ad00f2cda74f727b50 universal charstring raw } with { variant "" diff --git a/ttcn/patch_lib_http/LibItsHttp_JsonTemplates.ttcn b/ttcn/patch_lib_http/LibItsHttp_JsonTemplates.ttcn index 20c1676..b4ddbe3 100644 --- a/ttcn/patch_lib_http/LibItsHttp_JsonTemplates.ttcn +++ b/ttcn/patch_lib_http/LibItsHttp_JsonTemplates.ttcn @@ -9,44 +9,43 @@ * All rights reserved. */ module LibItsHttp_JsonTemplates { -<<<<<<< HEAD - -// LibMec/LocationAPI -import from LocationAPI_TypesAndValues all; -import from LocationAPI_Templates all; -// LibMec/UEidentityAPI -import from UEidentityAPI_TypesAndValues all; -import from UEidentityAPI_Templates all; -// LibMec/RnisAPI -import from RnisAPI_TypesAndValues all; -import from RnisAPI_Templates all; -// LibMec/BwManagementAPI -import from BwManagementAPI_TypesAndValues all; -import from BwManagementAPI_Templates all; + // LibMec/LocationAPI + import from LocationAPI_TypesAndValues all; + import from LocationAPI_Templates all; + // LibMec/UEidentityAPI + import from UEidentityAPI_TypesAndValues all; + import from UEidentityAPI_Templates all; + // LibMec/RnisAPI + import from RnisAPI_TypesAndValues all; + import from RnisAPI_Templates all; + // LibMec/BwManagementAPI + import from BwManagementAPI_TypesAndValues all; + import from BwManagementAPI_Templates all; + // LibMec/AppEnablementAPI + import from AppEnablementAPI_TypesAndValues all; + import from AppEnablementAPI_Templates all; // LibMec/Ams import from Ams_TypesAndValues all; import from Ams_Templates all; + + // TODO Add here your custom RFCs import + + // LibItsHttp + import from LibItsHttp_JsonMessageBodyTypes all; + import from LibItsHttp_JSONTypes all; + + template (value) JsonBody m_json_body_raw( + in template (value) charstring p_raw + ) := { + raw := p_raw + } // End of template m_json_body_raw - -// TODO Add here your custom RFCs import - -// LibItsHttp -import from LibItsHttp_JsonMessageBodyTypes all; -import from LibItsHttp_JSONTypes all; - -template (value) JsonBody m_json_body_raw( - in template (value) charstring p_raw -) := { - raw := p_raw -} // End of template m_json_body_raw - -template (present) JsonBody mw_json_body_raw( - template (present) charstring p_raw := ? -) := { - raw := p_raw -} // End of template mw_json_body_raw - + template (present) JsonBody mw_json_body_raw( + template (present) charstring p_raw := ? + ) := { + raw := p_raw + } // End of template mw_json_body_raw group ams_api { @@ -103,193 +102,6 @@ group ams_api { } // end of group ams api - - -group locarion_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) ZoneInfo p_zone_info - ) := { - zoneInfo := p_zone_info - } // End of template m_body_json_zone_info - - template (present) JsonBody mw_body_json_zone_info( - template (present) ZoneInfo p_zone_info := ? - ) := { - 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_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 - -} // End of group locarion_api - -group ue_identity_api { - - template (value) JsonBody m_body_json_ue_identity_tag_info( - in template (value) UeIdentityTagInfo p_ueIdentityTagInfo - ) := { - 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 - - template (value) JsonBody m_body_json_ue_identity_problem_details( - in template (value) UEidentityAPI_TypesAndValues.ProblemDetails p_problemDetails - ) := { - problemDetails_ue_identity := p_problemDetails - } // End of template m_body_json_ue_identity_problem_details - - template (present) JsonBody mw_body_json_ue_identity_problem_details( - template (present) UEidentityAPI_TypesAndValues.ProblemDetails p_problemDetails := ? - ) := { - problemDetails_ue_identity := p_problemDetails - } // End of template mw_body_json_ue_identity_problem_details - -} // End of group ue_identity_api - -group rnis_subscriptions { - - template (value) JsonBody m_body_json_subscriptions_list( - in template (value) SubscriptionLinkList p_subscriptionLinkList - ) := { - subscriptionLinkList := p_subscriptionLinkList - } // End of template m_body_json_subscriptions_list - - template (present) JsonBody mw_body_json_subscriptions_list( - template (present) 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 - -} // End of group rnis_subscriptions - -group bw_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 - -} // End of group bw_management_api - -======= - - // LibMec/LocationAPI - import from LocationAPI_TypesAndValues all; - import from LocationAPI_Templates all; - // LibMec/UEidentityAPI - import from UEidentityAPI_TypesAndValues all; - import from UEidentityAPI_Templates all; - // LibMec/RnisAPI - import from RnisAPI_TypesAndValues all; - import from RnisAPI_Templates all; - // LibMec/BwManagementAPI - import from BwManagementAPI_TypesAndValues all; - import from BwManagementAPI_Templates all; - // LibMec/AppEnablementAPI - import from AppEnablementAPI_TypesAndValues all; - import from AppEnablementAPI_Templates all; - - // TODO Add here your custom RFCs import - - // LibItsHttp - import from LibItsHttp_JsonMessageBodyTypes all; - import from LibItsHttp_JSONTypes all; - - template (value) JsonBody m_json_body_raw( - in template (value) charstring p_raw - ) := { - raw := p_raw - } // End of template m_json_body_raw - - template (present) JsonBody mw_json_body_raw( - template (present) charstring p_raw := ? - ) := { - raw := p_raw - } // End of template mw_json_body_raw - group locarion_api { template (value) JsonBody m_body_json_user_info( @@ -356,7 +168,7 @@ group bw_management_api { in template (value) ZonalTrafficSubscription p_zonal_traffic_subscription ) := { zonalTrafficSubscription := p_zonal_traffic_subscription - } // End of template m_body_json_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 := ? @@ -444,16 +256,28 @@ group bw_management_api { plmnInfo := p_plmnInfo } // End of template mw_body_json_plmn_info + 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_rni_problem_details( in template (value) RnisAPI_TypesAndValues.ProblemDetails p_problemDetails ) := { - problemDetails_rni := p_problemDetails + problemDetails_rnis := p_problemDetails } // End of template m_body_json_rni_problem_details template (present) JsonBody mw_body_json_rni_problem_details( template (present) RnisAPI_TypesAndValues.ProblemDetails p_problemDetails := ? ) := { - problemDetails_rni := p_problemDetails + problemDetails_rnis := p_problemDetails } // End of template mw_body_json_rni_problem_details } // End of group rnis_subscriptions @@ -526,5 +350,4 @@ group bw_management_api { } // End of group svc_mgmt ->>>>>>> b55fa1944c45eb362e0dd6ad00f2cda74f727b50 } // End of module LibItsHttp_JsonTemplates -- GitLab