From c9aeeb6b772ce7de3806d556a70b8011e5a7067e Mon Sep 17 00:00:00 2001 From: Jorge Moratinos Salcines Date: Mon, 24 Feb 2025 10:54:37 +0100 Subject: [PATCH 1/7] Initial testplan index introduced --- doc/testing/testplan/README.md | 1 + doc/testing/testplan/event_filter/README.md | 1783 +++++++++++++++++++ 2 files changed, 1784 insertions(+) create mode 100644 doc/testing/testplan/event_filter/README.md diff --git a/doc/testing/testplan/README.md b/doc/testing/testplan/README.md index 11b19c83..dcaa6102 100644 --- a/doc/testing/testplan/README.md +++ b/doc/testing/testplan/README.md @@ -15,3 +15,4 @@ List of Common API Services implemented: ## Features * [Vendor Extensibility](./vendor_extensibility/README.md) * [Api Status](./api_status/README.md) +* [Event Filter](./event_filter/README.md) diff --git a/doc/testing/testplan/event_filter/README.md b/doc/testing/testplan/event_filter/README.md new file mode 100644 index 00000000..dc8f9b99 --- /dev/null +++ b/doc/testing/testplan/event_filter/README.md @@ -0,0 +1,1783 @@ +# Test Plan for Event Filter Feature +At this documentation you will have all information and related files and examples of test plan for this feature. + + +**UNDER DEVELOPMENT** +--- +## Test Case 1: Publish without apiStatus feature receive eventDetails with serviceAPIDescription + +**Test ID**: ***api_status-1*** + +**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 SERVICE_API_AVAILABLE in mockserver when api is published by a provider, containing apiIds and serviceAPIDescription 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*** 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**. ***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 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 **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}** + * 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. First **SERVICE_API_AVAILABLE** event. + 2. Other with **SERVICE_API_UNAVAILABLE** event. + +--- +## Test Case 12: Update published API without apiStatus and apiStatusMonitoring inactive + +**Test ID**: ***api_status-12*** + +**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. + +**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 only aefId1. + 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**) + +**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 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. 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**: + + 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 Events have been received**. + 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 13: Update published API with apiStatus empty and apiStatusMonitoring inactive + +**Test ID**: ***api_status-13*** + +**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 with **ApiStatusMonitoring** inactive. + +**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 only aefId1. + 5. Discover Service APIs by Invoker + 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**) + +**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 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. 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**: + + 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 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 14: Update published API with apiStatus empty and apiStatusMonitoring active + +**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, SERVICE_API_UPDATE and SERVICE_API_UNAVAILABLE after update apiStatus to empty aefIds array with **ApiStatusMonitoring** active. + +**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 only aefId1. + 5. Discover Service APIs by Invoker + 1. includes filter by query parameter **aef-id** + 6. Update Published API: + 1. apiStatus present with empty aefIds array. + 2. apiStatusMonitoring feature active (binary 0 0010 0000 -> string **20**) + +**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 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. 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 empty aefIds array. + +**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_AVAILABLE**. + 2. One should be **SERVICE_API_UPDATE**. + 3. One should be **SERVICE_API_UNAVAILABLE**. + +--- +## Test Case 15: Update published API with apiStatus only aef2 and apiStatusMonitoring active + +**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 aefId2 array with **ApiStatusMonitoring** active. + +**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 only aefId1. + 5. Discover Service APIs by Invoker + 1. includes filter by query parameter **aef-id** + 6. Update Published API: + 1. apiStatus present with empty aefIds array. + 2. apiStatusMonitoring feature active (binary 0 0010 0000 -> string **20**) + +**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 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. 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. + +**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_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*** + +**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 (with apiStatusMonitoring active), containing eventDetails, and SERVICE_API_UPDATE after patch with apfId2 in apiStatus 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**, **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 only aefId1. + 5. Discover Service APIs by Invoker + 1. includes filter by query parameter **aef-id** + 6. Patch Published API: + 1. apiStatus present with aefId2 in array. + +**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 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. 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 aefId2. + +**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 Patch 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** 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*** + +**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 (with apiStatusMonitoring active), containing eventDetails, and SERVICE_API_UPDATE after patch with apfId1 and apfId2 in apiStatus 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**, **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 only aefId1. + 5. Discover Service APIs by Invoker + 1. includes filter by query parameter **aef-id** + 6. Patch Published API: + 1. apiStatus present with aefId1 and aefId2 in array. + +**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 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. 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. + +**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 Patch 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** 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*** + +**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 (with apiStatusMonitoring inactive), containing eventDetails, and **NO SERVICE_API_UPDATE** after patch with apfId1 and apfId2 in apiStatus array, because **apiStatusMonitoring** in publish is inactive. + +**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 0000 0000 -> string **000**) + 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. Patch Published API: + 1. apiStatus present with aefId1 and aefId2 in array. + +**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 **000** + * 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 20: Patch published without aefs available API with apiStatus only aef2 + +**Test ID**: ***api_status-20*** + +**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 by a provider (with **apiStatusMonitoring** active), containing eventDetails, and SERVICE_API_UPDATE and SERVICE_API_AVAILABLE after patch with apfId1 and apfId2 in apiStatus array, becasue change from unavailable to available and also serviceAPIDescription is updated. + +**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 array. + 5. Discover Service APIs by Invoker + 1. includes filter by query parameter **aef-id** + 6. Patch Published API: + 1. apiStatus present with aefId1 and aefId2 in array. + +**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 empty 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 **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. + +**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 Patch 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_UNAVAILABLE** 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. + 3. Last one should be **SERVICE_API_AVAILABLE** apiId of published API with **eventDetails** with apiIds and serviceAPIDescription. + + + + + [service api description]: ../api_publish_service/service_api_description_post_example.json "Service API Description Request" + [service api description patch]: ../api_publish_service/service_api_description_patch_example.json "Service API Description Patch Request" + [publisher register body]: ../api_publish_service/publisher_register_body.json "Publish register Body" + [invoker onboarding body]: ../api_invoker_management/invoker_details_post_example.json "API Invoker Request" + [provider request body]: ../api_provider_management/provider_details_post_example.json "API Provider Enrolment Request" + [provider request patch body]: ../api_provider_management/provider_details_enrolment_details_patch_example.json "API Provider Enrolment Patch Request" + + [invoker onboarding]: ../common_operations/README.md#onboard-an-invoker "Invoker Onboarding" + [provider registration]: ../common_operations/README.md#register-a-provider "Provider Registration" + [event subscription request body]: ../api_events_service/event_subscription.json "Event Subscription Request" -- GitLab From 4440ea6a5bd6825a15716094c20a8018cbfdcc41 Mon Sep 17 00:00:00 2001 From: Jorge Moratinos Salcines Date: Tue, 25 Feb 2025 09:24:16 +0100 Subject: [PATCH 2/7] first test on event filter suite --- doc/testing/testplan/event_filter/README.md | 1729 +------------------ 1 file changed, 31 insertions(+), 1698 deletions(-) diff --git a/doc/testing/testplan/event_filter/README.md b/doc/testing/testplan/event_filter/README.md index dc8f9b99..f70d605e 100644 --- a/doc/testing/testplan/event_filter/README.md +++ b/doc/testing/testplan/event_filter/README.md @@ -4,1424 +4,13 @@ At this documentation you will have all information and related files and exampl **UNDER DEVELOPMENT** --- -## Test Case 1: Publish without apiStatus feature receive eventDetails with serviceAPIDescription +## Test Case 1: Service API Available filtered by apiIds -**Test ID**: ***api_status-1*** +**Test ID**: ***event_filter-1*** **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 SERVICE_API_AVAILABLE in mockserver when api is published by a provider, containing apiIds and serviceAPIDescription 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*** 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**. ***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 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 **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}** - * 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. First **SERVICE_API_AVAILABLE** event. - 2. Other with **SERVICE_API_UNAVAILABLE** event. - ---- -## Test Case 12: Update published API without apiStatus and apiStatusMonitoring inactive - -**Test ID**: ***api_status-12*** - -**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. - -**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 only aefId1. - 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**) - -**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 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. 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**: - - 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 Events have been received**. - 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 13: Update published API with apiStatus empty and apiStatusMonitoring inactive - -**Test ID**: ***api_status-13*** - -**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 with **ApiStatusMonitoring** inactive. - -**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 only aefId1. - 5. Discover Service APIs by Invoker - 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**) - -**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 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. 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**: - - 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 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 14: Update published API with apiStatus empty and apiStatusMonitoring active - -**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, SERVICE_API_UPDATE and SERVICE_API_UNAVAILABLE after update apiStatus to empty aefIds array with **ApiStatusMonitoring** active. - -**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 only aefId1. - 5. Discover Service APIs by Invoker - 1. includes filter by query parameter **aef-id** - 6. Update Published API: - 1. apiStatus present with empty aefIds array. - 2. apiStatusMonitoring feature active (binary 0 0010 0000 -> string **20**) - -**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 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. 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 empty aefIds array. - -**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_AVAILABLE**. - 2. One should be **SERVICE_API_UPDATE**. - 3. One should be **SERVICE_API_UNAVAILABLE**. - ---- -## Test Case 15: Update published API with apiStatus only aef2 and apiStatusMonitoring active - -**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 aefId2 array with **ApiStatusMonitoring** active. - -**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 only aefId1. - 5. Discover Service APIs by Invoker - 1. includes filter by query parameter **aef-id** - 6. Update Published API: - 1. apiStatus present with empty aefIds array. - 2. apiStatusMonitoring feature active (binary 0 0010 0000 -> string **20**) - -**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 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. 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. - -**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_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*** - -**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 (with apiStatusMonitoring active), containing eventDetails, and SERVICE_API_UPDATE after patch with apfId2 in apiStatus array. + 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**: @@ -1432,133 +21,47 @@ At this documentation you will have all information and related files and exampl **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 only aefId1. - 5. Discover Service APIs by Invoker - 1. includes filter by query parameter **aef-id** - 6. Patch Published API: - 1. apiStatus present with aefId2 in array. + 1. Register Invoker and Onboard Invoker at CCF. + 2. Register Provider at CCF with 2 aefs. + 3. 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 only aefId1. + 4. Discover Service APIs by Invoker + 1. includes filter by query parameter **aef-id** + 5. Invoker Subscribes to **SERVICE_API_AVAILABLE**, **SERVICE_API_UNAVAILABLE** and **SERVICE_API_UPDATE**. **apiStatusMonitoring** and **Enhanced_event_report** **active** at supported features (binary 1100-> string **C**). Filter by published **apiId**. + 6. Update Published API: + 1. apiStatus present with empty aefIds array. + 2. apiStatusMonitoring feature active (binary 0 0010 0000 -> string **20**) **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: + 1. Perform [Invoker Onboarding] + 2. Perform [Provider Registration] with 2 aefs + 3. 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: + 4. 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 aefId2. - -**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 Patch 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** 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*** - -**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 (with apiStatusMonitoring active), containing eventDetails, and SERVICE_API_UPDATE after patch with apfId1 and apfId2 in apiStatus 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**, **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 only aefId1. - 5. Discover Service APIs by Invoker - 1. includes filter by query parameter **aef-id** - 6. Patch Published API: - 1. apiStatus present with aefId1 and aefId2 in array. - -**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: + 5. 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. eventFilters set to [eventFilters:[{apiIds:['{API_ID}']},{apiIds:['{API_ID}']},{apiIds:['{API_ID}']}]] 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** + 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 **020** + * supportedFeatures **20** * 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. 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. + * apiStatus present with empty aefIds array. **Expected Result**: @@ -1585,188 +88,18 @@ At this documentation you will have all information and related files and exampl 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 Patch published Service API at CCF: + 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** 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*** - -**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 (with apiStatusMonitoring inactive), containing eventDetails, and **NO SERVICE_API_UPDATE** after patch with apfId1 and apfId2 in apiStatus array, because **apiStatusMonitoring** in publish is inactive. - -**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 0000 0000 -> string **000**) - 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. Patch Published API: - 1. apiStatus present with aefId1 and aefId2 in array. - -**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 **000** - * 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". + 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**. - 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 20: Patch published without aefs available API with apiStatus only aef2 - -**Test ID**: ***api_status-20*** - -**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 by a provider (with **apiStatusMonitoring** active), containing eventDetails, and SERVICE_API_UPDATE and SERVICE_API_AVAILABLE after patch with apfId1 and apfId2 in apiStatus array, becasue change from unavailable to available and also serviceAPIDescription is updated. - -**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 array. - 5. Discover Service APIs by Invoker - 1. includes filter by query parameter **aef-id** - 6. Patch Published API: - 1. apiStatus present with aefId1 and aefId2 in array. - -**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 empty 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 **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. - -**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 Patch 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_UNAVAILABLE** 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. - 3. Last one should be **SERVICE_API_AVAILABLE** apiId of published API with **eventDetails** with apiIds and serviceAPIDescription. -- GitLab From c0b8865575b7ae54a25e0902f3c96d20b4d2dff2 Mon Sep 17 00:00:00 2001 From: Jorge Moratinos Salcines Date: Mon, 10 Mar 2025 11:34:44 +0100 Subject: [PATCH 3/7] Updated events api test plan --- .../testplan/api_events_service/README.md | 7 +- doc/testing/testplan/event_filter/README.md | 127 ++++++++++++++++++ 2 files changed, 131 insertions(+), 3 deletions(-) diff --git a/doc/testing/testplan/api_events_service/README.md b/doc/testing/testplan/api_events_service/README.md index ee86bc3b..c6b37dbb 100644 --- a/doc/testing/testplan/api_events_service/README.md +++ b/doc/testing/testplan/api_events_service/README.md @@ -453,6 +453,7 @@ At this documentation you will have all information and related files and exampl 2. body [event subscription request body] with: 1. events: **['SERVICE_API_UPDATE']** 2. supportedFeatures: binary 0100 -> string **4** + 3. **eventFilter** set to apiId from published API. 3. Use **Invoker Certificate** 7. Update published API at CCF: @@ -850,7 +851,7 @@ At this documentation you will have all information and related files and exampl 1. Send **POST** to **https://{CAPIF_HOSTNAME}/capif-events/v1/{subscriberId}/subscriptions** 2. body [event subscription request body] with: 1. events: **['SERVICE_API_INVOCATION_SUCCESS','SERVICE_API_INVOCATION_FAILURE']** - 2. eventFilter: only receive events from provider's aefId. + 2. eventFilter: Not present. 3. supportedFeatures: binary 0000 -> string **0** 3. Use **Invoker Certificate** @@ -925,7 +926,7 @@ At this documentation you will have all information and related files and exampl 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. eventFilter: only receive events from provider's aefId. + 2. eventFilter: Not present. 3. supportedFeatures: binary 0000 -> string **0** 3. Use **Invoker Certificate** @@ -1001,7 +1002,7 @@ At this documentation you will have all information and related files and exampl 1. Send **POST** to **https://{CAPIF_HOSTNAME}/capif-events/v1/{subscriberId}/subscriptions** 2. body [event subscription request body] with: 1. events: **['SERVICE_API_UPDATE']** - 2. eventFilter: only receive events from provider's aefId. + 2. eventFilter: Not present. 3. supportedFeatures: binary 0000 -> string **0** 3. Use **Invoker Certificate** diff --git a/doc/testing/testplan/event_filter/README.md b/doc/testing/testplan/event_filter/README.md index f70d605e..a7651fa4 100644 --- a/doc/testing/testplan/event_filter/README.md +++ b/doc/testing/testplan/event_filter/README.md @@ -2,6 +2,133 @@ At this documentation you will have all information and related files and examples of test plan for this feature. +## Test Case 1: Invoker subscrived to SERVICE_API_AVAILABLE, SERVICE_API_UNAVAILABLE and SERVICE_API_UPDATE events filtered by apiIds + +**Test ID**: ***event_filter-1*** +**Additional Tags**: ***mockserver*** + +**Description**: + + +**Pre-Conditions**: + + +**Execution Steps**: + + +**Expected Results**: + + +--- +## Test Case 2: Invoker subscribed to SERVICE_API_AVAILABLE, SERVICE_API_UNAVAILABLE and SERVICE_API_UPDATE events filtered by not valid filters + +**Test ID**: ***event_filter-2*** +**Additional Tags**: ***smoke*** + +**Description**: + + +**Pre-Conditions**: + + +**Execution Steps**: + + +**Expected Results**: + + +--- +## Test Case 3: Provider subscribed to API_INVOKER_ONBOARDED, API_INVOKER_OFFBOARDED and API_INVOKER_UPDATED events filtered by invokerIds + +**Test ID**: ***event_filter-3*** +**Additional Tags**: ***mockserver*** + +**Description**: + + +**Pre-Conditions**: + + +**Execution Steps**: + + +**Expected Results**: + + +--- +## Test Case 4: Provider subscribed to API_INVOKER_ONBOARDED, API_INVOKER_OFFBOARDED and API_INVOKER_UPDATED events filtered by not valid filters + +**Test ID**: ***event_filter-4*** +**Additional Tags**: + +**Description**: + + +**Pre-Conditions**: + + +**Execution Steps**: + + +**Expected Results**: + + +--- +## Test Case 5: Provider subscribed to ACCESS_CONTROL_POLICY_UPDATE event filtered by only apiId, only invokerId and both + +**Test ID**: ***event_filter-5*** +**Additional Tags**: ***smoke***, ***mockserver*** + +**Description**: + + +**Pre-Conditions**: + + +**Execution Steps**: + + +**Expected Results**: + + +--- +## Test Case 6: Provider subscribed to ACCESS_CONTROL_POLICY_UPDATE event filtered by aefId + +**Test ID**: ***event_filter-6*** +**Additional Tags**: + +**Description**: + + +**Pre-Conditions**: + + +**Execution Steps**: + + +**Expected Results**: + + +--- +## Test Case 7: Provider subscribed to SERVICE_API_INVOCATION_SUCCESS and SERVICE_API_INVOCATION_FAILURE filtered by apiId, invokerId, aefId and all of them + +**Test ID**: ***event_filter-7*** +**Additional Tags**: **smoke**, **mockserver** + +**Description**: + + +**Pre-Conditions**: + + +**Execution Steps**: + + +**Expected Results**: + + +--- + **UNDER DEVELOPMENT** --- ## Test Case 1: Service API Available filtered by apiIds -- GitLab From 975a162d5e76d7c5a2d912f7cd04faca9080677f Mon Sep 17 00:00:00 2001 From: Jorge Moratinos Salcines Date: Mon, 10 Mar 2025 17:11:22 +0100 Subject: [PATCH 4/7] test 1 to 4 wrote in documentation --- doc/testing/testplan/event_filter/README.md | 213 +++++++++++++++++++- 1 file changed, 212 insertions(+), 1 deletion(-) diff --git a/doc/testing/testplan/event_filter/README.md b/doc/testing/testplan/event_filter/README.md index a7651fa4..a3693793 100644 --- a/doc/testing/testplan/event_filter/README.md +++ b/doc/testing/testplan/event_filter/README.md @@ -2,22 +2,62 @@ At this documentation you will have all information and related files and examples of test plan for this feature. -## Test Case 1: Invoker subscrived to SERVICE_API_AVAILABLE, SERVICE_API_UNAVAILABLE and SERVICE_API_UPDATE events filtered by apiIds +## Test Case 1: Invoker subscribed to SERVICE_API_AVAILABLE, SERVICE_API_UNAVAILABLE and SERVICE_API_UPDATE events filtered by apiIds **Test ID**: ***event_filter-1*** **Additional Tags**: ***mockserver*** **Description**: + This test case will check an invoker can subscribe to SERVICE_API events and filter them by apiId. + **Pre-Conditions**: + * Invoker is previously registered and onboarded. + * Two providers registered and with APIs published. + * **Mock Server is up and running to receive requests.** + * **Mock Server is clean.** + **Execution Steps**: +1. Register and onboard ***Invoker*** +2. Register ***Provider 1*** and publish ***service_1*** api: + 1. Setup provider with Two AEFs. + 2. Publish ***service_1*** with: + 1. Two AEFs. (aef_id_1 and aef_id_2) + 2. apiStatus empty list. + 3. supportedFeatures 020. +3. Register ***Provider 2*** and publish ***service_2*** api: + 1. Publish ***service_2*** with: + 1. apiStatus with AEF Id (aef2_id_1) + 2. supportedFeatures 020 +4. Discover APIs by Invoker: + 1. filter by aef_id_1 + 2. Only one api will be obtained, store apiId at api_id. +5. Subscribe to events: + 1. Events: ***SERVICE_API_AVAILABLE, SERVICE_API_UNAVAILABLE, SERVICE_API_UPDATE.*** + 2. EventFilter: ***apiId, apiId, apiId.*** + 3. supportedFeatures: ***C*** +6. Update service_1 api: + 1. apiStatus with ***aefIds*** present on ***Provider 1***. + 2. SupportedFeatures set to ***20*** +7. Remove Provider 1 +8. Remove Provider 2 **Expected Results**: +Mock Server received messages must accomplish: + +1. **Three Events have been received**. +2. Validate received events follow **EventNotification** data structure, with: + 1. **SERVICE_API_AVAILABLE**: + 1. EventDetail include serviceAPIDescriptions with same Service API description Modified with apiStatus containing aefIds of provider 1 + 2. **SERVICE_API_UPDATE**: + 1. EventDetail include serviceAPIDescriptions with same Service API description Modified with apiStatus containing aefIds of provider 1 + 3. **SERVICE_API_UNAVAILABLE** + 1. EventDetail include serviceAPIDescriptions with same Service API description Modified with apiStatus containing aefIds of provider 1 --- ## Test Case 2: Invoker subscribed to SERVICE_API_AVAILABLE, SERVICE_API_UNAVAILABLE and SERVICE_API_UPDATE events filtered by not valid filters @@ -27,15 +67,82 @@ At this documentation you will have all information and related files and exampl **Description**: + This test case will check all error response related with wrong filtering options when invoker subscribes to SERVICE_API events. **Pre-Conditions**: + * Invoker is previously registered and onboarded. + * Two providers registered and with APIs published. **Execution Steps**: +1. Register and onboard ***Invoker*** +2. Register ***Provider 1*** and publish ***service_1*** api: + 1. Setup provider with Two AEFs. + 2. Publish ***service_1*** with: + 1. Two AEFs. (aef_id_1 and aef_id_2) + 2. apiStatus empty list. + 3. supportedFeatures 020. +3. Register ***Provider 2*** and publish ***service_2*** api: + 1. Publish ***service_2*** with: + 1. apiStatus with AEF Id (aef2_id_1) + 2. supportedFeatures 020 +4. Discover APIs by Invoker: + 1. filter by aef_id_1 + 2. Only one api will be obtained, store apiId at api_id. +5. Subscribe to events: + 1. Events: ***SERVICE_API_AVAILABLE, SERVICE_API_UNAVAILABLE, SERVICE_API_UPDATE.*** + 2. EventFilter: ***aefIds, empty, empty.*** + 3. supportedFeatures: ***C*** +6. Subscribe to events: + 1. Events: ***SERVICE_API_AVAILABLE, SERVICE_API_UNAVAILABLE, SERVICE_API_UPDATE.*** + 2. EventFilter: ***empty, aefIds, empty.*** + 3. supportedFeatures: ***C*** +7. Subscribe to events: + 1. Events: ***SERVICE_API_AVAILABLE, SERVICE_API_UNAVAILABLE, SERVICE_API_UPDATE.*** + 2. EventFilter: ***empty, empty, aefIds.*** + 3. supportedFeatures: ***C*** +8. Subscribe to events: + 1. Events: ***SERVICE_API_AVAILABLE, SERVICE_API_UNAVAILABLE, SERVICE_API_UPDATE.*** + 2. EventFilter: ***empty, empty, apiInvokerIds.*** + 3. supportedFeatures: ***C*** **Expected Results**: +We will receive one error after each Event subscription: + +1. Response to first subscription: + 1. ***400 Bad Request*** + 2. ProblemDetails Body with: + 1. title: ***Bad Request*** + 2. status: ***400*** + 3. detail: ***Bad Param*** + 4. cause: ***Invalid eventFilter for event SERVICE_API_AVAILABLE*** + 5. invalidParams: ***[{ param:eventFilter, reason: The eventFilter aef_ids for event SERVICE_API_AVAILABLE are not applicable }]*** +2. Response to first subscription: + 1. ***400 Bad Request*** + 2. ProblemDetails Body with: + 1. title: ***Bad Request*** + 2. status: ***400*** + 3. detail: ***Bad Param*** + 4. cause: ***Invalid eventFilter for event SERVICE_API_UNAVAILABLE*** + 5. invalidParams: ***[{ param:eventFilter, reason: The eventFilter aef_ids for event SERVICE_API_UNAVAILABLE are not applicable }]*** +3. Response to first subscription: + 1. ***400 Bad Request*** + 2. ProblemDetails Body with: + 1. title: ***Bad Request*** + 2. status: ***400*** + 3. detail: ***Bad Param*** + 4. cause: ***Invalid eventFilter for event SERVICE_API_UPDATE*** + 5. invalidParams: ***[{ param:eventFilter, reason: The eventFilter aef_ids for event SERVICE_API_UPDATE are not applicable }]*** +4. Response to first subscription: + 1. ***400 Bad Request*** + 2. ProblemDetails Body with: + 1. title: ***Bad Request*** + 2. status: ***400*** + 3. detail: ***Bad Param*** + 4. cause: ***Invalid eventFilter for event SERVICE_API_UPDATE*** + 5. invalidParams: ***[{ param:eventFilter, reason: The eventFilter api_invoker_ids for event SERVICE_API_UPDATE are not applicable }]*** --- ## Test Case 3: Provider subscribed to API_INVOKER_ONBOARDED, API_INVOKER_OFFBOARDED and API_INVOKER_UPDATED events filtered by invokerIds @@ -45,15 +152,49 @@ At this documentation you will have all information and related files and exampl **Description**: + This test case will check subcription to all API_INVOKER events by one provider. **Pre-Conditions**: + * Provider is previously registered. + * **Mock Server is up and running to receive requests.** + * **Mock Server is clean.** **Execution Steps**: +1. Register ***Provider 1***. +2. Subscribe to events: + 1. Events: ***API_INVOKER_ONBOARDED*** + 2. EventFilter: ***No filter.*** + 3. supportedFeatures: ***C*** +3. Register and onboard ***Invoker 1*** +4. Register and onboard ***Invoker 2*** +5. Subscribe provider to events: + 1. Events: ***API_INVOKER_ONBOARDED, API_INVOKER_OFFBOARDED, API_INVOKER_UPDATED*** + 2. EventFilter: ***empty, apiInvokerId1, apiInvokerId2.*** + 3. supportedFeatures: ***C*** +6. Update Invoker 1: + 1. Setup new notificationDestination at invoker. +7. Update Invoker 2: + 1. Setup new notificationDestination at invoker. +8. Remove Invoker 1. +9. Remove Invoker 2. **Expected Results**: +Mock Server received messages must accomplish: + +1. **Four Events have been received**. +2. Validate received events follow **EventNotification** data structure, with: + 1. **API_INVOKER_ONBOARDED**: + 1. EventDetail include apiInvokerIds with apiInvokerId of provider 1 + 2. **API_INVOKER_ONBOARDED**: + 1. EventDetail include apiInvokerIds with apiInvokerId of provider 2 + 3. **API_INVOKER_UPDATED**: + 1. EventDetail include apiInvokerIds with apiInvokerId of provider 2 + 4. **API_INVOKER_OFFBOARDED** + 1. EventDetail include apiInvokerIds with apiInvokerId of provider 1 + --- ## Test Case 4: Provider subscribed to API_INVOKER_ONBOARDED, API_INVOKER_OFFBOARDED and API_INVOKER_UPDATED events filtered by not valid filters @@ -63,15 +204,68 @@ At this documentation you will have all information and related files and exampl **Description**: + This test will check API_INVOKER events subscription by Provider with not valid filters. **Pre-Conditions**: + * Provider is previously registered. **Execution Steps**: +1. Register ***Provider 1***. +2. Register and onboard ***Invoker 1*** +3. Register and onboard ***Invoker 2*** +4. Subscribe provider to events: + 1. Events: ***API_INVOKER_ONBOARDED, API_INVOKER_OFFBOARDED, API_INVOKER_UPDATED*** + 2. EventFilter: ***aefIds, empty, empty.*** + 3. supportedFeatures: ***C*** +5. Subscribe provider to events: + 1. Events: ***API_INVOKER_ONBOARDED, API_INVOKER_OFFBOARDED, API_INVOKER_UPDATED*** + 2. EventFilter: ***empty, aefIds, empty.*** + 3. supportedFeatures: ***C*** +6. Subscribe provider to events: + 1. Events: ***API_INVOKER_ONBOARDED, API_INVOKER_OFFBOARDED, API_INVOKER_UPDATED*** + 2. EventFilter: ***empty, empty, aefIds.*** + 3. supportedFeatures: ***C*** +7. Subscribe provider to events: + 1. Events: ***API_INVOKER_ONBOARDED, API_INVOKER_OFFBOARDED, API_INVOKER_UPDATED*** + 2. EventFilter: ***empty, empty, apiIds.*** + 3. supportedFeatures: ***C*** **Expected Results**: +1. Response to first subscription: + 1. ***400 Bad Request*** + 2. ProblemDetails Body with: + 1. title: ***Bad Request*** + 2. status: ***400*** + 3. detail: ***Bad Param*** + 4. cause: ***Invalid eventFilter for event API_INVOKER_ONBOARDED*** + 5. invalidParams: ***[{ param:eventFilter, reason: The eventFilter aef_ids for event API_INVOKER_ONBOARDED are not applicable }]*** +2. Response to second subscription: + 1. ***400 Bad Request*** + 2. ProblemDetails Body with: + 1. title: ***Bad Request*** + 2. status: ***400*** + 3. detail: ***Bad Param*** + 4. cause: ***Invalid eventFilter for event API_INVOKER_OFFBOARDED*** + 5. invalidParams: ***[{ param:eventFilter, reason: The eventFilter aef_ids for event API_INVOKER_OFFBOARDED are not applicable }]*** +3. Response to third subscription: + 1. ***400 Bad Request*** + 2. ProblemDetails Body with: + 1. title: ***Bad Request*** + 2. status: ***400*** + 3. detail: ***Bad Param*** + 4. cause: ***Invalid eventFilter for event API_INVOKER_UPDATED*** + 5. invalidParams: ***[{ param:eventFilter, reason: The eventFilter aef_ids for event API_INVOKER_UPDATED are not applicable }]*** +4. Response to fourth subscription: + 1. ***400 Bad Request*** + 2. ProblemDetails Body with: + 1. title: ***Bad Request*** + 2. status: ***400*** + 3. detail: ***Bad Param*** + 4. cause: ***Invalid eventFilter for event API_INVOKER_UPDATED*** + 5. invalidParams: ***[{ param:eventFilter, reason: The eventFilter api_ids for event API_INVOKER_UPDATED are not applicable }]*** --- ## Test Case 5: Provider subscribed to ACCESS_CONTROL_POLICY_UPDATE event filtered by only apiId, only invokerId and both @@ -127,6 +321,23 @@ At this documentation you will have all information and related files and exampl **Expected Results**: +--- +## Test Case 8: Event Filter present with Enhanced_event_report feature not active. + +**Test ID**: ***event_filter-8*** +**Additional Tags**: **smoke** + +**Description**: + + +**Pre-Conditions**: + + +**Execution Steps**: + + +**Expected Results**: + --- **UNDER DEVELOPMENT** -- GitLab From 5437b2b1afd71f272ba63ffda4d2540374e412d1 Mon Sep 17 00:00:00 2001 From: Jorge Moratinos Salcines Date: Tue, 11 Mar 2025 15:38:13 +0100 Subject: [PATCH 5/7] All event filter tests decribed --- doc/testing/testplan/event_filter/README.md | 340 +++++++++++++------- 1 file changed, 224 insertions(+), 116 deletions(-) diff --git a/doc/testing/testplan/event_filter/README.md b/doc/testing/testplan/event_filter/README.md index a3693793..dfe87ac1 100644 --- a/doc/testing/testplan/event_filter/README.md +++ b/doc/testing/testplan/event_filter/README.md @@ -38,7 +38,7 @@ At this documentation you will have all information and related files and exampl 2. Only one api will be obtained, store apiId at api_id. 5. Subscribe to events: 1. Events: ***SERVICE_API_AVAILABLE, SERVICE_API_UNAVAILABLE, SERVICE_API_UPDATE.*** - 2. EventFilter: ***apiId, apiId, apiId.*** + 2. EventFilter: ***[apiId], [apiId], [apiId].*** 3. supportedFeatures: ***C*** 6. Update service_1 api: 1. apiStatus with ***aefIds*** present on ***Provider 1***. @@ -92,19 +92,19 @@ Mock Server received messages must accomplish: 2. Only one api will be obtained, store apiId at api_id. 5. Subscribe to events: 1. Events: ***SERVICE_API_AVAILABLE, SERVICE_API_UNAVAILABLE, SERVICE_API_UPDATE.*** - 2. EventFilter: ***aefIds, empty, empty.*** + 2. EventFilter: ***[aefIds], [empty], [empty].*** 3. supportedFeatures: ***C*** 6. Subscribe to events: 1. Events: ***SERVICE_API_AVAILABLE, SERVICE_API_UNAVAILABLE, SERVICE_API_UPDATE.*** - 2. EventFilter: ***empty, aefIds, empty.*** + 2. EventFilter: ***[empty], [aefIds], [empty].*** 3. supportedFeatures: ***C*** 7. Subscribe to events: 1. Events: ***SERVICE_API_AVAILABLE, SERVICE_API_UNAVAILABLE, SERVICE_API_UPDATE.*** - 2. EventFilter: ***empty, empty, aefIds.*** + 2. EventFilter: ***[empty], [empty], [aefIds].*** 3. supportedFeatures: ***C*** 8. Subscribe to events: 1. Events: ***SERVICE_API_AVAILABLE, SERVICE_API_UNAVAILABLE, SERVICE_API_UPDATE.*** - 2. EventFilter: ***empty, empty, apiInvokerIds.*** + 2. EventFilter: ***[empty], [empty], [apiInvokerIds].*** 3. supportedFeatures: ***C*** **Expected Results**: @@ -171,7 +171,7 @@ We will receive one error after each Event subscription: 4. Register and onboard ***Invoker 2*** 5. Subscribe provider to events: 1. Events: ***API_INVOKER_ONBOARDED, API_INVOKER_OFFBOARDED, API_INVOKER_UPDATED*** - 2. EventFilter: ***empty, apiInvokerId1, apiInvokerId2.*** + 2. EventFilter: ***[empty], [apiInvokerId1], [apiInvokerId2].*** 3. supportedFeatures: ***C*** 6. Update Invoker 1: 1. Setup new notificationDestination at invoker. @@ -216,21 +216,25 @@ Mock Server received messages must accomplish: 2. Register and onboard ***Invoker 1*** 3. Register and onboard ***Invoker 2*** 4. Subscribe provider to events: - 1. Events: ***API_INVOKER_ONBOARDED, API_INVOKER_OFFBOARDED, API_INVOKER_UPDATED*** - 2. EventFilter: ***aefIds, empty, empty.*** - 3. supportedFeatures: ***C*** + 1. Subscription 1 + 2. Events: ***API_INVOKER_ONBOARDED, API_INVOKER_OFFBOARDED, API_INVOKER_UPDATED*** + 3. EventFilter: ***[aefIds], [empty], [empty].*** + 4. supportedFeatures: ***C*** 5. Subscribe provider to events: - 1. Events: ***API_INVOKER_ONBOARDED, API_INVOKER_OFFBOARDED, API_INVOKER_UPDATED*** - 2. EventFilter: ***empty, aefIds, empty.*** - 3. supportedFeatures: ***C*** + 1. Subscription 2 + 2. Events: ***API_INVOKER_ONBOARDED, API_INVOKER_OFFBOARDED, API_INVOKER_UPDATED*** + 3. EventFilter: ***[empty], [aefIds], [empty].*** + 4. supportedFeatures: ***C*** 6. Subscribe provider to events: - 1. Events: ***API_INVOKER_ONBOARDED, API_INVOKER_OFFBOARDED, API_INVOKER_UPDATED*** - 2. EventFilter: ***empty, empty, aefIds.*** - 3. supportedFeatures: ***C*** + 1. Subscription 3 + 2. Events: ***API_INVOKER_ONBOARDED, API_INVOKER_OFFBOARDED, API_INVOKER_UPDATED*** + 3. EventFilter: ***[empty], [empty], [aefIds].*** + 4. supportedFeatures: ***C*** 7. Subscribe provider to events: - 1. Events: ***API_INVOKER_ONBOARDED, API_INVOKER_OFFBOARDED, API_INVOKER_UPDATED*** - 2. EventFilter: ***empty, empty, apiIds.*** - 3. supportedFeatures: ***C*** + 1. Subscription 4 + 2. Events: ***API_INVOKER_ONBOARDED, API_INVOKER_OFFBOARDED, API_INVOKER_UPDATED*** + 3. EventFilter: ***[empty], [empty], [apiIds].*** + 4. supportedFeatures: ***C*** **Expected Results**: @@ -275,15 +279,73 @@ Mock Server received messages must accomplish: **Description**: + This test case will check subcription to ACCESS_CONTROL_POLICY_UPDATE event by one provider. **Pre-Conditions**: + * Two Providers are previously registered and published APIs + * Two invoker are previously registered. + * **Mock Server is up and running to receive requests.** + * **Mock Server is clean.** **Execution Steps**: +1. Register ***Provider 1*** and publish ***service_1*** api: + * Store apiId1 +2. Register ***Provider 2*** and publish ***service_2*** api: + * Store apiId2 +3. Register and onboard ***Invoker 1*** + * apiInvokerId1 +4. Register and onboard ***Invoker 2*** + * apiInvokerId2 +6. Subscribe to events: + 1. Subscription1 + 2. Events: ***ACCESS_CONTROL_POLICY_UPDATE*** + 3. EventFilter: ***[apiId1].*** + 4. supportedFeatures: ***C*** +7. Subscribe to events: + 1. Subscription2 + 2. Events: ***ACCESS_CONTROL_POLICY_UPDATE*** + 3. EventFilter: ***[apiInvokerId1].*** + 4. supportedFeatures: ***C*** +7. Subscribe to events: + 1. Subscription3 + 2. Events: ***ACCESS_CONTROL_POLICY_UPDATE*** + 3. EventFilter: ***[apiInvokerId2] and [apiId2].*** + 4. supportedFeatures: ***C*** +8. Create Security Context Between Invoker 1 and provider 1 exposed API. + 1. Store acl_provider_1 +9. Create Security Context Between Invoker 2 and provider 1 exposed API. + 1. Store acl_provider_1 (array will contain 2 values) +10. Create Security Context Between Invoker 1 and provider 2 exposed API. + 1. Store acl_provider_2 (array will contain 2 values) +11. Create Security Context Between Invoker 2 and provider 2 exposed API. + 1. Store acl_provider_2 (array will contain 2 values) + **Expected Results**: +1. **Eight Events have been received** for 3 different subscriptions. +2. Validate received events follow **EventNotification** data structure +3. **Subcription 1**: + 1. **ACCESS_CONTROL_POLICY_UPDATE**: + 1. EventDetail include accCtrlPolList with apiId1 and apiInvokerPolicies with Security Context between invoker 1 and provider 1 (acl_provider_1[0]) + 2. **ACCESS_CONTROL_POLICY_UPDATE**: + 1. EventDetail include accCtrlPolList with apiId1 and apiInvokerPolicies with Security Context between invoker 2 and provider 1 (acl_provider_1[1]) + 3. **ACCESS_CONTROL_POLICY_UPDATE**: + 1. EventDetail include accCtrlPolList with apiId2 and apiInvokerPolicies with Security Context between invoker 1 and provider 2 (acl_provider_2[0]) + 4. **ACCESS_CONTROL_POLICY_UPDATE**: + 1. EventDetail include accCtrlPolList with apiId1 and apiInvokerPolicies with Security Context between invoker 2 and provider 2 (acl_provider_2[1]) +4. **Subcription 2**: + 1. **ACCESS_CONTROL_POLICY_UPDATE**: + 1. EventDetail include accCtrlPolList with apiId1 and apiInvokerPolicies with Security Context between invoker 1 and provider 1 (acl_provider_1[0]) + 2. **ACCESS_CONTROL_POLICY_UPDATE**: + 1. EventDetail include accCtrlPolList with apiId1 and apiInvokerPolicies with Security Context between invoker 1 and provider 1 (acl_provider_1[0]) + 3. **ACCESS_CONTROL_POLICY_UPDATE**: + 1. EventDetail include accCtrlPolList with apiId2 and apiInvokerPolicies with Security Context between invoker 1 and provider 2 (acl_provider_2[0]) +5. **Subcription 3**: + 1. **ACCESS_CONTROL_POLICY_UPDATE**: + 1. EventDetail include accCtrlPolList with apiId2 and apiInvokerPolicies with Security Context between invoker 2 and provider 2 (acl_provider_2[1]) --- ## Test Case 6: Provider subscribed to ACCESS_CONTROL_POLICY_UPDATE event filtered by aefId @@ -293,15 +355,31 @@ Mock Server received messages must accomplish: **Description**: + This test will check ACCESS_CONTROL_POLICY_UPDATE event subscription by Provider with not valid filters. **Pre-Conditions**: + * One Provider is previously registered. **Execution Steps**: +1. Register ***Provider 1***. +2. Subscribe to events: + 1. Subscription1 + 2. Events: ***ACCESS_CONTROL_POLICY_UPDATE*** + 3. EventFilter: ***[aef_ids].*** + 4. supportedFeatures: ***C*** **Expected Results**: +1. Response to subscription: + 1. ***400 Bad Request*** + 2. ProblemDetails Body with: + 1. title: ***Bad Request*** + 2. status: ***400*** + 3. detail: ***Bad Param*** + 4. cause: ***Invalid eventFilter for event ACCESS_CONTROL_POLICY_UPDATE*** + 5. invalidParams: ***[{ param:eventFilter, reason: The eventFilter aef_ids for event ACCESS_CONTROL_POLICY_UPDATE are not applicable }]*** --- ## Test Case 7: Provider subscribed to SERVICE_API_INVOCATION_SUCCESS and SERVICE_API_INVOCATION_FAILURE filtered by apiId, invokerId, aefId and all of them @@ -311,15 +389,128 @@ Mock Server received messages must accomplish: **Description**: + This test will check all possible filters options allowed for SERVICE_API_INVOCATION_SUCCESS and SERVICE_API_INVOCATION_FAILURE. **Pre-Conditions**: + * Two Providers are previously registered and published APIs + * Two invoker are previously registered. + * **Mock Server is up and running to receive requests.** + * **Mock Server is clean.** **Execution Steps**: +1. Register ***Provider 1*** and publish ***service_1*** api: + * Store apiId1 + * Store aefId1 +2. Register ***Provider 2*** and publish ***service_2*** api: + * Store apiId2 + * Store aefId2 +3. Register and onboard ***Invoker 1*** + * apiInvokerId1 +4. Register and onboard ***Invoker 2*** + * apiInvokerId2 +6. Subscribe provider 1 to events: + 1. Subscription 1 + 2. Events: ***SERVICE_API_INVOCATION_SUCCESS, SERVICE_API_INVOCATION_FAILURE.*** + 3. EventFilter: ***[apiId1], [apiId1].*** + 4. supportedFeatures: ***C*** +7. Subscribe provider 1 to events: + 1. Subscription 2 + 2. Events: ***SERVICE_API_INVOCATION_SUCCESS, SERVICE_API_INVOCATION_FAILURE.*** + 3. EventFilter: ***[apiId1], [apiId1].*** + 4. supportedFeatures: ***C*** +8. Subscribe provider 1 to events: + 1. Subscription 3 + 2. Events: ***SERVICE_API_INVOCATION_SUCCESS, SERVICE_API_INVOCATION_FAILURE.*** + 3. EventFilter: ***[apiId1], [apiId1].*** + 4. supportedFeatures: ***C*** +9. Subscribe provider 1 to events: + 1. Subscription 4 + 2. Events: ***SERVICE_API_INVOCATION_SUCCESS, SERVICE_API_INVOCATION_FAILURE.*** + 3. EventFilter: ***[apiId1], [apiId1].*** + 4. supportedFeatures: ***C*** +10. Subscribe provider 1 to events: + 1. Subscription 5 + 2. Events: ***SERVICE_API_INVOCATION_SUCCESS, SERVICE_API_INVOCATION_FAILURE.*** + 3. EventFilter: ***[apiId1], [apiId1].*** + 4. supportedFeatures: ***C*** +11. Subscribe provider 1 to events: + 1. Subscription 6 + 2. Events: ***SERVICE_API_INVOCATION_SUCCESS, SERVICE_API_INVOCATION_FAILURE.*** + 3. EventFilter: ***[apiId1], [apiId1].*** + 4. supportedFeatures: ***C*** +12. Subscribe provider 1 to events: + 1. Subscription 7 + 2. Events: ***SERVICE_API_INVOCATION_SUCCESS, SERVICE_API_INVOCATION_FAILURE.*** + 3. EventFilter: ***[apiId1], [apiId1].*** + 4. supportedFeatures: ***C*** +13. Send Log entry by provider1: + 1. apiNames: [service_1] + 2. apiIds: [apiId1] + 3. aefId: aefId1 + 4. apiInvokerId: apiInvokerId1 + 5. results: [200, 400] + 6. Store body to **request_body_log_1** +14. Send Log entry by provider2: + 1. apiNames: [service_2] + 2. apiIds: [apiId2] + 3. aefId: aefId2 + 4. apiInvokerId: apiInvokerId1 + 5. results: [200] + 6. Store body to **request_body_log_2** +15. Send Log entry by provider2: + 1. apiNames: [service_2] + 2. apiIds: [apiId2] + 3. aefId: aefId2 + 4. apiInvokerId: apiInvokerId2 + 5. results: [200] + 6. Store body to **request_body_log_3** +16. Send Log entry by provider1: + 1. apiNames: [service_1] + 2. apiIds: [apiId1] + 3. aefId: aefId1 + 4. apiInvokerId: apiInvokerId2 + 5. results: [400] + 6. Store body to **request_body_log_4** **Expected Results**: +1. **Thirteen Events have been received** for 7 different subscriptions. +2. Validate received events follow **EventNotification** data structure +3. **Subcription 1**: + 1. **SERVICE_API_INVOCATION_SUCCESS**: + 1. EventDetail include invocationLogs with **request_body_log_1** + 2. **SERVICE_API_INVOCATION_FAILURE**: + 1. EventDetail include invocationLogs with **request_body_log_1** + 3. **SERVICE_API_INVOCATION_FAILURE**: + 1. EventDetail include invocationLogs with **request_body_log_4** +4. **Subcription 2**: + 1. **SERVICE_API_INVOCATION_SUCCESS**: + 1. EventDetail include invocationLogs with **request_body_log_2** + 2. **SERVICE_API_INVOCATION_SUCCESS**: + 1. EventDetail include invocationLogs with **request_body_log_3** +5. **Subcription 3**: + 1. **SERVICE_API_INVOCATION_SUCCESS**: + 1. EventDetail include invocationLogs with **request_body_log_1** + 2. **SERVICE_API_INVOCATION_SUCCESS**: + 1. EventDetail include invocationLogs with **request_body_log_1** + 3. **SERVICE_API_INVOCATION_SUCCESS**: + 1. EventDetail include invocationLogs with **request_body_log_2** +6. **Subcription 4**: + 1. **SERVICE_API_INVOCATION_SUCCESS**: + 1. EventDetail include invocationLogs with **request_body_log_2** + 2. **SERVICE_API_INVOCATION_SUCCESS**: + 1. EventDetail include invocationLogs with **request_body_log_3** +7. **Subcription 5**: + 1. **SERVICE_API_INVOCATION_SUCCESS**: + 1. EventDetail include invocationLogs with **request_body_log_3** +8. **Subcription 6**: + 1. **SERVICE_API_INVOCATION_FAILURE**: + 1. EventDetail include invocationLogs with **request_body_log_4** +9. **Subcription 7**: + 1. **SERVICE_API_INVOCATION_SUCCESS**: + 1. EventDetail include invocationLogs with **request_body_log_3** --- ## Test Case 8: Event Filter present with Enhanced_event_report feature not active. @@ -329,113 +520,30 @@ Mock Server received messages must accomplish: **Description**: + This test will check event subscription by Invoker with eventFilter attribute but without Enhanced_event_report feature active. **Pre-Conditions**: + * Invoker is previously registered and onboarded. **Execution Steps**: +1. Register and onboard ***Invoker*** +2. Subscribe to events: + 2. Events: ***SERVICE_API_AVAILABLE, SERVICE_API_UNAVAILABLE, SERVICE_API_UPDATE*** + 3. EventFilter: ***[empty], [empty], [empty].*** + 4. supportedFeatures: ***0*** **Expected Results**: ---- - -**UNDER DEVELOPMENT** ---- -## Test Case 1: Service API Available filtered by apiIds - -**Test ID**: ***event_filter-1*** - -**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, SERVICE_API_UPDATE and SERVICE_API_UNAVAILABLE after update apiStatus to empty aefIds array with **ApiStatusMonitoring** active. - -**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. 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 only aefId1. - 4. Discover Service APIs by Invoker - 1. includes filter by query parameter **aef-id** - 5. Invoker Subscribes to **SERVICE_API_AVAILABLE**, **SERVICE_API_UNAVAILABLE** and **SERVICE_API_UPDATE**. **apiStatusMonitoring** and **Enhanced_event_report** **active** at supported features (binary 1100-> string **C**). Filter by published **apiId**. - 6. Update Published API: - 1. apiStatus present with empty aefIds array. - 2. apiStatusMonitoring feature active (binary 0 0010 0000 -> string **20**) - -**Information of Test**: - - 1. Perform [Invoker Onboarding] - 2. Perform [Provider Registration] with 2 aefs - 3. 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** - 4. 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** - 5. 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. eventFilters set to [eventFilters:[{apiIds:['{API_ID}']},{apiIds:['{API_ID}']},{apiIds:['{API_ID}']}]] - 3. 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 empty aefIds array. - -**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_AVAILABLE**. - 2. One should be **SERVICE_API_UPDATE**. - 3. One should be **SERVICE_API_UNAVAILABLE**. - +1. Response to subscription: + 1. ***400 Bad Request*** + 2. ProblemDetails Body with: + 1. title: ***Bad Request*** + 2. status: ***400*** + 3. detail: ***Bad Param*** + 4. cause: ***Event filters provided but EnhancedEventReport is not enabled*** + 5. invalidParams: ***[{ param:eventFilter, reason: EnhancedEventReport is not enabled }]*** --- -- GitLab From 54ba8b9508a374e680cc35bf8dca2663c1cc1819 Mon Sep 17 00:00:00 2001 From: Jorge Moratinos Salcines Date: Tue, 11 Mar 2025 15:51:32 +0100 Subject: [PATCH 6/7] Added release notes --- doc/releasenotes.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/doc/releasenotes.md b/doc/releasenotes.md index 04584896..692fd3b3 100644 --- a/doc/releasenotes.md +++ b/doc/releasenotes.md @@ -9,6 +9,11 @@ - These filters are specified in the ***eventFilters*** of the subscription if the ***Enhanced Event Report*** feature of the ***Supported Features*** is activated. - More detailed information about event filters can be found in [Event Filter]. +### **Testing** + +- New Event Filter test suite with 8 tests. [Event Filter](./testing/testplan/event_filter/README.md) + + ### **Technical Debt Solved** #### **Hardening on startup scripts for services interacting with Vault** -- GitLab From 9f658db16be88c833c791425d21feff8cc2bd645 Mon Sep 17 00:00:00 2001 From: Jorge Moratinos Salcines Date: Wed, 12 Mar 2025 13:07:10 +0100 Subject: [PATCH 7/7] Added Subscription to events at Common operations section --- .../testplan/common_operations/README.md | 102 ++++++++++++++++++ 1 file changed, 102 insertions(+) diff --git a/doc/testing/testplan/common_operations/README.md b/doc/testing/testplan/common_operations/README.md index eb145f86..d9c24f61 100644 --- a/doc/testing/testplan/common_operations/README.md +++ b/doc/testing/testplan/common_operations/README.md @@ -110,6 +110,103 @@ The steps to register a new user at Register Service are: ![Flow](../../../images/flows/07_Invoker_Onboarding.png) +## Subscribe to Events + +Subscription to an Event by any entity (Invoker, Provider or other CCF), will ensure when subscription is matched one event will be sent to notification destination present on subscription creation. + +### How to create a subscription + +In order to create a subcription, customer must setup some different parameters. + +#### Basic Subscription + +Basic subcription will be used when Enhanced_event_report feature is not active at supportedFeatures attribute at [event subscription request body], this means this kind of subcription: + +* Won't be filtered by eventFilters. +* Reporting specific requierements won't be enable (eventReq). +* Response will only contains basic information without eventDetail. + +With this in mind, customer must select next parameters: + +##### Events to subscribe + +Select event or events to subscribe. Check from next list: + +| Event | Description | Status | +| :-------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------- | :-------------: | +| SERVICE_API_AVAILABLE | Events related to the availability of service APIs after the service APIs are published. | Implemented | +| SERVICE_API_UNAVAILABLE | Events related to the unavailability of service APIs after the service APIs are unpublished. | Implemented | +| SERVICE_API_UPDATE | Events related to change in service API information. | Implemented | +| API_INVOKER_ONBOARDED | Events related to API invoker onboarded to CAPIF. | Implemented | +| API_INVOKER_OFFBOARDED | Events related to API invoker offboarded from CAPIF. | Implemented | +| SERVICE_API_INVOCATION_SUCCESS | Events related to the successful invocation of service APIs. | Implemented | +| SERVICE_API_INVOCATION_FAILURE | Events related to the failed invocation of service APIs. | Implemented | +| ACCESS_CONTROL_POLICY_UPDATE | Events related to the update for the access control policy related to the service APIs. | Implemented | +| ACCESS_CONTROL_POLICY_UNAVAILABLE | Events related to the unavailability of the access control policy related to the service APIs (NOTE). | Implemented | +| API_INVOKER_AUTHORIZATION_REVOKED | Events related to the revocation of the authorization of API invokers to access the service APIs. (NOTE). | Implemented | +| API_INVOKER_UPDATED | Events related to API invoker profile updated to CAPIF. | Implemented | +| API_TOPOLOGY_HIDING_CREATED | Events related to the creation or update of the API topology hiding information of the service API after the service APIs are published. | Not Implemented | +| API_TOPOLOGY_HIDING_REVOKED | Events related to the revocation of the API topology information of the service API after the service APIs are unpublished. | Not Implemented | + +**NOTE**: 3GPP Common API Framework release 19 specs not specify further details (e.g event filters) for this event. + +##### Notification Destination + +* Set ***notification destination*** at [event subscription request body] with the endpoint to be reached by CCF when an event matches. + +#### Enhanced Subscription + +Enhanced will be the requiered subscription if customer needs one or more next functionality: + +* Filter events. (eventFilters) +* Setup some reporting requirements. (eventReq) +* Get more detailed information when event notification is received (eventDetail on response) + +If that is the case, then [event subscription request body] must setup supported features with Enhanced_event_report feature active (feature 3) + +With this feature active, customer can send eventFilter and EventReq with required information. + +##### Event Filter + +We can include an array for each suscribed array with desired eventFilter to be applied, but we need to keep in mind not all events allows all filters, take a look to next table: + +| Event | Event filter allowed | +| :-------------------------------- | :----------------------------- | +| SERVICE_API_AVAILABLE | apiIds | +| SERVICE_API_UNAVAILABLE | apiIds | +| SERVICE_API_UPDATE | apiIds | +| API_INVOKER_ONBOARDED | apiInvokerIds | +| API_INVOKER_OFFBOARDED | apiInvokerIds | +| SERVICE_API_INVOCATION_SUCCESS | apiIds, apiInvokerIds, aefIds. | +| SERVICE_API_INVOCATION_FAILURE | apiIds, apiInvokerIds, aefIds. | +| ACCESS_CONTROL_POLICY_UPDATE | apiIds, apiInvokerIds. | +| ACCESS_CONTROL_POLICY_UNAVAILABLE | - | +| API_INVOKER_AUTHORIZATION_REVOKED | - | +| API_INVOKER_UPDATED | apiInvokerIds | +| API_TOPOLOGY_HIDING_CREATED | - | +| API_TOPOLOGY_HIDING_REVOKED | - | + +##### Event Req + +Currently not implemented + +### Steps to Perform operation + + 1. Perform [invoker onboarding] or [provider registration] + 2. Event Subscription: + 1. Send **POST** to **https://{CAPIF_HOSTNAME}/capif-events/v1/{subscriberId}/subscriptions** + 2. body [event subscription request body] + 3. Use **Invoker Certificate** or **AMF Provider Certificate** + + +### Checks to ensure provider registration + 1. 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. + + + [user_registration_body]: ./user_registration_body.json "User Registration Body" [user_getauth_response_body_example]: ./user_getauth_response_body_example.json "User GetAuth response Body Example" @@ -118,5 +215,10 @@ The steps to register a new user at Register Service are: [provider request body]: ../api_provider_management/provider_details_post_example.json "API Provider Enrolment Request" +[event subscription request body]: ../api_events_service/event_subscription.json "Event Subscription Request" + +[invoker onboarding]: #onboard-an-invoker "Invoker Onboarding" +[provider registration]: #register-a-provider "Provider Registration" + [Return To All Test Plans]: ../README.md -- GitLab