Create SDNC Sanity test 91/134691/6
authorAleksandr Taranov <aleksandr.taranov@telekom.com>
Thu, 25 May 2023 14:21:34 +0000 (17:21 +0300)
committerLukasz Rajewski <lukasz.rajewski@t-mobile.pl>
Wed, 31 May 2023 11:18:21 +0000 (11:18 +0000)
Issue-ID: TEST-395
Signed-off-by: Aleksandr Taranov <aleksandr.taranov@telekom.com>
Signed-off-by: Lukasz Rajewski <lukasz.rajewski@t-mobile.pl>
Change-Id: I2a035beb74510013eb8e04aecd90c648af77fe28

requirements.txt
run_basic_sdnc.py [new file with mode: 0644]
setup.cfg
src/onaptests/configuration/basic_sdnc_settings.py [new file with mode: 0644]
src/onaptests/scenario/basic_sdnc.py [new file with mode: 0644]
src/onaptests/steps/instantiate/sdnc_service.py [new file with mode: 0644]

index 7866370..c9db44a 100644 (file)
@@ -2,8 +2,8 @@ cryptography==38.0.4
 xtesting==0.91.0
 avionix>=0.4.5
 openstacksdk>=0.61.0
-onapsdk==10.4.3
+onapsdk==10.5.0
 jinja2>3
 kubernetes>=22.6.0
 setuptools==65.3.0
-natural==0.2.0
\ No newline at end of file
+natural==0.2.0
diff --git a/run_basic_sdnc.py b/run_basic_sdnc.py
new file mode 100644 (file)
index 0000000..18e6347
--- /dev/null
@@ -0,0 +1,18 @@
+import logging.config
+from onapsdk.configuration import settings
+
+from onaptests.scenario.basic_sdnc import BasicSdnc
+import onaptests.utils.exceptions as onap_test_exceptions
+
+if __name__ == "__main__":
+    # logging configuration for onapsdk, it is not requested for onaptests
+    # Correction requested in onapsdk to avoid having this duplicate code
+    logging.config.dictConfig(settings.LOG_CONFIG)
+    logger = logging.getLogger("Basic SDNC")
+
+    basic_sdnc = BasicSdnc(cleanup=settings.CLEANUP_FLAG)
+    try:
+        basic_sdnc.run()
+        basic_sdnc.clean()
+    except onap_test_exceptions.TestConfigurationException:
+        logger.error("Basic SDNC configuration error")
index adc5034..d1483a4 100644 (file)
--- a/setup.cfg
+++ b/setup.cfg
@@ -59,3 +59,4 @@ xtesting.testcase =
   basic_cnf_macro = onaptests.scenario.basic_cnf_macro:BasicCnfMacro
   basic_cps = onaptests.scenario.basic_cps:BasicCps
   status = onaptests.scenario.status:Status
