diff --git a/multiapps-controller-api/pom.xml b/multiapps-controller-api/pom.xml
index 645814e815..6718b91302 100644
--- a/multiapps-controller-api/pom.xml
+++ b/multiapps-controller-api/pom.xml
@@ -10,7 +10,7 @@
org.cloudfoundry.multiapps
multiapps-controller-parent
- 2.49.0
+ 2.49.1
diff --git a/multiapps-controller-client/pom.xml b/multiapps-controller-client/pom.xml
index 1ee21896e5..a397bdb20a 100644
--- a/multiapps-controller-client/pom.xml
+++ b/multiapps-controller-client/pom.xml
@@ -9,7 +9,7 @@
org.cloudfoundry.multiapps
multiapps-controller-parent
- 2.49.0
+ 2.49.1
diff --git a/multiapps-controller-core-test/pom.xml b/multiapps-controller-core-test/pom.xml
index f68afffb50..b865706537 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.49.0
+ 2.49.1
diff --git a/multiapps-controller-core/pom.xml b/multiapps-controller-core/pom.xml
index 022fdda24e..4f1e5f47f6 100644
--- a/multiapps-controller-core/pom.xml
+++ b/multiapps-controller-core/pom.xml
@@ -9,7 +9,7 @@
org.cloudfoundry.multiapps
multiapps-controller-parent
- 2.49.0
+ 2.49.1
diff --git a/multiapps-controller-coverage/pom.xml b/multiapps-controller-coverage/pom.xml
index e6b143ba8b..648ef8bd8f 100644
--- a/multiapps-controller-coverage/pom.xml
+++ b/multiapps-controller-coverage/pom.xml
@@ -9,7 +9,7 @@
org.cloudfoundry.multiapps
multiapps-controller-parent
- 2.49.0
+ 2.49.1
diff --git a/multiapps-controller-database-migration/pom.xml b/multiapps-controller-database-migration/pom.xml
index eb3740a6a2..8f72c10463 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.49.0
+ 2.49.1
diff --git a/multiapps-controller-persistence-test/pom.xml b/multiapps-controller-persistence-test/pom.xml
index ec75fa5bdb..9d78556cd7 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.49.0
+ 2.49.1
diff --git a/multiapps-controller-persistence/pom.xml b/multiapps-controller-persistence/pom.xml
index a6eb19bd2f..ac3eb22453 100644
--- a/multiapps-controller-persistence/pom.xml
+++ b/multiapps-controller-persistence/pom.xml
@@ -9,7 +9,7 @@
org.cloudfoundry.multiapps
multiapps-controller-parent
- 2.49.0
+ 2.49.1
diff --git a/multiapps-controller-process/pom.xml b/multiapps-controller-process/pom.xml
index 0f708a0220..1acdd0e05f 100644
--- a/multiapps-controller-process/pom.xml
+++ b/multiapps-controller-process/pom.xml
@@ -9,7 +9,7 @@
org.cloudfoundry.multiapps
multiapps-controller-parent
- 2.49.0
+ 2.49.1
diff --git a/multiapps-controller-shutdown-client/pom.xml b/multiapps-controller-shutdown-client/pom.xml
index dd62a9f94c..983b9c16a1 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.49.0
+ 2.49.1
diff --git a/multiapps-controller-web/pom.xml b/multiapps-controller-web/pom.xml
index 1230ba7678..ff644c5f11 100644
--- a/multiapps-controller-web/pom.xml
+++ b/multiapps-controller-web/pom.xml
@@ -9,7 +9,7 @@
org.cloudfoundry.multiapps
multiapps-controller-parent
- 2.49.0
+ 2.49.1
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 40dcff49a1..2cce47657e 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
@@ -57,7 +57,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/multiapps-controller-web/src/test/java/org/cloudfoundry/multiapps/controller/web/configuration/bean/factory/ObjectStoreFileStorageFactoryBeanTest.java b/multiapps-controller-web/src/test/java/org/cloudfoundry/multiapps/controller/web/configuration/bean/factory/ObjectStoreFileStorageFactoryBeanTest.java
index dc5fc6bded..bcc01c7235 100644
--- a/multiapps-controller-web/src/test/java/org/cloudfoundry/multiapps/controller/web/configuration/bean/factory/ObjectStoreFileStorageFactoryBeanTest.java
+++ b/multiapps-controller-web/src/test/java/org/cloudfoundry/multiapps/controller/web/configuration/bean/factory/ObjectStoreFileStorageFactoryBeanTest.java
@@ -15,6 +15,7 @@
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.blobstore.BlobStoreContext;
@@ -59,6 +60,9 @@ class ObjectStoreFileStorageFactoryBeanTest {
@Mock
private AzureObjectStoreFileStorage azureObjectStoreFileStorage;
+ private ObjectStoreServiceInfo capturedGcpServiceInfo;
+ private ObjectStoreServiceInfo capturedAzureServiceInfo;
+
@BeforeEach
void setUp() throws Exception {
MockitoAnnotations.openMocks(this)
@@ -149,6 +153,61 @@ void testObjectStoreCreationWhenEnvIsInvalid() {
.createObjectStoreFromFirstReachableProvider(anyMap(), anyList());
}
+ @Test
+ void testGcpFactoryReceivesPopulatedCredentialsWhenEnvIsGcp() {
+ mockCfService();
+ when(applicationConfiguration.getObjectStoreClientType()).thenReturn(Constants.GCP);
+
+ objectStoreFileStorageFactoryBean.afterPropertiesSet();
+
+ assertNotNull(capturedGcpServiceInfo);
+ assertEquals(Constants.GOOGLE_CLOUD_STORAGE, capturedGcpServiceInfo.getProvider());
+ assertNotNull(capturedGcpServiceInfo.getCredentials(),
+ "GCP factory must receive an ObjectStoreServiceInfo carrying the bound credentials map");
+ assertEquals(ACCESS_KEY_ID_VALUE, capturedGcpServiceInfo.getCredentials()
+ .get(Constants.ACCESS_KEY_ID));
+ assertEquals(BUCKET_VALUE, capturedGcpServiceInfo.getCredentials()
+ .get(Constants.BUCKET));
+ }
+
+ @Test
+ void testAzureFactoryReceivesPopulatedCredentialsWhenEnvIsAzure() {
+ mockCfService();
+ when(applicationConfiguration.getObjectStoreClientType()).thenReturn(Constants.AZURE);
+
+ objectStoreFileStorageFactoryBean.afterPropertiesSet();
+
+ assertNotNull(capturedAzureServiceInfo);
+ assertEquals(Constants.AZUREBLOB, capturedAzureServiceInfo.getProvider());
+ assertNotNull(capturedAzureServiceInfo.getCredentials(),
+ "Azure factory must receive an ObjectStoreServiceInfo carrying the bound credentials map");
+ assertEquals(SECRET_ACCESS_KEY_VALUE, capturedAzureServiceInfo.getCredentials()
+ .get(Constants.SECRET_ACCESS_KEY));
+ }
+
+ @Test
+ void testGcpEnvWithNoMatchingProviderInfoFallsThroughToNoValidStore() {
+ mockCfService();
+ when(applicationConfiguration.getObjectStoreClientType()).thenReturn(Constants.GCP);
+
+ ObjectStoreFileStorageFactoryBean bean = new ObjectStoreFileStorageFactoryBean("deploy-service-os", environmentServicesFinder,
+ applicationConfiguration) {
+ @Override
+ public List getProvidersServiceInfo() {
+ return List.of(ImmutableObjectStoreServiceInfo.builder()
+ .provider(Constants.AWS_S_3)
+ .identity(ACCESS_KEY_ID_VALUE)
+ .credential(SECRET_ACCESS_KEY_VALUE)
+ .container(BUCKET_VALUE)
+ .build());
+ }
+ };
+
+ Exception exception = assertThrows(IllegalStateException.class, bean::afterPropertiesSet);
+ assertEquals(Messages.NO_VALID_OBJECT_STORE_CONFIGURATION_FOUND, exception.getMessage());
+ assertNull(capturedGcpServiceInfo, "GCP factory must not be invoked when no matching provider info is bound");
+ }
+
@Test
void testObjectStoreCreationWhenEnvProviderFailsToConnect() {
mockCfService();
@@ -203,11 +262,13 @@ protected JCloudsObjectStoreFileStorage createFileStorage(ObjectStoreServiceInfo
@Override
protected GcpObjectStoreFileStorage createGcpFileStorage(ObjectStoreServiceInfo credentials) {
+ ObjectStoreFileStorageFactoryBeanTest.this.capturedGcpServiceInfo = credentials;
return ObjectStoreFileStorageFactoryBeanTest.this.gcpObjectStoreFileStorage;
}
@Override
protected AzureObjectStoreFileStorage createAzureFileStorage(ObjectStoreServiceInfo objectStoreServiceInfo) {
+ ObjectStoreFileStorageFactoryBeanTest.this.capturedAzureServiceInfo = objectStoreServiceInfo;
return ObjectStoreFileStorageFactoryBeanTest.this.azureObjectStoreFileStorage;
}
diff --git a/pom.xml b/pom.xml
index ab1de63588..50a061bca8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
4.0.0
org.cloudfoundry.multiapps
multiapps-controller-parent
- 2.49.0
+ 2.49.1
pom
MultiApps Controller Parent
Multi-Target Application (MTA) deployment service for Cloud Foundry