Check if the bucket exists before deleting VSP

Checks if the bucket exists before deleting VSP, ignoring the deletion
if the bucket isn't present anymore.
This avoids problems in case the artifact was already deleted from the
artifact storage, but for some reason the VSP still present in the
system.

Change-Id: I7e88f227cc6786b451ca74519fa0dfe0659895c6
Issue-ID: SDC-3930
Signed-off-by: andre.schmid <andre.schmid@est.tech>
diff --git a/common-be/src/main/java/org/openecomp/sdc/be/csar/storage/MinIoStorageArtifactStorageManager.java b/common-be/src/main/java/org/openecomp/sdc/be/csar/storage/MinIoStorageArtifactStorageManager.java
index bc0792b..78ee4be 100644
--- a/common-be/src/main/java/org/openecomp/sdc/be/csar/storage/MinIoStorageArtifactStorageManager.java
+++ b/common-be/src/main/java/org/openecomp/sdc/be/csar/storage/MinIoStorageArtifactStorageManager.java
@@ -92,7 +92,7 @@
 
         try {
             // Make bucket if not exist.
-            final boolean found = minioClient.bucketExists(BucketExistsArgs.builder().bucket(vspId).build());
+            final boolean found = bucketExists(vspId);
 
             if (!found) {
                 // Make a new bucket ${vspId} .
@@ -174,6 +174,10 @@
     @Override
     public void delete(final String vspId) {
         LOGGER.debug("DELETE VSP - bucket: '{}'", vspId);
+        if (!bucketExists(vspId)) {
+            LOGGER.debug("VSP '{}' bucket was not found while trying to delete it", vspId);
+            return;
+        }
         final var listObjects = minioClient.listObjects(ListObjectsArgs.builder().bucket(vspId).build());
         listObjects.forEach(itemResult -> {
             Item versionId;
@@ -193,6 +197,14 @@
         }
     }
 
+    private boolean bucketExists(final String vspId) {
+        try {
+            return minioClient.bucketExists(BucketExistsArgs.builder().bucket(vspId).build());
+        } catch (final Exception e) {
+            throw new ArtifactStorageException(String.format("An unexpected error occurred while checking for vsp '%s'", vspId), e);
+        }
+    }
+
     private MinIoStorageArtifactStorageConfig readMinIoStorageArtifactStorageConfig() {
         final var commonConfigurationManager = CommonConfigurationManager.getInstance();
         final Map<String, Object> endpoint = commonConfigurationManager.getConfigValue(EXTERNAL_CSAR_STORE, ENDPOINT, null);
diff --git a/common-be/src/test/java/org/openecomp/sdc/be/csar/storage/MinIoStorageArtifactStorageManagerTest.java b/common-be/src/test/java/org/openecomp/sdc/be/csar/storage/MinIoStorageArtifactStorageManagerTest.java
index 09e6284..4d12a0b 100644
--- a/common-be/src/test/java/org/openecomp/sdc/be/csar/storage/MinIoStorageArtifactStorageManagerTest.java
+++ b/common-be/src/test/java/org/openecomp/sdc/be/csar/storage/MinIoStorageArtifactStorageManagerTest.java
@@ -27,6 +27,7 @@
 import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 import io.minio.BucketExistsArgs;
@@ -155,10 +156,19 @@
 
     @Test
     void testDeleteVspFail() throws Exception {
+        when(minioClient.bucketExists(BucketExistsArgs.builder().bucket(VSP_ID).build())).thenReturn(true);
         doThrow(new RuntimeException()).when(minioClient).removeBucket(any(RemoveBucketArgs.class));
-        assertThrows(ArtifactStorageException.class, () -> {
-            testSubject.delete(VSP_ID);
-        });
+        assertThrows(ArtifactStorageException.class, () -> testSubject.delete(VSP_ID));
+    }
+
+    @Test
+    void testDeleteVspBucketNotFound() throws Exception {
+        final BucketExistsArgs bucketExistsArgs = BucketExistsArgs.builder().bucket(VSP_ID).build();
+        //when
+        when(minioClient.bucketExists(bucketExistsArgs)).thenReturn(false);
+        testSubject.delete(VSP_ID);
+        //then
+        verify(minioClient).bucketExists(bucketExistsArgs);
     }
 
     @Test