diff --git a/multiapps-controller-api/pom.xml b/multiapps-controller-api/pom.xml index 8fc3141542..bdfbd473d7 100644 --- a/multiapps-controller-api/pom.xml +++ b/multiapps-controller-api/pom.xml @@ -10,7 +10,7 @@ org.cloudfoundry.multiapps multiapps-controller-parent - 2.44.1 + 2.44.2 diff --git a/multiapps-controller-client/pom.xml b/multiapps-controller-client/pom.xml index 9c4ce6de78..8f541b78db 100644 --- a/multiapps-controller-client/pom.xml +++ b/multiapps-controller-client/pom.xml @@ -9,7 +9,7 @@ org.cloudfoundry.multiapps multiapps-controller-parent - 2.44.1 + 2.44.2 diff --git a/multiapps-controller-core-test/pom.xml b/multiapps-controller-core-test/pom.xml index 8a0738262c..0a64a11d22 100644 --- a/multiapps-controller-core-test/pom.xml +++ b/multiapps-controller-core-test/pom.xml @@ -9,7 +9,7 @@ org.cloudfoundry.multiapps multiapps-controller-parent - 2.44.1 + 2.44.2 diff --git a/multiapps-controller-core/pom.xml b/multiapps-controller-core/pom.xml index ef66afab66..f781d5d721 100644 --- a/multiapps-controller-core/pom.xml +++ b/multiapps-controller-core/pom.xml @@ -9,7 +9,7 @@ org.cloudfoundry.multiapps multiapps-controller-parent - 2.44.1 + 2.44.2 diff --git a/multiapps-controller-coverage/pom.xml b/multiapps-controller-coverage/pom.xml index e3b6f69628..969b1a045f 100644 --- a/multiapps-controller-coverage/pom.xml +++ b/multiapps-controller-coverage/pom.xml @@ -9,7 +9,7 @@ org.cloudfoundry.multiapps multiapps-controller-parent - 2.44.1 + 2.44.2 diff --git a/multiapps-controller-database-migration/pom.xml b/multiapps-controller-database-migration/pom.xml index 836d33d37e..b88dc96258 100644 --- a/multiapps-controller-database-migration/pom.xml +++ b/multiapps-controller-database-migration/pom.xml @@ -9,7 +9,7 @@ org.cloudfoundry.multiapps multiapps-controller-parent - 2.44.1 + 2.44.2 diff --git a/multiapps-controller-persistence-test/pom.xml b/multiapps-controller-persistence-test/pom.xml index ef7d0745af..2e9c1a2677 100644 --- a/multiapps-controller-persistence-test/pom.xml +++ b/multiapps-controller-persistence-test/pom.xml @@ -9,7 +9,7 @@ org.cloudfoundry.multiapps multiapps-controller-parent - 2.44.1 + 2.44.2 diff --git a/multiapps-controller-persistence/pom.xml b/multiapps-controller-persistence/pom.xml index 7514b98d8e..254d30fc7d 100644 --- a/multiapps-controller-persistence/pom.xml +++ b/multiapps-controller-persistence/pom.xml @@ -9,7 +9,7 @@ org.cloudfoundry.multiapps multiapps-controller-parent - 2.44.1 + 2.44.2 diff --git a/multiapps-controller-persistence/src/main/java/org/cloudfoundry/multiapps/controller/persistence/services/JCloudsObjectStoreFileStorage.java b/multiapps-controller-persistence/src/main/java/org/cloudfoundry/multiapps/controller/persistence/services/JCloudsObjectStoreFileStorage.java index d1fba0ac70..2ba0ff70a7 100644 --- a/multiapps-controller-persistence/src/main/java/org/cloudfoundry/multiapps/controller/persistence/services/JCloudsObjectStoreFileStorage.java +++ b/multiapps-controller-persistence/src/main/java/org/cloudfoundry/multiapps/controller/persistence/services/JCloudsObjectStoreFileStorage.java @@ -77,7 +77,7 @@ public List getFileEntriesWithoutContent(List fileEntries) @Override protected boolean existsInObjectStore(FileEntry fileEntry) { - return blobStore.blobMetadata(container, fileEntry.getId()) != null; + return blobStore.blobExists(container, fileEntry.getId()); } @Override diff --git a/multiapps-controller-persistence/src/test/java/org/cloudfoundry/multiapps/controller/persistence/services/JCloudsObjectStoreFileStorageTest.java b/multiapps-controller-persistence/src/test/java/org/cloudfoundry/multiapps/controller/persistence/services/JCloudsObjectStoreFileStorageTest.java index 29a5398b45..0addf3485f 100644 --- a/multiapps-controller-persistence/src/test/java/org/cloudfoundry/multiapps/controller/persistence/services/JCloudsObjectStoreFileStorageTest.java +++ b/multiapps-controller-persistence/src/test/java/org/cloudfoundry/multiapps/controller/persistence/services/JCloudsObjectStoreFileStorageTest.java @@ -31,9 +31,17 @@ import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; class JCloudsObjectStoreFileStorageTest { @@ -368,4 +376,47 @@ protected void assertFileExists(boolean expectedFileExist, FileEntry actualFile) assertEquals(expectedFileExist, blobExists); } + @Test + void existsInObjectStoreWithMockedBlobStoreVerifiesBlobExistsCalled() { + BlobStore mockBlobStore = mock(BlobStore.class); + FileEntry fileEntry = createFileEntry(); + JCloudsObjectStoreFileStorage testFileStorage = new JCloudsObjectStoreFileStorage(mockBlobStore, CONTAINER); + + when(mockBlobStore.blobExists(CONTAINER, fileEntry.getId())).thenReturn(true); + + boolean result = testFileStorage.existsInObjectStore(fileEntry); + + verify(mockBlobStore, times(1)).blobExists(CONTAINER, fileEntry.getId()); + assertTrue(result); + } + + @Test + void existsInObjectStoreWithMockedBlobStoreFileNotFound() { + BlobStore mockBlobStore = mock(BlobStore.class); + FileEntry fileEntry = createFileEntry(); + JCloudsObjectStoreFileStorage testFileStorage = new JCloudsObjectStoreFileStorage(mockBlobStore, CONTAINER); + + when(mockBlobStore.blobExists(CONTAINER, fileEntry.getId())).thenReturn(false); + + boolean result = testFileStorage.existsInObjectStore(fileEntry); + + verify(mockBlobStore, times(1)).blobExists(CONTAINER, fileEntry.getId()); + assertFalse(result); + } + + @Test + void existsInObjectStoreWithMockedBlobStoreVerifiesCorrectContainer() { + BlobStore mockBlobStore = mock(BlobStore.class); + String testContainer = "test-container"; + FileEntry fileEntry = createFileEntry(); + JCloudsObjectStoreFileStorage testFileStorage = new JCloudsObjectStoreFileStorage(mockBlobStore, testContainer); + + when(mockBlobStore.blobExists(testContainer, fileEntry.getId())).thenReturn(true); + + boolean result = testFileStorage.existsInObjectStore(fileEntry); + + verify(mockBlobStore, times(1)).blobExists(testContainer, fileEntry.getId()); + verify(mockBlobStore, never()).blobExists(eq("wrong-container"), any()); + assertTrue(result); + } } diff --git a/multiapps-controller-process/pom.xml b/multiapps-controller-process/pom.xml index ada42f9d88..cc3751e773 100644 --- a/multiapps-controller-process/pom.xml +++ b/multiapps-controller-process/pom.xml @@ -9,7 +9,7 @@ org.cloudfoundry.multiapps multiapps-controller-parent - 2.44.1 + 2.44.2 diff --git a/multiapps-controller-shutdown-client/pom.xml b/multiapps-controller-shutdown-client/pom.xml index c83207bfd2..afd4e2f252 100644 --- a/multiapps-controller-shutdown-client/pom.xml +++ b/multiapps-controller-shutdown-client/pom.xml @@ -8,7 +8,7 @@ org.cloudfoundry.multiapps multiapps-controller-parent - 2.44.1 + 2.44.2 diff --git a/multiapps-controller-web/pom.xml b/multiapps-controller-web/pom.xml index d734053622..5f90efdf73 100644 --- a/multiapps-controller-web/pom.xml +++ b/multiapps-controller-web/pom.xml @@ -9,7 +9,7 @@ org.cloudfoundry.multiapps multiapps-controller-parent - 2.44.1 + 2.44.2 diff --git a/multiapps-controller-web/src/main/java/org/cloudfoundry/multiapps/controller/web/Messages.java b/multiapps-controller-web/src/main/java/org/cloudfoundry/multiapps/controller/web/Messages.java index 4bbccac51f..44e23acd6e 100644 --- a/multiapps-controller-web/src/main/java/org/cloudfoundry/multiapps/controller/web/Messages.java +++ b/multiapps-controller-web/src/main/java/org/cloudfoundry/multiapps/controller/web/Messages.java @@ -58,7 +58,7 @@ public final class Messages { // WARN log messages - public static final String NO_OBJECTSTORE_PROVIDER_FOUND = "No ObjectStore provider found!"; + public static final String NO_OBJECTSTORE_PROVIDER_FOUND_FOR_0 = "No ObjectStore provider found for {0}!"; // INFO log messages public static final String ALM_SERVICE_ENV_INITIALIZED = "Deploy service environment initialized"; diff --git a/multiapps-controller-web/src/main/java/org/cloudfoundry/multiapps/controller/web/configuration/bean/factory/ObjectStoreFileStorageFactoryBean.java b/multiapps-controller-web/src/main/java/org/cloudfoundry/multiapps/controller/web/configuration/bean/factory/ObjectStoreFileStorageFactoryBean.java index f8311d7d94..18020e1a0a 100644 --- a/multiapps-controller-web/src/main/java/org/cloudfoundry/multiapps/controller/web/configuration/bean/factory/ObjectStoreFileStorageFactoryBean.java +++ b/multiapps-controller-web/src/main/java/org/cloudfoundry/multiapps/controller/web/configuration/bean/factory/ObjectStoreFileStorageFactoryBean.java @@ -23,7 +23,6 @@ import org.cloudfoundry.multiapps.controller.persistence.util.EnvironmentServicesFinder; import org.cloudfoundry.multiapps.controller.web.Constants; import org.cloudfoundry.multiapps.controller.web.Messages; -import org.cloudfoundry.multiapps.controller.web.configuration.service.ImmutableObjectStoreServiceInfo; import org.cloudfoundry.multiapps.controller.web.configuration.service.ObjectStoreServiceInfo; import org.cloudfoundry.multiapps.controller.web.configuration.service.ObjectStoreServiceInfoCreator; import org.jclouds.ContextBuilder; @@ -92,11 +91,13 @@ public FileStorage createObjectStoreFromFirstReachableProvider(Map createObjectStoreBasedOnProvider(String objectStoreProviderName, List providersServiceInfo, Map exceptions) { - return switch (objectStoreProviderName) { - case Constants.AZURE -> tryToCreateSdkObjectStore(exceptions, Constants.AZUREBLOB); - case Constants.GCP -> tryToCreateSdkObjectStore(exceptions, Constants.GOOGLE_CLOUD_STORAGE); - default -> tryToCreateJCloudsObjectStore(objectStoreProviderName, providersServiceInfo, exceptions); - }; + Optional objectStoreServiceInfoOptional = getAppropriateProvider(objectStoreProviderName, + providersServiceInfo); + if (objectStoreServiceInfoOptional.isEmpty()) { + LOGGER.warn(MessageFormat.format(Messages.NO_OBJECTSTORE_PROVIDER_FOUND_FOR_0, objectStoreProviderName)); + return Optional.empty(); + } + return tryToCreateObjectStore(objectStoreServiceInfoOptional.get(), exceptions); } private Optional getAppropriateProvider(String objectStoreProviderName, @@ -107,25 +108,6 @@ private Optional getAppropriateProvider(String objectSto .findFirst(); } - private Optional tryToCreateJCloudsObjectStore(String objectStoreProviderName, - List providersServiceInfo, - Map exceptions) { - Optional objectStoreServiceInfoOptional = getAppropriateProvider(objectStoreProviderName, - providersServiceInfo); - if (objectStoreServiceInfoOptional.isPresent()) { - ObjectStoreServiceInfo objectStoreServiceInfo = objectStoreServiceInfoOptional.get(); - return tryToCreateObjectStore(objectStoreServiceInfo, exceptions); - } - LOGGER.warn(Messages.NO_OBJECTSTORE_PROVIDER_FOUND); - return Optional.empty(); - } - - private Optional tryToCreateSdkObjectStore(Map exceptions, String providerName) { - return tryToCreateObjectStore(ImmutableObjectStoreServiceInfo.builder() - .provider(providerName) - .build(), exceptions); - } - private Optional tryToCreateObjectStore(ObjectStoreServiceInfo objectStoreServiceInfo, Map exceptions) { try { diff --git a/pom.xml b/pom.xml index 5f309b8ea9..bf2878ace3 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 org.cloudfoundry.multiapps multiapps-controller-parent - 2.44.1 + 2.44.2 pom MultiApps Controller Parent Multi-Target Application (MTA) deployment service for Cloud Foundry