+  basic_sdnc = onaptests.scenario.basic_sdnc:BasicSdnc
diff --git a/src/onaptests/configuration/basic_sdnc_settings.py b/src/onaptests/configuration/basic_sdnc_settings.py
new file mode 100644 (file)
index 0000000..e6bbdcc
--- /dev/null
@@ -0,0 +1,69 @@
+from .settings import *
+
+CLEANUP_FLAG = True
+
+SERVICE_NAME = "Basic SDNC test"
+
+SERVICE_COMPONENTS = "SDNC"
+
+SERVICE_ID = "pythonsdk-tests-service-01"
+
+SERVICE_STATUS = {
+    "rpc-action": "activate",
+    "response-message": "test-message-1",
+    "response-timestamp": "2023-05-09T13:14:30.540Z",
+    "request-status": "synccomplete",
+    "final-indicator": "Y",
+    "action": "CreateVnfInstance",
+    "rpc-name": "vnf-topology-operation",
+    "response-code": "200"
+}
+
+SERVICE_CHANGED_STATUS = {
+    "rpc-action": "activate",
+    "response-message": "changed-test-message-1",
+    "response-timestamp": "2023-05-09T13:14:30.540Z",
+    "request-status": "synccomplete",
+    "final-indicator": "Y",
+    "action": "CreateVnfInstance",
+    "rpc-name": "vnf-topology-operation",
+    "response-code": "200"
+}
+
+SERVICE_DATA = {
+    "service-level-oper-status": {
+        "last-rpc-action": "assign",
+        "last-action": "CreateServiceInstance",
+        "order-status": "Created"
+    },
+    "service-request-input": {
+        "service-input-parameters": {
+            "param": [
+                {
+                    "name": "orchestrator",
+                    "value": "multicloud"
+                }
+            ]
+        },
+        "service-instance-name": "gnb-93100001"
+    }
+}
+
+SERVICE_CHANGED_DATA = {
+    "service-level-oper-status": {
+        "last-rpc-action": "assign",
+        "last-action": "CreateServiceInstance",
+        "order-status": "Created"
+    },
+    "service-request-input": {
+        "service-input-parameters": {
+            "param": [
+                {
+                    "name": "orchestrator",
+                    "value": "multicloud"
+                }
+            ]
+        },
+        "service-instance-name": "gnb-93100002"
+    }
+}
diff --git a/src/onaptests/scenario/basic_sdnc.py b/src/onaptests/scenario/basic_sdnc.py
new file mode 100644 (file)
index 0000000..d791080
--- /dev/null
@@ -0,0 +1,45 @@
+import logging
+import time
+from xtesting.core import testcase
+
+from onapsdk.configuration import settings
+from onapsdk.exceptions import SDKException
+
+from onaptests.steps.instantiate.sdnc_service import UpdateSdncService
+from onaptests.utils.exceptions import OnapTestException
+
+
+class BasicSdnc(testcase.TestCase):
+    """Create SDNC service.
+    Check and delete the service.
+    """
+
+    __logger = logging.getLogger()
+
+    def __init__(self, **kwargs):
+        """Init Basic SDNC use case."""
+        if "case_name" not in kwargs:
+            kwargs["case_name"] = 'basic_SDNC'
+        super().__init__(**kwargs)
+        self.__logger.debug("Basic SDNC init started")
+        self.test = UpdateSdncService(cleanup=settings.CLEANUP_FLAG)
+
+    def run(self):
+        """Run basic SDNC test."""
+        self.start_time = time.time()
+        try:
+            self.test.execute()
+            self.test.cleanup()
+            self.result = 100
+        except OnapTestException as exc:
+            self.result = 0
+            self.__logger.exception(exc.error_message)
+        except SDKException:
+            self.result = 0
+            self.__logger.exception("SDK Exception")
+        finally:
+            self.stop_time = time.time()
+
+    def clean(self):
+        """Generate report."""
+        self.test.reports_collection.generate_report()
diff --git a/src/onaptests/steps/instantiate/sdnc_service.py b/src/onaptests/steps/instantiate/sdnc_service.py
new file mode 100644 (file)
index 0000000..c5308d6
--- /dev/null
@@ -0,0 +1,104 @@
+from onapsdk.sdnc.services import Service
+from onapsdk.configuration import settings
+from onapsdk.exceptions import APIError
+
+from ..base import BaseStep
+
+from onaptests.utils.exceptions import OnapTestException
+
+
+class ServiceCreateStep(BaseStep):
+    """Service creation step."""
+
+    def __init__(self, service: Service = None, cleanup: bool = False):
+        """Initialize step."""
+        super().__init__(cleanup=cleanup)
+        self.service = service
+
+    @property
+    def description(self) -> str:
+        """Step description."""
+        return "Create SDNC service."
+
+    @property
+    def component(self) -> str:
+        """Component name."""
+        return "SDNC"
+
+    @BaseStep.store_state
+    def execute(self):
+        """Create service at SDNC."""
+        self._logger.info("Create new service instance in SDNC by GR-API")
+        super().execute()
+        try:
+            self.service = Service(
+                service_instance_id=settings.SERVICE_ID,
+                service_status=settings.SERVICE_STATUS,
+                service_data=settings.SERVICE_DATA
+            )
+            self.service.create()
+            self._logger.info("SDNC service is created.")
+        except APIError:
+            raise OnapTestException("SDNC service creation failed.")
+
+    @BaseStep.store_state()
+    def cleanup(self) -> None:
+        """Cleanup Service."""
+        if self.service is not None:
+            self.service.delete()
+            self._logger.info("SDNC service is deleted.")
+        super().cleanup()
+
+
+class UpdateSdncService(BaseStep):
+    """Service update step.
+
+    The step needs in an existing SDNC service as a prerequisite.
+    """
+
+    def __init__(self, cleanup=False):
+        """Initialize step.
+
+        Sub steps:
+            - ServiceCreateStep.
+        """
+        super().__init__(cleanup=cleanup)
+        self.add_step(ServiceCreateStep(cleanup=cleanup))
+
+    @property
+    def description(self) -> str:
+        """Step description.
+
+        Used for reports
+
+        Returns:
+            str: Step description
+
+        """
+        return "Update SDNC service"
+
+    @property
+    def component(self) -> str:
+        """Component name.
+
+        Name of component which step is related with.
+            Most is the name of ONAP component.
+
+        Returns:
+            str: Component name
+
+        """
+        return "SDNC"
+
+    @BaseStep.store_state
+    def execute(self):
+        self._logger.info("Get existing SDNC service instance and update it over GR-API")
+        super().execute()
+        try:
+            service = Service.get(settings.SERVICE_ID)
+            service.service_status = settings.SERVICE_CHANGED_STATUS
+            service.service_data = settings.SERVICE_CHANGED_DATA
+            service.update()
+            self._logger.info("SDNC service update is checked.")
+        except APIError:
+            raise OnapTestException("SDNC service update is failed.")