This is an automated email from the ASF dual-hosted git repository.

ericholguin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficcontrol.git


The following commit(s) were added to refs/heads/master by this push:
     new 49185ae1d1 Added Api contract test case for delivery_Services/{id} 
endpoint (#7634)
49185ae1d1 is described below

commit 49185ae1d1d958a5de8ebe04e915928d02991bb8
Author: Gokula Krishnan <[email protected]>
AuthorDate: Tue Jul 18 19:32:15 2023 +0530

    Added Api contract test case for delivery_Services/{id} endpoint (#7634)
    
    * Added multiple_Server_capabilities and delivery_Services/{id} test cases
    
    * Modified entrypoint.sh
    
    * Removed multiple server capabilities test case
    
    * modified conftest
    
    * Update tosession.py
    
    * Update conftest.py
    
    * Update to_data.json
---
 .../clients/python/trafficops/tosession.py         | 28 ++++++++++++++++++++++
 traffic_ops/testing/api_contract/v4/conftest.py    |  3 +--
 .../api_contract/v4/data/response_template.json    |  5 +++-
 .../api_contract/v4/test_delivery_services.py      | 22 ++++++++++++++++-
 4 files changed, 54 insertions(+), 4 deletions(-)

diff --git a/traffic_control/clients/python/trafficops/tosession.py 
b/traffic_control/clients/python/trafficops/tosession.py
index 13af54ecf3..11cd785f0b 100644
--- a/traffic_control/clients/python/trafficops/tosession.py
+++ b/traffic_control/clients/python/trafficops/tosession.py
@@ -1495,6 +1495,34 @@ class TOSession(RestApiSession):
                :raises: Union[LoginError, OperationError]
                """
 
+
+    #
+       # multiple_server_capabilities
+       #
+       @api_request('post', 'multiple_servers_capabilities', ('4.1', '5.0'))
+       def create_multiple_servers_capabilities(self, data=None):
+               """
+               Create multiple_servers_capabilities
+               :ref:`to-api-multiple_servers_capabilities`
+               :param data: The multiple_servers_capabilities data to use for 
multiple_servers_capabilities creation.
+               :type data: Union[Dict[str, Any], List[Dict[str, Any]]]
+               :rtype: Tuple[Dict[str, Any], requests.Response]
+               :raises: Union[LoginError, OperationError]
+               """
+
+
+       @api_request('delete', 'multiple_servers_capabilities', ('4.1', '5.0'))
+       def delete_multiple_servers_capabilities(self, data=None):
+               """
+               Delete multiple_servers_capabilities
+               :ref:`to-api-multiple_servers_capabilities`
+               :param data: The multiple_servers_capabilities data to use for 
multiple_servers_capabilities creation.
+               :type data: Union[Dict[str, Any], List[Dict[str, Any]]]
+               :rtype: Tuple[Dict[str, Any], requests.Response]
+               :raises: Union[LoginError, OperationError]
+               """
+
+
        #
        # Physical Location
        #
diff --git a/traffic_ops/testing/api_contract/v4/conftest.py 
b/traffic_ops/testing/api_contract/v4/conftest.py
index db268e50cb..a214a32804 100644
--- a/traffic_ops/testing/api_contract/v4/conftest.py
+++ b/traffic_ops/testing/api_contract/v4/conftest.py
@@ -1094,6 +1094,7 @@ def server_data_post(to_session: TOSession, 
request_template_data: list[JSONData
                                      {"useInTable": "server"})
        type_id = type_object["id"]
        server["typeId"] = type_id
+
        pytestconfig.cache.set("typeId", type_id)
 
        server["cachegroupId"]= cache_group_post_data["id"]
@@ -1168,7 +1169,6 @@ def delivery_services_data_post(to_session: TOSession, 
request_template_data: li
        delivery_services["typeId"] = type_object["id"]
        delivery_services["type"] = type_object["name"]
 
-
        logger.info("New delivery_services data to hit POST method %s", 
delivery_services)
        # Hitting delivery_services POST method
        response: tuple[JSONData, requests.Response] = 
to_session.create_deliveryservice(
@@ -1492,7 +1492,6 @@ def cdn_notification_data_post(to_session: TOSession, 
request_template_data: lis
 
        cdn_notification = check_template_data(
                request_template_data["cdn_notifications"], "cdn_notifications")
-
        # Return new post data and post response from cdn_notifications POST 
request
        cdn_notification["cdn"] = cdn_post_data["name"]
        logger.info("New cdn_notification data to hit POST method %s", 
cdn_notification)
diff --git a/traffic_ops/testing/api_contract/v4/data/response_template.json 
b/traffic_ops/testing/api_contract/v4/data/response_template.json
index 8cdeef3a48..ee7939abf2 100644
--- a/traffic_ops/testing/api_contract/v4/data/response_template.json
+++ b/traffic_ops/testing/api_contract/v4/data/response_template.json
@@ -833,7 +833,10 @@
                 "type": "integer"
             },
             "cdnName": {
-                "type": "string"
+                "type": [
+                    "null",
+                    "string"
+                ]
             },
             "checkPath": {
                 "type": [
diff --git a/traffic_ops/testing/api_contract/v4/test_delivery_services.py 
b/traffic_ops/testing/api_contract/v4/test_delivery_services.py
index 9311ec0583..fb65c5de73 100644
--- a/traffic_ops/testing/api_contract/v4/test_delivery_services.py
+++ b/traffic_ops/testing/api_contract/v4/test_delivery_services.py
@@ -14,6 +14,7 @@
 
 """API Contract Test Case for delivery services endpoint."""
 import logging
+from random import randint
 from typing import Union
 import pytest
 import requests
@@ -50,6 +51,15 @@ def test_delivery_services_contract(to_session: TOSession,
                Union[dict[str, object], list[Union[dict[str, object], 
list[object], Primitive]], Primitive],
                requests.Response
        ] = to_session.get_deliveryservices(query_params={"id": 
delivery_services_id})
+
+       # Hitting delivery_services PUT method
+       delivery_services_post_data["longDesc"] = "test" + str(randint(0, 
1000)) 
+       logger.info("Updated delivery services data to hit PUT method %s", 
delivery_services_post_data)
+       put_response: tuple[
+               Union[dict[str, object], list[Union[dict[str, object], 
list[object], Primitive]], Primitive], 
+               requests.Response] = to_session.update_deliveryservice_by_id(
+               data=delivery_services_post_data, 
delivery_service_id=delivery_services_id)
+
        try:
                delivery_services_data = delivery_services_get_response[0]
                if not isinstance(delivery_services_data, list):
@@ -58,7 +68,15 @@ def test_delivery_services_contract(to_session: TOSession,
                first_delivery_services = delivery_services_data[0]
                if not isinstance(first_delivery_services, dict):
                        raise TypeError("malformed API response; first 
delivery_services in response is not an dict")
-               logger.info("delivery_services Api response %s", 
first_delivery_services)
+               logger.info("delivery_services Api get response %s", 
first_delivery_services)
+
+               delivery_services_put_data = put_response[0]
+               if not isinstance(delivery_services_put_data, list):
+                       raise TypeError("malformed API response; 'response' 
property not an array")
+               delivery_services_put_response = delivery_services_put_data[0]
+               if not isinstance(delivery_services_put_response, dict):
+                       raise TypeError("malformed API response; 
delivery_services in response is not an dict")
+               logger.info("delivery_services Api put response %s", 
delivery_services_put_response)
                delivery_services_response_template = 
response_template_data.get("delivery_services")
                if not isinstance(delivery_services_response_template, dict):
                        raise TypeError(f"delivery_services response template 
data must be a dict, not '"
@@ -71,6 +89,8 @@ def test_delivery_services_contract(to_session: TOSession,
                assert validate(instance=first_delivery_services,
                  schema=delivery_services_response_template) is None
                assert get_values == prereq_values
+               assert validate(instance=delivery_services_put_response,
+                 schema=delivery_services_response_template) is None
        except IndexError:
                logger.error("Either prerequisite data or API response was 
malformed")
                pytest.fail("API contract test failed for delivery_services 
endpoint: API response was malformed")

Reply via email to