From b7948cee800b2e7b09065148cc326c5a35867550 Mon Sep 17 00:00:00 2001 From: "ankitg@aarnanetworks.com" Date: Mon, 16 Jan 2023 08:22:04 +0000 Subject: Archive and delete SDC Resources Issue-ID: INT-2193 Change-Id: I89f7e328dcc514ca632ca2193a80a9994a50cb59 Signed-off-by: Michal Jagiello --- src/onapsdk/sdc/sdc_element.py | 22 ++++++++++++++++++++++ src/onapsdk/sdc/sdc_resource.py | 16 ++++++++++++++++ tests/test_sdc_element.py | 13 +++++++++++++ tests/test_service.py | 4 +++- 4 files changed, 54 insertions(+), 1 deletion(-) diff --git a/src/onapsdk/sdc/sdc_element.py b/src/onapsdk/sdc/sdc_element.py index df513b7..b2d27bd 100644 --- a/src/onapsdk/sdc/sdc_element.py +++ b/src/onapsdk/sdc/sdc_element.py @@ -175,6 +175,16 @@ class SdcElement(SdcOnboardable, ABC): """ return "{}/{}".format(cls._base_url(), cls._sdc_path()) + @property + def delete_url(self) -> str: + """Get an url to delete element. + + Returns: + str: Url which can be used to delete SDC element + + """ + return f"{self._get_all_url}/{self.identifier}" + def _copy_object(self, obj: 'SdcElement') -> None: """ Copy relevant properties from object. @@ -225,3 +235,15 @@ class SdcElement(SdcOnboardable, ABC): """ raise NotImplementedError("SdcElement is an abstract class") + + def delete(self) -> None: + """Delete SDC element. + + Send a request to SDC to delete that element. + + """ + self.send_message( + "DELETE", + "Delete SDC element", + self.delete_url + ) diff --git a/src/onapsdk/sdc/sdc_resource.py b/src/onapsdk/sdc/sdc_resource.py index 7e7dbb9..cae0817 100644 --- a/src/onapsdk/sdc/sdc_resource.py +++ b/src/onapsdk/sdc/sdc_resource.py @@ -958,3 +958,19 @@ class SdcResource(SdcOnboardable, ABC): # pylint: disable=too-many-instance-att return None msg = f"Can't add resource to {self.origin_type} which is not in DRAFT status" raise StatusError(msg) + + def archive(self) -> None: + """Archive resource.""" + self.send_message( + "POST", + f"POST {self.name} component", + f"{self.resource_inputs_url}/archive" + ) + + def delete(self) -> None: + """Delete resource.""" + self.send_message( + "DELETE", + f"Delete {self.name} component", + f"{self.resource_inputs_url}" + ) diff --git a/tests/test_sdc_element.py b/tests/test_sdc_element.py index 88bcd8f..8cfb907 100644 --- a/tests/test_sdc_element.py +++ b/tests/test_sdc_element.py @@ -107,3 +107,16 @@ def test_exists_versions(mock_vsp_created, mock_get_all): sdc_el2._identifier = "123" mock_get_all.return_value = [sdc_el1, sdc_el2] assert sdc_el1.exists() + +@mock.patch.object(SdcElement, "send_message") +def test_delete(mock_send_message): + vsp = Vsp("test_vsp") + vsp.identifier = "test_vsp" + vsp.delete() + mock_send_message.assert_called_once() + + mock_send_message.reset_mock() + vendor = Vendor("test_vendor") + vendor.identifier = "test_vendor" + vendor.delete() + mock_send_message.assert_called_once() diff --git a/tests/test_service.py b/tests/test_service.py index 7606ed2..3e3ec94 100755 --- a/tests/test_service.py +++ b/tests/test_service.py @@ -15,6 +15,7 @@ from os import path from pathlib import Path +from tempfile import TemporaryDirectory from unittest import mock from unittest.mock import MagicMock, PropertyMock import shutil @@ -531,7 +532,8 @@ def test_get_tosca_bad_csart(requests_mock): requests_mock.get( 'https://sdc.api.be.simpledemo.onap.org:30204/sdc/v1/catalog/services/12/toscaModel', content=file_content) - svc.get_tosca('directory') + with TemporaryDirectory() as tempdir: + svc.get_tosca(tempdir) assert not path.exists('/tmp/tosca_files') -- cgit 1.2.3-korg