Loading ccsrc/Protocols/Json/json_codec.cc +39 −5 Original line number Diff line number Diff line Loading @@ -23,7 +23,19 @@ int json_codec::encode (const LibItsHttp__JsonMessageBodyTypes::JsonBody& msg, O } else if (msg.ischosen(LibItsHttp__JsonMessageBodyTypes::JsonBody::ALT_userTrackingSubscription)) { const LocationAPI__TypesAndValues::UserTrackingSubscription& user_tracking_subscription = msg.userTrackingSubscription(); user_tracking_subscription.encode(LocationAPI__TypesAndValues::UserTrackingSubscription_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); data = char2oct(CHARSTRING("{\"userTrackingSubscription\": ")) + OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data()) + char2oct(CHARSTRING("}")); data = /*char2oct(CHARSTRING("{\"userTrackingSubscription\": ")) + */OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; } else if (msg.ischosen(LibItsHttp__JsonMessageBodyTypes::JsonBody::ALT_zonalTrafficSubscription)) { const LocationAPI__TypesAndValues::ZonalTrafficSubscription& zonal_traffic_subscription = msg.zonalTrafficSubscription(); zonal_traffic_subscription.encode(LocationAPI__TypesAndValues::ZonalTrafficSubscription_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); data = /*char2oct(CHARSTRING("{\"zonalTrafficSubscription\": ")) + */OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; } else if (msg.ischosen(LibItsHttp__JsonMessageBodyTypes::JsonBody::ALT_circleNotificationSubscription)) { const LocationAPI__TypesAndValues::CircleNotificationSubscription& notif = msg.circleNotificationSubscription(); notif.encode(LocationAPI__TypesAndValues::CircleNotificationSubscription_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); data = /*char2oct(CHARSTRING("{\"circleNotificationSubscription\": ")) + */OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; } else if (msg.ischosen(LibItsHttp__JsonMessageBodyTypes::JsonBody::ALT_distanceNotificationSubscription)) { const LocationAPI__TypesAndValues::DistanceNotificationSubscription& notif = msg.distanceNotificationSubscription(); notif.encode(LocationAPI__TypesAndValues::DistanceNotificationSubscription_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); data = /*char2oct(CHARSTRING("{\"distanceNotificationSubscription\": ")) + */OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; } else if (msg.ischosen(LibItsHttp__JsonMessageBodyTypes::JsonBody::ALT_cellChangeSubscription)) { const RnisAPI__TypesAndValues::CellChangeSubscription& cell_change_subscription = msg.cellChangeSubscription(); cell_change_subscription.encode(RnisAPI__TypesAndValues::CellChangeSubscription_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); Loading Loading @@ -51,7 +63,7 @@ int json_codec::encode (const LibItsHttp__JsonMessageBodyTypes::JsonBody& msg, O } else if (msg.ischosen(LibItsHttp__JsonMessageBodyTypes::JsonBody::ALT_trafficRule)) { const AppEnablementAPI__TypesAndValues::TrafficRule& traffic_rule = msg.trafficRule(); traffic_rule.encode(AppEnablementAPI__TypesAndValues::TrafficRule_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); data = /*char2oct(CHARSTRING("{\"SerAvailabilityNotificationSubscription\": ")) + */OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; data = /*char2oct(CHARSTRING("{\"TrafficRule\": ")) + */OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; } else { loggers::get_instance().error("json_codec::encode: Not supported"); } Loading Loading @@ -93,8 +105,12 @@ int json_codec::decode (const OCTETSTRING& p_data, LibItsHttp__JsonMessageBodyTy loggers::get_instance().log("json_codec::decode: decoding_buffer='%c' / '%s'", str[0], str.c_str()); TTCN_Buffer decoding_buffer(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); if (it->second.find("\"userList\"") != std::string::npos) { // Be careful to the order if (it->second.find("\"UserList\"") != std::string::npos) { // Be careful to the order // TODO To be refined, find("\"userList\"") is not optimal int idx_begin = it->second.find(":"); int idx_end = it->second.rfind("}") - 1; // Remove the last '}' str = it->second.substr(idx_begin + 1, idx_end - idx_begin); TTCN_Buffer decoding_buffer(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); LocationAPI__TypesAndValues::UserList user_list; user_list.decode(LocationAPI__TypesAndValues::UserList_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.userList() = user_list; Loading @@ -111,6 +127,14 @@ int json_codec::decode (const OCTETSTRING& p_data, LibItsHttp__JsonMessageBodyTy LocationAPI__TypesAndValues::UserInfo user_info; user_info.decode(LocationAPI__TypesAndValues::UserInfo_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.userInfo() = user_info; } else if (it->second.find("\"terminalDistance\"") != std::string::npos) { LocationAPI__TypesAndValues::TerminalDistance terminal_distance; terminal_distance.decode(LocationAPI__TypesAndValues::TerminalDistance_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.terminalDistance() = terminal_distance; } else if (it->second.find("\"distanceNotificationSubscription\"") != std::string::npos) { LocationAPI__TypesAndValues::DistanceNotificationSubscription notif; notif.decode(LocationAPI__TypesAndValues::DistanceNotificationSubscription_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.distanceNotificationSubscription() = notif; } else if (it->second.find("\"SubscriptionLinkList\"") != std::string::npos) { // Be careful to the order // TODO To be refined, find("\"accessPointList\"") is not optimal RnisAPI__TypesAndValues::SubscriptionLinkList subscription_link_list; Loading @@ -120,7 +144,7 @@ int json_codec::decode (const OCTETSTRING& p_data, LibItsHttp__JsonMessageBodyTy UEidentityAPI__TypesAndValues::UeIdentityTagInfo ue_identity_tag_info; ue_identity_tag_info.decode(UEidentityAPI__TypesAndValues::UeIdentityTagInfo_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.ueIdentityTagInfo() = ue_identity_tag_info; } else if (it->second.find("\"serInstanceId\"") != std::string::npos) { // Be careful to the order } else if (it->second.find("\"serName\"") != std::string::npos) { // Be careful to the order // TODO To be refined, find("\"accessPointList\"") is not optimal if (it->second[0] == '[') { AppEnablementAPI__TypesAndValues::ServiceInfoList service_info_list; Loading @@ -146,6 +170,16 @@ 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("\"dnsRuleId\"") != std::string::npos) { if (it->second[0] == '[') { AppEnablementAPI__TypesAndValues::DnsRuleList dns_rule_list; dns_rule_list.decode(AppEnablementAPI__TypesAndValues::DnsRuleList_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.dnsRuleList() = dns_rule_list; } else { AppEnablementAPI__TypesAndValues::DnsRule dns_rule; dns_rule.decode(AppEnablementAPI__TypesAndValues::DnsRule_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.dnsRule() = dns_rule; } } else if ((it->second.find("\"appInstanceId\"") != std::string::npos) && (it->second.find("\"subscriptionType\"") != std::string::npos)) { AppEnablementAPI__TypesAndValues::AppTerminationNotificationSubscription app_term; app_term.decode(AppEnablementAPI__TypesAndValues::AppTerminationNotificationSubscription_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); Loading etc/AtsMec/AtsMec_Lewis.cf_ +22 −11 Original line number Diff line number Diff line Loading @@ -17,11 +17,15 @@ LibItsHttp_Pics.PICS_USE_TOKEN_HEADER := true LibMec_Pics.PICS_ROOT_API := "etsi-013" # LibMex_Pixits LibMec_Pixits.PX_ME_APP_Q_ZONE_ID_URI := "/location/v1/zones" LibMec_Pixits.PX_ME_APP_Q_USERS_LIST_URI := "/location/v1/users" LibMec_Pixits.PX_ME_APP_Q_ZONE_ID_URI := "/location/v2/zones" LibMec_Pixits.PX_ME_APP_Q_USERS_LIST_URI := "/location/v2/users" LibMec_Pixits.PX_RNIS_SUBSCRITIONS_URI := "/rni/v1/subscriptions" LibMec_Pixits.PX_RNIS_QUERIES_URI := "/rni/v1/queries" LibMec_Pixits.PX_MEC_SVC_MGMT_APPS_URI := "/mec_service_mgmt/v1/applications" LibMec_Pixits.PX_ME_APP_SUPPORT_URI := "/mec_app_support/v1/applications" LibMec_Pixits.PX_SVC_MGMT_TRANS_URI := "/mec_service_mgmt/v1/transports" LibMec_Pixits.PX_ME_APP_SUPPORT_TIMING_CAPS_URI := "/mec_app_support/v1/timing/timing_caps" LibMec_Pixits.PX_ME_APP_SUPPORT_TIMING_CURRENT_URI := "/mec_app_support/v1/timing/current_time" # Mec-011 AppEnblementAPI AppEnablementAPI_Pixits.PX_APP_INSTANCE_ID := "appInst01" Loading @@ -34,7 +38,7 @@ 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 := 0 AppEnablementAPI_Pixits.PX_TTL := 8 AppEnablementAPI_Pixits.PX_TRAFFIC_RULE_ID := "trafficRuleId01" # Mec-012 RnisAPI Loading Loading @@ -115,28 +119,35 @@ system.httpPort_notif.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server #AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCLOOK_001_OK #AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCLOOK_001_BR #AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCLOOK_001_NF #AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_001_OK #AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_001_BR #AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_002_OK #AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_002_NF #AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_001_OK #AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_001_BR #AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_002_OK #AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_002_NF #AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFLOOK_001_OK #AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFLOOK_001_BR #AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFLOOK_001_NF #AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_001_OK #AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_001_BR #AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_002_OK #AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_002_NF #AtsMec_RadioNodeLocationAPI_TestCases.TP_MEC_SRV_RLOCLOOK_001_OK #AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_RLOCLOOK_001_OK #AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_RLOCLOOK_001_NF #AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_001_OK #AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_001_BR #AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_002_OK #AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_002_NF #AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTLOOK_001_OK #AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTLOOK_001_BR #AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTSUB_001_OK #AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTSUB_001_BR #AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTSUB_002_OK #AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTSUB_002_NF # ETSI GS MEC 012 #AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_011_OK #AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_012_OK #AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_011_BR Loading @@ -153,7 +164,6 @@ system.httpPort_notif.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server #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 Loading @@ -163,6 +173,7 @@ system.httpPort_notif.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server #AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_007_OK #AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_008_OK # ETSI GS MEC 011 #AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_001_OK #AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_001_BR #AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_002_OK Loading ttcn/AtsMec/AtsMec_AppEnablementAPI_TestCases.ttcn +7 −6 Original line number Diff line number Diff line Loading @@ -1324,9 +1324,10 @@ module AtsMec_AppEnablementAPI_TestCases { mw_http_response( mw_http_response_ok( mw_http_message_body_json( mw_body_json_dns_rule_list( { *, mw_dns_rule(PX_DNS_RULE_ID), * } ))))) { mw_body_json_dns_rule( mw_dns_rule( PX_DNS_RULE_ID )))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a DnsRule ***"); Loading Loading @@ -2388,7 +2389,7 @@ module AtsMec_AppEnablementAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( PX_ME_APP_SUPPORT_TIMING_CAPS_URI, "/" & PICS_ROOT_API & PX_ME_APP_SUPPORT_TIMING_CAPS_URI, v_headers ) ) Loading Loading @@ -2623,7 +2624,7 @@ module AtsMec_AppEnablementAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( "/" & PICS_ROOT_API & PX_SVC_MGMT_APP_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/traffic_rules/" & oct2char(unichar2oct(PX_TRAFFIC_RULE_ID, "UTF-8")), "/" & PICS_ROOT_API & PX_ME_APP_SUPPORT_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/traffic_rules/" & oct2char(unichar2oct(PX_TRAFFIC_RULE_ID, "UTF-8")), v_headers ) ) Loading Loading @@ -2681,7 +2682,7 @@ module AtsMec_AppEnablementAPI_TestCases { httpPort.send( m_http_request( m_http_request_post( "/" & PICS_ROOT_API & PX_SVC_MGMT_APP_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/traffic_rules/" & oct2char(unichar2oct(PX_TRAFFIC_RULE_ID, "UTF-8")), "/" & PICS_ROOT_API & PX_ME_APP_SUPPORT_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/traffic_rules/" & oct2char(unichar2oct(PX_TRAFFIC_RULE_ID, "UTF-8")), v_headers, m_http_message_body_json( m_body_json_traffic_rule( Loading ttcn/AtsMec/AtsMec_RadioNodeLocationAPI_TestCases.ttcn +12 −19 Original line number Diff line number Diff line Loading @@ -189,14 +189,14 @@ module AtsMec_RadioNodeLocationAPI_TestCases { httpPort.send( m_http_request( m_http_request_post( "/" & PICS_ROOT_API & oct2char(unichar2oct(PX_UE_AREA_SUB_URI, "UTF-8")), "/" & PICS_ROOT_API & PX_ME_APP_Q_AREA_SUB_URI, v_headers, m_http_message_body_json( m_body_json_circle_notification_subscription( m_circle_notification_subscription( PX_CLIENT_ID, //clientCorrelator PX_AREA_SUB_CALLBACK_URI, // callbackReference PX_IP_ADDRESS // address { PX_IP_ADDRESS } // address ) ) ) Loading @@ -214,10 +214,7 @@ module AtsMec_RadioNodeLocationAPI_TestCases { mw_http_message_body_json( mw_body_json_circle_notification_subscription( mw_circle_notification_subscription( PX_CLIENT_ID, //clientCorrelator PX_AREA_SUB_CALLBACK_URI, // callbackReference PX_IP_ADDRESS // address )))))) -> value v_response { PX_CLIENT_ID )))))) -> value v_response { // TODO how to send this when the UE enters the area? The TP has the IUT doing this immediately. Do we want this or will it be discarded as part of the test? // // MEC 013, clause 7.3.11.3 // the IUT entity sends a vPOST containing, Loading Loading @@ -270,16 +267,14 @@ module AtsMec_RadioNodeLocationAPI_TestCases { httpPort.send( m_http_request( m_http_request_post( "/" & PICS_ROOT_API & oct2char(unichar2oct(PX_UE_AREA_SUB_URI, "UTF-8")), "/" & PICS_ROOT_API & PX_ME_APP_Q_AREA_SUB_URI, v_headers, m_http_message_body_json( m_body_json_circle_notification_subscription( m_circle_notification_subscription( PX_CLIENT_ID, //clientCorrelator // TODO the TP uses a wrong field name to trigger an error response. Do we create a new data structure just for this or // change the test to use another trigger (e.g.: invalid IP address)? PX_CLIENT_ID_UNKNOWN, //clientCorrelator PX_AREA_SUB_CALLBACK_URI, // callbackReference PX_IP_ADDRESS // address { PX_IP_ADDRESS } // address ) ) ) Loading Loading @@ -334,7 +329,7 @@ module AtsMec_RadioNodeLocationAPI_TestCases { httpPort.send( m_http_request( m_http_request_delete( "/" & PICS_ROOT_API & oct2char(unichar2oct(PX_UE_AREA_SUB_URI, "UTF-8")) & oct2char(unichar2oct(PX_SUBSCRIPTION_ID, "UTF-8")), "/" & PICS_ROOT_API & PX_ME_APP_Q_AREA_SUB_URI & "/" & oct2char(unichar2oct(PX_SUBSCRIPTION_ID, "UTF-8")), v_headers ) ) Loading Loading @@ -388,7 +383,7 @@ module AtsMec_RadioNodeLocationAPI_TestCases { httpPort.send( m_http_request( m_http_request_delete( "/" & PICS_ROOT_API & oct2char(unichar2oct(PX_UE_AREA_SUB_URI, "UTF-8")) & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_ID, "UTF-8")), "/" & PICS_ROOT_API & PX_ME_APP_Q_AREA_SUB_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_ID, "UTF-8")), v_headers ) ) Loading Loading @@ -1091,11 +1086,9 @@ module AtsMec_RadioNodeLocationAPI_TestCases { m_http_message_body_json( m_body_json_circle_notification_subscription( m_circle_notification_subscription( PX_CLIENT_ID, //clientCorrelator // TODO the TP uses a wrong field name to trigger an error response. Do we create a new data structure just for this or // change the test to use another trigger? PX_CLIENT_ID_UNKNOWN, //clientCorrelator PX_TRAFFIC_SUB_CALLBACK_URI, // callbackReference PX_ZONE_ID // zoneId { PX_IP_ADDRESS } // address ) ) ) Loading ttcn/LibMec/AppEna/ttcn/AppEnablementAPI_Pixits.ttcn +6 −6 Original line number Diff line number Diff line Loading @@ -25,13 +25,13 @@ module AppEnablementAPI_Pixits { modulepar SubscriptionType PX_NON_EXISTENT_APP_TERM_NOTIF_SUBSCRIPTION := ""; modulepar AppTerminationNotificationSubscription_CallbackReference PX_APP_TERM_NOTIF_CALLBACK_URI := ""; modulepar AppTerminationNotificationSubscription_CallbackReference PX_APP_TERM_NOTIF_CALLBACK_URI := "http://www.etsi.org"; modulepar Href PX_HREF := ""; modulepar Href PX_HREF := "http://www.etsi.org"; modulepar Href PX_SUBSCRIPTION_ID := ""; modulepar Href PX_SUBSCRIPTION_ID := "subscription123"; modulepar Href PX_NON_EXISTENT_SUBSCRIPTION_ID := ""; modulepar Href PX_NON_EXISTENT_SUBSCRIPTION_ID := "subscription666"; modulepar DnsRule_Id PX_DNS_RULE_ID := "route2home"; Loading @@ -45,11 +45,11 @@ module AppEnablementAPI_Pixits { modulepar DnsRule_IpAddress PX_INVALID_IP_ADDRESS := "10.10.0.255"; modulepar Ttl PX_TTL := 0; modulepar Ttl PX_TTL := 8; modulepar DnsRule_State PX_DNS_INVALID_STATE := UNKNOWN_VALUE; modulepar SerAvailabilityNotificationSubscription_CallbackReference PX_SRV_AVAIL_NOTIF_CALLBACK_URI := ""; modulepar SerAvailabilityNotificationSubscription_CallbackReference PX_SRV_AVAIL_NOTIF_CALLBACK_URI := "http://www.etsi.org"; modulepar TrafficRule_Id PX_TRAFFIC_RULE_ID := "trafficRuleId01"; Loading Loading
ccsrc/Protocols/Json/json_codec.cc +39 −5 Original line number Diff line number Diff line Loading @@ -23,7 +23,19 @@ int json_codec::encode (const LibItsHttp__JsonMessageBodyTypes::JsonBody& msg, O } else if (msg.ischosen(LibItsHttp__JsonMessageBodyTypes::JsonBody::ALT_userTrackingSubscription)) { const LocationAPI__TypesAndValues::UserTrackingSubscription& user_tracking_subscription = msg.userTrackingSubscription(); user_tracking_subscription.encode(LocationAPI__TypesAndValues::UserTrackingSubscription_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); data = char2oct(CHARSTRING("{\"userTrackingSubscription\": ")) + OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data()) + char2oct(CHARSTRING("}")); data = /*char2oct(CHARSTRING("{\"userTrackingSubscription\": ")) + */OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; } else if (msg.ischosen(LibItsHttp__JsonMessageBodyTypes::JsonBody::ALT_zonalTrafficSubscription)) { const LocationAPI__TypesAndValues::ZonalTrafficSubscription& zonal_traffic_subscription = msg.zonalTrafficSubscription(); zonal_traffic_subscription.encode(LocationAPI__TypesAndValues::ZonalTrafficSubscription_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); data = /*char2oct(CHARSTRING("{\"zonalTrafficSubscription\": ")) + */OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; } else if (msg.ischosen(LibItsHttp__JsonMessageBodyTypes::JsonBody::ALT_circleNotificationSubscription)) { const LocationAPI__TypesAndValues::CircleNotificationSubscription& notif = msg.circleNotificationSubscription(); notif.encode(LocationAPI__TypesAndValues::CircleNotificationSubscription_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); data = /*char2oct(CHARSTRING("{\"circleNotificationSubscription\": ")) + */OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; } else if (msg.ischosen(LibItsHttp__JsonMessageBodyTypes::JsonBody::ALT_distanceNotificationSubscription)) { const LocationAPI__TypesAndValues::DistanceNotificationSubscription& notif = msg.distanceNotificationSubscription(); notif.encode(LocationAPI__TypesAndValues::DistanceNotificationSubscription_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); data = /*char2oct(CHARSTRING("{\"distanceNotificationSubscription\": ")) + */OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; } else if (msg.ischosen(LibItsHttp__JsonMessageBodyTypes::JsonBody::ALT_cellChangeSubscription)) { const RnisAPI__TypesAndValues::CellChangeSubscription& cell_change_subscription = msg.cellChangeSubscription(); cell_change_subscription.encode(RnisAPI__TypesAndValues::CellChangeSubscription_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); Loading Loading @@ -51,7 +63,7 @@ int json_codec::encode (const LibItsHttp__JsonMessageBodyTypes::JsonBody& msg, O } else if (msg.ischosen(LibItsHttp__JsonMessageBodyTypes::JsonBody::ALT_trafficRule)) { const AppEnablementAPI__TypesAndValues::TrafficRule& traffic_rule = msg.trafficRule(); traffic_rule.encode(AppEnablementAPI__TypesAndValues::TrafficRule_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); data = /*char2oct(CHARSTRING("{\"SerAvailabilityNotificationSubscription\": ")) + */OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; data = /*char2oct(CHARSTRING("{\"TrafficRule\": ")) + */OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; } else { loggers::get_instance().error("json_codec::encode: Not supported"); } Loading Loading @@ -93,8 +105,12 @@ int json_codec::decode (const OCTETSTRING& p_data, LibItsHttp__JsonMessageBodyTy loggers::get_instance().log("json_codec::decode: decoding_buffer='%c' / '%s'", str[0], str.c_str()); TTCN_Buffer decoding_buffer(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); if (it->second.find("\"userList\"") != std::string::npos) { // Be careful to the order if (it->second.find("\"UserList\"") != std::string::npos) { // Be careful to the order // TODO To be refined, find("\"userList\"") is not optimal int idx_begin = it->second.find(":"); int idx_end = it->second.rfind("}") - 1; // Remove the last '}' str = it->second.substr(idx_begin + 1, idx_end - idx_begin); TTCN_Buffer decoding_buffer(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); LocationAPI__TypesAndValues::UserList user_list; user_list.decode(LocationAPI__TypesAndValues::UserList_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.userList() = user_list; Loading @@ -111,6 +127,14 @@ int json_codec::decode (const OCTETSTRING& p_data, LibItsHttp__JsonMessageBodyTy LocationAPI__TypesAndValues::UserInfo user_info; user_info.decode(LocationAPI__TypesAndValues::UserInfo_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.userInfo() = user_info; } else if (it->second.find("\"terminalDistance\"") != std::string::npos) { LocationAPI__TypesAndValues::TerminalDistance terminal_distance; terminal_distance.decode(LocationAPI__TypesAndValues::TerminalDistance_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.terminalDistance() = terminal_distance; } else if (it->second.find("\"distanceNotificationSubscription\"") != std::string::npos) { LocationAPI__TypesAndValues::DistanceNotificationSubscription notif; notif.decode(LocationAPI__TypesAndValues::DistanceNotificationSubscription_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.distanceNotificationSubscription() = notif; } else if (it->second.find("\"SubscriptionLinkList\"") != std::string::npos) { // Be careful to the order // TODO To be refined, find("\"accessPointList\"") is not optimal RnisAPI__TypesAndValues::SubscriptionLinkList subscription_link_list; Loading @@ -120,7 +144,7 @@ int json_codec::decode (const OCTETSTRING& p_data, LibItsHttp__JsonMessageBodyTy UEidentityAPI__TypesAndValues::UeIdentityTagInfo ue_identity_tag_info; ue_identity_tag_info.decode(UEidentityAPI__TypesAndValues::UeIdentityTagInfo_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.ueIdentityTagInfo() = ue_identity_tag_info; } else if (it->second.find("\"serInstanceId\"") != std::string::npos) { // Be careful to the order } else if (it->second.find("\"serName\"") != std::string::npos) { // Be careful to the order // TODO To be refined, find("\"accessPointList\"") is not optimal if (it->second[0] == '[') { AppEnablementAPI__TypesAndValues::ServiceInfoList service_info_list; Loading @@ -146,6 +170,16 @@ 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("\"dnsRuleId\"") != std::string::npos) { if (it->second[0] == '[') { AppEnablementAPI__TypesAndValues::DnsRuleList dns_rule_list; dns_rule_list.decode(AppEnablementAPI__TypesAndValues::DnsRuleList_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.dnsRuleList() = dns_rule_list; } else { AppEnablementAPI__TypesAndValues::DnsRule dns_rule; dns_rule.decode(AppEnablementAPI__TypesAndValues::DnsRule_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.dnsRule() = dns_rule; } } else if ((it->second.find("\"appInstanceId\"") != std::string::npos) && (it->second.find("\"subscriptionType\"") != std::string::npos)) { AppEnablementAPI__TypesAndValues::AppTerminationNotificationSubscription app_term; app_term.decode(AppEnablementAPI__TypesAndValues::AppTerminationNotificationSubscription_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); Loading
etc/AtsMec/AtsMec_Lewis.cf_ +22 −11 Original line number Diff line number Diff line Loading @@ -17,11 +17,15 @@ LibItsHttp_Pics.PICS_USE_TOKEN_HEADER := true LibMec_Pics.PICS_ROOT_API := "etsi-013" # LibMex_Pixits LibMec_Pixits.PX_ME_APP_Q_ZONE_ID_URI := "/location/v1/zones" LibMec_Pixits.PX_ME_APP_Q_USERS_LIST_URI := "/location/v1/users" LibMec_Pixits.PX_ME_APP_Q_ZONE_ID_URI := "/location/v2/zones" LibMec_Pixits.PX_ME_APP_Q_USERS_LIST_URI := "/location/v2/users" LibMec_Pixits.PX_RNIS_SUBSCRITIONS_URI := "/rni/v1/subscriptions" LibMec_Pixits.PX_RNIS_QUERIES_URI := "/rni/v1/queries" LibMec_Pixits.PX_MEC_SVC_MGMT_APPS_URI := "/mec_service_mgmt/v1/applications" LibMec_Pixits.PX_ME_APP_SUPPORT_URI := "/mec_app_support/v1/applications" LibMec_Pixits.PX_SVC_MGMT_TRANS_URI := "/mec_service_mgmt/v1/transports" LibMec_Pixits.PX_ME_APP_SUPPORT_TIMING_CAPS_URI := "/mec_app_support/v1/timing/timing_caps" LibMec_Pixits.PX_ME_APP_SUPPORT_TIMING_CURRENT_URI := "/mec_app_support/v1/timing/current_time" # Mec-011 AppEnblementAPI AppEnablementAPI_Pixits.PX_APP_INSTANCE_ID := "appInst01" Loading @@ -34,7 +38,7 @@ 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 := 0 AppEnablementAPI_Pixits.PX_TTL := 8 AppEnablementAPI_Pixits.PX_TRAFFIC_RULE_ID := "trafficRuleId01" # Mec-012 RnisAPI Loading Loading @@ -115,28 +119,35 @@ system.httpPort_notif.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server #AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCLOOK_001_OK #AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCLOOK_001_BR #AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCLOOK_001_NF #AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_001_OK #AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_001_BR #AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_002_OK #AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_002_NF #AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_001_OK #AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_001_BR #AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_002_OK #AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_002_NF #AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFLOOK_001_OK #AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFLOOK_001_BR #AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFLOOK_001_NF #AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_001_OK #AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_001_BR #AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_002_OK #AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_002_NF #AtsMec_RadioNodeLocationAPI_TestCases.TP_MEC_SRV_RLOCLOOK_001_OK #AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_RLOCLOOK_001_OK #AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_RLOCLOOK_001_NF #AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_001_OK #AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_001_BR #AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_002_OK #AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_002_NF #AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTLOOK_001_OK #AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTLOOK_001_BR #AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTSUB_001_OK #AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTSUB_001_BR #AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTSUB_002_OK #AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTSUB_002_NF # ETSI GS MEC 012 #AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_011_OK #AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_012_OK #AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_011_BR Loading @@ -153,7 +164,6 @@ system.httpPort_notif.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server #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 Loading @@ -163,6 +173,7 @@ system.httpPort_notif.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server #AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_007_OK #AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_008_OK # ETSI GS MEC 011 #AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_001_OK #AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_001_BR #AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_002_OK Loading
ttcn/AtsMec/AtsMec_AppEnablementAPI_TestCases.ttcn +7 −6 Original line number Diff line number Diff line Loading @@ -1324,9 +1324,10 @@ module AtsMec_AppEnablementAPI_TestCases { mw_http_response( mw_http_response_ok( mw_http_message_body_json( mw_body_json_dns_rule_list( { *, mw_dns_rule(PX_DNS_RULE_ID), * } ))))) { mw_body_json_dns_rule( mw_dns_rule( PX_DNS_RULE_ID )))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: IUT successfully responds with a DnsRule ***"); Loading Loading @@ -2388,7 +2389,7 @@ module AtsMec_AppEnablementAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( PX_ME_APP_SUPPORT_TIMING_CAPS_URI, "/" & PICS_ROOT_API & PX_ME_APP_SUPPORT_TIMING_CAPS_URI, v_headers ) ) Loading Loading @@ -2623,7 +2624,7 @@ module AtsMec_AppEnablementAPI_TestCases { httpPort.send( m_http_request( m_http_request_get( "/" & PICS_ROOT_API & PX_SVC_MGMT_APP_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/traffic_rules/" & oct2char(unichar2oct(PX_TRAFFIC_RULE_ID, "UTF-8")), "/" & PICS_ROOT_API & PX_ME_APP_SUPPORT_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/traffic_rules/" & oct2char(unichar2oct(PX_TRAFFIC_RULE_ID, "UTF-8")), v_headers ) ) Loading Loading @@ -2681,7 +2682,7 @@ module AtsMec_AppEnablementAPI_TestCases { httpPort.send( m_http_request( m_http_request_post( "/" & PICS_ROOT_API & PX_SVC_MGMT_APP_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/traffic_rules/" & oct2char(unichar2oct(PX_TRAFFIC_RULE_ID, "UTF-8")), "/" & PICS_ROOT_API & PX_ME_APP_SUPPORT_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")) & "/traffic_rules/" & oct2char(unichar2oct(PX_TRAFFIC_RULE_ID, "UTF-8")), v_headers, m_http_message_body_json( m_body_json_traffic_rule( Loading
ttcn/AtsMec/AtsMec_RadioNodeLocationAPI_TestCases.ttcn +12 −19 Original line number Diff line number Diff line Loading @@ -189,14 +189,14 @@ module AtsMec_RadioNodeLocationAPI_TestCases { httpPort.send( m_http_request( m_http_request_post( "/" & PICS_ROOT_API & oct2char(unichar2oct(PX_UE_AREA_SUB_URI, "UTF-8")), "/" & PICS_ROOT_API & PX_ME_APP_Q_AREA_SUB_URI, v_headers, m_http_message_body_json( m_body_json_circle_notification_subscription( m_circle_notification_subscription( PX_CLIENT_ID, //clientCorrelator PX_AREA_SUB_CALLBACK_URI, // callbackReference PX_IP_ADDRESS // address { PX_IP_ADDRESS } // address ) ) ) Loading @@ -214,10 +214,7 @@ module AtsMec_RadioNodeLocationAPI_TestCases { mw_http_message_body_json( mw_body_json_circle_notification_subscription( mw_circle_notification_subscription( PX_CLIENT_ID, //clientCorrelator PX_AREA_SUB_CALLBACK_URI, // callbackReference PX_IP_ADDRESS // address )))))) -> value v_response { PX_CLIENT_ID )))))) -> value v_response { // TODO how to send this when the UE enters the area? The TP has the IUT doing this immediately. Do we want this or will it be discarded as part of the test? // // MEC 013, clause 7.3.11.3 // the IUT entity sends a vPOST containing, Loading Loading @@ -270,16 +267,14 @@ module AtsMec_RadioNodeLocationAPI_TestCases { httpPort.send( m_http_request( m_http_request_post( "/" & PICS_ROOT_API & oct2char(unichar2oct(PX_UE_AREA_SUB_URI, "UTF-8")), "/" & PICS_ROOT_API & PX_ME_APP_Q_AREA_SUB_URI, v_headers, m_http_message_body_json( m_body_json_circle_notification_subscription( m_circle_notification_subscription( PX_CLIENT_ID, //clientCorrelator // TODO the TP uses a wrong field name to trigger an error response. Do we create a new data structure just for this or // change the test to use another trigger (e.g.: invalid IP address)? PX_CLIENT_ID_UNKNOWN, //clientCorrelator PX_AREA_SUB_CALLBACK_URI, // callbackReference PX_IP_ADDRESS // address { PX_IP_ADDRESS } // address ) ) ) Loading Loading @@ -334,7 +329,7 @@ module AtsMec_RadioNodeLocationAPI_TestCases { httpPort.send( m_http_request( m_http_request_delete( "/" & PICS_ROOT_API & oct2char(unichar2oct(PX_UE_AREA_SUB_URI, "UTF-8")) & oct2char(unichar2oct(PX_SUBSCRIPTION_ID, "UTF-8")), "/" & PICS_ROOT_API & PX_ME_APP_Q_AREA_SUB_URI & "/" & oct2char(unichar2oct(PX_SUBSCRIPTION_ID, "UTF-8")), v_headers ) ) Loading Loading @@ -388,7 +383,7 @@ module AtsMec_RadioNodeLocationAPI_TestCases { httpPort.send( m_http_request( m_http_request_delete( "/" & PICS_ROOT_API & oct2char(unichar2oct(PX_UE_AREA_SUB_URI, "UTF-8")) & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_ID, "UTF-8")), "/" & PICS_ROOT_API & PX_ME_APP_Q_AREA_SUB_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_ID, "UTF-8")), v_headers ) ) Loading Loading @@ -1091,11 +1086,9 @@ module AtsMec_RadioNodeLocationAPI_TestCases { m_http_message_body_json( m_body_json_circle_notification_subscription( m_circle_notification_subscription( PX_CLIENT_ID, //clientCorrelator // TODO the TP uses a wrong field name to trigger an error response. Do we create a new data structure just for this or // change the test to use another trigger? PX_CLIENT_ID_UNKNOWN, //clientCorrelator PX_TRAFFIC_SUB_CALLBACK_URI, // callbackReference PX_ZONE_ID // zoneId { PX_IP_ADDRESS } // address ) ) ) Loading
ttcn/LibMec/AppEna/ttcn/AppEnablementAPI_Pixits.ttcn +6 −6 Original line number Diff line number Diff line Loading @@ -25,13 +25,13 @@ module AppEnablementAPI_Pixits { modulepar SubscriptionType PX_NON_EXISTENT_APP_TERM_NOTIF_SUBSCRIPTION := ""; modulepar AppTerminationNotificationSubscription_CallbackReference PX_APP_TERM_NOTIF_CALLBACK_URI := ""; modulepar AppTerminationNotificationSubscription_CallbackReference PX_APP_TERM_NOTIF_CALLBACK_URI := "http://www.etsi.org"; modulepar Href PX_HREF := ""; modulepar Href PX_HREF := "http://www.etsi.org"; modulepar Href PX_SUBSCRIPTION_ID := ""; modulepar Href PX_SUBSCRIPTION_ID := "subscription123"; modulepar Href PX_NON_EXISTENT_SUBSCRIPTION_ID := ""; modulepar Href PX_NON_EXISTENT_SUBSCRIPTION_ID := "subscription666"; modulepar DnsRule_Id PX_DNS_RULE_ID := "route2home"; Loading @@ -45,11 +45,11 @@ module AppEnablementAPI_Pixits { modulepar DnsRule_IpAddress PX_INVALID_IP_ADDRESS := "10.10.0.255"; modulepar Ttl PX_TTL := 0; modulepar Ttl PX_TTL := 8; modulepar DnsRule_State PX_DNS_INVALID_STATE := UNKNOWN_VALUE; modulepar SerAvailabilityNotificationSubscription_CallbackReference PX_SRV_AVAIL_NOTIF_CALLBACK_URI := ""; modulepar SerAvailabilityNotificationSubscription_CallbackReference PX_SRV_AVAIL_NOTIF_CALLBACK_URI := "http://www.etsi.org"; modulepar TrafficRule_Id PX_TRAFFIC_RULE_ID := "trafficRuleId01"; Loading