Skip to content

Commit 7e3931d

Browse files
Use resources to deploy instead resources from descriptor during keys detection
1 parent d064584 commit 7e3931d

File tree

2 files changed

+100
-40
lines changed

2 files changed

+100
-40
lines changed

multiapps-controller-process/src/main/java/org/cloudfoundry/multiapps/controller/process/steps/BuildCloudDeployModelStep.java

Lines changed: 25 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,5 @@
11
package org.cloudfoundry.multiapps.controller.process.steps;
22

3-
import java.text.MessageFormat;
4-
import java.util.ArrayList;
5-
import java.util.Collections;
6-
import java.util.List;
7-
import java.util.Map;
8-
import java.util.Optional;
9-
import java.util.Set;
10-
import java.util.TreeSet;
11-
import java.util.stream.Collectors;
12-
import java.util.stream.Stream;
13-
143
import jakarta.inject.Inject;
154
import jakarta.inject.Named;
165
import org.cloudfoundry.multiapps.common.SLException;
@@ -66,6 +55,17 @@
6655
import org.springframework.beans.factory.config.BeanDefinition;
6756
import org.springframework.context.annotation.Scope;
6857

58+
import java.text.MessageFormat;
59+
import java.util.ArrayList;
60+
import java.util.Collections;
61+
import java.util.List;
62+
import java.util.Map;
63+
import java.util.Optional;
64+
import java.util.Set;
65+
import java.util.TreeSet;
66+
import java.util.stream.Collectors;
67+
import java.util.stream.Stream;
68+
6969
import static java.util.stream.Collectors.toList;
7070
import static java.util.stream.Collectors.toSet;
7171

