Commit 2be74c99 authored by YannGarcia's avatar YannGarcia
Browse files

Finalyze RnisQuery_BV/RnisQuery_BI_BO tests

parent 68867733
......@@ -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 <font color="color:green">To be tested</font>
- TC_MEC_SRV_RNIS_012_OK <font color="color:green">To be tested</font>
- TC_MEC_SRV_RNIS_011_BR <font color="color:green">To be tested</font>
- TC_MEC_SRV_RNIS_012_BR <font color="color:green">To be tested</font>
- TC_MEC_SRV_RNIS_016_OK <font color="color:green">To be tested</font>
- TC_MEC_SRV_RNIS_016_BR <font color="color:green">To be tested</font>
- TC_MEC_SRV_RNIS_016_NF <font color="color:green">To be tested</font>
- TC_MEC_SRV_RNIS_017_OK <font color="color:green">To be tested</font>
- TC_MEC_SRV_RNIS_017_BR <font color="color:green">To be tested</font>
- TC_MEC_SRV_RNIS_017_NF <font color="color:green">To be tested</font>
- TC_MEC_SRV_RNIS_018_OK <font color="color:green">To be tested</font>
- TC_MEC_SRV_RNIS_018_BR <font color="color:green">To be tested</font>
- TC_MEC_SRV_RNIS_018_NF <font color="color:green">To be tested</font>
- TC_MEC_SRV_RNIS_019_OK <font color="color:green">To be tested</font>
- TC_MEC_SRV_RNIS_019_BR <font color="color:green">To be tested</font>
- TC_MEC_SRV_RNIS_019_NF <font color="color:green">To be tested</font>
### SAQ
### SRVSUB
......
......@@ -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 {
......
......@@ -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
......
This diff is collapsed.
......@@ -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());
}
}
......
LibIts @ 1e93108a
Subproject commit 806e133118639e261fc589daeffb078559ca605c
Subproject commit 1e93108a94eaa6f95f5b508194bd0632c11f1a1b
......@@ -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
}
......
......@@ -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"
}
}
}
},
......
......@@ -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
......@@ -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,