From 1858979741c642e7c6071bd038bc64c01ad09031 Mon Sep 17 00:00:00 2001 From: Guillaume Berche Date: Wed, 5 Nov 2025 18:07:22 +0100 Subject: [PATCH 01/18] Refined binding interceptor: refined logging and instanceGuids cleanup on delete --- ...cOnlyBackingServiceBindingInterceptor.java | 33 ---------------- ...reateBackingServiceBindingInterceptor.java | 16 +++++++- .../BackingServiceBindingInterceptor.java | 38 ++++++++++++------- .../BaseBackingSpaceInstanceInterceptor.java | 17 ++++++--- ...stanceBackingSpaceInstanceInterceptor.java | 13 ++++--- 5 files changed, 58 insertions(+), 59 deletions(-) delete mode 100644 osb-cmdb/src/main/java/com/orange/oss/osbcmdb/testfixtures/AsyncOnlyBackingServiceBindingInterceptor.java diff --git a/osb-cmdb/src/main/java/com/orange/oss/osbcmdb/testfixtures/AsyncOnlyBackingServiceBindingInterceptor.java b/osb-cmdb/src/main/java/com/orange/oss/osbcmdb/testfixtures/AsyncOnlyBackingServiceBindingInterceptor.java deleted file mode 100644 index aba05019..00000000 --- a/osb-cmdb/src/main/java/com/orange/oss/osbcmdb/testfixtures/AsyncOnlyBackingServiceBindingInterceptor.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.orange.oss.osbcmdb.testfixtures; - -import reactor.core.publisher.Mono; - -import org.springframework.cloud.servicebroker.exception.ServiceBrokerAsyncRequiredException; -import org.springframework.cloud.servicebroker.model.binding.CreateServiceInstanceBindingRequest; -import org.springframework.cloud.servicebroker.model.binding.CreateServiceInstanceBindingResponse; - -/** - * Simulates a successful async binding backing service requested in backing space: - * - rejects sync binding create/delete requests, - * - create/delete async binding completes successfully - * - * Only accept OSB calls when space is a backing space, i.e. not the default space - */ -public class AsyncOnlyBackingServiceBindingInterceptor extends BackingServiceBindingInterceptor { - - public AsyncOnlyBackingServiceBindingInterceptor(String defaultSpaceName) { - super(defaultSpaceName); - } - - @Override - public Mono createServiceInstanceBinding( - CreateServiceInstanceBindingRequest request) { - if (! request.isAsyncAccepted()) { - throw new ServiceBrokerAsyncRequiredException("AsyncOnlyBackingServiceBindingInterceptor is " + - "expecting accept_incomplete=true (rejects osb-cmdb sync binding create requests"); - - } - return super.createServiceInstanceBinding(request); - } - -} diff --git a/osb-cmdb/src/main/java/com/orange/oss/osbcmdb/testfixtures/AsyncSuccessfulCreateBackingServiceBindingInterceptor.java b/osb-cmdb/src/main/java/com/orange/oss/osbcmdb/testfixtures/AsyncSuccessfulCreateBackingServiceBindingInterceptor.java index 9d4df629..5353c2dc 100644 --- a/osb-cmdb/src/main/java/com/orange/oss/osbcmdb/testfixtures/AsyncSuccessfulCreateBackingServiceBindingInterceptor.java +++ b/osb-cmdb/src/main/java/com/orange/oss/osbcmdb/testfixtures/AsyncSuccessfulCreateBackingServiceBindingInterceptor.java @@ -1,5 +1,7 @@ package com.orange.oss.osbcmdb.testfixtures; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import reactor.core.publisher.Mono; import org.springframework.cloud.servicebroker.exception.ServiceBrokerAsyncRequiredException; @@ -25,6 +27,9 @@ public class AsyncSuccessfulCreateBackingServiceBindingInterceptor extends Back public static final String DELETE = "delete"; + private static final Logger LOG = LoggerFactory.getLogger(AsyncSuccessfulCreateBackingServiceBindingInterceptor.class); + + public AsyncSuccessfulCreateBackingServiceBindingInterceptor(String defaultSpaceName) { super(defaultSpaceName); } @@ -37,10 +42,12 @@ public Mono createServiceInstanceBinding( "expecting accept_incomplete=true "); } provisionnedInstanceGuids.add(request.getServiceInstanceId()); - return Mono.just(CreateServiceInstanceAppBindingResponse.builder() + CreateServiceInstanceAppBindingResponse response = CreateServiceInstanceAppBindingResponse.builder() .async(true) .operation(CREATE) - .build()); + .build(); + LOG.info("Returning async response: CreateServiceInstanceAppBindingResponse={}", response); + return Mono.just(response); } @Override @@ -59,6 +66,11 @@ public Mono deleteServiceInstanceBinding( @Override public Mono getLastOperation( GetLastServiceBindingOperationRequest request) { + + if (DELETE.equals(request.getOperation())) { + //Clean up guid (although a leak has no impact for the interceptor just used once) + provisionnedInstanceGuids.remove(request.getServiceInstanceId()); + } return Mono.just(GetLastServiceBindingOperationResponse.builder() .description(this.getClass().getSimpleName()) .operationState(OperationState.SUCCEEDED) diff --git a/osb-cmdb/src/main/java/com/orange/oss/osbcmdb/testfixtures/BackingServiceBindingInterceptor.java b/osb-cmdb/src/main/java/com/orange/oss/osbcmdb/testfixtures/BackingServiceBindingInterceptor.java index f6a2fd89..de871078 100644 --- a/osb-cmdb/src/main/java/com/orange/oss/osbcmdb/testfixtures/BackingServiceBindingInterceptor.java +++ b/osb-cmdb/src/main/java/com/orange/oss/osbcmdb/testfixtures/BackingServiceBindingInterceptor.java @@ -8,6 +8,8 @@ import reactor.util.Logger; import reactor.util.Loggers; +import org.springframework.cloud.servicebroker.exception.ServiceBrokerAsyncRequiredException; +import org.springframework.cloud.servicebroker.exception.ServiceBrokerException; import org.springframework.cloud.servicebroker.model.binding.CreateServiceInstanceAppBindingResponse; import org.springframework.cloud.servicebroker.model.binding.CreateServiceInstanceBindingRequest; import org.springframework.cloud.servicebroker.model.binding.CreateServiceInstanceBindingResponse; @@ -24,7 +26,7 @@ * Supports intercepting OSB service provisionning calls, mainly for acceptance test purposes. Reuses prototypes from * {@link org.springframework.cloud.servicebroker.service.ServiceInstanceBindingService} *

- * By default, behaves like noop + * By default, behaves like SYNC-ONLY noop */ public class BackingServiceBindingInterceptor extends BaseBackingSpaceInstanceInterceptor implements ServiceBindingInterceptor { @@ -40,22 +42,25 @@ public BackingServiceBindingInterceptor(String defaultSpaceName) { @Override public boolean accept(CreateServiceInstanceBindingRequest request) { - return isScabAcceptanceTest(request.getContext(), request.toString()); + return isScabAcceptanceTest(request.getContext(), request.toString(), request.getClass()); } @Override public boolean accept(GetLastServiceBindingOperationRequest request) { - return isServiceGuidPreviousProvisionnedByUs(request.getServiceInstanceId(), request.toString()); + return isServiceGuidPreviousProvisionnedByUs(request.getServiceInstanceId(), request.toString(), + request.getClass()); } @Override public boolean accept(GetServiceInstanceBindingRequest request) { - return isServiceGuidPreviousProvisionnedByUs(request.getServiceInstanceId(), request.toString()); + return isServiceGuidPreviousProvisionnedByUs(request.getServiceInstanceId(), request.toString(), + request.getClass()); } @Override public boolean accept(DeleteServiceInstanceBindingRequest request) { - return isServiceGuidPreviousProvisionnedByUs(request.getServiceInstanceId(), request.toString()); + return isServiceGuidPreviousProvisionnedByUs(request.getServiceInstanceId(), request.toString(), + request.getClass()); } @@ -63,30 +68,35 @@ public boolean accept(DeleteServiceInstanceBindingRequest request) { public Mono createServiceInstanceBinding( CreateServiceInstanceBindingRequest request) { provisionnedInstanceGuids.add(request.getServiceInstanceId()); - return Mono.just(CreateServiceInstanceAppBindingResponse.builder() + CreateServiceInstanceAppBindingResponse response = CreateServiceInstanceAppBindingResponse.builder() + .async(false) .credentials(CREDENTIALS) - .build()); + .build(); + LOG.info("Retuning {}", response); + return Mono.just(response); } @Override public Mono getLastOperation( GetLastServiceBindingOperationRequest request) { - return Mono.just(GetLastServiceBindingOperationResponse.builder() - .operationState(OperationState.SUCCEEDED) - .build()); + return Mono.error(new ServiceBrokerException("interceptor returnes sync responses, unexpected " + + "getLastOperation request")); } @Override public Mono getServiceInstanceBinding(GetServiceInstanceBindingRequest request) { - return Mono.just(GetServiceInstanceAppBindingResponse.builder() - .credentials(CREDENTIALS) - .build()); + return Mono.error(new ServiceBrokerException("interceptor returned sync binding, unexpected " + + "getServiceInstanceBinding request")); } @Override public Mono deleteServiceInstanceBinding( DeleteServiceInstanceBindingRequest request) { - return Mono.just(DeleteServiceInstanceBindingResponse.builder().build()); + DeleteServiceInstanceBindingResponse response = DeleteServiceInstanceBindingResponse.builder() + .async(false) + .build(); + LOG.info("Retuning {}", response); + return Mono.just(response); } } diff --git a/osb-cmdb/src/main/java/com/orange/oss/osbcmdb/testfixtures/BaseBackingSpaceInstanceInterceptor.java b/osb-cmdb/src/main/java/com/orange/oss/osbcmdb/testfixtures/BaseBackingSpaceInstanceInterceptor.java index 515f506c..69e6baae 100644 --- a/osb-cmdb/src/main/java/com/orange/oss/osbcmdb/testfixtures/BaseBackingSpaceInstanceInterceptor.java +++ b/osb-cmdb/src/main/java/com/orange/oss/osbcmdb/testfixtures/BaseBackingSpaceInstanceInterceptor.java @@ -38,7 +38,7 @@ public BaseBackingSpaceInstanceInterceptor( this.defaultSpaceName = defaultSpaceName; } - protected boolean isScabAcceptanceTest(Context context, String requestToString) { + protected boolean isScabAcceptanceTest(Context context, String requestToString, Class requestClass) { CloudFoundryContext cloudFoundryContext = (CloudFoundryContext) context; if (context == null) { LOG.info("No context specified in request, assuming not an acceptance test sending OSB request with a " + @@ -53,14 +53,21 @@ protected boolean isScabAcceptanceTest(Context context, String requestToString) } boolean isTest = ! spaceName.equals(defaultSpaceName); - LOG.debug("Accept: isTest={} for spaceName={} and request={}", isTest, spaceName, requestToString); + LOG.debug("Accept: isTest={} for interceptor={} spaceName={} requestClass={} request={}", + isTest, + this.getClass().getSimpleName(), + spaceName, + requestClass.getSimpleName(), + requestToString); return isTest; } - protected boolean isServiceGuidPreviousProvisionnedByUs(String serviceInstanceId, String requestToString) { + protected boolean isServiceGuidPreviousProvisionnedByUs(String serviceInstanceId, String requestToString, + Class requestClass) { boolean isGuidPreviouslyProvisionnedByUs = provisionnedInstanceGuids.contains(serviceInstanceId); - LOG.debug("Accept: isServiceGuidPreviousProvisionnedByUs={} for serviceInstanceId={} and request={}", - isGuidPreviouslyProvisionnedByUs, serviceInstanceId, requestToString); + LOG.debug("Accept: isServiceGuidPreviousProvisionnedByUs={} for serviceInstanceId={} and " + + "requestClass={} request={}", + isGuidPreviouslyProvisionnedByUs, serviceInstanceId, requestClass.getSimpleName(), requestToString); return isGuidPreviouslyProvisionnedByUs; } diff --git a/osb-cmdb/src/main/java/com/orange/oss/osbcmdb/testfixtures/BaseServiceInstanceBackingSpaceInstanceInterceptor.java b/osb-cmdb/src/main/java/com/orange/oss/osbcmdb/testfixtures/BaseServiceInstanceBackingSpaceInstanceInterceptor.java index 48d4dbe7..8d15a812 100644 --- a/osb-cmdb/src/main/java/com/orange/oss/osbcmdb/testfixtures/BaseServiceInstanceBackingSpaceInstanceInterceptor.java +++ b/osb-cmdb/src/main/java/com/orange/oss/osbcmdb/testfixtures/BaseServiceInstanceBackingSpaceInstanceInterceptor.java @@ -34,27 +34,30 @@ public BaseServiceInstanceBackingSpaceInstanceInterceptor( @Override public boolean accept(CreateServiceInstanceRequest request) { - return isScabAcceptanceTest(request.getContext(), request.toString()); + return isScabAcceptanceTest(request.getContext(), request.toString(), request.getClass()); } @Override public boolean accept(GetLastServiceOperationRequest request) { - return isServiceGuidPreviousProvisionnedByUs(request.getServiceInstanceId(), request.toString()); + return isServiceGuidPreviousProvisionnedByUs(request.getServiceInstanceId(), request.toString(), + request.getClass()); } @Override public boolean accept(GetServiceInstanceRequest request) { - return isServiceGuidPreviousProvisionnedByUs(request.getServiceInstanceId(), request.toString()); + return isServiceGuidPreviousProvisionnedByUs(request.getServiceInstanceId(), request.toString(), + request.getClass()); } @Override public boolean accept(DeleteServiceInstanceRequest request) { - return isServiceGuidPreviousProvisionnedByUs(request.getServiceInstanceId(), request.toString()); + return isServiceGuidPreviousProvisionnedByUs(request.getServiceInstanceId(), request.toString(), + request.getClass()); } @Override public boolean accept(UpdateServiceInstanceRequest request) { - return isScabAcceptanceTest(request.getContext(), request.toString()); + return isScabAcceptanceTest(request.getContext(), request.toString(), request.getClass()); } @Override From 18980c8b7935457730bff43d071d980cffc2ef3f Mon Sep 17 00:00:00 2001 From: Guillaume Berche Date: Wed, 5 Nov 2025 18:07:54 +0100 Subject: [PATCH 02/18] Minor: refined comments --- ...eAsyncInstanceWithAsyncBackingServiceKeysAcceptanceTest.java | 2 +- ...teAsyncInstanceWithSyncBackingServiceKeysAcceptanceTest.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-cloud-app-broker-acceptance-tests/src/test/java/org/springframework/cloud/appbroker/acceptance/CreateDeleteAsyncInstanceWithAsyncBackingServiceKeysAcceptanceTest.java b/spring-cloud-app-broker-acceptance-tests/src/test/java/org/springframework/cloud/appbroker/acceptance/CreateDeleteAsyncInstanceWithAsyncBackingServiceKeysAcceptanceTest.java index 0ea60038..fc46bd9e 100644 --- a/spring-cloud-app-broker-acceptance-tests/src/test/java/org/springframework/cloud/appbroker/acceptance/CreateDeleteAsyncInstanceWithAsyncBackingServiceKeysAcceptanceTest.java +++ b/spring-cloud-app-broker-acceptance-tests/src/test/java/org/springframework/cloud/appbroker/acceptance/CreateDeleteAsyncInstanceWithAsyncBackingServiceKeysAcceptanceTest.java @@ -60,7 +60,7 @@ protected String testSuffix() { "osbcmdb.dynamic-catalog.enabled=false", }) void deployAppsAndCreateServiceKeysOnBindService() throws InterruptedException { - //Same code, just different interceptor in annotation + //Same code, just different interceptor in annotation, with an extra asyncbinding binding interceptor super.deployAppsAndCreateServiceKeysOnBindService(); } diff --git a/spring-cloud-app-broker-acceptance-tests/src/test/java/org/springframework/cloud/appbroker/acceptance/CreateDeleteAsyncInstanceWithSyncBackingServiceKeysAcceptanceTest.java b/spring-cloud-app-broker-acceptance-tests/src/test/java/org/springframework/cloud/appbroker/acceptance/CreateDeleteAsyncInstanceWithSyncBackingServiceKeysAcceptanceTest.java index 4bd885e2..24883135 100644 --- a/spring-cloud-app-broker-acceptance-tests/src/test/java/org/springframework/cloud/appbroker/acceptance/CreateDeleteAsyncInstanceWithSyncBackingServiceKeysAcceptanceTest.java +++ b/spring-cloud-app-broker-acceptance-tests/src/test/java/org/springframework/cloud/appbroker/acceptance/CreateDeleteAsyncInstanceWithSyncBackingServiceKeysAcceptanceTest.java @@ -60,7 +60,7 @@ protected String testSuffix() { "osbcmdb.dynamic-catalog.enabled=false", }) void deployAppsAndCreateServiceKeysOnBindService() throws InterruptedException { - //Same code, just different interceptor in annotation + //Same code, just different interceptor in annotation: no extra binding interceptor; default is returning sync bindings super.deployAppsAndCreateServiceKeysOnBindService(); } From fa8ea3a1c98f25bea142f2b650f3e14a059cb8ff Mon Sep 17 00:00:00 2001 From: Guillaume Berche Date: Wed, 5 Nov 2025 18:08:13 +0100 Subject: [PATCH 03/18] Failed 1st attempt to use capi-v3: CSB always returns a job id even then broker returns sync response. As a result, the CreateDeleteAsyncInstanceWithSyncBackingServiceKeysAcceptanceTest fails with error Service broker error: backing osb-cmdb broker requires async Corresponding code base: https://github.com/cloudfoundry/cloud_controller_ng/blob/f75acb00ad139599921d3237005d6b6a949b3dae/spec/support/shared_examples/v3_service_binding_create.rb#L22-L30 --- .../servicebinding/OsbCmdbServiceBinding.java | 91 ++++++++++++++++++- 1 file changed, 90 insertions(+), 1 deletion(-) diff --git a/osb-cmdb/src/main/java/com/orange/oss/osbcmdb/servicebinding/OsbCmdbServiceBinding.java b/osb-cmdb/src/main/java/com/orange/oss/osbcmdb/servicebinding/OsbCmdbServiceBinding.java index 5a989d53..0ebede5b 100644 --- a/osb-cmdb/src/main/java/com/orange/oss/osbcmdb/servicebinding/OsbCmdbServiceBinding.java +++ b/osb-cmdb/src/main/java/com/orange/oss/osbcmdb/servicebinding/OsbCmdbServiceBinding.java @@ -23,15 +23,20 @@ import org.cloudfoundry.client.v3.servicebindings.ListServiceBindingsRequest; import org.cloudfoundry.client.v3.servicebindings.ListServiceBindingsResponse; import org.cloudfoundry.client.v3.servicebindings.ServiceBindingRelationships; +import org.cloudfoundry.client.v3.servicebindings.ServiceBindingResource; import org.cloudfoundry.client.v3.servicebindings.ServiceBindingType; import org.cloudfoundry.operations.CloudFoundryOperations; import org.cloudfoundry.operations.services.GetServiceKeyRequest; import org.cloudfoundry.operations.services.ServiceInstance; import org.cloudfoundry.operations.services.ServiceKey; +import org.cloudfoundry.util.JobUtils; +import org.jetbrains.annotations.NotNull; import reactor.core.publisher.Mono; import reactor.util.Logger; import reactor.util.Loggers; +import org.springframework.cloud.servicebroker.exception.ServiceBrokerAsyncRequiredException; +import org.springframework.cloud.servicebroker.exception.ServiceBrokerException; import org.springframework.cloud.servicebroker.exception.ServiceBrokerInvalidParametersException; import org.springframework.cloud.servicebroker.exception.ServiceInstanceDoesNotExistException; import org.springframework.cloud.servicebroker.model.binding.CreateServiceInstanceAppBindingResponse; @@ -66,7 +71,7 @@ public OsbCmdbServiceBinding(CloudFoundryClient cloudFoundryClient, String defau @Override public Mono createServiceInstanceBinding( - CreateServiceInstanceBindingRequest request) { + final CreateServiceInstanceBindingRequest request) { if (osbInterceptor != null && osbInterceptor.accept(request)) { return osbInterceptor.createServiceInstanceBinding(request); } @@ -87,6 +92,17 @@ public Mono createServiceInstanceBinding( "instance guid associated with requested instance_id of type service_id))"); } + + return createServiceBindingCapiv3OBlocked(request, existingSi); + + +// return createServiceBindingCapiV2(request, existingSi); + + } + + @NotNull + private Mono createServiceBindingCapiV2( + CreateServiceInstanceBindingRequest request, ServiceInstance existingSi) { //Try to use the v2 api to request a synchronous service binding creation try { CreateServiceKeyResponse createServiceKeyResponse = client.serviceKeys() @@ -155,6 +171,79 @@ public Mono createServiceInstanceBinding( } } + /** + * Currently blocked attempt to use capi v3 only calls: JobId is always returned + */ + @NotNull + private Mono createServiceBindingCapiv3OBlocked( + CreateServiceInstanceBindingRequest request, ServiceInstance existingSi) { + try { + final boolean asyncAccepted = request.isAsyncAccepted(); + //Ask for async binding creation. No async opt-out is supported in CAPI v3, + // see http://v3-apidocs.cloudfoundry.org/version/3.203.0/index.html#asynchronous-operations + // > Unlike V2, clients cannot opt-in for asynchronous responses from endpoints. + CreateServiceBindingRequest createServiceBindingRequest = CreateServiceBindingRequest.builder() + .relationships( + ServiceBindingRelationships.builder() + .serviceInstance( + ToOneRelationship.builder() + .data(Relationship.builder().id(existingSi.getId()).build()) + .build()) + .build()) + .type(ServiceBindingType.KEY) + .parameters(request.getParameters()) + .name(request.getBindingId()) + .build(); + + return client.serviceBindingsV3() + .create(createServiceBindingRequest) + .flatMap(createServiceBindingResponse -> { + if (createServiceBindingResponse.getJobId().isPresent()) { + String jobId = createServiceBindingResponse.getJobId().get(); + LOG.info("Backing broker returned async binding job id {}", jobId); + if (!asyncAccepted) { + //Client is not supporting + if (! createServiceBindingResponse.getServiceBinding().isPresent()) { + return Mono.error( + new ServiceBrokerException("backing osb-cmdb broker requires async")); + } + } + //Return 202 Accepted, and let OSB client do the polling + return Mono.just( + CreateServiceInstanceAppBindingResponse.builder() + .async(true) + .operation(toJson(new CmdbOperationState(jobId, OsbOperation.CREATE))) + .build()); + } + else if (createServiceBindingResponse.getServiceBinding().isPresent()) { + ServiceBindingResource serviceBindingResource = createServiceBindingResponse.getServiceBinding() + .get(); + return client + .serviceBindingsV3() + .getDetails(GetServiceBindingDetailsRequest.builder() + .serviceBindingId(serviceBindingResource.getId()) + .build()) + .doOnNext(r -> LOG.info("CreateServiceInstanceAppBindingResponse details: {}", r)) + .map(r -> { + //Return 201 Created + return CreateServiceInstanceAppBindingResponse.builder() + .async(false) + .credentials(r.getCredentials()) + .build(); + }); + } + else { + return Mono.error( + new ServiceBrokerException("service binding response without jobid nor binding id")); + } + }); + } + catch (Exception originalException) { + LOG.info("Unable to create async service binding, caught:" + originalException); + throw redactExceptionAndWrapAsServiceBrokerException(originalException); + } + } + private boolean isExceptionReportingAsyncRequired(Exception originalException) { boolean asyncRequired=false; if (originalException instanceof ClientV2Exception) { From 927ece67262882450948bfa1049e6e08eec81286 Mon Sep 17 00:00:00 2001 From: Guillaume Berche Date: Thu, 6 Nov 2025 14:25:35 +0100 Subject: [PATCH 04/18] Skip generation of osb-cmdb-plain.jar which may be picked by error --- osb-cmdb/build.gradle | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/osb-cmdb/build.gradle b/osb-cmdb/build.gradle index 29ee3460..b5e7f2db 100644 --- a/osb-cmdb/build.gradle +++ b/osb-cmdb/build.gradle @@ -26,6 +26,15 @@ java { } } +// Skip generation of osb-cmdb-plain.jar which may be picked by error +// Source - https://stackoverflow.com/questions/67663728/spring-boot-2-5-0-generates-plain-jar-file-can-i-remove-it +// Posted by Tien Do Nam +// Retrieved 11/5/2025, License - CC-BY-SA 4.0 +jar { + enabled = false +} + + // See https://docs.spring.io/spring-boot/gradle-plugin/packaging.html#packaging-executable.configuring.main-class springBoot { mainClass = 'com.orange.oss.osbcmdb.OsbCmdbApplication' From 641ccbbae79c4f9bfd9843237289d8081fcf1169 Mon Sep 17 00:00:00 2001 From: Guillaume Berche Date: Thu, 6 Nov 2025 14:26:22 +0100 Subject: [PATCH 05/18] Local build modifs to restrict tests to service binding DO NOT MERGE --- launch-locally-acceptance-tests.bash | 3 ++- spring-cloud-app-broker-acceptance-tests/build.gradle | 1 + .../appbroker/acceptance/CloudFoundryAcceptanceTest.java | 6 +++--- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/launch-locally-acceptance-tests.bash b/launch-locally-acceptance-tests.bash index 19aeb5d5..c8dbcdea 100755 --- a/launch-locally-acceptance-tests.bash +++ b/launch-locally-acceptance-tests.bash @@ -6,13 +6,14 @@ source ~/.osb-cmdb.env build() { ./gradlew ${gradle_proxy_config} clean assemble osb-cmdb:bootJar -x test +# ./gradlew ${gradle_proxy_config} assemble osb-cmdb:bootJar -x test } rename_jar_file_to_be_predicable() { #See inspiration from http://tldp.org/LDP/abs/html/globbingref.html #IFS="$(printf '\n\t')" # Remove space. - for file in ${PWD}/osb-cmdb/build/libs/osb-cmdb-*-SNAPSHOT.jar ; do # Use ./* ... NEVER bare * + for file in ${PWD}/osb-cmdb/build/libs/osb-cmdb-*.jar ; do # Use ./* ... NEVER bare * echo "copying $file into $PWD/osb-cmdb/build/libs/osb-cmdb.jar" diff --git a/spring-cloud-app-broker-acceptance-tests/build.gradle b/spring-cloud-app-broker-acceptance-tests/build.gradle index df4381a9..07e28330 100644 --- a/spring-cloud-app-broker-acceptance-tests/build.gradle +++ b/spring-cloud-app-broker-acceptance-tests/build.gradle @@ -97,6 +97,7 @@ test { filter { // includeTestsMatching("*CreateDeleteInstanceWithBackingServiceKeysAcceptanceTest") includeTestsMatching("*CreateDeleteAsyncInstanceWithAsyncBackingServiceKeysAcceptanceTest") + includeTestsMatching("*CreateDeleteAsyncInstanceWithSyncBackingServiceKeysAcceptanceTest") } testLogging { outputs.upToDateWhen {false} diff --git a/spring-cloud-app-broker-acceptance-tests/src/test/java/org/springframework/cloud/appbroker/acceptance/CloudFoundryAcceptanceTest.java b/spring-cloud-app-broker-acceptance-tests/src/test/java/org/springframework/cloud/appbroker/acceptance/CloudFoundryAcceptanceTest.java index b53917ed..d147407a 100644 --- a/spring-cloud-app-broker-acceptance-tests/src/test/java/org/springframework/cloud/appbroker/acceptance/CloudFoundryAcceptanceTest.java +++ b/spring-cloud-app-broker-acceptance-tests/src/test/java/org/springframework/cloud/appbroker/acceptance/CloudFoundryAcceptanceTest.java @@ -282,9 +282,9 @@ public Set