diff --git a/cloudfoundry-operations/src/main/java/org/cloudfoundry/operations/_DefaultCloudFoundryOperations.java b/cloudfoundry-operations/src/main/java/org/cloudfoundry/operations/_DefaultCloudFoundryOperations.java index 299b4bf5e4..9f816a7482 100644 --- a/cloudfoundry-operations/src/main/java/org/cloudfoundry/operations/_DefaultCloudFoundryOperations.java +++ b/cloudfoundry-operations/src/main/java/org/cloudfoundry/operations/_DefaultCloudFoundryOperations.java @@ -85,7 +85,11 @@ public Applications applications() { @Override @Value.Derived public Buildpacks buildpacks() { - return new DefaultBuildpacks(getCloudFoundryClientPublisher()); + CloudFoundryClient cloudFoundryClient = getCloudFoundryClient(); + if (cloudFoundryClient == null) { + throw new IllegalStateException("CloudFoundryClient must be set"); + } + return new DefaultBuildpacks(cloudFoundryClient); } @Override diff --git a/cloudfoundry-operations/src/main/java/org/cloudfoundry/operations/buildpacks/DefaultBuildpacks.java b/cloudfoundry-operations/src/main/java/org/cloudfoundry/operations/buildpacks/DefaultBuildpacks.java index ad2958886e..862992e1b1 100644 --- a/cloudfoundry-operations/src/main/java/org/cloudfoundry/operations/buildpacks/DefaultBuildpacks.java +++ b/cloudfoundry-operations/src/main/java/org/cloudfoundry/operations/buildpacks/DefaultBuildpacks.java @@ -16,104 +16,85 @@ package org.cloudfoundry.operations.buildpacks; -import static org.cloudfoundry.util.tuple.TupleUtils.function; - import java.nio.file.Path; import java.time.Duration; import java.util.Optional; import org.cloudfoundry.client.CloudFoundryClient; -import org.cloudfoundry.client.v2.buildpacks.BuildpackEntity; -import org.cloudfoundry.client.v2.buildpacks.BuildpackResource; -import org.cloudfoundry.client.v2.buildpacks.CreateBuildpackResponse; -import org.cloudfoundry.client.v2.buildpacks.DeleteBuildpackResponse; -import org.cloudfoundry.client.v2.buildpacks.ListBuildpacksRequest; -import org.cloudfoundry.client.v2.buildpacks.UpdateBuildpackResponse; -import org.cloudfoundry.client.v2.buildpacks.UploadBuildpackRequest; -import org.cloudfoundry.client.v2.buildpacks.UploadBuildpackResponse; +import org.cloudfoundry.client.v3.buildpacks.BuildpackResource; +import org.cloudfoundry.client.v3.buildpacks.BuildpackState; +import org.cloudfoundry.client.v3.buildpacks.CreateBuildpackResponse; +import org.cloudfoundry.client.v3.buildpacks.GetBuildpackRequest; +import org.cloudfoundry.client.v3.buildpacks.GetBuildpackResponse; +import org.cloudfoundry.client.v3.buildpacks.ListBuildpacksRequest; +import org.cloudfoundry.client.v3.buildpacks.UpdateBuildpackResponse; +import org.cloudfoundry.client.v3.buildpacks.UploadBuildpackRequest; +import org.cloudfoundry.client.v3.buildpacks.UploadBuildpackResponse; import org.cloudfoundry.operations.util.OperationsLogging; import org.cloudfoundry.util.ExceptionUtils; import org.cloudfoundry.util.JobUtils; import org.cloudfoundry.util.PaginationUtils; -import org.cloudfoundry.util.ResourceUtils; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; +import reactor.core.scheduler.Schedulers; +import reactor.util.retry.Retry; public final class DefaultBuildpacks implements Buildpacks { - private final Mono cloudFoundryClient; + private final CloudFoundryClient cloudFoundryClient; - public DefaultBuildpacks(Mono cloudFoundryClient) { + public DefaultBuildpacks(CloudFoundryClient cloudFoundryClient) { this.cloudFoundryClient = cloudFoundryClient; } + /** + * Create a new instance. + * + * @deprecated Use {@link DefaultBuildpacks(CloudFoundryClient)} instead. + */ + @Deprecated + public DefaultBuildpacks(Mono cloudFoundryClient) { + this.cloudFoundryClient = + cloudFoundryClient.subscribeOn(Schedulers.boundedElastic()).block(); + } + @Override public Mono create(CreateBuildpackRequest request) { - return this.cloudFoundryClient - .flatMap( - cloudFoundryClient -> - Mono.zip( - Mono.just(cloudFoundryClient), - requestCreateBuildpack( - cloudFoundryClient, - request.getName(), - request.getPosition(), - request.getEnable()))) + return requestCreateBuildpack( + this.cloudFoundryClient, + request.getName(), + request.getPosition(), + request.getEnable()) .flatMap( - function( - (cloudFoundryClient, response) -> - requestUploadBuildpackBits( - cloudFoundryClient, - ResourceUtils.getId(response), - request.getBuildpack()))) - .then() + response -> + requestUploadBuildpackBits( + response.getId(), request.getBuildpack())) + .map(UploadBuildpackResponse::getId) + .flatMap(this::waitForBuildpackReady) .transform(OperationsLogging.log("Create Buildpack")) .checkpoint(); } @Override public Mono delete(DeleteBuildpackRequest request) { - return this.cloudFoundryClient - .flatMap( - cloudFoundryClient -> - Mono.zip( - getBuildPackId(cloudFoundryClient, request.getName()), - Mono.just(cloudFoundryClient))) + return getBuildPackId(request.getName()) .flatMap( - function( - (buildpackId, cloudFoundryClient) -> - deleteBuildpack( - cloudFoundryClient, - buildpackId, - request.getCompletionTimeout()))) - .then() + buildpackId -> deleteBuildpack(buildpackId, request.getCompletionTimeout())) .transform(OperationsLogging.log("Delete Buildpack")) .checkpoint(); } @Override public Flux list() { - return this.cloudFoundryClient - .flatMapMany(DefaultBuildpacks::requestBuildpacks) - .map(DefaultBuildpacks::toBuildpackResource) + return requestBuildpacks(this.cloudFoundryClient) + .map(this::toBuildpackResource) .transform(OperationsLogging.log("List Buildpacks")) .checkpoint(); } @Override public Mono rename(RenameBuildpackRequest request) { - return this.cloudFoundryClient - .flatMap( - cloudFoundryClient -> - Mono.zip( - getBuildPackId(cloudFoundryClient, request.getName()), - Mono.just(cloudFoundryClient))) - .flatMap( - function( - (buildpackId, cloudFoundryClient) -> - requestUpdateBuildpack( - cloudFoundryClient, - buildpackId, - request.getNewName()))) + return getBuildPackId(request.getName()) + .flatMap(buildpackId -> requestUpdateBuildpack(buildpackId, request.getNewName())) .then() .transform(OperationsLogging.log("Rename Buildpack")) .checkpoint(); @@ -121,53 +102,44 @@ public Mono rename(RenameBuildpackRequest request) { @Override public Mono update(UpdateBuildpackRequest request) { - return this.cloudFoundryClient + return getBuildPackId(request.getName()) .flatMap( - cloudFoundryClient -> - Mono.zip( - getBuildPackId(cloudFoundryClient, request.getName()), - Mono.just(cloudFoundryClient))) - .flatMap( - function( - (buildpackId, cloudFoundryClient) -> - Mono.when( - requestUpdateBuildpack( - cloudFoundryClient, buildpackId, request), - uploadBuildpackBits( - cloudFoundryClient, buildpackId, request)))) + buildpackId -> + Mono.when( + requestUpdateBuildpack(buildpackId, request), + uploadBuildpackBits(buildpackId, request)) + .then(Mono.just(buildpackId))) + .flatMap(this::waitForBuildpackReady) .then() .transform(OperationsLogging.log("Update Buildpack")) .checkpoint(); } - private static Mono deleteBuildpack( - CloudFoundryClient cloudFoundryClient, String buildpackId, Duration timeout) { - return requestDeleteBuildpack(cloudFoundryClient, buildpackId) - .flatMap(job -> JobUtils.waitForCompletion(cloudFoundryClient, timeout, job)); + private Mono deleteBuildpack(String buildpackId, Duration timeout) { + return requestDeleteBuildpack(buildpackId) + .flatMap(job -> JobUtils.waitForCompletion(this.cloudFoundryClient, timeout, job)); } - private static Mono getBuildPackId(CloudFoundryClient cloudFoundryClient, String name) { - return requestBuildpacks(cloudFoundryClient, name) + private Mono getBuildPackId(String name) { + return requestBuildpacks(name) .singleOrEmpty() - .map(ResourceUtils::getId) + .map(BuildpackResource::getId) .switchIfEmpty(ExceptionUtils.illegalArgument("Buildpack %s not found", name)); } - private static Flux requestBuildpacks( - CloudFoundryClient cloudFoundryClient) { - return PaginationUtils.requestClientV2Resources( + private Flux requestBuildpacks(CloudFoundryClient cloudFoundryClient) { + return PaginationUtils.requestClientV3Resources( page -> cloudFoundryClient - .buildpacks() + .buildpacksV3() .list(ListBuildpacksRequest.builder().page(page).build())); } - private static Flux requestBuildpacks( - CloudFoundryClient cloudFoundryClient, String name) { - return PaginationUtils.requestClientV2Resources( + private Flux requestBuildpacks(String name) { + return PaginationUtils.requestClientV3Resources( page -> cloudFoundryClient - .buildpacks() + .buildpacksV3() .list( ListBuildpacksRequest.builder() .name(name) @@ -175,40 +147,36 @@ private static Flux requestBuildpacks( .build())); } - private static Mono requestCreateBuildpack( + private Mono requestCreateBuildpack( CloudFoundryClient cloudFoundryClient, String buildpackName, Integer position, Boolean enable) { return cloudFoundryClient - .buildpacks() + .buildpacksV3() .create( - org.cloudfoundry.client.v2.buildpacks.CreateBuildpackRequest.builder() + org.cloudfoundry.client.v3.buildpacks.CreateBuildpackRequest.builder() .name(buildpackName) .position(position) .enabled(Optional.ofNullable(enable).orElse(true)) .build()); } - private static Mono requestDeleteBuildpack( - CloudFoundryClient cloudFoundryClient, String buildpackId) { + private Mono requestDeleteBuildpack(String buildpackId) { return cloudFoundryClient - .buildpacks() + .buildpacksV3() .delete( - org.cloudfoundry.client.v2.buildpacks.DeleteBuildpackRequest.builder() - .async(true) + org.cloudfoundry.client.v3.buildpacks.DeleteBuildpackRequest.builder() .buildpackId(buildpackId) .build()); } - private static Mono requestUpdateBuildpack( - CloudFoundryClient cloudFoundryClient, - String buildpackId, - UpdateBuildpackRequest request) { + private Mono requestUpdateBuildpack( + String buildpackId, UpdateBuildpackRequest request) { return cloudFoundryClient - .buildpacks() + .buildpacksV3() .update( - org.cloudfoundry.client.v2.buildpacks.UpdateBuildpackRequest.builder() + org.cloudfoundry.client.v3.buildpacks.UpdateBuildpackRequest.builder() .buildpackId(buildpackId) .enabled(request.getEnable()) .locked(request.getLock()) @@ -216,36 +184,32 @@ private static Mono requestUpdateBuildpack( .build()); } - private static Mono requestUpdateBuildpack( - CloudFoundryClient cloudFoundryClient, String buildpackId, String name) { + private Mono requestUpdateBuildpack(String buildpackId, String name) { return cloudFoundryClient - .buildpacks() + .buildpacksV3() .update( - org.cloudfoundry.client.v2.buildpacks.UpdateBuildpackRequest.builder() + org.cloudfoundry.client.v3.buildpacks.UpdateBuildpackRequest.builder() .buildpackId(buildpackId) .name(name) .build()); } - private static Mono requestUploadBuildpackBits( - CloudFoundryClient cloudFoundryClient, String buildpackId, Path buildpack) { + private Mono requestUploadBuildpackBits( + String buildpackId, Path buildpack) { return cloudFoundryClient - .buildpacks() + .buildpacksV3() .upload( UploadBuildpackRequest.builder() .buildpackId(buildpackId) - .filename(buildpack.getFileName().toString()) - .buildpack(buildpack) + .bits(buildpack) .build()); } - private static Buildpack toBuildpackResource(BuildpackResource resource) { - BuildpackEntity entity = ResourceUtils.getEntity(resource); - + private Buildpack toBuildpackResource(BuildpackResource entity) { return Buildpack.builder() .enabled(entity.getEnabled()) .filename(entity.getFilename()) - .id(ResourceUtils.getId(resource)) + .id(entity.getId()) .locked(entity.getLocked()) .name(entity.getName()) .position(entity.getPosition()) @@ -253,16 +217,31 @@ private static Buildpack toBuildpackResource(BuildpackResource resource) { .build(); } - private static Mono uploadBuildpackBits( - CloudFoundryClient cloudFoundryClient, - String buildpackId, - UpdateBuildpackRequest request) { + private Mono uploadBuildpackBits(String buildpackId, UpdateBuildpackRequest request) { if (request.getBuildpack() != null) { - return requestUploadBuildpackBits( - cloudFoundryClient, buildpackId, request.getBuildpack()) + return requestUploadBuildpackBits(buildpackId, request.getBuildpack()) .then(Mono.empty()); } return Mono.empty(); } + + private Mono waitForBuildpackReady(String buildpackId) { + return requestBuildpack(buildpackId) + .flatMap( + buildpack -> { + if (!buildpack.getState().equals(BuildpackState.READY)) { + return Mono.error(new IllegalStateException("Not ready")); + } + return Mono.empty(); + }) + .retryWhen(Retry.backoff(3, Duration.ofSeconds(1))) + .then(); + } + + private Mono requestBuildpack(String buildpackId) { + return cloudFoundryClient + .buildpacksV3() + .get(GetBuildpackRequest.builder().buildpackId(buildpackId).build()); + } } diff --git a/cloudfoundry-operations/src/test/java/org/cloudfoundry/operations/AbstractOperationsTest.java b/cloudfoundry-operations/src/test/java/org/cloudfoundry/operations/AbstractOperationsTest.java index d864ed497e..b435fab0c1 100644 --- a/cloudfoundry-operations/src/test/java/org/cloudfoundry/operations/AbstractOperationsTest.java +++ b/cloudfoundry-operations/src/test/java/org/cloudfoundry/operations/AbstractOperationsTest.java @@ -44,6 +44,7 @@ import org.cloudfoundry.client.v2.userprovidedserviceinstances.UserProvidedServiceInstances; import org.cloudfoundry.client.v2.users.Users; import org.cloudfoundry.client.v3.applications.ApplicationsV3; +import org.cloudfoundry.client.v3.buildpacks.BuildpacksV3; import org.cloudfoundry.client.v3.domains.DomainsV3; import org.cloudfoundry.client.v3.jobs.JobsV3; import org.cloudfoundry.client.v3.organizations.OrganizationsV3; @@ -92,6 +93,7 @@ public abstract class AbstractOperationsTest { protected final Authorizations authorizations = mock(Authorizations.class, RETURNS_SMART_NULLS); protected final Buildpacks buildpacks = mock(Buildpacks.class, RETURNS_SMART_NULLS); + protected final BuildpacksV3 buildpacksV3 = mock(BuildpacksV3.class, RETURNS_SMART_NULLS); protected final CloudFoundryClient cloudFoundryClient = mock(CloudFoundryClient.class, RETURNS_SMART_NULLS); @@ -172,6 +174,7 @@ public final void mockClient() { when(this.cloudFoundryClient.applicationsV2()).thenReturn(this.applications); when(this.cloudFoundryClient.applicationsV3()).thenReturn(this.applicationsV3); when(this.cloudFoundryClient.buildpacks()).thenReturn(this.buildpacks); + when(this.cloudFoundryClient.buildpacksV3()).thenReturn(this.buildpacksV3); when(this.cloudFoundryClient.domains()).thenReturn(this.domains); when(this.cloudFoundryClient.domainsV3()).thenReturn(this.domainsV3); when(this.cloudFoundryClient.events()).thenReturn(this.events); diff --git a/cloudfoundry-operations/src/test/java/org/cloudfoundry/operations/buildpacks/DefaultBuildpacksTest.java b/cloudfoundry-operations/src/test/java/org/cloudfoundry/operations/buildpacks/DefaultBuildpacksTest.java index fdfca5272b..1d4f928a63 100644 --- a/cloudfoundry-operations/src/test/java/org/cloudfoundry/operations/buildpacks/DefaultBuildpacksTest.java +++ b/cloudfoundry-operations/src/test/java/org/cloudfoundry/operations/buildpacks/DefaultBuildpacksTest.java @@ -17,6 +17,7 @@ package org.cloudfoundry.operations.buildpacks; import static org.cloudfoundry.operations.TestObjects.fill; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.nio.file.Path; @@ -27,18 +28,18 @@ import java.util.Queue; import java.util.function.Supplier; import org.cloudfoundry.client.CloudFoundryClient; -import org.cloudfoundry.client.v2.Metadata; -import org.cloudfoundry.client.v2.buildpacks.BuildpackEntity; -import org.cloudfoundry.client.v2.buildpacks.BuildpackResource; -import org.cloudfoundry.client.v2.buildpacks.CreateBuildpackResponse; -import org.cloudfoundry.client.v2.buildpacks.DeleteBuildpackResponse; -import org.cloudfoundry.client.v2.buildpacks.ListBuildpacksRequest; -import org.cloudfoundry.client.v2.buildpacks.ListBuildpacksResponse; -import org.cloudfoundry.client.v2.buildpacks.UpdateBuildpackResponse; -import org.cloudfoundry.client.v2.buildpacks.UploadBuildpackResponse; -import org.cloudfoundry.client.v2.jobs.GetJobRequest; -import org.cloudfoundry.client.v2.jobs.GetJobResponse; -import org.cloudfoundry.client.v2.jobs.JobEntity; +import org.cloudfoundry.client.v3.buildpacks.BuildpackResource; +import org.cloudfoundry.client.v3.buildpacks.BuildpackState; +import org.cloudfoundry.client.v3.buildpacks.CreateBuildpackResponse; +import org.cloudfoundry.client.v3.buildpacks.GetBuildpackRequest; +import org.cloudfoundry.client.v3.buildpacks.GetBuildpackResponse; +import org.cloudfoundry.client.v3.buildpacks.ListBuildpacksRequest; +import org.cloudfoundry.client.v3.buildpacks.ListBuildpacksResponse; +import org.cloudfoundry.client.v3.buildpacks.UpdateBuildpackResponse; +import org.cloudfoundry.client.v3.buildpacks.UploadBuildpackResponse; +import org.cloudfoundry.client.v3.jobs.GetJobRequest; +import org.cloudfoundry.client.v3.jobs.GetJobResponse; +import org.cloudfoundry.client.v3.jobs.JobState; import org.cloudfoundry.operations.AbstractOperationsTest; import org.junit.jupiter.api.Test; import reactor.core.publisher.Mono; @@ -47,17 +48,14 @@ final class DefaultBuildpacksTest extends AbstractOperationsTest { - private final DefaultBuildpacks buildpacks = - new DefaultBuildpacks(Mono.just(this.cloudFoundryClient)); + private final DefaultBuildpacks buildpacks = new DefaultBuildpacks(this.cloudFoundryClient); @Test void create() { + requestBuildpack(this.cloudFoundryClient); requestCreateBuildpack(this.cloudFoundryClient, "test-buildpack", 1, true); requestUploadBuildpack( - this.cloudFoundryClient, - "test-buildpack-id", - Paths.get("test-buildpack"), - "test-buildpack"); + this.cloudFoundryClient, "test-buildpack-id", Paths.get("test-buildpack")); this.buildpacks .create( @@ -128,6 +126,7 @@ void rename() { @Test void update() { + requestBuildpack(this.cloudFoundryClient); requestListBuildpacks(this.cloudFoundryClient, "test-buildpack"); requestUpdateBuildpack(this.cloudFoundryClient, "test-buildpack-id", true, true, 5); @@ -146,13 +145,11 @@ void update() { @Test void updateWithBits() { + requestBuildpack(this.cloudFoundryClient); requestListBuildpacks(this.cloudFoundryClient, "test-buildpack"); requestUpdateBuildpack(this.cloudFoundryClient, "test-buildpack-id", true, true, 5); requestUploadBuildpack( - this.cloudFoundryClient, - "test-buildpack-id", - Paths.get("test-buildpack"), - "test-buildpack"); + this.cloudFoundryClient, "test-buildpack-id", Paths.get("test-buildpack")); this.buildpacks .update( @@ -168,13 +165,25 @@ void updateWithBits() { .verify(Duration.ofSeconds(5)); } + private static void requestBuildpack(CloudFoundryClient cloudFoundryClient) { + when(cloudFoundryClient.buildpacksV3().get(any(GetBuildpackRequest.class))) + .thenReturn( + Mono.just( + fill(GetBuildpackResponse.builder(), "buildpack-") + .state(BuildpackState.READY) + .build())); + } + private static void requestBuildpacks(CloudFoundryClient cloudFoundryClient) { - when(cloudFoundryClient.buildpacks().list(ListBuildpacksRequest.builder().page(1).build())) + when(cloudFoundryClient + .buildpacksV3() + .list(ListBuildpacksRequest.builder().page(1).build())) .thenReturn( Mono.just( fill(ListBuildpacksResponse.builder()) .resource( fill(BuildpackResource.builder(), "buildpack-") + .state(BuildpackState.READY) .build()) .build())); } @@ -182,9 +191,9 @@ private static void requestBuildpacks(CloudFoundryClient cloudFoundryClient) { private static void requestCreateBuildpack( CloudFoundryClient cloudFoundryClient, String name, Integer position, Boolean enable) { when(cloudFoundryClient - .buildpacks() + .buildpacksV3() .create( - org.cloudfoundry.client.v2.buildpacks.CreateBuildpackRequest + org.cloudfoundry.client.v3.buildpacks.CreateBuildpackRequest .builder() .name(name) .position(position) @@ -197,22 +206,17 @@ private static void requestCreateBuildpack( private static void requestDeleteBuildpack( CloudFoundryClient cloudFoundryClient, String buildpackId) { when(cloudFoundryClient - .buildpacks() + .buildpacksV3() .delete( - org.cloudfoundry.client.v2.buildpacks.DeleteBuildpackRequest + org.cloudfoundry.client.v3.buildpacks.DeleteBuildpackRequest .builder() - .async(true) .buildpackId(buildpackId) .build())) - .thenReturn( - Mono.just( - fill(DeleteBuildpackResponse.builder()) - .entity(fill(JobEntity.builder()).id("test-job-id").build()) - .build())); + .thenReturn(Mono.just("test-job-id")); } private static void requestJobSuccess(CloudFoundryClient cloudFoundryClient, String jobId) { - when(cloudFoundryClient.jobs().get(GetJobRequest.builder().jobId(jobId).build())) + when(cloudFoundryClient.jobsV3().get(GetJobRequest.builder().jobId(jobId).build())) .thenReturn( Mono.defer( new Supplier>() { @@ -224,20 +228,10 @@ private static void requestJobSuccess(CloudFoundryClient cloudFoundryClient, Str GetJobResponse .builder(), "test-job-") - .entity( - fill(JobEntity - .builder()) - .status( - "running") - .build()) + .state(JobState.PROCESSING) .build(), fill(GetJobResponse.builder(), "job-") - .entity( - fill(JobEntity - .builder()) - .status( - "finished") - .build()) + .state(JobState.COMPLETE) .build())); @Override @@ -249,21 +243,15 @@ public Mono get() { private static void requestListBuildpacks(CloudFoundryClient cloudFoundryClient, String name) { when(cloudFoundryClient - .buildpacks() + .buildpacksV3() .list(ListBuildpacksRequest.builder().name(name).page(1).build())) .thenReturn( Mono.just( - ListBuildpacksResponse.builder() + fill(ListBuildpacksResponse.builder()) .resource( - BuildpackResource.builder() - .metadata( - Metadata.builder() - .id("test-buildpack-id") - .build()) - .entity( - BuildpackEntity.builder() - .name(name) - .build()) + fill(BuildpackResource.builder()) + .id("test-buildpack-id") + .name(name) .build()) .build())); } @@ -271,9 +259,9 @@ private static void requestListBuildpacks(CloudFoundryClient cloudFoundryClient, private static void requestUpdateBuildpack( CloudFoundryClient cloudFoundryClient, String buildpackId, String name) { when(cloudFoundryClient - .buildpacks() + .buildpacksV3() .update( - org.cloudfoundry.client.v2.buildpacks.UpdateBuildpackRequest + org.cloudfoundry.client.v3.buildpacks.UpdateBuildpackRequest .builder() .buildpackId(buildpackId) .name(name) @@ -288,9 +276,9 @@ private static void requestUpdateBuildpack( boolean locked, Integer position) { when(cloudFoundryClient - .buildpacks() + .buildpacksV3() .update( - org.cloudfoundry.client.v2.buildpacks.UpdateBuildpackRequest + org.cloudfoundry.client.v3.buildpacks.UpdateBuildpackRequest .builder() .buildpackId(buildpackId) .enabled(enabled) @@ -301,18 +289,14 @@ private static void requestUpdateBuildpack( } private static void requestUploadBuildpack( - CloudFoundryClient cloudFoundryClient, - String buildpackId, - Path buildpack, - String filename) { + CloudFoundryClient cloudFoundryClient, String buildpackId, Path buildpack) { when(cloudFoundryClient - .buildpacks() + .buildpacksV3() .upload( - org.cloudfoundry.client.v2.buildpacks.UploadBuildpackRequest + org.cloudfoundry.client.v3.buildpacks.UploadBuildpackRequest .builder() .buildpackId(buildpackId) - .buildpack(buildpack) - .filename(filename) + .bits(buildpack) .build())) .thenReturn(Mono.just(fill(UploadBuildpackResponse.builder()).build())); } diff --git a/integration-test/src/test/java/org/cloudfoundry/operations/BuildpacksTest.java b/integration-test/src/test/java/org/cloudfoundry/operations/BuildpacksTest.java index 08b1dfcc24..62991cef2e 100644 --- a/integration-test/src/test/java/org/cloudfoundry/operations/BuildpacksTest.java +++ b/integration-test/src/test/java/org/cloudfoundry/operations/BuildpacksTest.java @@ -75,7 +75,7 @@ public void createFromDirectory() throws IOException { .filter(buildpack -> buildpackName.equals(buildpack.getName())) .map(Buildpack::getFilename) .as(StepVerifier::create) - .expectNext("test-buildpack.zip") + .expectNextMatches(filename -> filename.matches(".*test-buildpack.*\\.zip")) .expectComplete() .verify(Duration.ofMinutes(5)); }