aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorankitg@aarnanetworks.com <ankitg@aarnanetworks.com>2023-01-16 08:22:04 +0000
committerMichal Jagiello <michal.jagiello@t-mobile.pl>2023-01-16 12:55:40 +0000
commit956bef308145fa3fb2263bd66a94c562a6f466b8 (patch)
tree89885547436aab9b39fcb498f6f6aea4f8dc6aa2
parenta805ee54d2727f3d269d960e3801b4c53551565e (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.py22
-rw-r--r--src/onapsdk/sdc/sdc_resource.py16
-rw-r--r--tests/test_sdc_element.py13
-rwxr-xr-xtests/test_service.py24
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"