@@ -92,8 +92,6 @@ protected StepPhase executeStep(ProcessContext context) {
9292
getStepLogger().debug(Messages.BUILDING_CLOUD_MODEL);
9393
DeploymentDescriptor deploymentDescriptor = context.getVariable(Variables.COMPLETE_DEPLOYMENT_DESCRIPTOR);
9494

95-
addDetectedExistingServiceKeysToDetectedManagedKeys(context);
96-
9795
// Get module sets:
9896
DeployedMta deployedMta = context.getVariable(Variables.DEPLOYED_MTA);
9997
List<DeployedMtaApplication> deployedApplications = (deployedMta != null) ? deployedMta.getApplications() : Collections.emptyList();
@@ -148,6 +146,7 @@ protected StepPhase executeStep(ProcessContext context) {
148146
context.setVariable(Variables.SERVICES_TO_BIND, servicesForBindings);
149147

150148
List<Resource> resourcesForDeployment = calculateResourcesForDeployment(context, deploymentDescriptor);
149+
addDetectedExistingServiceKeysToDetectedManagedKeys(context, resourcesForDeployment);
151150

152151
SelectiveDeployChecker selectiveDeployChecker = getSelectiveDeployChecker(context, deploymentDescriptor);
153152
selectiveDeployChecker.check(resourcesForDeployment);
@@ -357,11 +356,8 @@ private List<String> getDomainsFromApps(ProcessContext context, DeploymentDescri
357356
return new ArrayList<>(domains);
358357
}
359358

360-
private void addDetectedExistingServiceKeysToDetectedManagedKeys(ProcessContext context) {
361-
String mtaId = context.getVariable(Variables.MTA_ID);
362-
String mtaNamespace = context.getVariable(Variables.MTA_NAMESPACE);
363-
364-
List<DeployedMtaServiceKey> deployedServiceKeys = detectDeployedServiceKeys(mtaId, mtaNamespace, context);
359+
private void addDetectedExistingServiceKeysToDetectedManagedKeys(ProcessContext context, List<Resource> resourcesForDeployment) {
360+
List<DeployedMtaServiceKey> deployedServiceKeys = detectDeployedServiceKeys(context, resourcesForDeployment);
365361
if (!deployedServiceKeys.isEmpty()) {
366362

367363
List<DeployedMtaServiceKey> detectedServiceKeysForManagedServices = context.getVariable(Variables.DEPLOYED_MTA_SERVICE_KEYS);
@@ -375,25 +371,26 @@ private void addDetectedExistingServiceKeysToDetectedManagedKeys(ProcessContext
375371
}
376372
}
377373

378-
private List<DeployedMtaServiceKey> detectDeployedServiceKeys(String mtaId, String mtaNamespace,
379-
ProcessContext context) {
374+
private List<DeployedMtaServiceKey> detectDeployedServiceKeys(ProcessContext context, List<Resource> resourcesForDeployment) {
375+
String mtaId = context.getVariable(Variables.MTA_ID);
376+
String mtaNamespace = context.getVariable(Variables.MTA_NAMESPACE);
380377
String spaceGuid = context.getVariable(Variables.SPACE_GUID);
381378
String userGuid = context.getVariable(Variables.USER_GUID);
382379
OAuth2AccessTokenWithAdditionalInfo token = tokenService.getToken(userGuid);
383380
CloudCredentials credentials = new CloudCredentials(token);
384381

385382
CustomServiceKeysClient serviceKeysClient = getCustomServiceKeysClient(credentials, context.getVariable(Variables.CORRELATION_ID));
386383

387-
List<String> existingInstanceGuids = getExistingServiceGuids(context);
384+
List<String> existingInstanceGuids = getExistingServiceGuids(context, resourcesForDeployment);
388385

389386
return serviceKeysClient.getServiceKeysByMetadataAndExistingGuids(
390387
spaceGuid, mtaId, mtaNamespace, existingInstanceGuids
391388
);
392389
}
393390

394-
private List<String> getExistingServiceGuids(ProcessContext context) {
391+
private List<String> getExistingServiceGuids(ProcessContext context, List<Resource> resourcesForDeployment) {
395392
CloudControllerClient client = context.getControllerClient();
396-
List<Resource> resources = getExistingServiceResourcesFromDescriptor(context);
393+
List<Resource> resources = getExistingResourcesOnly(resourcesForDeployment);
397394

398395
return resources.parallelStream()
399396
.map(resource -> resolveServiceGuid(client, resource))
@@ -427,16 +424,11 @@ private void logIgnoredService(String message, String serviceName, Exception e)
427424
LOGGER.error(formattedMessage, e);
428425
}
429426

430-
private List<Resource> getExistingServiceResourcesFromDescriptor(ProcessContext context) {
431-
DeploymentDescriptor descriptor = context.getVariable(Variables.COMPLETE_DEPLOYMENT_DESCRIPTOR);
432-
433-
if (descriptor == null) {
434-
return List.of();
435-
}
436-
return descriptor.getResources()
437-
.stream()
438-
.filter(resource -> CloudModelBuilderUtil.getResourceType(resource) == ResourceType.EXISTING_SERVICE)
439-
.toList();
427+
private List<Resource> getExistingResourcesOnly(List<Resource> resourcesForDeployment) {
428+
return resourcesForDeployment
429+
.stream()
430+
.filter(resource -> CloudModelBuilderUtil.getResourceType(resource) == ResourceType.EXISTING_SERVICE)
431+
.toList();
440432
}
441433

442434
protected CustomServiceKeysClient getCustomServiceKeysClient(CloudCredentials credentials, String correlationId) {

multiapps-controller-process/src/test/java/org/cloudfoundry/multiapps/controller/process/steps/BuildCloudDeployModelStepTest.java

Lines changed: 75 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,5 @@
11
package org.cloudfoundry.multiapps.controller.process.steps;
22

3-
import java.util.Collections;
4-
import java.util.List;
5-
import java.util.Map;
6-
import java.util.Set;
7-
import java.util.UUID;
8-
import java.util.stream.Stream;
9-
103
import com.fasterxml.jackson.core.type.TypeReference;
114
import org.cloudfoundry.multiapps.common.test.TestUtil;
125
import org.cloudfoundry.multiapps.common.test.Tester.Expectation;
@@ -38,8 +31,16 @@
3831
import org.junit.jupiter.params.ParameterizedTest;
3932
import org.junit.jupiter.params.provider.Arguments;
4033
import org.junit.jupiter.params.provider.MethodSource;
34+
import org.mockito.ArgumentCaptor;
4135
import org.mockito.Mock;
4236

37+
import java.util.Collections;
38+
import java.util.List;
39+
import java.util.Map;
40+
import java.util.Set;
41+
import java.util.UUID;
42+
import java.util.stream.Stream;
43+
4344
import static org.junit.jupiter.api.Assertions.assertEquals;
4445
import static org.junit.jupiter.api.Assertions.assertFalse;
4546
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -50,6 +51,7 @@
5051
import static org.mockito.Mockito.doReturn;
5152
import static org.mockito.Mockito.mock;
5253
import static org.mockito.Mockito.spy;
54+
import static org.mockito.Mockito.verify;
5355
import static org.mockito.Mockito.when;
5456

5557
class BuildCloudDeployModelStepTest extends SyncFlowableStepTest<BuildCloudDeployModelStep> {
@@ -232,6 +234,72 @@ void testServiceKeysOfExistingServicesAreAdded() {
232234

233235
}
234236

237+
@Test
238+
void testServiceKeysOnlyDetectedForResourcesSpecifiedForDeployment() {
239+
prepareContextForSelectiveDeployment();
240+
241+
UUID guid1 = UUID.randomUUID();
242+
UUID guid2 = UUID.randomUUID();
243+
prepareServiceInstances(guid1, guid2);
244+
245+
CustomServiceKeysClient mockedServiceKeysClient = mock(CustomServiceKeysClient.class);
246+
DeployedMtaServiceKey deployedKey1 = createDeployedKey(TEST_RESOURCE_NAME);
247+
when(mockedServiceKeysClient.getServiceKeysByMetadataAndExistingGuids(
248+
eq(TEST_SPACE_GUID), eq(TEST_MTA_ID), eq(TEST_MTA_NAMESPACE), anyList()
249+
)).thenReturn(List.of(deployedKey1));
250+
251+
BuildCloudDeployModelStep spyStep = prepareStepWithMockedServiceKeysClient(mockedServiceKeysClient);
252+
spyStep.execute(execution);
253+
254+
List<String> capturedServiceGuids = captureServiceGuidsPassedToClient(mockedServiceKeysClient);
255+
assertEquals(1, capturedServiceGuids.size(), "Only the resource specified for deployment should be queried");
256+
assertEquals(guid1.toString(), capturedServiceGuids.get(0), "The GUID should match the resource specified for deployment");
257+
258+
List<DeployedMtaServiceKey> detectedServiceKeysFromExistingServices = context.getVariable(Variables.DEPLOYED_MTA_SERVICE_KEYS);
259+
assertEquals(1, detectedServiceKeysFromExistingServices.size());
260+
assertTrue(detectedServiceKeysFromExistingServices.contains(deployedKey1));
261+
}
262+
263+
private void prepareContextForSelectiveDeployment() {
264+
DeploymentDescriptor deploymentDescriptor = createDescriptorWithExistingServicesForKeysTest();
265+
context.setVariable(Variables.COMPLETE_DEPLOYMENT_DESCRIPTOR, deploymentDescriptor);
266+
context.setVariable(Variables.MTA_ID, TEST_MTA_ID);
267+
context.setVariable(Variables.MTA_NAMESPACE, TEST_MTA_NAMESPACE);
268+
context.setVariable(Variables.SPACE_GUID, TEST_SPACE_GUID);
269+
context.setVariable(Variables.MTA_MAJOR_SCHEMA_VERSION, 3);
270+
context.setVariable(Variables.RESOURCES_FOR_DEPLOYMENT, List.of(TEST_RESOURCE_NAME));
271+
}
272+
273+
private void prepareServiceInstances(UUID guid1, UUID guid2) {
274+
var instance1 = ImmutableCloudServiceInstance.builder()
275+
.name(TEST_RESOURCE_NAME)
276+
.metadata(ImmutableCloudMetadata.of(guid1))
277+
.build();
278+
var instance2 = ImmutableCloudServiceInstance.builder()
279+
.name(TEST_RESOURCE_NAME_2)
280+
.metadata(ImmutableCloudMetadata.of(guid2))
281+
.build();
282+
when(client.getServiceInstance(TEST_RESOURCE_NAME)).thenReturn(instance1);
283+
when(client.getServiceInstance(TEST_RESOURCE_NAME_2)).thenReturn(instance2);
284+
}
285+
286+
private BuildCloudDeployModelStep prepareStepWithMockedServiceKeysClient(CustomServiceKeysClient mockedServiceKeysClient) {
287+
BuildCloudDeployModelStep spyStep = spy(step);
288+
doReturn(mockedServiceKeysClient)
289+
.when(spyStep)
290+
.getCustomServiceKeysClient(any(CloudCredentials.class), anyString());
291+
return spyStep;
292+
}
293+
294+
@SuppressWarnings("unchecked")
295+
private List<String> captureServiceGuidsPassedToClient(CustomServiceKeysClient mockedServiceKeysClient) {
296+
ArgumentCaptor<List<String>> guidsCaptor = ArgumentCaptor.forClass(List.class);
297+
verify(mockedServiceKeysClient).getServiceKeysByMetadataAndExistingGuids(
298+
eq(TEST_SPACE_GUID), eq(TEST_MTA_ID), eq(TEST_MTA_NAMESPACE), guidsCaptor.capture()
299+
);
300+
return guidsCaptor.getValue();
301+
}
302+
235303
private DeploymentDescriptor createDescriptorWithExistingServicesForKeysTest() {
236304
Resource resource1 = createExistingServiceResource(TEST_RESOURCE_NAME);
237305
Resource resource2 = createExistingServiceResource(TEST_RESOURCE_NAME_2);

0 commit comments

Comments
 (0)