diff options
author | ankitg@aarnanetworks.com <ankitg@aarnanetworks.com> | 2023-01-16 08:22:04 +0000 |
---|---|---|
committer | Michal Jagiello <michal.jagiello@t-mobile.pl> | 2023-01-16 12:55:40 +0000 |
commit | 956bef308145fa3fb2263bd66a94c562a6f466b8 (patch) | |
tree | 89885547436aab9b39fcb498f6f6aea4f8dc6aa2 | |
parent | a805ee54d2727f3d269d960e3801b4c53551565e (diff) |
Archive and delete SDC Resources
Issue-ID: INT-2193
Signed-off-by: Michal Jagiello <michal.jagiello@t-mobile.pl>
Change-Id: Ic63628440059bacac03689d61859c6a72f7780df
-rw-r--r-- | src/onapsdk/sdc/sdc_element.py | 22 | ||||
-rw-r--r-- | src/onapsdk/sdc/sdc_resource.py | 16 | ||||
-rw-r--r-- | tests/test_sdc_element.py | 13 | ||||
-rwxr-xr-x | tests/test_service.py | 24 |
4 files changed, 72 insertions, 3 deletions
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..29615db 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"Archive {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..2ba61db 100755 --- a/tests/test_service.py +++ b/tests/test_service.py @@ -15,10 +15,10 @@ from os import path from pathlib import Path +from tempfile import TemporaryDirectory from unittest import mock from unittest.mock import MagicMock, PropertyMock import shutil -import oyaml as yaml import pytest import onapsdk.constants as const from onapsdk.exceptions import ParameterError, RequestError, ResourceNotFound, StatusError, ValidationError @@ -531,7 +531,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') @@ -1490,10 +1491,27 @@ def test_service_components(mock_send_message_json): assert not service.has_vnfs assert not service.has_pnfs assert not service.has_vls - mock_send_message_json.side_effect = [COMPONENTS_WITH_ALL_ORIGIN_TYPES, COMPONENT, COMPONENTS_WITH_ALL_ORIGIN_TYPES, COMPONENT, COMPONENT, COMPONENTS_WITH_ALL_ORIGIN_TYPES, COMPONENT, COMPONENT, COMPONENT] assert service.has_vnfs assert service.has_pnfs assert service.has_vls + +@mock.patch.object(Service, "send_message") +def test_service_archive(mock_send): + service = Service(name="test") + service.archive() + mock_send.assert_called() + method, description, url = mock_send.call_args[0] + assert method == "POST" + assert description == "Archive test component" + assert "archive" in url + +@mock.patch.object(Service, "send_message") +def test_service_delete(mock_send): + service = Service(name="test") + service.delete() + mock_send.assert_called() + method = mock_send.call_args[0][0] + assert method == "DELETE" |