From d03030e877dbd6e849418b372655bd5b04ebf3dc Mon Sep 17 00:00:00 2001 From: Jorge Moratinos Salcines <jorge.moratinossalcines@telefonica.com> Date: Mon, 13 Jan 2025 17:55:01 +0100 Subject: [PATCH] New api status tests --- doc/releasenotes.md | 4 +- .../testplan/api_events_service/README.md | 2 +- doc/testing/testplan/api_status/README.md | 1150 +++++++++++++++-- .../testplan/vendor_extensibility/README.md | 11 +- 4 files changed, 1067 insertions(+), 100 deletions(-) diff --git a/doc/releasenotes.md b/doc/releasenotes.md index 87b6740..d45151e 100644 --- a/doc/releasenotes.md +++ b/doc/releasenotes.md @@ -221,5 +221,5 @@ This Release also includes a Robot Test Suite for all those services and a Postm [OCF Event test plan documentation]: https://ocf.etsi.org/documentation/latest/testing/testplan/api_events_service/ "OCF Event test plan documentation" [OCF Registration Flow]: https://ocf.etsi.org/documentation/latest/testing/testplan/common_operations/ "OCF Registration Flow" [New Registration Demo]: https://www.youtube.com/watch?v=sn-tN6eRvv8 "New Registration Demo" -[CICD Wiki]: [https://](https://labs.etsi.org/rep/ocf/community/-/wikis/OCF-CICD) "CI/CD Wiki" -[Upgrade Release 17 to 18 Wiki]: [https://](https://labs.etsi.org/rep/ocf/community/-/wikis/?¿?¿?¿?¿?) "Upgrade Release 17 to 18 Wiki" +[CICD Wiki]: https://labs.etsi.org/rep/ocf/community/-/wikis/OCF-CICD "CI/CD Wiki" +[Upgrade Release 17 to 18 Wiki]: https://labs.etsi.org/rep/ocf/community/-/wikis/?¿?¿?¿?¿? "Upgrade Release 17 to 18 Wiki" diff --git a/doc/testing/testplan/api_events_service/README.md b/doc/testing/testplan/api_events_service/README.md index bad8fba..6ecb183 100644 --- a/doc/testing/testplan/api_events_service/README.md +++ b/doc/testing/testplan/api_events_service/README.md @@ -1318,6 +1318,6 @@ At this documentation you will have all information and related files and exampl [log entry request body]: ../api_logging_service/invocation_log.json "Log Request Body" [put register body]: ./invoker_details_put_example.json "API Invoker Update Request" [service security body]: ../api_security_service/service_security.json "Service Security Request" -[security notification body]: ./security_notification.json "Security Notification Request" +[security notification body]: ../api_security_service/security_notification.json "Security Notification Request" [Return To All Test Plans]: ../README.md diff --git a/doc/testing/testplan/api_status/README.md b/doc/testing/testplan/api_status/README.md index 2f6b294..4938884 100644 --- a/doc/testing/testplan/api_status/README.md +++ b/doc/testing/testplan/api_status/README.md @@ -1,6 +1,7 @@ # Test Plan for API Status Feature At this documentation you will have all information and related files and examples of test plan for this feature. +--- ## Test Case 1: Publish without apiStatus feature receive eventDetails with serviceAPIDescription **Test ID**: ***api_status-1*** @@ -17,11 +18,860 @@ At this documentation you will have all information and related files and exampl * **Mock Server is clean.** **Execution Steps**: + + 1. Register Invoker and Onboard Invoker at CCF. + 2. Register Provider at CCF with 2 aefs. + 3. Subscribe to **SERVICE_API_AVAILABLE** and **SERVICE_API_UNAVAILABLE**. ***Enhanced_event_report*** and ***apiStatusMonitoring*** **active** at supported features (binary 1100-> string **C**) + 4. Publish Service API at CCF: + 1. Supported Features with apiStatusMonitoring flag inactive (binary 0 0000 0000 -> string **000**) + 2. This API not includes "API Status" information at **service API Description**. + 5. Discover Service APIs by Invoker + 1. includes filter by query parameter **aef-id** + 6. Provider remove published API. + +**Information of Test**: + + 1. Perform [Invoker Onboarding] + 2. Perform [Provider Registration] with 2 aefs + 3. Event Subscription to SERVICE_API_AVAILABLE and SERVICE_API_UNAVAILABLE of provider previously registered: + 1. Send **POST** to **https://{CAPIF_HOSTNAME}/capif-events/v1/{subscriberId}/subscriptions** + 2. body [event subscription request body] with: + 1. events: **['SERVICE_API_AVAILABLE','SERVICE_API_UNAVAILABLE']** + 2. supportedFeatures: binary 1100 -> string **C** + 3. Use **Invoker Certificate** + 4. Publish Service API at CCF: + * Send **POST** to ccf_publish_url **https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis** + * body [service api description] with **service_1** and **service_2** apiNames and realted with aefId1 and aefId2. + * supportedFeatures **000** + * 2 profiles, one with each aef. + * Use **APF Certificate** + 5. Request Discover Published APIs: + * Send **GET** to **https://{CAPIF_HOSTNAME}/service-apis/v1/allServiceAPIs?api-invoker-id={apiInvokerId}&aef-id=${aefId}** + * Param api-invoker-id is mandatory + * Use **Invoker Certificate** + 6. Remove published Service API: + * Send **DELETE** to resource URL **https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis/{SERVICE_API_ID}** + * Use **APF Certificate** + +**Expected Result**: + + 1. Response to Onboard request must accomplish: + 1. **201 Created** + 2. Response Body must follow **APIInvokerEnrolmentDetails** data structure with: + * apiInvokerId + * onboardingInformation->apiInvokerCertificate must contain the public key signed. + 3. Response Header **Location** must be received with URI to new resource created, following this structure: **{apiRoot}/api-invoker-management/{apiVersion}/onboardedInvokers/{onboardingId}** + 2. Response to Event Subscription must accomplish: + 1. **201 Created** + 2. The URI of the created resource shall be returned in the "Location" HTTP header, following this structure: **{apiRoot}/capif-events/{apiVersion}/{subscriberId}/subscriptions/{subscriptionId}** + 3. Response Body must follow **EventSubscription** data structure. + 3. Response to Publish request must accomplish: + 1. **201 Created** + 2. Response Body must follow **ServiceAPIDescription** data structure with: + * apiId + * 2 profiles with: + * resourceName resource_1 and aefId1 + * resourceName resource_2 and aefId2 + 3. Response Header **Location** must be received with URI to new resource created, following this structure: **{apiRoot}/published-apis/v1/{apfId}/service-apis/{serviceApiId}** + 4. Response to Discover Request By Invoker: + 1. **200 OK** response. + 2. Response body must follow **DiscoveredAPIs** data structure: + * Check if DiscoveredAPIs contains the API Published previously + * Check if **NOT** contains the **apiStatus** keys + 5. Response to Remove published Service API at CCF: + 1. **204 No Content** + 6. Mock Server received messages must accomplish: + 1. **Two Events have been received**. + 2. Validate received events follow **EventNotification** data structure, with **apiIds** and **serviceAPIDescription** in **eventDetail** parameter. + 1. One should be **SERVICE_API_AVAILABLE**. + 2. The other one must be **SERVICE_API_UNAVAILABLE**. + +--- +## Test Case 2: Publish without apiStatus feature receive eventDetails without serviceAPIDescription + +**Test ID**: ***api_status-2*** + +**Description**: + + This test case will check if an invoker subscribed to events **SERVICE_API_AVAILABLE** and **SERVICE_API_UNAVAILABLE**, with only ***Enhanced_event_report*** active, receive SERVICE_API_AVAILABLE in mockserver when api is published by a provider, containing apiIds at eventDetails, and the same when api is unpublished. + +**Pre-Conditions**: + + * CAPIF subscriber is pre-authorised (has valid InvokerId or apfId from CAPIF Authority) + * CAPIF provider is correctly registered with 2 aefs. + * **Mock Server is up and running to receive requests.** + * **Mock Server is clean.** + +**Execution Steps**: + + 1. Register Invoker and Onboard Invoker at CCF. + 2. Register Provider at CCF with 2 aefs. + 3. Subscribe to **SERVICE_API_AVAILABLE** and **SERVICE_API_UNAVAILABLE**. ***Enhanced_event_report*** **active** at supported features (binary 0100-> string **4**) + 4. Publish Service API at CCF: + 1. Supported Features with apiStatusMonitoring flag inactive (binary 0 0000 0000 -> string **000**) + 2. This API not includes "API Status" information at **service API Description**. + 5. Discover Service APIs by Invoker + 1. includes filter by query parameter **aef-id** + 6. Provider remove published API. + +**Information of Test**: + + 1. Perform [Invoker Onboarding] + 2. Perform [Provider Registration] with 2 aefs + 3. Event Subscription to SERVICE_API_AVAILABLE and SERVICE_API_UNAVAILABLE of provider previously registered: + 1. Send **POST** to **https://{CAPIF_HOSTNAME}/capif-events/v1/{subscriberId}/subscriptions** + 2. body [event subscription request body] with: + 1. events: **['SERVICE_API_AVAILABLE','SERVICE_API_UNAVAILABLE']** + 2. supportedFeatures: binary 0100 -> string **4** + 3. Use **Invoker Certificate** + 4. Publish Service API at CCF: + * Send **POST** to ccf_publish_url **https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis** + * body [service api description] with **service_1** and **service_2** apiNames and realted with aefId1 and aefId2. + * supportedFeatures **000** + * 2 profiles, one with each aef. + * Use **APF Certificate** + 5. Request Discover Published APIs: + * Send **GET** to **https://{CAPIF_HOSTNAME}/service-apis/v1/allServiceAPIs?api-invoker-id={apiInvokerId}&aef-id=${aefId}** + * Param api-invoker-id is mandatory + * Use **Invoker Certificate** + 6. Remove published Service API: + * Send **DELETE** to resource URL **https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis/{SERVICE_API_ID}** + * Use **APF Certificate** + +**Expected Result**: + + 1. Response to Onboard request must accomplish: + 1. **201 Created** + 2. Response Body must follow **APIInvokerEnrolmentDetails** data structure with: + * apiInvokerId + * onboardingInformation->apiInvokerCertificate must contain the public key signed. + 3. Response Header **Location** must be received with URI to new resource created, following this structure: **{apiRoot}/api-invoker-management/{apiVersion}/onboardedInvokers/{onboardingId}** + 2. Response to Event Subscription must accomplish: + 1. **201 Created** + 2. The URI of the created resource shall be returned in the "Location" HTTP header, following this structure: **{apiRoot}/capif-events/{apiVersion}/{subscriberId}/subscriptions/{subscriptionId}** + 3. Response Body must follow **EventSubscription** data structure. + 3. Response to Publish request must accomplish: + 1. **201 Created** + 2. Response Body must follow **ServiceAPIDescription** data structure with: + * apiId + * 2 profiles with: + * resourceName resource_1 and aefId1 + * resourceName resource_2 and aefId2 + 3. Response Header **Location** must be received with URI to new resource created, following this structure: **{apiRoot}/published-apis/v1/{apfId}/service-apis/{serviceApiId}** + 4. Response to Discover Request By Invoker: + 1. **200 OK** response. + 2. Response body must follow **DiscoveredAPIs** data structure: + * Check if DiscoveredAPIs contains the API Published previously + * Check if **NOT** contains the **apiStatus** keys + 5. Response to Remove published Service API at CCF: + 1. **204 No Content** + 6. Mock Server received messages must accomplish: + 1. **Two Events have been received**. + 2. Validate received events follow **EventNotification** data structure, with **apiIds** in **eventDetail** parameter. + 1. One should be **SERVICE_API_AVAILABLE**. + 2. The other one must be **SERVICE_API_UNAVAILABLE**. + +--- +## Test Case 3: Publish without apiStatus feature receive eventDetails without eventDetails (apiMonitoringStatus active) + +**Test ID**: ***api_status-3*** + +**Description**: + + This test case will check if an invoker subscribed to events **SERVICE_API_AVAILABLE** and **SERVICE_API_UNAVAILABLE**, with only ***apiStatusMonitoring*** active, receive SERVICE_API_AVAILABLE in mockserver when api is published by a provider, not containing eventDetails, and the same when api is unpublished. + +**Pre-Conditions**: + + * CAPIF subscriber is pre-authorised (has valid InvokerId or apfId from CAPIF Authority) + * CAPIF provider is correctly registered with 2 aefs. + * **Mock Server is up and running to receive requests.** + * **Mock Server is clean.** + +**Execution Steps**: + + 1. Register Invoker and Onboard Invoker at CCF. + 2. Register Provider at CCF with 2 aefs. + 3. Subscribe to **SERVICE_API_AVAILABLE** and **SERVICE_API_UNAVAILABLE**. ***apiStatusMonitoring*** **active** at supported features (binary 1000-> string **8**) + 4. Publish Service API at CCF: + 1. Supported Features with apiStatusMonitoring flag inactive (binary 0 0000 0000 -> string **000**) + 2. This API not includes "API Status" information at **service API Description**. + 5. Discover Service APIs by Invoker + 1. includes filter by query parameter **aef-id** + 6. Provider remove published API. + +**Information of Test**: + + 1. Perform [Invoker Onboarding] + 2. Perform [Provider Registration] with 2 aefs + 3. Event Subscription to SERVICE_API_AVAILABLE and SERVICE_API_UNAVAILABLE of provider previously registered: + 1. Send **POST** to **https://{CAPIF_HOSTNAME}/capif-events/v1/{subscriberId}/subscriptions** + 2. body [event subscription request body] with: + 1. events: **['SERVICE_API_AVAILABLE','SERVICE_API_UNAVAILABLE']** + 2. supportedFeatures: binary 1000 -> string **8** + 3. Use **Invoker Certificate** + 4. Publish Service API at CCF: + * Send **POST** to ccf_publish_url **https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis** + * body [service api description] with **service_1** and **service_2** apiNames and realted with aefId1 and aefId2. + * supportedFeatures **000** + * 2 profiles, one with each aef. + * Use **APF Certificate** + 5. Request Discover Published APIs: + * Send **GET** to **https://{CAPIF_HOSTNAME}/service-apis/v1/allServiceAPIs?api-invoker-id={apiInvokerId}&aef-id=${aefId}** + * Param api-invoker-id is mandatory + * Use **Invoker Certificate** + 6. Remove published Service API: + * Send **DELETE** to resource URL **https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis/{SERVICE_API_ID}** + * Use **APF Certificate** + +**Expected Result**: + + 1. Response to Onboard request must accomplish: + 1. **201 Created** + 2. Response Body must follow **APIInvokerEnrolmentDetails** data structure with: + * apiInvokerId + * onboardingInformation->apiInvokerCertificate must contain the public key signed. + 3. Response Header **Location** must be received with URI to new resource created, following this structure: **{apiRoot}/api-invoker-management/{apiVersion}/onboardedInvokers/{onboardingId}** + 2. Response to Event Subscription must accomplish: + 1. **201 Created** + 2. The URI of the created resource shall be returned in the "Location" HTTP header, following this structure: **{apiRoot}/capif-events/{apiVersion}/{subscriberId}/subscriptions/{subscriptionId}** + 3. Response Body must follow **EventSubscription** data structure. + 3. Response to Publish request must accomplish: + 1. **201 Created** + 2. Response Body must follow **ServiceAPIDescription** data structure with: + * apiId + * 2 profiles with: + * resourceName resource_1 and aefId1 + * resourceName resource_2 and aefId2 + 3. Response Header **Location** must be received with URI to new resource created, following this structure: **{apiRoot}/published-apis/v1/{apfId}/service-apis/{serviceApiId}** + 4. Response to Discover Request By Invoker: + 1. **200 OK** response. + 2. Response body must follow **DiscoveredAPIs** data structure: + * Check if DiscoveredAPIs contains the API Published previously + * Check if **NOT** contains the **apiStatus** keys + 5. Response to Remove published Service API at CCF: + 1. **204 No Content** + 6. Mock Server received messages must accomplish: + 1. **Two Events have been received**. + 2. Validate received events follow **EventNotification** data structure, without **eventDetail** parameter. + 1. One should be **SERVICE_API_AVAILABLE**. + 2. The other one must be **SERVICE_API_UNAVAILABLE**. + +--- +## Test Case 4: Publish without apiStatus feature receive eventDetails without eventDetails + +**Test ID**: ***api_status-4*** + +**Description**: + + This test case will check if an invoker subscribed to events **SERVICE_API_AVAILABLE** and **SERVICE_API_UNAVAILABLE**, with ***apiStatusMonitoring*** and ***Enhanced_event_report*** not active, receive SERVICE_API_AVAILABLE in mockserver when api is published by a provider, not containing eventDetails, and the same when api is unpublished. + +**Pre-Conditions**: + + * CAPIF subscriber is pre-authorised (has valid InvokerId or apfId from CAPIF Authority) + * CAPIF provider is correctly registered with 2 aefs. + * **Mock Server is up and running to receive requests.** + * **Mock Server is clean.** + +**Execution Steps**: + + 1. Register Invoker and Onboard Invoker at CCF. + 2. Register Provider at CCF with 2 aefs. + 3. Subscribe to **SERVICE_API_AVAILABLE** and **SERVICE_API_UNAVAILABLE**. ***apiStatusMonitoring*** **active** at supported features (binary 0000-> string **0**) + 4. Publish Service API at CCF: + 1. Supported Features with apiStatusMonitoring flag inactive (binary 0 0000 0000 -> string **000**) + 2. This API not includes "API Status" information at **service API Description**. + 5. Discover Service APIs by Invoker + 1. includes filter by query parameter **aef-id** + 6. Provider remove published API. + +**Information of Test**: + + 1. Perform [Invoker Onboarding] + 2. Perform [Provider Registration] with 2 aefs + 3. Event Subscription to SERVICE_API_AVAILABLE and SERVICE_API_UNAVAILABLE of provider previously registered: + 1. Send **POST** to **https://{CAPIF_HOSTNAME}/capif-events/v1/{subscriberId}/subscriptions** + 2. body [event subscription request body] with: + 1. events: **['SERVICE_API_AVAILABLE','SERVICE_API_UNAVAILABLE']** + 2. supportedFeatures: binary 0000 -> string **0** + 3. Use **Invoker Certificate** + 4. Publish Service API at CCF: + * Send **POST** to ccf_publish_url **https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis** + * body [service api description] with **service_1** and **service_2** apiNames and realted with aefId1 and aefId2. + * supportedFeatures **000** + * 2 profiles, one with each aef. + * Use **APF Certificate** + 5. Request Discover Published APIs: + * Send **GET** to **https://{CAPIF_HOSTNAME}/service-apis/v1/allServiceAPIs?api-invoker-id={apiInvokerId}&aef-id=${aefId}** + * Param api-invoker-id is mandatory + * Use **Invoker Certificate** + 6. Remove published Service API: + * Send **DELETE** to resource URL **https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis/{SERVICE_API_ID}** + * Use **APF Certificate** + +**Expected Result**: + + 1. Response to Onboard request must accomplish: + 1. **201 Created** + 2. Response Body must follow **APIInvokerEnrolmentDetails** data structure with: + * apiInvokerId + * onboardingInformation->apiInvokerCertificate must contain the public key signed. + 3. Response Header **Location** must be received with URI to new resource created, following this structure: **{apiRoot}/api-invoker-management/{apiVersion}/onboardedInvokers/{onboardingId}** + 2. Response to Event Subscription must accomplish: + 1. **201 Created** + 2. The URI of the created resource shall be returned in the "Location" HTTP header, following this structure: **{apiRoot}/capif-events/{apiVersion}/{subscriberId}/subscriptions/{subscriptionId}** + 3. Response Body must follow **EventSubscription** data structure. + 3. Response to Publish request must accomplish: + 1. **201 Created** + 2. Response Body must follow **ServiceAPIDescription** data structure with: + * apiId + * 2 profiles with: + * resourceName resource_1 and aefId1 + * resourceName resource_2 and aefId2 + 3. Response Header **Location** must be received with URI to new resource created, following this structure: **{apiRoot}/published-apis/v1/{apfId}/service-apis/{serviceApiId}** + 4. Response to Discover Request By Invoker: + 1. **200 OK** response. + 2. Response body must follow **DiscoveredAPIs** data structure: + * Check if DiscoveredAPIs contains the API Published previously + * Check if **NOT** contains the **apiStatus** keys + 5. Response to Remove published Service API at CCF: + 1. **204 No Content** + 6. Mock Server received messages must accomplish: + 1. **Two Events have been received**. + 2. Validate received events follow **EventNotification** data structure, without **eventDetail** parameter. + 1. One should be **SERVICE_API_AVAILABLE**. + 2. The other one must be **SERVICE_API_UNAVAILABLE**. + +--- +## Test Case 5: Publish with apiStatus present but apiStatusMonitoring inactive receive bad Request + +**Test ID**: ***api_status-5*** + +**Description**: + + This test case will check if an invoker subscribed to events **SERVICE_API_AVAILABLE** and **SERVICE_API_UNAVAILABLE**, with ***apiStatusMonitoring*** and ***Enhanced_event_report*** not active, receive Bad Request when api is published by a provider. + +**Pre-Conditions**: + + * CAPIF subscriber is pre-authorised (has valid InvokerId or apfId from CAPIF Authority) + * CAPIF provider is correctly registered with 2 aefs. + * **Mock Server is up and running to receive requests.** + * **Mock Server is clean.** + +**Execution Steps**: + + 1. Register Invoker and Onboard Invoker at CCF. + 2. Register Provider at CCF with 2 aefs. + 3. Subscribe to **SERVICE_API_AVAILABLE** and **SERVICE_API_UNAVAILABLE**. ***apiStatusMonitoring*** and ***Enhanced_event_report*** **inactive** at supported features (binary 1100-> string **C**) + 4. Publish Service API at CCF: + 1. Supported Features with apiStatusMonitoring flag inactive (binary 0 0000 0000 -> string **000**) + 2. This API includes "API Status" information at **service API Description** with aefId1 inside array. + 5. Discover Service APIs by Invoker + 1. includes filter by query parameter **aef-id** + 6. Provider remove published API. + +**Information of Test**: + + 1. Perform [Invoker Onboarding] + 2. Perform [Provider Registration] with 2 aefs + 3. Event Subscription to SERVICE_API_AVAILABLE and SERVICE_API_UNAVAILABLE of provider previously registered: + 1. Send **POST** to **https://{CAPIF_HOSTNAME}/capif-events/v1/{subscriberId}/subscriptions** + 2. body [event subscription request body] with: + 1. events: **['SERVICE_API_AVAILABLE','SERVICE_API_UNAVAILABLE']** + 2. supportedFeatures: binary 1100 -> string **C** + 3. Use **Invoker Certificate** + 4. Publish Service API at CCF: + * Send **POST** to ccf_publish_url **https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis** + * body [service api description] with **service_1** and **service_2** apiNames and realted with aefId1 and aefId2. + * supportedFeatures **0** + * 2 profiles, one with each aef. + * apiStatus with aefId1 inside array + * Use **APF Certificate** + 5. Request Discover Published APIs: + * Send **GET** to **https://{CAPIF_HOSTNAME}/service-apis/v1/allServiceAPIs?api-invoker-id={apiInvokerId}&aef-id=${aefId}** + * Param api-invoker-id is mandatory + * Use **Invoker Certificate** + +**Expected Result**: + + 1. Response to Onboard request must accomplish: + 1. **201 Created** + 2. Response Body must follow **APIInvokerEnrolmentDetails** data structure with: + * apiInvokerId + * onboardingInformation->apiInvokerCertificate must contain the public key signed. + 3. Response Header **Location** must be received with URI to new resource created, following this structure: **{apiRoot}/api-invoker-management/{apiVersion}/onboardedInvokers/{onboardingId}** + 2. Response to Event Subscription must accomplish: + 1. **201 Created** + 2. The URI of the created resource shall be returned in the "Location" HTTP header, following this structure: **{apiRoot}/capif-events/{apiVersion}/{subscriberId}/subscriptions/{subscriptionId}** + 3. Response Body must follow **EventSubscription** data structure. + 3. Response to Publish request must accomplish: + 1. **400 Bad Request** + 2. Error Response Body must accomplish with **ProblemDetails** data structure with: + * status 400 + * title with message "Bad Request" + * detail with message "Set apiStatus with apiStatusMonitoring feature inactive at supportedFeatures if not allowed". + * cause with message "apiStatus can't be set if apiStatusMonitoring is inactive". + 4. Response to Discover Request By Invoker: + 1. **404 Not Found** response. + 2. Error Response Body must accomplish with **ProblemDetails** data structure with: + * status 404 + * title with message "Not Found" + * detail with message "API Invoker {api_invoker_id} has no API Published that accomplish filter conditions". + * cause with message "No API Published accomplish filter conditions". + 5. Mock Server received messages must accomplish: + 1. **No Events have been received**. + +--- +## Test Case 6: Publish with apiStatus feature active receive eventDetails with serviceAPIDescription + +**Test ID**: ***api_status-6*** + +**Description**: + + This test case will check if an invoker subscribed to events **SERVICE_API_AVAILABLE** and **SERVICE_API_UNAVAILABLE**, with ***apiStatusMonitoring*** and ***Enhanced_event_report*** active, receive event notification including apiIds and serviceAPIDescriptions. + +**Pre-Conditions**: + + * CAPIF subscriber is pre-authorised (has valid InvokerId or apfId from CAPIF Authority) + * CAPIF provider is correctly registered with 2 aefs. + * **Mock Server is up and running to receive requests.** + * **Mock Server is clean.** + +**Execution Steps**: + + 1. Register Invoker and Onboard Invoker at CCF. + 2. Register Provider at CCF with 2 aefs. + 3. Subscribe to **SERVICE_API_AVAILABLE** and **SERVICE_API_UNAVAILABLE**. ***apiStatusMonitoring*** **active** at supported features (binary 1100-> string **C**) + 4. Publish Service API at CCF: + 1. Supported Features with apiStatusMonitoring flag active (binary 0 0010 0000 -> string **020**) + 2. This API includes "API Status" information at **service API Description** with aefId1 inside array. + 5. Discover Service APIs by Invoker + 1. includes filter by query parameter **aef-id** + 6. Provider remove published API. + +**Information of Test**: + + 1. Perform [Invoker Onboarding] + 2. Perform [Provider Registration] with 2 aefs + 3. Event Subscription to SERVICE_API_AVAILABLE and SERVICE_API_UNAVAILABLE of provider previously registered: + 1. Send **POST** to **https://{CAPIF_HOSTNAME}/capif-events/v1/{subscriberId}/subscriptions** + 2. body [event subscription request body] with: + 1. events: **['SERVICE_API_AVAILABLE','SERVICE_API_UNAVAILABLE']** + 2. supportedFeatures: binary 1100 -> string **C** + 3. Use **Invoker Certificate** + 4. Publish Service API at CCF: + * Send **POST** to ccf_publish_url **https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis** + * body [service api description] with **service_1** and **service_2** apiNames and realted with aefId1 and aefId2. + * supportedFeatures **020** + * 2 profiles, one with each aef. + * apiStatus with aefId1 inside array + * Use **APF Certificate** + 5. Request Discover Published APIs: + * Send **GET** to **https://{CAPIF_HOSTNAME}/service-apis/v1/allServiceAPIs?api-invoker-id={apiInvokerId}&aef-id=${aefId}** + * Param api-invoker-id is mandatory + * Use **Invoker Certificate** + 6. Remove published Service API: + * Send **DELETE** to resource URL **https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis/{SERVICE_API_ID}** + * Use **APF Certificate** + +**Expected Result**: + + 1. Response to Onboard request must accomplish: + 1. **201 Created** + 2. Response Body must follow **APIInvokerEnrolmentDetails** data structure with: + * apiInvokerId + * onboardingInformation->apiInvokerCertificate must contain the public key signed. + 3. Response Header **Location** must be received with URI to new resource created, following this structure: **{apiRoot}/api-invoker-management/{apiVersion}/onboardedInvokers/{onboardingId}** + 2. Response to Event Subscription must accomplish: + 1. **201 Created** + 2. The URI of the created resource shall be returned in the "Location" HTTP header, following this structure: **{apiRoot}/capif-events/{apiVersion}/{subscriberId}/subscriptions/{subscriptionId}** + 3. Response Body must follow **EventSubscription** data structure. + 3. Response to Publish request must accomplish: + 1. **201 Created** + 2. Response Body must follow **ServiceAPIDescription** data structure with: + * apiId + * 2 profiles with: + * resourceName resource_1 and aefId1 + * resourceName resource_2 and aefId2 + 3. Response Header **Location** must be received with URI to new resource created, following this structure: **{apiRoot}/published-apis/v1/{apfId}/service-apis/{serviceApiId}** + 4. Response to Discover Request By Invoker: + 1. **200 OK** response. + 2. Response body must follow **DiscoveredAPIs** data structure: + * Check if DiscoveredAPIs contains the API Published previously + * Check if contains the **apiStatus** key. + 5. Response to Remove published Service API at CCF: + 1. **204 No Content** + 6. Mock Server received messages must accomplish: + 1. **Two Events have been received**. + 2. Validate received events follow **EventNotification** data structure, with **apiIds** and **serviceAPIDescription** in **eventDetail** parameter. + 1. One should be **SERVICE_API_AVAILABLE**. + 2. The other one must be **SERVICE_API_UNAVAILABLE**. + +--- +## Test Case 7: Publish with apiStatus active feature receive eventDetails without serviceAPIDescription + +**Test ID**: ***api_status-7*** + +**Description**: + + This test case will check if an invoker subscribed to events **SERVICE_API_AVAILABLE** and **SERVICE_API_UNAVAILABLE**, with ***apiStatusMonitoring*** inactive and ***Enhanced_event_report*** active, receive event notification including only apiIds. + +**Pre-Conditions**: + + * CAPIF subscriber is pre-authorised (has valid InvokerId or apfId from CAPIF Authority) + * CAPIF provider is correctly registered with 2 aefs. + * **Mock Server is up and running to receive requests.** + * **Mock Server is clean.** + +**Execution Steps**: + + 1. Register Invoker and Onboard Invoker at CCF. + 2. Register Provider at CCF with 2 aefs. + 3. Subscribe to **SERVICE_API_AVAILABLE** and **SERVICE_API_UNAVAILABLE**. ***Enhanced_event_report*** **active** and ***apiStatusMonitoring*** **inactive** at supported features (binary 0100-> string **4**) + 4. Publish Service API at CCF: + 1. Supported Features with apiStatusMonitoring flag active (binary 0 0010 0000 -> string **020**) + 2. This API includes "API Status" information at **service API Description** with aefId1 inside array. + 5. Discover Service APIs by Invoker + 1. includes filter by query parameter **aef-id** + 6. Provider remove published API. + +**Information of Test**: + + 1. Perform [Invoker Onboarding] + 2. Perform [Provider Registration] with 2 aefs + 3. Event Subscription to SERVICE_API_AVAILABLE and SERVICE_API_UNAVAILABLE of provider previously registered: + 1. Send **POST** to **https://{CAPIF_HOSTNAME}/capif-events/v1/{subscriberId}/subscriptions** + 2. body [event subscription request body] with: + 1. events: **['SERVICE_API_AVAILABLE','SERVICE_API_UNAVAILABLE']** + 2. supportedFeatures: binary 0100 -> string **4** + 3. Use **Invoker Certificate** + 4. Publish Service API at CCF: + * Send **POST** to ccf_publish_url **https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis** + * body [service api description] with **service_1** and **service_2** apiNames and realted with aefId1 and aefId2. + * supportedFeatures **020** + * 2 profiles, one with each aef. + * apiStatus with aefId1 inside array + * Use **APF Certificate** + 5. Request Discover Published APIs: + * Send **GET** to **https://{CAPIF_HOSTNAME}/service-apis/v1/allServiceAPIs?api-invoker-id={apiInvokerId}&aef-id=${aefId}** + * Param api-invoker-id is mandatory + * Use **Invoker Certificate** + 6. Remove published Service API: + * Send **DELETE** to resource URL **https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis/{SERVICE_API_ID}** + * Use **APF Certificate** + +**Expected Result**: + + 1. Response to Onboard request must accomplish: + 1. **201 Created** + 2. Response Body must follow **APIInvokerEnrolmentDetails** data structure with: + * apiInvokerId + * onboardingInformation->apiInvokerCertificate must contain the public key signed. + 3. Response Header **Location** must be received with URI to new resource created, following this structure: **{apiRoot}/api-invoker-management/{apiVersion}/onboardedInvokers/{onboardingId}** + 2. Response to Event Subscription must accomplish: + 1. **201 Created** + 2. The URI of the created resource shall be returned in the "Location" HTTP header, following this structure: **{apiRoot}/capif-events/{apiVersion}/{subscriberId}/subscriptions/{subscriptionId}** + 3. Response Body must follow **EventSubscription** data structure. + 3. Response to Publish request must accomplish: + 1. **201 Created** + 2. Response Body must follow **ServiceAPIDescription** data structure with: + * apiId + * 2 profiles with: + * resourceName resource_1 and aefId1 + * resourceName resource_2 and aefId2 + 3. Response Header **Location** must be received with URI to new resource created, following this structure: **{apiRoot}/published-apis/v1/{apfId}/service-apis/{serviceApiId}** + 4. Response to Discover Request By Invoker: + 1. **200 OK** response. + 2. Response body must follow **DiscoveredAPIs** data structure: + * Check if DiscoveredAPIs contains the API Published previously + * Check if contains the **apiStatus** key. + 5. Response to Remove published Service API at CCF: + 1. **204 No Content** + 6. Mock Server received messages must accomplish: + 1. **Two Events have been received**. + 2. Validate received events follow **EventNotification** data structure, with only **apiIds** in **eventDetail** parameter. + 1. One should be **SERVICE_API_AVAILABLE**. + 2. The other one must be **SERVICE_API_UNAVAILABLE**. + +--- +## Test Case 8: Publish with apiStatus active feature receive eventDetails without eventDetails with apiStatus (apiMonitoringStatus active) + +**Test ID**: ***api_status-8*** + +**Description**: + + This test case will check if an invoker subscribed to events **SERVICE_API_AVAILABLE** and **SERVICE_API_UNAVAILABLE**, with ***apiStatusMonitoring*** active and ***Enhanced_event_report*** inactive, receive event notification without eventDetails. + +**Pre-Conditions**: + + * CAPIF subscriber is pre-authorised (has valid InvokerId or apfId from CAPIF Authority) + * CAPIF provider is correctly registered with 2 aefs. + * **Mock Server is up and running to receive requests.** + * **Mock Server is clean.** + +**Execution Steps**: + + 1. Register Invoker and Onboard Invoker at CCF. + 2. Register Provider at CCF with 2 aefs. + 3. Subscribe to **SERVICE_API_AVAILABLE** and **SERVICE_API_UNAVAILABLE**. ***Enhanced_event_report*** **inactive** and ***apiStatusMonitoring*** **active** at supported features (binary 1000-> string **8**) + 4. Publish Service API at CCF: + 1. Supported Features with apiStatusMonitoring flag active (binary 0 0010 0000 -> string **020**) + 2. This API includes "API Status" information at **service API Description** with aefId1 inside array. + 5. Discover Service APIs by Invoker + 1. includes filter by query parameter **aef-id** + 6. Provider remove published API. + +**Information of Test**: + + 1. Perform [Invoker Onboarding] + 2. Perform [Provider Registration] with 2 aefs + 3. Event Subscription to SERVICE_API_AVAILABLE and SERVICE_API_UNAVAILABLE of provider previously registered: + 1. Send **POST** to **https://{CAPIF_HOSTNAME}/capif-events/v1/{subscriberId}/subscriptions** + 2. body [event subscription request body] with: + 1. events: **['SERVICE_API_AVAILABLE','SERVICE_API_UNAVAILABLE']** + 2. supportedFeatures: binary 1000 -> string **8** + 3. Use **Invoker Certificate** + 4. Publish Service API at CCF: + * Send **POST** to ccf_publish_url **https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis** + * body [service api description] with **service_1** and **service_2** apiNames and realted with aefId1 and aefId2. + * supportedFeatures **020** + * 2 profiles, one with each aef. + * apiStatus with aefId1 inside array + * Use **APF Certificate** + 5. Request Discover Published APIs: + * Send **GET** to **https://{CAPIF_HOSTNAME}/service-apis/v1/allServiceAPIs?api-invoker-id={apiInvokerId}&aef-id=${aefId}** + * Param api-invoker-id is mandatory + * Use **Invoker Certificate** + 6. Remove published Service API: + * Send **DELETE** to resource URL **https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis/{SERVICE_API_ID}** + * Use **APF Certificate** + +**Expected Result**: + + 1. Response to Onboard request must accomplish: + 1. **201 Created** + 2. Response Body must follow **APIInvokerEnrolmentDetails** data structure with: + * apiInvokerId + * onboardingInformation->apiInvokerCertificate must contain the public key signed. + 3. Response Header **Location** must be received with URI to new resource created, following this structure: **{apiRoot}/api-invoker-management/{apiVersion}/onboardedInvokers/{onboardingId}** + 2. Response to Event Subscription must accomplish: + 1. **201 Created** + 2. The URI of the created resource shall be returned in the "Location" HTTP header, following this structure: **{apiRoot}/capif-events/{apiVersion}/{subscriberId}/subscriptions/{subscriptionId}** + 3. Response Body must follow **EventSubscription** data structure. + 3. Response to Publish request must accomplish: + 1. **201 Created** + 2. Response Body must follow **ServiceAPIDescription** data structure with: + * apiId + * 2 profiles with: + * resourceName resource_1 and aefId1 + * resourceName resource_2 and aefId2 + 3. Response Header **Location** must be received with URI to new resource created, following this structure: **{apiRoot}/published-apis/v1/{apfId}/service-apis/{serviceApiId}** + 4. Response to Discover Request By Invoker: + 1. **200 OK** response. + 2. Response body must follow **DiscoveredAPIs** data structure: + * Check if DiscoveredAPIs contains the API Published previously + * Check if contains the **apiStatus** key. + 5. Response to Remove published Service API at CCF: + 1. **204 No Content** + 6. Mock Server received messages must accomplish: + 1. **Two Events have been received**. + 2. Validate received events follow **EventNotification** data structure, without **eventDetail** parameter. + 1. One should be **SERVICE_API_AVAILABLE**. + 2. The other one must be **SERVICE_API_UNAVAILABLE**. + +--- +## Test Case 9: Publish with apiStatus active feature receive eventDetails without eventDetails + +**Test ID**: ***api_status-9*** + +**Description**: + + This test case will check if an invoker subscribed to events **SERVICE_API_AVAILABLE** and **SERVICE_API_UNAVAILABLE**, with ***apiStatusMonitoring*** and ***Enhanced_event_report*** inactive, receive event notification without eventDetails. + +**Pre-Conditions**: + + * CAPIF subscriber is pre-authorised (has valid InvokerId or apfId from CAPIF Authority) + * CAPIF provider is correctly registered with 2 aefs. + * **Mock Server is up and running to receive requests.** + * **Mock Server is clean.** + +**Execution Steps**: + + 1. Register Invoker and Onboard Invoker at CCF. + 2. Register Provider at CCF with 2 aefs. + 3. Subscribe to **SERVICE_API_AVAILABLE** and **SERVICE_API_UNAVAILABLE**. ***Enhanced_event_report*** and ***apiStatusMonitoring*** **inactive** at supported features (binary 0000-> string **0**) + 4. Publish Service API at CCF: + 1. Supported Features with apiStatusMonitoring flag active (binary 0 0010 0000 -> string **020**) + 2. This API includes "API Status" information at **service API Description** with aefId1 inside array. + 5. Discover Service APIs by Invoker + 1. includes filter by query parameter **aef-id** + 6. Provider remove published API. + +**Information of Test**: + + 1. Perform [Invoker Onboarding] + 2. Perform [Provider Registration] with 2 aefs + 3. Event Subscription to SERVICE_API_AVAILABLE and SERVICE_API_UNAVAILABLE of provider previously registered: + 1. Send **POST** to **https://{CAPIF_HOSTNAME}/capif-events/v1/{subscriberId}/subscriptions** + 2. body [event subscription request body] with: + 1. events: **['SERVICE_API_AVAILABLE','SERVICE_API_UNAVAILABLE']** + 2. supportedFeatures: binary 0000 -> string **0** + 3. Use **Invoker Certificate** + 4. Publish Service API at CCF: + * Send **POST** to ccf_publish_url **https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis** + * body [service api description] with **service_1** and **service_2** apiNames and realted with aefId1 and aefId2. + * supportedFeatures **020** + * 2 profiles, one with each aef. + * apiStatus with aefId1 inside array + * Use **APF Certificate** + 5. Request Discover Published APIs: + * Send **GET** to **https://{CAPIF_HOSTNAME}/service-apis/v1/allServiceAPIs?api-invoker-id={apiInvokerId}&aef-id=${aefId}** + * Param api-invoker-id is mandatory + * Use **Invoker Certificate** + 6. Remove published Service API: + * Send **DELETE** to resource URL **https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis/{SERVICE_API_ID}** + * Use **APF Certificate** + +**Expected Result**: + + 1. Response to Onboard request must accomplish: + 1. **201 Created** + 2. Response Body must follow **APIInvokerEnrolmentDetails** data structure with: + * apiInvokerId + * onboardingInformation->apiInvokerCertificate must contain the public key signed. + 3. Response Header **Location** must be received with URI to new resource created, following this structure: **{apiRoot}/api-invoker-management/{apiVersion}/onboardedInvokers/{onboardingId}** + 2. Response to Event Subscription must accomplish: + 1. **201 Created** + 2. The URI of the created resource shall be returned in the "Location" HTTP header, following this structure: **{apiRoot}/capif-events/{apiVersion}/{subscriberId}/subscriptions/{subscriptionId}** + 3. Response Body must follow **EventSubscription** data structure. + 3. Response to Publish request must accomplish: + 1. **201 Created** + 2. Response Body must follow **ServiceAPIDescription** data structure with: + * apiId + * 2 profiles with: + * resourceName resource_1 and aefId1 + * resourceName resource_2 and aefId2 + 3. Response Header **Location** must be received with URI to new resource created, following this structure: **{apiRoot}/published-apis/v1/{apfId}/service-apis/{serviceApiId}** + 4. Response to Discover Request By Invoker: + 1. **200 OK** response. + 2. Response body must follow **DiscoveredAPIs** data structure: + * Check if DiscoveredAPIs contains the API Published previously + * Check if contains the **apiStatus** key. + 5. Response to Remove published Service API at CCF: + 1. **204 No Content** + 6. Mock Server received messages must accomplish: + 1. **Two Events have been received**. + 2. Validate received events follow **EventNotification** data structure, without **eventDetail** parameter. + 1. One should be **SERVICE_API_AVAILABLE**. + 2. The other one must be **SERVICE_API_UNAVAILABLE**. + +--- +## Test Case 10: Publish with apiStatus feature active no aefId active receive eventDetails with serviceAPIDescription with apiStatus empty array + +**Test ID**: ***api_status-10*** + +**Description**: + + This test case will check if an invoker subscribed to events **SERVICE_API_AVAILABLE** and **SERVICE_API_UNAVAILABLE**, with ***apiStatusMonitoring*** and ***Enhanced_event_report*** active, receive event notification **SERVICE_API_UNAVAILABLE** including apiIds and serviceAPIDescriptions when API is published containing ***apiStatus*** with empty array. + +**Pre-Conditions**: + + * CAPIF subscriber is pre-authorised (has valid InvokerId or apfId from CAPIF Authority) + * CAPIF provider is correctly registered with 2 aefs. + * **Mock Server is up and running to receive requests.** + * **Mock Server is clean.** + +**Execution Steps**: + + 1. Register Invoker and Onboard Invoker at CCF. + 2. Register Provider at CCF with 2 aefs. + 3. Subscribe to **SERVICE_API_AVAILABLE** and **SERVICE_API_UNAVAILABLE**. ***apiStatusMonitoring*** **active** at supported features (binary 1100-> string **C**) + 4. Publish Service API at CCF: + 1. Supported Features with apiStatusMonitoring flag active (binary 0 0010 0000 -> string **020**) + 2. This API includes "API Status" information at **service API Description** with empty aefIds array. + 5. Discover Service APIs by Invoker + 1. includes filter by query parameter **aef-id** + 6. Provider remove published API. + +**Information of Test**: + + 1. Perform [Invoker Onboarding] + 2. Perform [Provider Registration] with 2 aefs + 3. Event Subscription to SERVICE_API_AVAILABLE and SERVICE_API_UNAVAILABLE of provider previously registered: + 1. Send **POST** to **https://{CAPIF_HOSTNAME}/capif-events/v1/{subscriberId}/subscriptions** + 2. body [event subscription request body] with: + 1. events: **['SERVICE_API_AVAILABLE','SERVICE_API_UNAVAILABLE']** + 2. supportedFeatures: binary 1100 -> string **C** + 3. Use **Invoker Certificate** + 4. Publish Service API at CCF: + * Send **POST** to ccf_publish_url **https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis** + * body [service api description] with **service_1** and **service_2** apiNames and realted with aefId1 and aefId2. + * supportedFeatures **020** + * 2 profiles, one with each aef. + * apiStatus with empty aefIds array. + * Use **APF Certificate** + 5. Request Discover Published APIs: + * Send **GET** to **https://{CAPIF_HOSTNAME}/service-apis/v1/allServiceAPIs?api-invoker-id={apiInvokerId}&aef-id=${aefId}** + * Param api-invoker-id is mandatory + * Use **Invoker Certificate** + 6. Remove published Service API: + * Send **DELETE** to resource URL **https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis/{SERVICE_API_ID}** + * Use **APF Certificate** + +**Expected Result**: + + 1. Response to Onboard request must accomplish: + 1. **201 Created** + 2. Response Body must follow **APIInvokerEnrolmentDetails** data structure with: + * apiInvokerId + * onboardingInformation->apiInvokerCertificate must contain the public key signed. + 3. Response Header **Location** must be received with URI to new resource created, following this structure: **{apiRoot}/api-invoker-management/{apiVersion}/onboardedInvokers/{onboardingId}** + 2. Response to Event Subscription must accomplish: + 1. **201 Created** + 2. The URI of the created resource shall be returned in the "Location" HTTP header, following this structure: **{apiRoot}/capif-events/{apiVersion}/{subscriberId}/subscriptions/{subscriptionId}** + 3. Response Body must follow **EventSubscription** data structure. + 3. Response to Publish request must accomplish: + 1. **201 Created** + 2. Response Body must follow **ServiceAPIDescription** data structure with: + * apiId + * 2 profiles with: + * resourceName resource_1 and aefId1 + * resourceName resource_2 and aefId2 + 3. Response Header **Location** must be received with URI to new resource created, following this structure: **{apiRoot}/published-apis/v1/{apfId}/service-apis/{serviceApiId}** + 4. Response to Discover Request By Invoker: + 1. **200 OK** response. + 2. Response body must follow **DiscoveredAPIs** data structure: + * Check if DiscoveredAPIs contains the API Published previously + * Check if contains the **apiStatus** key. + 5. Response to Remove published Service API at CCF: + 1. **204 No Content** + 6. Mock Server received messages must accomplish: + 1. **One Event has been received**. + 2. Validate received events follow **EventNotification** data structure, with **apiIds** and **serviceAPIDescription** in **eventDetail** parameter. + 1. Only one **SERVICE_API_UNAVAILABLE** event. + +--- +## Test Case 11: Publish with apiStatus not present but apiStatusMonitoring feature active receive eventDetails with serviceAPIDescription without apiStatus + +**Test ID**: ***api_status-11*** + +**Description**: + + This test case will check if an invoker subscribed to events **SERVICE_API_AVAILABLE** and **SERVICE_API_UNAVAILABLE**, with ***apiStatusMonitoring*** and ***Enhanced_event_report*** active, receive event notification **SERVICE_API_AVAILABLE** and **SERVICE_API_UNAVAILABLE** including apiIds and serviceAPIDescriptions when API is published wihtout ***apiStatus***. + +**Pre-Conditions**: + + * CAPIF subscriber is pre-authorised (has valid InvokerId or apfId from CAPIF Authority) + * CAPIF provider is correctly registered with 2 aefs. + * **Mock Server is up and running to receive requests.** + * **Mock Server is clean.** + +**Execution Steps**: + 1. Register Invoker and Onboard Invoker at CCF. 2. Register Provider at CCF with 2 aefs. - 3. Subscribe to **SERVICE_API_AVAILABLE** and **SERVICE_API_UNAVAILABLE**. ***Enhanced_event_report*** and ***apiStatusMonitoring*** **active** at supported features (binary 1100-> string **C**) + 3. Subscribe to **SERVICE_API_AVAILABLE** and **SERVICE_API_UNAVAILABLE**. ***apiStatusMonitoring*** **active** at supported features (binary 1100-> string **C**) 4. Publish Service API at CCF: - 1. Supported Features with apiStatusMonitoring flag inactive (binary 0 0000 0000 -> string **000**) + 1. Supported Features with apiStatusMonitoring flag active (binary 0 0010 0000 -> string **020**) 2. This API not includes "API Status" information at **service API Description**. 5. Discover Service APIs by Invoker 1. includes filter by query parameter **aef-id** @@ -40,8 +890,9 @@ At this documentation you will have all information and related files and exampl 4. Publish Service API at CCF: * Send **POST** to ccf_publish_url **https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis** * body [service api description] with **service_1** and **service_2** apiNames and realted with aefId1 and aefId2. - * supportedFeatures **000** + * supportedFeatures **020** * 2 profiles, one with each aef. + * apiStatus not present. * Use **APF Certificate** 5. Request Discover Published APIs: * Send **GET** to **https://{CAPIF_HOSTNAME}/service-apis/v1/allServiceAPIs?api-invoker-id={apiInvokerId}&aef-id=${aefId}** @@ -71,29 +922,27 @@ At this documentation you will have all information and related files and exampl * resourceName resource_1 and aefId1 * resourceName resource_2 and aefId2 3. Response Header **Location** must be received with URI to new resource created, following this structure: **{apiRoot}/published-apis/v1/{apfId}/service-apis/{serviceApiId}** - 4. Response without **"apiStatus"** parameter. 4. Response to Discover Request By Invoker: 1. **200 OK** response. 2. Response body must follow **DiscoveredAPIs** data structure: * Check if DiscoveredAPIs contains the API Published previously - * Check if **NOT** contains the **apiStatus** keys + * Check if contains the **apiStatus** key. 5. Response to Remove published Service API at CCF: 1. **204 No Content** 6. Mock Server received messages must accomplish: 1. **Two Events have been received**. - 2. Validate received events follow **EventNotification** data structure, with **apiIds** in **eventDetail** parameter. - 1. One should be **SERVICE_API_AVAILABLE** apiId of published API with **eventDetails** containing **apiIds** and **serviceAPIDescription** parameters. - 2. The other one must be **SERVICE_API_UNAVAILABLE** apiId of published API with **eventDetails** containing **apiIds** and **serviceAPIDescription** parameters. + 2. Validate received events follow **EventNotification** data structure, with **apiIds** and **serviceAPIDescription** in **eventDetail** parameter. + 1. First **SERVICE_API_AVAILABLE** event. + 2. Other with **SERVICE_API_UNAVAILABLE** event. +--- +## Test Case 12: Update published API without apiStatus and apiStatusMonitoring inactive - -## Test Case 2: Publish without apiStatus feature receive eventDetails without serviceAPIDescription - -**Test ID**: ***api_status-2*** +**Test ID**: ***api_status-12*** **Description**: - This test case will check if an invoker subscribed to events **SERVICE_API_AVAILABLE** and **SERVICE_API_UNAVAILABLE**, with only ***Enhanced_event_report*** active, receive SERVICE_API_AVAILABLE in mockserver when api is published by a provider, containing apiIds at eventDetails, and the same when api is unpublished. + This test case will check if an invoker subscribed to events **SERVICE_API_AVAILABLE**, **SERVICE_API_UNAVAILABLE** and **SERVICE_API_UPDATE** with ***apiStatusMonitoring*** and **Enhanced_event_report** active, receive SERVICE_API_AVAILABLE in mockserver when api is published by a provider, containing eventDetails, and SERVICE_API_UPDATE after update apiStatus to not present. **Pre-Conditions**: @@ -103,15 +952,18 @@ At this documentation you will have all information and related files and exampl * **Mock Server is clean.** **Execution Steps**: + 1. Register Invoker and Onboard Invoker at CCF. 2. Register Provider at CCF with 2 aefs. - 3. Subscribe to **SERVICE_API_AVAILABLE** and **SERVICE_API_UNAVAILABLE**. ***Enhanced_event_report*** **active** at supported features (binary 0100-> string **4**) + 3. Subscribe to **SERVICE_API_AVAILABLE**, **SERVICE_API_UNAVAILABLE** and **SERVICE_API_UPDATE**. **apiStatusMonitoring** and **Enhanced_event_report** **active** at supported features (binary 1100-> string **C**) 4. Publish Service API at CCF: - 1. Supported Features with apiStatusMonitoring flag inactive (binary 0 0000 0000 -> string **000**) - 2. This API not includes "API Status" information at **service API Description**. + 1. Supported Features with apiStatusMonitoring flag active (binary 0 0010 0000 -> string **020**) + 2. This API includes "API Status" information at **service API Description** with only aefId1. 5. Discover Service APIs by Invoker 1. includes filter by query parameter **aef-id** - 6. Provider remove published API. + 6. Update Published API: + 1. apiStatus Not present + 2. aipStatusMonitoring feature not active (binary 0 0000 0000 -> string **0**) **Information of Test**: @@ -120,22 +972,27 @@ At this documentation you will have all information and related files and exampl 3. Event Subscription to SERVICE_API_AVAILABLE and SERVICE_API_UNAVAILABLE of provider previously registered: 1. Send **POST** to **https://{CAPIF_HOSTNAME}/capif-events/v1/{subscriberId}/subscriptions** 2. body [event subscription request body] with: - 1. events: **['SERVICE_API_AVAILABLE','SERVICE_API_UNAVAILABLE']** - 2. supportedFeatures: binary 0100 -> string **4** + 1. events: **['SERVICE_API_AVAILABLE','SERVICE_API_UNAVAILABLE','SERVICE_API_UPDATE']** + 2. supportedFeatures: binary 1100 -> string **C** 3. Use **Invoker Certificate** 4. Publish Service API at CCF: * Send **POST** to ccf_publish_url **https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis** * body [service api description] with **service_1** and **service_2** apiNames and realted with aefId1 and aefId2. - * supportedFeatures **000** + * supportedFeatures **020** * 2 profiles, one with each aef. + * apiStatus with aefId1 inside array * Use **APF Certificate** 5. Request Discover Published APIs: * Send **GET** to **https://{CAPIF_HOSTNAME}/service-apis/v1/allServiceAPIs?api-invoker-id={apiInvokerId}&aef-id=${aefId}** * Param api-invoker-id is mandatory * Use **Invoker Certificate** - 6. Remove published Service API: - * Send **DELETE** to resource URL **https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis/{SERVICE_API_ID}** + 6. Update published Service API: + * Send **PUT** to resource URL **https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis/{SERVICE_API_ID}** * Use **APF Certificate** + * body [service api description] with **service_1** and **service_2** apiNames and realted with aefId1 and aefId2. + * supportedFeatures **0** + * 2 profiles, one with each aef. + * apiStatus not present. **Expected Result**: @@ -157,27 +1014,28 @@ At this documentation you will have all information and related files and exampl * resourceName resource_1 and aefId1 * resourceName resource_2 and aefId2 3. Response Header **Location** must be received with URI to new resource created, following this structure: **{apiRoot}/published-apis/v1/{apfId}/service-apis/{serviceApiId}** - 4. Response without **"apiStatus"** parameter. 4. Response to Discover Request By Invoker: 1. **200 OK** response. 2. Response body must follow **DiscoveredAPIs** data structure: * Check if DiscoveredAPIs contains the API Published previously - * Check if **NOT** contains the **apiStatus** keys - 5. Response to Remove published Service API at CCF: - 1. **204 No Content** + * Check if contains the **apiStatus** with aefId1 + 5. Response to Update published Service API at CCF: + 1. **200 OK** + 2. Store response with updated serviceAPIDescription. 6. Mock Server received messages must accomplish: 1. **Two Events have been received**. - 2. Validate received events follow **EventNotification** data structure, with **apiIds** in **eventDetail** parameter. - 1. One should be **SERVICE_API_AVAILABLE** apiId of published API with **eventDetails** containing **apiIds** parameter. - 2. The other one must be **SERVICE_API_UNAVAILABLE** apiId of published API with **eventDetails** containing **apiIds** parameter. + 2. Validate received events follow **EventNotification** data structure, with **eventDetail** parameter. + 1. One should be **SERVICE_API_AVAILABLE** apiId of published API with **eventDetail** with apiIds and serviceAPIDescription. + 2. The other one must be **SERVICE_API_UPDATE** apiId published API with **eventDetail** containing serviceAPIDescription updated. -## Test Case 3: Publish without apiStatus feature receive eventDetails without eventDetails (apiMonitoringStatus active) +--- +## Test Case 13: Update published API with apiStatus empty and apiStatusMonitoring inactive -**Test ID**: ***api_status-3*** +**Test ID**: ***api_status-13*** **Description**: - This test case will check if an invoker subscribed to events **SERVICE_API_AVAILABLE** and **SERVICE_API_UNAVAILABLE**, with only ***apiStatusMonitoring*** active, receive SERVICE_API_AVAILABLE in mockserver when api is published by a provider, not containing eventDetails, and the same when api is unpublished. + This test case will check if an invoker subscribed to events **SERVICE_API_AVAILABLE**, **SERVICE_API_UNAVAILABLE** and **SERVICE_API_UPDATE** with ***apiStatusMonitoring*** and **Enhanced_event_report** active, receive SERVICE_API_AVAILABLE in mockserver when api is published by a provider, containing eventDetails, and SERVICE_API_UPDATE after update apiStatus to empty aefIds array with **ApiStatusMonitoring** inactive. **Pre-Conditions**: @@ -187,15 +1045,18 @@ At this documentation you will have all information and related files and exampl * **Mock Server is clean.** **Execution Steps**: + 1. Register Invoker and Onboard Invoker at CCF. 2. Register Provider at CCF with 2 aefs. - 3. Subscribe to **SERVICE_API_AVAILABLE** and **SERVICE_API_UNAVAILABLE**. ***apiStatusMonitoring*** **active** at supported features (binary 1000-> string **8**) + 3. Subscribe to **SERVICE_API_AVAILABLE**, **SERVICE_API_UNAVAILABLE** and **SERVICE_API_UPDATE**. **apiStatusMonitoring** and **Enhanced_event_report** **active** at supported features (binary 1100-> string **C**) 4. Publish Service API at CCF: - 1. Supported Features with apiStatusMonitoring flag inactive (binary 0 0000 0000 -> string **000**) - 2. This API not includes "API Status" information at **service API Description**. + 1. Supported Features with apiStatusMonitoring flag active (binary 0 0010 0000 -> string **020**) + 2. This API includes "API Status" information at **service API Description** with only aefId1. 5. Discover Service APIs by Invoker 1. includes filter by query parameter **aef-id** - 6. Provider remove published API. + 6. Update Published API: + 1. apiStatus present with empty aefIds array. + 2. apiStatusMonitoring feature not active (binary 0 0000 0000 -> string **0**) **Information of Test**: @@ -204,22 +1065,27 @@ At this documentation you will have all information and related files and exampl 3. Event Subscription to SERVICE_API_AVAILABLE and SERVICE_API_UNAVAILABLE of provider previously registered: 1. Send **POST** to **https://{CAPIF_HOSTNAME}/capif-events/v1/{subscriberId}/subscriptions** 2. body [event subscription request body] with: - 1. events: **['SERVICE_API_AVAILABLE','SERVICE_API_UNAVAILABLE']** - 2. supportedFeatures: binary 1000 -> string **8** + 1. events: **['SERVICE_API_AVAILABLE','SERVICE_API_UNAVAILABLE','SERVICE_API_UPDATE']** + 2. supportedFeatures: binary 1100 -> string **C** 3. Use **Invoker Certificate** 4. Publish Service API at CCF: * Send **POST** to ccf_publish_url **https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis** * body [service api description] with **service_1** and **service_2** apiNames and realted with aefId1 and aefId2. - * supportedFeatures **000** + * supportedFeatures **020** * 2 profiles, one with each aef. + * apiStatus with aefId1 inside array * Use **APF Certificate** 5. Request Discover Published APIs: * Send **GET** to **https://{CAPIF_HOSTNAME}/service-apis/v1/allServiceAPIs?api-invoker-id={apiInvokerId}&aef-id=${aefId}** * Param api-invoker-id is mandatory * Use **Invoker Certificate** - 6. Remove published Service API: - * Send **DELETE** to resource URL **https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis/{SERVICE_API_ID}** + 6. Update published Service API: + * Send **PUT** to resource URL **https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis/{SERVICE_API_ID}** * Use **APF Certificate** + * body [service api description] with **service_1** and **service_2** apiNames and realted with aefId1 and aefId2. + * supportedFeatures **0** + * 2 profiles, one with each aef. + * apiStatus present with empty aefIds array. **Expected Result**: @@ -241,31 +1107,33 @@ At this documentation you will have all information and related files and exampl * resourceName resource_1 and aefId1 * resourceName resource_2 and aefId2 3. Response Header **Location** must be received with URI to new resource created, following this structure: **{apiRoot}/published-apis/v1/{apfId}/service-apis/{serviceApiId}** - 4. Response without **"apiStatus"** parameter. 4. Response to Discover Request By Invoker: 1. **200 OK** response. 2. Response body must follow **DiscoveredAPIs** data structure: * Check if DiscoveredAPIs contains the API Published previously - * Check if **NOT** contains the **apiStatus** keys - 5. Response to Remove published Service API at CCF: - 1. **204 No Content** - 6. Mock Server received messages must accomplish: - 1. **Two Events have been received**. - 2. Validate received events follow **EventNotification** data structure, with **apiIds** in **eventDetail** parameter. - 1. One should be **SERVICE_API_AVAILABLE** apiId of published API without **eventDetails**. - 2. The other one must be **SERVICE_API_UNAVAILABLE** apiId of published API without **eventDetails**. - + * Check if contains the **apiStatus** with aefId1 -## ------------------------------------- + 5. Response to Update request must accomplish: + 1. **400 Bad Request** + 2. Error Response Body must accomplish with **ProblemDetails** data structure with: + * status 400 + * title with message "Bad Request" + * detail with message "Set apiStatus with apiStatusMonitoring feature inactive at supportedFeatures if not allowed". + * cause with message "apiStatus can't be set if apiStatusMonitoring is inactive". + 6. Mock Server received messages must accomplish: + 1. **One Event have been received**. + 2. Validate received events follow **EventNotification** data structure, with **apiIds** in **eventDetail** parameter. + 1. One should be **SERVICE_API_AVAILABLE** apiId of published API with **eventDetails** with apiIds and serviceAPIDescription. -## Test Case 12: Update published API without apiStatus and apiStatusMonitoring inactive +--- +## Test Case 14: Update published API with apiStatus empty and apiStatusMonitoring active -**Test ID**: ***api_status-12*** +**Test ID**: ***api_status-14*** **Description**: - This test case will check if an invoker subscribed to events **SERVICE_API_AVAILABLE**, **SERVICE_API_UNAVAILABLE** and **SERVICE_API_UPDATE** with ***apiStatusMonitoring*** and **Enhanced_event_report** active, receive SERVICE_API_AVAILABLE in mockserver when api is published by a provider, containing eventDetails, and SERVICE_API_UPDATE after update apiStatus to not present. + This test case will check if an invoker subscribed to events **SERVICE_API_AVAILABLE**, **SERVICE_API_UNAVAILABLE** and **SERVICE_API_UPDATE** with ***apiStatusMonitoring*** and **Enhanced_event_report** active, receive SERVICE_API_AVAILABLE in mockserver when api is published by a provider, containing eventDetails, SERVICE_API_UPDATE and SERVICE_API_UNAVAILABLE after update apiStatus to empty aefIds array with **ApiStatusMonitoring** active. **Pre-Conditions**: @@ -275,6 +1143,7 @@ At this documentation you will have all information and related files and exampl * **Mock Server is clean.** **Execution Steps**: + 1. Register Invoker and Onboard Invoker at CCF. 2. Register Provider at CCF with 2 aefs. 3. Subscribe to **SERVICE_API_AVAILABLE**, **SERVICE_API_UNAVAILABLE** and **SERVICE_API_UPDATE**. **apiStatusMonitoring** and **Enhanced_event_report** **active** at supported features (binary 1100-> string **C**) @@ -284,8 +1153,8 @@ At this documentation you will have all information and related files and exampl 5. Discover Service APIs by Invoker 1. includes filter by query parameter **aef-id** 6. Update Published API: - 1. apiStatus Not present - 2. aipStatusMonitoring feature not active (binary 0 0000 0000 -> string **0**) + 1. apiStatus present with empty aefIds array. + 2. apiStatusMonitoring feature active (binary 0 0010 0000 -> string **20**) **Information of Test**: @@ -312,9 +1181,9 @@ At this documentation you will have all information and related files and exampl * Send **PUT** to resource URL **https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis/{SERVICE_API_ID}** * Use **APF Certificate** * body [service api description] with **service_1** and **service_2** apiNames and realted with aefId1 and aefId2. - * supportedFeatures **0** + * supportedFeatures **20** * 2 profiles, one with each aef. - * apiStatus not present. + * apiStatus present with empty aefIds array. **Expected Result**: @@ -336,7 +1205,6 @@ At this documentation you will have all information and related files and exampl * resourceName resource_1 and aefId1 * resourceName resource_2 and aefId2 3. Response Header **Location** must be received with URI to new resource created, following this structure: **{apiRoot}/published-apis/v1/{apfId}/service-apis/{serviceApiId}** - 4. Response without **"apiStatus"** parameter. 4. Response to Discover Request By Invoker: 1. **200 OK** response. 2. Response body must follow **DiscoveredAPIs** data structure: @@ -346,18 +1214,20 @@ At this documentation you will have all information and related files and exampl 1. **200 OK** 2. Store response with updated serviceAPIDescription. 6. Mock Server received messages must accomplish: - 1. **Two Events have been received**. - 2. Validate received events follow **EventNotification** data structure, with **apiIds** in **eventDetail** parameter. - 1. One should be **SERVICE_API_AVAILABLE** apiId of published API with **eventDetails** with apiIds and serviceAPIDescription. - 2. The other one must be **SERVICE_API_UPDATE** apiId published API with **eventDetails** containing serviceAPIDescription updated. + 1. **Two Event have been received**. + 2. Validate received events follow **EventNotification** data structure, with **apiIds** and **serviceAPIDescription** in **eventDetail** parameter. + 1. One should be **SERVICE_API_AVAILABLE**. + 2. One should be **SERVICE_API_UPDATE**. + 3. One should be **SERVICE_API_UNAVAILABLE**. -## Test Case 13: Update published API with apiStatus empty and apiStatusMonitoring inactive +--- +## Test Case 15: Update published API with apiStatus only aef2 and apiStatusMonitoring active -**Test ID**: ***api_status-13*** +**Test ID**: ***api_status-15*** **Description**: - This test case will check if an invoker subscribed to events **SERVICE_API_AVAILABLE**, **SERVICE_API_UNAVAILABLE** and **SERVICE_API_UPDATE** with ***apiStatusMonitoring*** and **Enhanced_event_report** active, receive SERVICE_API_AVAILABLE in mockserver when api is published by a provider, containing eventDetails, and SERVICE_API_UPDATE after update apiStatus to empty aefIds array qith **ApiStatusMonitoring** inactive. + This test case will check if an invoker subscribed to events **SERVICE_API_AVAILABLE**, **SERVICE_API_UNAVAILABLE** and **SERVICE_API_UPDATE** with ***apiStatusMonitoring*** and **Enhanced_event_report** active, receive SERVICE_API_AVAILABLE in mockserver when api is published by a provider, containing eventDetails and SERVICE_API_UPDATE after update apiStatus to aefId2 array with **ApiStatusMonitoring** active. **Pre-Conditions**: @@ -367,6 +1237,7 @@ At this documentation you will have all information and related files and exampl * **Mock Server is clean.** **Execution Steps**: + 1. Register Invoker and Onboard Invoker at CCF. 2. Register Provider at CCF with 2 aefs. 3. Subscribe to **SERVICE_API_AVAILABLE**, **SERVICE_API_UNAVAILABLE** and **SERVICE_API_UPDATE**. **apiStatusMonitoring** and **Enhanced_event_report** **active** at supported features (binary 1100-> string **C**) @@ -377,7 +1248,7 @@ At this documentation you will have all information and related files and exampl 1. includes filter by query parameter **aef-id** 6. Update Published API: 1. apiStatus present with empty aefIds array. - 2. apiStatusMonitoring feature not active (binary 0 0000 0000 -> string **0**) + 2. apiStatusMonitoring feature active (binary 0 0010 0000 -> string **20**) **Information of Test**: @@ -404,9 +1275,9 @@ At this documentation you will have all information and related files and exampl * Send **PUT** to resource URL **https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis/{SERVICE_API_ID}** * Use **APF Certificate** * body [service api description] with **service_1** and **service_2** apiNames and realted with aefId1 and aefId2. - * supportedFeatures **0** + * supportedFeatures **20** * 2 profiles, one with each aef. - * apiStatus present with empty aefIds array. + * apiStatus present with aefId2 in aefIds array. **Expected Result**: @@ -428,31 +1299,120 @@ At this documentation you will have all information and related files and exampl * resourceName resource_1 and aefId1 * resourceName resource_2 and aefId2 3. Response Header **Location** must be received with URI to new resource created, following this structure: **{apiRoot}/published-apis/v1/{apfId}/service-apis/{serviceApiId}** - 4. Response without **"apiStatus"** parameter. 4. Response to Discover Request By Invoker: 1. **200 OK** response. 2. Response body must follow **DiscoveredAPIs** data structure: * Check if DiscoveredAPIs contains the API Published previously * Check if contains the **apiStatus** with aefId1 - - 5. Response to Publish request must accomplish: - 1. **400 Bad Request** - 2. Error Response Body must accomplish with **ProblemDetails** data structure with: - * status 400 - * title with message "Bad Request" - * detail with message "Set apiStatus with apiStatusMonitoring feature inactive at supportedFeatures if not allowed". - * cause with message "apiStatus can't be set if apiStatusMonitoring is inactive". - <!-- 5. Response to Update published Service API at CCF: + 5. Response to Update published Service API at CCF: 1. **200 OK** - 2. Store response with updated serviceAPIDescription. --> + 2. Store response with updated serviceAPIDescription. 6. Mock Server received messages must accomplish: - 1. **Three Events have been received**. - 2. Validate received events follow **EventNotification** data structure, with **apiIds** in **eventDetail** parameter. - 1. One should be **SERVICE_API_AVAILABLE** apiId of published API with **eventDetails** with apiIds and serviceAPIDescription. + 1. **Two Event have been received**. + 2. Validate received events follow **EventNotification** data structure, with **apiIds** and **serviceAPIDescription** in **eventDetail** parameter. + 1. One should be **SERVICE_API_AVAILABLE**. + 2. One should be **SERVICE_API_UPDATE**. + +--- +## Test Case 16: Published API without aefs available updated to one aef available + +**Test ID**: ***api_status-16*** + +**Description**: + + This test case will check if an invoker subscribed to events **SERVICE_API_AVAILABLE**, **SERVICE_API_UNAVAILABLE** and **SERVICE_API_UPDATE** with ***apiStatusMonitoring*** and **Enhanced_event_report** active, receive SERVICE_API_UNAVAILABLE in mockserver when api is published with apiStatus empty by a provider containing eventDetails, SERVICE_API_UPDATE and SERVICE_API_AVAILABLE after update apiStatus to aefId2 array with **ApiStatusMonitoring** active, and SERVICE_API_UNAVAILABLE when API is unpublished. + +**Pre-Conditions**: + + * CAPIF subscriber is pre-authorised (has valid InvokerId or apfId from CAPIF Authority) + * CAPIF provider is correctly registered with 2 aefs. + * **Mock Server is up and running to receive requests.** + * **Mock Server is clean.** + +**Execution Steps**: + + 1. Register Invoker and Onboard Invoker at CCF. + 2. Register Provider at CCF with 2 aefs. + 3. Subscribe to **SERVICE_API_AVAILABLE**, **SERVICE_API_UNAVAILABLE** and **SERVICE_API_UPDATE**. **apiStatusMonitoring** and **Enhanced_event_report** **active** at supported features (binary 1100-> string **C**) + 4. Publish Service API at CCF: + 1. Supported Features with apiStatusMonitoring flag active (binary 0 0010 0000 -> string **020**) + 2. This API includes "API Status" information at **service API Description** with empty aefIds array. + 5. Discover Service APIs by Invoker + 1. includes filter by query parameter **aef-id** + 6. Update Published API: + 1. apiStatus present with aefId2 in aefIds array. + 2. apiStatusMonitoring feature active (binary 0 0010 0000 -> string **20**) + 7. Provider remove published API. + +**Information of Test**: + 1. Perform [Invoker Onboarding] + 2. Perform [Provider Registration] with 2 aefs + 3. Event Subscription to SERVICE_API_AVAILABLE and SERVICE_API_UNAVAILABLE of provider previously registered: + 1. Send **POST** to **https://{CAPIF_HOSTNAME}/capif-events/v1/{subscriberId}/subscriptions** + 2. body [event subscription request body] with: + 1. events: **['SERVICE_API_AVAILABLE','SERVICE_API_UNAVAILABLE','SERVICE_API_UPDATE']** + 2. supportedFeatures: binary 1100 -> string **C** + 3. Use **Invoker Certificate** + 4. Publish Service API at CCF: + * Send **POST** to ccf_publish_url **https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis** + * body [service api description] with **service_1** and **service_2** apiNames and realted with aefId1 and aefId2. + * supportedFeatures **020** + * 2 profiles, one with each aef. + * apiStatus with empty aefIds array. + * Use **APF Certificate** + 5. Request Discover Published APIs: + * Send **GET** to **https://{CAPIF_HOSTNAME}/service-apis/v1/allServiceAPIs?api-invoker-id={apiInvokerId}&aef-id=${aefId}** + * Param api-invoker-id is mandatory + * Use **Invoker Certificate** + 6. Update published Service API: + * Send **PUT** to resource URL **https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis/{SERVICE_API_ID}** + * Use **APF Certificate** + * body [service api description] with **service_1** and **service_2** apiNames and realted with aefId1 and aefId2. + * supportedFeatures **20** + * 2 profiles, one with each aef. + * apiStatus present with aefId2 in aefIds array. + 7. Remove published Service API: + * Send **DELETE** to resource URL **https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis/{SERVICE_API_ID}** + * Use **APF Certificate** -## -------------------- +**Expected Result**: + 1. Response to Onboard request must accomplish: + 1. **201 Created** + 2. Response Body must follow **APIInvokerEnrolmentDetails** data structure with: + * apiInvokerId + * onboardingInformation->apiInvokerCertificate must contain the public key signed. + 3. Response Header **Location** must be received with URI to new resource created, following this structure: **{apiRoot}/api-invoker-management/{apiVersion}/onboardedInvokers/{onboardingId}** + 2. Response to Event Subscription must accomplish: + 1. **201 Created** + 2. The URI of the created resource shall be returned in the "Location" HTTP header, following this structure: **{apiRoot}/capif-events/{apiVersion}/{subscriberId}/subscriptions/{subscriptionId}** + 3. Response Body must follow **EventSubscription** data structure. + 3. Response to Publish request must accomplish: + 1. **201 Created** + 2. Response Body must follow **ServiceAPIDescription** data structure with: + * apiId + * 2 profiles with: + * resourceName resource_1 and aefId1 + * resourceName resource_2 and aefId2 + 3. Response Header **Location** must be received with URI to new resource created, following this structure: **{apiRoot}/published-apis/v1/{apfId}/service-apis/{serviceApiId}** + 4. Response to Discover Request By Invoker: + 1. **200 OK** response. + 2. Response body must follow **DiscoveredAPIs** data structure: + * Check if DiscoveredAPIs contains the API Published previously + * Check if contains the **apiStatus** with aefId1 + 5. Response to Update published Service API at CCF: + 1. **200 OK** + 2. Store response with updated serviceAPIDescription. + 6. Mock Server received messages must accomplish: + 1. **Two Event have been received**. + 2. Validate received events follow **EventNotification** data structure, with **apiIds** and **serviceAPIDescription** in **eventDetail** parameter. + 1. One should be **SERVICE_API_UNAVAILABLE** aefIds array inside apiStatus empty. + 2. One should be **SERVICE_API_UPDATE** aefIds array inside apiStatus contains apfId2. + 3. One should be **SERVICE_API_AVAILABLE** aefIds array inside apiStatus contains apfId2. + 4. One should be **SERVICE_API_UNAVAILABLE** aefIds array inside apiStatus contains apfId2. + +--- ## Test Case 17: Patch published (apiStatusMonitoring active) API with apiStatus only aefId2 **Test ID**: ***api_status-17*** @@ -469,6 +1429,7 @@ At this documentation you will have all information and related files and exampl * **Mock Server is clean.** **Execution Steps**: + 1. Register Invoker and Onboard Invoker at CCF. 2. Register Provider at CCF with 2 aefs. 3. Subscribe to **SERVICE_API_AVAILABLE**, **SERVICE_API_UNAVAILABLE** and **SERVICE_API_UPDATE**. **apiStatusMonitoring** and **Enhanced_event_report** **active** at supported features (binary 1100-> string **C**) @@ -527,7 +1488,6 @@ At this documentation you will have all information and related files and exampl * resourceName resource_1 and aefId1 * resourceName resource_2 and aefId2 3. Response Header **Location** must be received with URI to new resource created, following this structure: **{apiRoot}/published-apis/v1/{apfId}/service-apis/{serviceApiId}** - 4. Response without **"apiStatus"** parameter. 4. Response to Discover Request By Invoker: 1. **200 OK** response. 2. Response body must follow **DiscoveredAPIs** data structure: @@ -542,6 +1502,7 @@ At this documentation you will have all information and related files and exampl 1. One should be **SERVICE_API_AVAILABLE** apiId of published API with **eventDetails** with apiIds and serviceAPIDescription. 2. The other one must be **SERVICE_API_UPDATE** apiId published API with **eventDetails** containing serviceAPIDescription patched. +--- ## Test Case 18: Patch published (apiStatusMonitoring active) API with apiStatus aef1 and aef2 **Test ID**: ***api_status-18*** @@ -558,6 +1519,7 @@ At this documentation you will have all information and related files and exampl * **Mock Server is clean.** **Execution Steps**: + 1. Register Invoker and Onboard Invoker at CCF. 2. Register Provider at CCF with 2 aefs. 3. Subscribe to **SERVICE_API_AVAILABLE**, **SERVICE_API_UNAVAILABLE** and **SERVICE_API_UPDATE**. **apiStatusMonitoring** and **Enhanced_event_report** **active** at supported features (binary 1100-> string **C**) @@ -616,7 +1578,6 @@ At this documentation you will have all information and related files and exampl * resourceName resource_1 and aefId1 * resourceName resource_2 and aefId2 3. Response Header **Location** must be received with URI to new resource created, following this structure: **{apiRoot}/published-apis/v1/{apfId}/service-apis/{serviceApiId}** - 4. Response without **"apiStatus"** parameter. 4. Response to Discover Request By Invoker: 1. **200 OK** response. 2. Response body must follow **DiscoveredAPIs** data structure: @@ -631,6 +1592,7 @@ At this documentation you will have all information and related files and exampl 1. One should be **SERVICE_API_AVAILABLE** apiId of published API with **eventDetails** with apiIds and serviceAPIDescription. 2. The other one must be **SERVICE_API_UPDATE** apiId published API with **eventDetails** containing serviceAPIDescription patched. +--- ## Test Case 19: Patch published (apiStatusMonitoring inactive) API with apiStatus aefId1 and aefId2 **Test ID**: ***api_status-19*** @@ -647,6 +1609,7 @@ At this documentation you will have all information and related files and exampl * **Mock Server is clean.** **Execution Steps**: + 1. Register Invoker and Onboard Invoker at CCF. 2. Register Provider at CCF with 2 aefs. 3. Subscribe to **SERVICE_API_AVAILABLE**, **SERVICE_API_UNAVAILABLE** and **SERVICE_API_UPDATE**. **apiStatusMonitoring** and **Enhanced_event_report** **active** at supported features (binary 1100-> string **C**) @@ -675,15 +1638,11 @@ At this documentation you will have all information and related files and exampl * 2 profiles, one with each aef. * apiStatus with aefId1 inside array * Use **APF Certificate** - <!-- 5. Request Discover Published APIs: + 5. Request Discover Published APIs: * Send **GET** to **https://{CAPIF_HOSTNAME}/service-apis/v1/allServiceAPIs?api-invoker-id={apiInvokerId}&aef-id=${aefId}** * Param api-invoker-id is mandatory - * Use **Invoker Certificate** --> - <!-- 6. Update published Service API: - * Send **PATCH** to resource URL **https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis/{SERVICE_API_ID}** - * Use **APF Certificate** - * body [service api description patch] and realted with aefId1 and aefId2. - * apiStatus present with aefId1 and aefId2. --> + * Use **Invoker Certificate** + **Expected Result**: @@ -716,6 +1675,7 @@ At this documentation you will have all information and related files and exampl 5. Mock Server received messages must accomplish: 1. **No Events have been received**. +--- ## Test Case 20: Patch published without aefs available API with apiStatus only aef2 **Test ID**: ***api_status-20*** @@ -732,6 +1692,7 @@ At this documentation you will have all information and related files and exampl * **Mock Server is clean.** **Execution Steps**: + 1. Register Invoker and Onboard Invoker at CCF. 2. Register Provider at CCF with 2 aefs. 3. Subscribe to **SERVICE_API_AVAILABLE**, **SERVICE_API_UNAVAILABLE** and **SERVICE_API_UPDATE**. **apiStatusMonitoring** and **Enhanced_event_report** **active** at supported features (binary 1100-> string **C**) @@ -790,7 +1751,6 @@ At this documentation you will have all information and related files and exampl * resourceName resource_1 and aefId1 * resourceName resource_2 and aefId2 3. Response Header **Location** must be received with URI to new resource created, following this structure: **{apiRoot}/published-apis/v1/{apfId}/service-apis/{serviceApiId}** - 4. Response without **"apiStatus"** parameter. 4. Response to Discover Request By Invoker: 1. **200 OK** response. 2. Response body must follow **DiscoveredAPIs** data structure: diff --git a/doc/testing/testplan/vendor_extensibility/README.md b/doc/testing/testplan/vendor_extensibility/README.md index 4cf359c..11697f9 100644 --- a/doc/testing/testplan/vendor_extensibility/README.md +++ b/doc/testing/testplan/vendor_extensibility/README.md @@ -1,6 +1,7 @@ # Test Plan for Vendor Extensibility Feature At this documentation you will have all information and related files and examples of test plan for this feature. +--- ## Test Case 1: Published API with vendor extensibility **Test ID**: ***vendor_extensibility-1*** @@ -61,6 +62,7 @@ At this documentation you will have all information and related files and exampl * Check if DiscoveredAPIs contains the API Published previously * Check if contains the **vendorSpecific** keys +--- ## Test Case 2: Published API with vendor extensibility and discover with VendSpecQueryParams disabled **Test ID**: ***vendor_extensibility-2*** @@ -121,6 +123,7 @@ At this documentation you will have all information and related files and exampl * detail with message "API Invoker {api_invoker_id} has no API Published that accomplish filter conditions". * cause with message "No API Published accomplish filter conditions". +--- ## Test Case 3: Publish API with vendorExt active and discover without supported features filter **Test ID**: ***vendor_extensibility-3*** @@ -179,6 +182,7 @@ At this documentation you will have all information and related files and exampl * Check if DiscoveredAPIs contains the API Published previously * Check **NOT** contains the **vendorSpecific** keys +--- ## Test Case 4: Publish API with vendorExt active but without vendorSpecifics **Test ID**: ***vendor_extensibility-4*** @@ -222,6 +226,7 @@ At this documentation you will have all information and related files and exampl * detail with message "If and only if VendorExt feature is enabled, then vendor-specific fields should be defined". * cause with message "Vendor extensibility misconfiguration". +--- ## Test Case 5: Publish API with vendorExt inactive but with vendorSpecifics **Test ID**: ***vendor_extensibility-5*** @@ -265,7 +270,7 @@ At this documentation you will have all information and related files and exampl * detail with message "If and only if VendorExt feature is enabled, then vendor-specific fields should be defined". * cause with message "Vendor extensibility misconfiguration". - +--- ## Test Case 6: Published API without vendor extensibility discover with VendSpecQueryParams enabled **Test ID**: ***vendor_extensibility-6*** @@ -328,6 +333,7 @@ At this documentation you will have all information and related files and exampl * detail with message "API Invoker {api_invoker_id} has no API Published that accomplish filter conditions". * cause with message "No API Published accomplish filter conditions". +--- ## Test Case 7: Published API without vendor extensibility and discover with vendSpecQueryParams disabled **Test ID**: ***vendor_extensibility-7*** @@ -388,7 +394,7 @@ At this documentation you will have all information and related files and exampl * Check if DiscoveredAPIs contains the API Published previously * Check if **NOT** contains any **vendorSpecific** keys - +--- ## Test Case 8: Published API without vendor extensibility and discover without supported-features query parameter **Test ID**: ***vendor_extensibility-8*** @@ -449,6 +455,7 @@ At this documentation you will have all information and related files and exampl * Check if DiscoveredAPIs contains the API Published previously * Check if **NOT** contains any **vendorSpecific** keys +--- ## Test Case 9: Publish API without supportedFeatures **Test ID**: ***vendor_extensibility-9*** -- GitLab