diff --git a/TODO.md b/TODO.md
index 0331d0976b28af8e038a24c59d3a188e0c0f5168..a1c5c6eb354ec9e4fa4330108e36c7559dd0ca7c 100644
--- a/TODO.md
+++ b/TODO.md
@@ -46,7 +46,7 @@ Draft ETSI GS MEC 013 V2.0.3 (2018-10)
https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/SRV/UELOC/PlatUeLocationLookup.tplan2
-- TP_MEC_SRV_UELOC_001_OK Done
+- TC_MEC_SRV_UELOC_001_OK Done
- TC_MEC_SRV_UELOC_001_BR To be tested
@@ -54,27 +54,49 @@ https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/SRV/UELO
### UELOCSUB
-### UETAG
+Draft ETSI GS MEC 013 V2.0.3 (2018-10)
-### UETRACKSUB
+https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/remove-401s/Test%20Purposes/SRV/UELOCSUB/PlatUeLocationSubscription.tplan2
+
+- TC_MEC_SRV_UELOCSUB_001_OK Done
+
+- TC_MEC_SRV_UELOCSUB_001_BR Done
-### UeIdentity
+- TC_MEC_SRV_UELOCSUB_002_OK Done
+
+- TC_MEC_SRV_UELOCSUB_002_NF Done
+
+### UETAG
ETSI GS MEC 014 V1.1.1 (2018-02)
-https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/SRV/UeIdentity/PlatUeIdentity.tplan2
+https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/UETAG/PlatUeIdentity.tplan2
+
+- TC_MEC_SRV_UETAG_001_OK To be tested
-- TC_MEC_PLAT_UETAG_001_OK To be tested
+- TC_MEC_SRV_UETAG_001_BR To be tested
-- TC_MEC_PLAT_UETAG_002_OK To be tested
+- TC_MEC_SRV_UETAG_001_NF To be tested
+
+- TC_MEC_SRV_UETAG_002_OK To be tested
+
+- TC_MEC_SRV_UETAG_002_BR To be tested
+
+- TC_MEC_SRV_UETAG_002_NF Done
+
+- TC_MEC_SRV_UETAG_002_PF Done
+
+### UETRACKSUB
+
+Draft ETSI GS MEC 013 V2.0.3 (2018-10)
-- TC_MEC_PLAT_UETAG_003_OK To be tested
+https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/remove-401s/Test%20Purposes/SRV/UETRACKSUB/PlatUeTrackingSubscription.tplan2
-- TC_MEC_PLAT_UETAG_001_BI To be tested
+- TC_MEC_SRV_UETRACKSUB_001_OK To be tested
-- TC_MEC_PLAT_UETAG_002_BI To be tested
+- TC_MEC_SRV_UETRACKSUB_001_BR To be tested
-- TP_MEC_PLAT_UETAG_003_BI Done
+- TC_MEC_SRV_UETRACKSUB_002_OK To be tested
-- TP_MEC_PLAT_UETAG_004_BI Done
+- TC_MEC_SRV_UETRACKSUB_002_NF To be tested
diff --git a/ttcn/AtsMec/AtsMec_LocationAPI_TestCases.ttcn b/ttcn/AtsMec/AtsMec_LocationAPI_TestCases.ttcn
index afc2bbc254d6b24fc2d109cb5378668788587cce..1368df4c513de479a9949c8777fcd7aa14873e9e 100644
--- a/ttcn/AtsMec/AtsMec_LocationAPI_TestCases.ttcn
+++ b/ttcn/AtsMec/AtsMec_LocationAPI_TestCases.ttcn
@@ -229,7 +229,7 @@ module AtsMec_LocationAPI_TestCases {
httpPort.send(
m_http_request(
m_http_request_post(
- "/" & PICS_ROOT_API & PX_ME_APP_Q_USERS_SUB_URI,
+ "/" & PICS_ROOT_API & PX_ME_APP_Q_USERS_LOC_SUB_URI,
v_headers,
m_http_message_body_json(
m_body_json_user_tracking_subscription(
@@ -296,7 +296,7 @@ module AtsMec_LocationAPI_TestCases {
httpPort.send(
m_http_request(
m_http_request_post(
- "/" & PICS_ROOT_API & PX_ME_APP_Q_USERS_SUB_URI,
+ "/" & PICS_ROOT_API & PX_ME_APP_Q_USERS_LOC_SUB_URI,
v_headers,
m_http_message_body_json(
m_body_json_user_tracking_subscription(
@@ -357,7 +357,7 @@ module AtsMec_LocationAPI_TestCases {
httpPort.send(
m_http_request(
m_http_request_delete(
- "/" & PICS_ROOT_API & PX_ME_APP_Q_USERS_SUB_URI & "/" & PX_SUBSCRIPTION_ID, // TODO Shall be extract from Subscription request
+ "/" & PICS_ROOT_API & PX_ME_APP_Q_USERS_LOC_SUB_URI & "/" & PX_SUBSCRIPTION_ID, // TODO Shall be extract from Subscription request
v_headers
)
)
@@ -409,7 +409,7 @@ module AtsMec_LocationAPI_TestCases {
httpPort.send(
m_http_request(
m_http_request_delete(
- "/" & PICS_ROOT_API & PX_ME_APP_Q_USERS_SUB_URI & "/" & PX_SUBSCRIPTION_ID_UNKNOWN, // TODO Shall be extract from Subscription request
+ "/" & PICS_ROOT_API & PX_ME_APP_Q_USERS_LOC_SUB_URI & "/" & PX_SUBSCRIPTION_ID_UNKNOWN, // TODO Shall be extract from Subscription request
v_headers
)
)
@@ -438,4 +438,231 @@ module AtsMec_LocationAPI_TestCases {
} // End of group ueLocSub
+ group ueTrackSub {
+
+ /**
+ * @desc Check that the IUT acknowledges the UE location change subscription request when commanded by a MEC Application and notifies it when the UE changes location
+ * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/remove-401s/Test%20Purposes/SRV/UETRACKSUB/PlatUeTrackingSubscription.tplan2
+ */
+ testcase TC_MEC_SRV_UETRACKSUB_001_OK() runs on HttpComponent system HttpTestAdapter {
+ // Local variables
+ var HeaderLines v_headers;
+
+ // Test control
+ if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) {
+ log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_LOCATION_API_SUPPORTED required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ // Test component configuration
+ f_cf_01_http_up();
+
+ // Test adapter configuration
+
+ // Preamble
+ f_init_default_headers_list(-, -, v_headers);
+ httpPort.send(
+ m_http_request(
+ m_http_request_post(
+ "/" & PICS_ROOT_API & PX_ME_APP_Q_USERS_TRACK_SUB_URI & "/" & PX_SUBSCRIPTION_ID,
+ v_headers
+ )
+ )
+ );
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ tc_ac.start;
+ alt {
+ [] httpPort.receive(
+ mw_http_response(
+ mw_http_response_201_created(
+ mw_http_message_body_json(
+ mw_body_json_user_tracking_subscription(
+ mw_user_tracking_subscription_response(
+ PX_CLIENT_ID,
+ PX_CALLBACK_REF_URL,
+ PX_USER
+ )))))) {
+ log("*** " & testcasename() & ": PASS: IUT successfully responds with a callbackURL ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, 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_UETRACKSUB_001_OK
+
+ /**
+ * @desc Check that the IUT acknowledges the UE location change subscription request when commanded by a MEC Application and notifies it when the UE changes location
+ * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/remove-401s/Test%20Purposes/SRV/UETRACKSUB/PlatUeTrackingSubscription.tplan2
+ */
+ testcase TC_MEC_SRV_UETRACKSUB_001_BR() runs on HttpComponent system HttpTestAdapter {
+ // Local variables
+ var HeaderLines v_headers;
+
+ // Test control
+ if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) {
+ log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_LOCATION_API_SUPPORTED required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ // Test component configuration
+ f_cf_01_http_up();
+
+ // Test adapter configuration
+
+ // Preamble
+ f_init_default_headers_list(-, -, v_headers);
+ httpPort.send(
+ m_http_request(
+ m_http_request_post(
+ "/" & PICS_ROOT_API & PX_ME_APP_Q_USERS_TRACK_SUB_URI,
+ v_headers,
+ m_http_message_body_json(
+ m_body_json_user_tracking_subscription(
+ m_user_tracking_subscription(
+ PX_CLIENT_ID_UNKNOWN,
+ PX_CALLBACK_REF_URL,
+ PX_USER
+ )
+ )
+ )
+ )
+ )
+ );
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ tc_ac.start;
+ alt {
+ [] httpPort.receive(
+ mw_http_response(
+ mw_http_response_400_bad_request
+ )) {
+ log("*** " & testcasename() & ": PASS: IUT successfully responds with 400 Bad Request ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": INCONC: Expected message not received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+ } // End of 'alt' statement
+
+ // Postamble
+ f_cf_01_http_down();
+ } // End of testcase TC_MEC_SRV_UETRACKSUB_001_BR
+
+ /**
+ * @desc Check that the IUT responds with an error when a request for an URI that cannot be mapped to a valid resource URI is sent by a MEC Application
+ * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/remove-401s/Test%20Purposes/SRV/UETRACKSUB/PlatUeTrackingSubscription.tplan2
+ */
+ testcase TC_MEC_SRV_UETRACKSUB_002_OK() runs on HttpComponent system HttpTestAdapter {
+ // Local variables
+ var HeaderLines v_headers;
+
+ // Test control
+ if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) {
+ log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_LOCATION_API_SUPPORTED required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ // Test component configuration
+ f_cf_01_http_up();
+
+ // Test adapter configuration
+
+ // Preamble
+ f_init_default_headers_list(-, -, v_headers);
+ httpPort.send(
+ m_http_request(
+ m_http_request_delete(
+ "/" & PICS_ROOT_API & PX_ME_APP_Q_USERS_TRACK_SUB_URI & "/" & PX_SUBSCRIPTION_ID,
+ v_headers
+ )
+ )
+ );
+ f_selfOrClientSyncAndVerdict(c_prDone, e_success);
+
+ // Test Body
+ tc_ac.start;
+ alt {
+ [] httpPort.receive(
+ mw_http_response(
+ mw_http_response_204_no_content
+ )) {
+ log("*** " & testcasename() & ": PASS: IUT successfully responds 204 No Content ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": INCONC: Expected message not received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+ } // End of 'alt' statement
+
+ // Postamble
+ f_cf_01_http_down();
+ } // End of testcase TC_MEC_SRV_UETRACKSUB_002_OK
+
+ /**
+ * @desc Check that the IUT responds with an error when a request for an URI that cannot be mapped to a valid resource URI is sent by a MEC Application
+ * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/remove-401s/Test%20Purposes/SRV/UETRACKSUB/PlatUeTrackingSubscription.tplan2
+ */
+ testcase TC_MEC_SRV_UETRACKSUB_002_NF() runs on HttpComponent system HttpTestAdapter {
+ // Local variables
+ var HeaderLines v_headers;
+
+ // Test control
+ if (not(PICS_MEC_PLAT) or not(PICS_SERVICES) or not(PICS_LOCATION_API_SUPPORTED)) {
+ log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_SERVICES and PICS_LOCATION_API_SUPPORTED required for executing the TC ***");
+ setverdict(inconc);
+ stop;
+ }
+
+ // Test component configuration
+ f_cf_01_http_up();
+
+ // Test adapter configuration
+
+ // Preamble
+ f_init_default_headers_list(-, -, v_headers);
+ httpPort.send(
+ m_http_request(
+ m_http_request_delete(
+ "/" & PICS_ROOT_API & PX_ME_APP_Q_USERS_TRACK_SUB_URI & "/" & PX_SUBSCRIPTION_ID_UNKNOWN,
+ 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
+ )) {
+ log("*** " & testcasename() & ": PASS: IUT successfully responds 400 Bad Request ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
+ }
+ [] tc_ac.timeout {
+ log("*** " & testcasename() & ": INCONC: Expected message not received ***");
+ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
+ }
+ } // End of 'alt' statement
+
+ // Postamble
+ f_cf_01_http_down();
+ } // End of testcase TC_MEC_SRV_UETRACKSUB_002_NF
+
+ } // End of group ueTrackSub
+
} // End of module AtsMec_LocationAPI_TestCases
diff --git a/ttcn/AtsMec/AtsMec_TestControl.ttcn b/ttcn/AtsMec/AtsMec_TestControl.ttcn
index 856090e61f7f5b5ef4e1dc092f17fbbc1ff4a597..d4689ef1c802b055dc626a33effe23a45b3945aa 100644
--- a/ttcn/AtsMec/AtsMec_TestControl.ttcn
+++ b/ttcn/AtsMec/AtsMec_TestControl.ttcn
@@ -23,24 +23,32 @@ module AtsMec_TestControl {
control {
if (PICS_MEC_PLAT and PICS_SERVICES) {
+ if (PICS_UE_IDENTITY_API_SUPPORTED) {
+ execute(TC_MEC_SRV_UETAG_001_OK());
+ execute(TC_MEC_SRV_UETAG_001_BR());
+ execute(TC_MEC_SRV_UETAG_001_NF());
+ execute(TC_MEC_SRV_UETAG_002_OK());
+ execute(TC_MEC_SRV_UETAG_002_BR());
+ }
if (PICS_LOCATION_API_SUPPORTED) {
execute(TC_MEC_SRV_UELOC_001_OK());
execute(TC_MEC_SRV_UELOC_001_BR());
execute(TC_MEC_SRV_UELOC_001_NF());
- execute(TC_MEC_PLAT_INFLOOK_001_OK());
+
execute(TC_MEC_SRV_UELOCSUB_001_OK());
execute(TC_MEC_SRV_UELOCSUB_001_BR());
execute(TC_MEC_SRV_UELOCSUB_002_OK());
execute(TC_MEC_SRV_UELOCSUB_002_NF());
+
+ execute(TC_MEC_SRV_UETRACKSUB_001_OK());
+ execute(TC_MEC_SRV_UETRACKSUB_001_BR());
+ execute(TC_MEC_SRV_UETRACKSUB_002_OK());
+ execute(TC_MEC_SRV_UETRACKSUB_002_NF());
+
+ execute(TC_MEC_PLAT_INFLOOK_001_OK());
+
execute(TC_MEC_PLAT_RLOC_001_OK());
}
- if (PICS_UE_IDENTITY_API_SUPPORTED) {
- execute(TC_MEC_SRV_UETAG_001_OK());
- execute(TC_MEC_SRV_UETAG_001_BR());
- execute(TC_MEC_SRV_UETAG_001_NF());
- execute(TC_MEC_SRV_UETAG_002_OK());
- execute(TC_MEC_SRV_UETAG_002_BR());
- }
}
if (PICS_RNIS) {
diff --git a/ttcn/LibIts b/ttcn/LibIts
index 4c79dd3fe0dd4559d6481b635fe29d684d342b17..806e133118639e261fc589daeffb078559ca605c 160000
--- a/ttcn/LibIts
+++ b/ttcn/LibIts
@@ -1 +1 @@
-Subproject commit 4c79dd3fe0dd4559d6481b635fe29d684d342b17
+Subproject commit 806e133118639e261fc589daeffb078559ca605c
diff --git a/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn b/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn
index 2bee6e87528b77e813abc96ec6e82bf48a930f1c..6fcf8e10034da2710e3bc72db88e08da85f25876 100644
--- a/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn
+++ b/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn
@@ -6,7 +6,9 @@ module LibMec_Pixits {
modulepar charstring PX_ME_APP_Q_DIST_URI := "/location/v2/subscriptions/distance";
- modulepar charstring PX_ME_APP_Q_USERS_SUB_URI := "/location/v2/subscriptions/userTracking";
+ modulepar charstring PX_ME_APP_Q_USERS_LOC_SUB_URI := "/location/v2/subscriptions/userTracking";
+
+ modulepar charstring PX_ME_APP_Q_USERS_TRACK_SUB_URI := "/location/v2/subscriptions/periodic";
modulepar charstring PX_ME_APP_Q_UE_IDENTITY_ID_URI := "/ui/v2/";