From 007769d8b157877c38ea08d372cafe3655fcf0af Mon Sep 17 00:00:00 2001 From: Abhishek Bhaskar Kulkarni Date: Wed, 4 Jan 2023 11:26:58 +0530 Subject: [PATCH 1/3] defaultApplication-api --- .../applications/DefaultApplications.java | 74 +++++++++++++------ 1 file changed, 51 insertions(+), 23 deletions(-) diff --git a/cloudfoundry-operations/src/main/java/org/cloudfoundry/operations/applications/DefaultApplications.java b/cloudfoundry-operations/src/main/java/org/cloudfoundry/operations/applications/DefaultApplications.java index 692a6e2ada..799d914bbd 100644 --- a/cloudfoundry-operations/src/main/java/org/cloudfoundry/operations/applications/DefaultApplications.java +++ b/cloudfoundry-operations/src/main/java/org/cloudfoundry/operations/applications/DefaultApplications.java @@ -20,8 +20,6 @@ import org.cloudfoundry.client.v2.OrderDirection; import org.cloudfoundry.client.v2.applications.AbstractApplicationResource; import org.cloudfoundry.client.v2.applications.ApplicationEntity; -import org.cloudfoundry.client.v2.applications.ApplicationEnvironmentRequest; -import org.cloudfoundry.client.v2.applications.ApplicationEnvironmentResponse; import org.cloudfoundry.client.v2.applications.ApplicationInstanceInfo; import org.cloudfoundry.client.v2.applications.ApplicationInstancesRequest; import org.cloudfoundry.client.v2.applications.ApplicationInstancesResponse; @@ -86,8 +84,13 @@ import org.cloudfoundry.client.v3.Lifecycle; import org.cloudfoundry.client.v3.Resource; import org.cloudfoundry.client.v3.applications.ApplicationResource; +import org.cloudfoundry.client.v3.applications.GetApplicationEnvironmentRequest; +import org.cloudfoundry.client.v3.applications.GetApplicationEnvironmentResponse; import org.cloudfoundry.client.v3.applications.GetApplicationResponse; +import org.cloudfoundry.client.v3.applications.GetApplicationSshEnabledRequest; +import org.cloudfoundry.client.v3.applications.GetApplicationSshEnabledResponse; import org.cloudfoundry.client.v3.applications.ListApplicationsRequest; +import org.cloudfoundry.client.v3.applications.UpdateApplicationFeatureRequest; import org.cloudfoundry.client.v3.tasks.CancelTaskRequest; import org.cloudfoundry.client.v3.tasks.CancelTaskResponse; import org.cloudfoundry.client.v3.tasks.CreateTaskRequest; @@ -227,8 +230,14 @@ public Mono disableSsh(DisableApplicationSshRequest request) { .zip(this.cloudFoundryClient, this.spaceId) .flatMap(function((cloudFoundryClient, spaceId) -> Mono.zip( Mono.just(cloudFoundryClient), - getApplicationIdWhere(cloudFoundryClient, request.getName(), spaceId, sshEnabled(true)) + getApplicationIdV3(cloudFoundryClient, request.getName(), spaceId) ))) + .flatMap(function((cloudFoundryClient, applicationId) -> Mono.zip( + Mono.just(cloudFoundryClient), + Mono.just(applicationId), + getSshEnabled(cloudFoundryClient, applicationId) + ))) + .filter(predicate((cloudFoundryClient,applicationId,sshEnabled) -> sshEnabled.equals(true))) .flatMap(function((cloudFoundryClient, applicationId) -> requestUpdateApplicationSsh(cloudFoundryClient, applicationId, false))) .then() .transform(OperationsLogging.log("Disable Application SSH")) @@ -241,8 +250,14 @@ public Mono enableSsh(EnableApplicationSshRequest request) { .zip(this.cloudFoundryClient, this.spaceId) .flatMap(function((cloudFoundryClient, spaceId) -> Mono.zip( Mono.just(cloudFoundryClient), - getApplicationIdWhere(cloudFoundryClient, request.getName(), spaceId, sshEnabled(false)) + getApplicationIdV3(cloudFoundryClient, request.getName(), spaceId) ))) + .flatMap(function((cloudFoundryClient, applicationId) -> Mono.zip( + Mono.just(cloudFoundryClient), + Mono.just(applicationId), + getSshEnabled(cloudFoundryClient, applicationId) + ))) + .filter(predicate((cloudFoundryClient,applicationId,sshEnabled) -> sshEnabled.equals(false))) .flatMap(function((cloudFoundryClient, applicationId) -> requestUpdateApplicationSsh(cloudFoundryClient, applicationId, true))) .then() .transform(OperationsLogging.log("Enable Application SSH")) @@ -292,7 +307,7 @@ public Mono getEnvironments(GetApplicationEnvironmentsR .zip(this.cloudFoundryClient, this.spaceId) .flatMap(function((cloudFoundryClient, spaceId) -> Mono.zip( Mono.just(cloudFoundryClient), - getApplicationId(cloudFoundryClient, request.getName(), spaceId) + getApplicationIdV3(cloudFoundryClient, request.getName(), spaceId) ))) .flatMap(function(DefaultApplications::requestApplicationEnvironment)) .map(DefaultApplications::toApplicationEnvironments) @@ -557,12 +572,21 @@ public Mono setHealthCheck(SetApplicationHealthCheckRequest request) { public Mono sshEnabled(ApplicationSshEnabledRequest request) { return Mono .zip(this.cloudFoundryClient, this.spaceId) - .flatMap(function((cloudFoundryClient, spaceId) -> getApplication(cloudFoundryClient, request.getName(), spaceId))) - .map(applicationResource -> ResourceUtils.getEntity(applicationResource).getEnableSsh()) + .flatMap(function((cloudFoundryClient, spaceId) -> Mono.zip( + Mono.just(cloudFoundryClient), + getApplicationIdV3(cloudFoundryClient, request.getName(), spaceId)))) + .flatMap(function(DefaultApplications::getSshEnabled)) .transform(OperationsLogging.log("Is Application SSH Enabled")) .checkpoint(); } + private static Mono getSshEnabled(CloudFoundryClient cloudFoundryClient, String applicationId) { + return cloudFoundryClient.applicationsV3() + .getSshEnabled(GetApplicationSshEnabledRequest.builder() + .applicationId(applicationId).build()) + .map(GetApplicationSshEnabledResponse::getEnabled); + } + @Override public Mono start(StartApplicationRequest request) { return Mono @@ -1222,11 +1246,11 @@ private static Mono removeServiceBindings(CloudFoundryClient cloudFoundryC .then(); } - private static Mono requestApplicationEnvironment(CloudFoundryClient cloudFoundryClient, String applicationId) { - return cloudFoundryClient.applicationsV2() - .environment(ApplicationEnvironmentRequest.builder() - .applicationId(applicationId) - .build()); + private static Mono requestApplicationEnvironment(CloudFoundryClient cloudFoundryClient, String applicationId) { + return cloudFoundryClient.applicationsV3() + .getEnvironment(GetApplicationEnvironmentRequest.builder() + .applicationId(applicationId) + .build()); } private static Mono requestApplicationInstances(CloudFoundryClient cloudFoundryClient, String applicationId) { @@ -1662,8 +1686,16 @@ private static Mono requestUpdateApplicationScale(C return requestUpdateApplication(cloudFoundryClient, applicationId, builder -> builder.diskQuota(disk).instances(instances).memory(memory)); } - private static Mono requestUpdateApplicationSsh(CloudFoundryClient cloudFoundryClient, String applicationId, Boolean enabled) { - return requestUpdateApplication(cloudFoundryClient, applicationId, builder -> builder.enableSsh(enabled)); + private static Mono requestUpdateApplicationSsh(CloudFoundryClient cloudFoundryClient, String applicationId, boolean enabled) { + return requestUpdateApplicationFeature(cloudFoundryClient, applicationId,builder -> builder.featureName("ssh").enabled(enabled)); + } + + private static Mono requestUpdateApplicationFeature(CloudFoundryClient cloudFoundryClient, String applicationId, UnaryOperator modifier) { + return cloudFoundryClient.applicationsV3() + .updateFeature(modifier.apply(org.cloudfoundry.client.v3.applications.UpdateApplicationFeatureRequest.builder() + .applicationId(applicationId)) + .build()) + .cast(ApplicationResource.class); } private static Mono requestUpdateApplicationState(CloudFoundryClient cloudFoundryClient, String applicationId, String state) { @@ -1709,10 +1741,6 @@ private static boolean shouldStartApplication(PushApplicationManifestRequest req return !Optional.ofNullable(request.getNoStart()).orElse(false); } - private static Predicate sshEnabled(Boolean enabled) { - return resource -> enabled.equals(ResourceUtils.getEntity(resource).getEnableSsh()); - } - private static Mono startApplicationAndWait(CloudFoundryClient cloudFoundryClient, String application, String applicationId, Duration stagingTimeout, Duration startupTimeout) { return requestUpdateApplicationState(cloudFoundryClient, applicationId, STARTED_STATE) .flatMap(response -> waitForStaging(cloudFoundryClient, application, applicationId, stagingTimeout)) @@ -1755,12 +1783,12 @@ private static ApplicationDetail toApplicationDetail(List buildpacks, Su .build(); } - private static ApplicationEnvironments toApplicationEnvironments(ApplicationEnvironmentResponse response) { + private static ApplicationEnvironments toApplicationEnvironments(GetApplicationEnvironmentResponse response) { return ApplicationEnvironments.builder() - .running(response.getRunningEnvironmentJsons()) - .staging(response.getStagingEnvironmentJsons()) - .systemProvided(response.getSystemEnvironmentJsons()) - .userProvided(response.getEnvironmentJsons()) + .running(response.getRunningEnvironmentVariables()) + .staging(response.getStagingEnvironmentVariables()) + .systemProvided(response.getSystemEnvironmentVariables()) + .userProvided(response.getEnvironmentVariables()) .build(); } From 708c77a770b7a5cc2dc6c816cc15debf2bdd511e Mon Sep 17 00:00:00 2001 From: Abhishek Bhaskar Kulkarni Date: Wed, 4 Jan 2023 11:54:58 +0530 Subject: [PATCH 2/3] minor changes --- .../operations/applications/DefaultApplications.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cloudfoundry-operations/src/main/java/org/cloudfoundry/operations/applications/DefaultApplications.java b/cloudfoundry-operations/src/main/java/org/cloudfoundry/operations/applications/DefaultApplications.java index 799d914bbd..e6473a74a7 100644 --- a/cloudfoundry-operations/src/main/java/org/cloudfoundry/operations/applications/DefaultApplications.java +++ b/cloudfoundry-operations/src/main/java/org/cloudfoundry/operations/applications/DefaultApplications.java @@ -173,6 +173,8 @@ public final class DefaultApplications implements Applications { private static final String STOPPED_STATE = "STOPPED"; + private static final String APP_FEATURE_SSH = "ssh"; + private final Mono cloudFoundryClient; private final Mono dopplerClient; @@ -1687,7 +1689,7 @@ private static Mono requestUpdateApplicationScale(C } private static Mono requestUpdateApplicationSsh(CloudFoundryClient cloudFoundryClient, String applicationId, boolean enabled) { - return requestUpdateApplicationFeature(cloudFoundryClient, applicationId,builder -> builder.featureName("ssh").enabled(enabled)); + return requestUpdateApplicationFeature(cloudFoundryClient, applicationId,builder -> builder.featureName(APP_FEATURE_SSH).enabled(enabled)); } private static Mono requestUpdateApplicationFeature(CloudFoundryClient cloudFoundryClient, String applicationId, UnaryOperator modifier) { From 8f511513baadead5c50ce020d338d7ac3cba9687 Mon Sep 17 00:00:00 2001 From: Abhishek Bhaskar Kulkarni Date: Fri, 13 Jan 2023 17:03:08 +0530 Subject: [PATCH 3/3] Modified Junit tests to adopt V3 changes. --- .../applications/DefaultApplications.java | 7 +- .../operations/AbstractOperationsTest.java | 2 + .../applications/DefaultApplicationsTest.java | 92 +++++++++++++++---- 3 files changed, 78 insertions(+), 23 deletions(-) diff --git a/cloudfoundry-operations/src/main/java/org/cloudfoundry/operations/applications/DefaultApplications.java b/cloudfoundry-operations/src/main/java/org/cloudfoundry/operations/applications/DefaultApplications.java index e6473a74a7..2e015d05f6 100644 --- a/cloudfoundry-operations/src/main/java/org/cloudfoundry/operations/applications/DefaultApplications.java +++ b/cloudfoundry-operations/src/main/java/org/cloudfoundry/operations/applications/DefaultApplications.java @@ -83,6 +83,7 @@ import org.cloudfoundry.client.v3.BuildpackData; import org.cloudfoundry.client.v3.Lifecycle; import org.cloudfoundry.client.v3.Resource; +import org.cloudfoundry.client.v3.applications.ApplicationFeature; import org.cloudfoundry.client.v3.applications.ApplicationResource; import org.cloudfoundry.client.v3.applications.GetApplicationEnvironmentRequest; import org.cloudfoundry.client.v3.applications.GetApplicationEnvironmentResponse; @@ -1688,16 +1689,16 @@ private static Mono requestUpdateApplicationScale(C return requestUpdateApplication(cloudFoundryClient, applicationId, builder -> builder.diskQuota(disk).instances(instances).memory(memory)); } - private static Mono requestUpdateApplicationSsh(CloudFoundryClient cloudFoundryClient, String applicationId, boolean enabled) { + private static Mono requestUpdateApplicationSsh(CloudFoundryClient cloudFoundryClient, String applicationId, boolean enabled) { return requestUpdateApplicationFeature(cloudFoundryClient, applicationId,builder -> builder.featureName(APP_FEATURE_SSH).enabled(enabled)); } - private static Mono requestUpdateApplicationFeature(CloudFoundryClient cloudFoundryClient, String applicationId, UnaryOperator modifier) { + private static Mono requestUpdateApplicationFeature(CloudFoundryClient cloudFoundryClient, String applicationId, UnaryOperator modifier) { return cloudFoundryClient.applicationsV3() .updateFeature(modifier.apply(org.cloudfoundry.client.v3.applications.UpdateApplicationFeatureRequest.builder() .applicationId(applicationId)) .build()) - .cast(ApplicationResource.class); + .cast(ApplicationFeature.class); } private static Mono requestUpdateApplicationState(CloudFoundryClient cloudFoundryClient, String applicationId, String state) { 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 4efb6e4b9d..7a12aa39d2 100644 --- a/cloudfoundry-operations/src/test/java/org/cloudfoundry/operations/AbstractOperationsTest.java +++ b/cloudfoundry-operations/src/test/java/org/cloudfoundry/operations/AbstractOperationsTest.java @@ -76,6 +76,8 @@ public abstract class AbstractOperationsTest { protected static final String TEST_USERNAME = "test-username"; + protected static final String APP_FEATURE_SSH = "ssh"; + protected final ApplicationsV2 applications = mock(ApplicationsV2.class, RETURNS_SMART_NULLS); protected final ApplicationsV3 applicationsV3 = mock(ApplicationsV3.class, RETURNS_SMART_NULLS); diff --git a/cloudfoundry-operations/src/test/java/org/cloudfoundry/operations/applications/DefaultApplicationsTest.java b/cloudfoundry-operations/src/test/java/org/cloudfoundry/operations/applications/DefaultApplicationsTest.java index 4f6abff4a9..171e1a443c 100644 --- a/cloudfoundry-operations/src/test/java/org/cloudfoundry/operations/applications/DefaultApplicationsTest.java +++ b/cloudfoundry-operations/src/test/java/org/cloudfoundry/operations/applications/DefaultApplicationsTest.java @@ -107,8 +107,14 @@ import org.cloudfoundry.client.v3.DockerData; import org.cloudfoundry.client.v3.Lifecycle; import org.cloudfoundry.client.v3.applications.ApplicationState; +import org.cloudfoundry.client.v3.applications.GetApplicationEnvironmentRequest; +import org.cloudfoundry.client.v3.applications.GetApplicationEnvironmentResponse; +import org.cloudfoundry.client.v3.applications.GetApplicationSshEnabledRequest; +import org.cloudfoundry.client.v3.applications.GetApplicationSshEnabledResponse; import org.cloudfoundry.client.v3.applications.ListApplicationsRequest; import org.cloudfoundry.client.v3.applications.ListApplicationsResponse; +import org.cloudfoundry.client.v3.applications.UpdateApplicationFeatureRequest; +import org.cloudfoundry.client.v3.applications.UpdateApplicationFeatureResponse; import org.cloudfoundry.client.v3.tasks.CancelTaskRequest; import org.cloudfoundry.client.v3.tasks.CancelTaskResponse; import org.cloudfoundry.client.v3.tasks.CreateTaskRequest; @@ -333,8 +339,10 @@ public void deleteWithBoundRoutes() { @Test public void disableSsh() { - requestApplications(this.cloudFoundryClient, "test-app-name", TEST_SPACE_ID, "test-metadata-id"); - requestUpdateApplicationSsh(this.cloudFoundryClient, "test-metadata-id", false); + requestApplicationsV3(this.cloudFoundryClient, "test-app-name", TEST_SPACE_ID, "test-application-id"); + requestGetSshEnabled(this.cloudFoundryClient,"test-application-id",true); + requestUpdateApplicationSshV3(this.cloudFoundryClient, "test-application-id", false); + this.applications .disableSsh(DisableApplicationSshRequest.builder() @@ -347,7 +355,8 @@ public void disableSsh() { @Test public void disableSshAlreadyDisabled() { - requestApplicationsWithSsh(this.cloudFoundryClient, "test-app-name", TEST_SPACE_ID, false); + requestApplicationsV3(this.cloudFoundryClient, "test-app-name", TEST_SPACE_ID, "test-application-id"); + requestGetSshEnabled(this.cloudFoundryClient,"test-application-id",false); this.applications .disableSsh(DisableApplicationSshRequest.builder() @@ -360,7 +369,7 @@ public void disableSshAlreadyDisabled() { @Test public void disableSshNoApp() { - requestApplicationsEmpty(this.cloudFoundryClient, "test-app-name", TEST_SPACE_ID); + requestApplicationsEmptyV3(this.cloudFoundryClient, "test-app-name", TEST_SPACE_ID); this.applications .disableSsh(DisableApplicationSshRequest.builder() @@ -373,8 +382,9 @@ public void disableSshNoApp() { @Test public void enableSsh() { - requestApplications(this.cloudFoundryClient, "test-app-name", TEST_SPACE_ID, "test-metadata-id"); - requestUpdateApplicationSsh(this.cloudFoundryClient, "test-application-id", true); + requestApplicationsV3(this.cloudFoundryClient, "test-app-name", TEST_SPACE_ID, "test-application-id"); + requestGetSshEnabled(this.cloudFoundryClient,"test-application-id",false); + requestUpdateApplicationSshV3(this.cloudFoundryClient, "test-application-id", true); this.applications .enableSsh(EnableApplicationSshRequest.builder() @@ -387,7 +397,8 @@ public void enableSsh() { @Test public void enableSshAlreadyEnabled() { - requestApplicationsWithSsh(this.cloudFoundryClient, "test-app-name", TEST_SPACE_ID, true); + requestApplicationsV3(this.cloudFoundryClient, "test-app-name", TEST_SPACE_ID, "test-application-id"); + requestGetSshEnabled(this.cloudFoundryClient,"test-application-id",true); this.applications .enableSsh(EnableApplicationSshRequest.builder() @@ -400,7 +411,7 @@ public void enableSshAlreadyEnabled() { @Test public void enableSshNoApp() { - requestApplicationsEmpty(this.cloudFoundryClient, "test-app-name", TEST_SPACE_ID); + requestApplicationsEmptyV3(this.cloudFoundryClient, "test-app-name", TEST_SPACE_ID); this.applications .enableSsh(EnableApplicationSshRequest.builder() @@ -637,7 +648,7 @@ public void getDetectedBuildpack() { @Test public void getEnvironments() { - requestApplications(this.cloudFoundryClient, "test-app", TEST_SPACE_ID, "test-metadata-id"); + requestApplicationsV3(this.cloudFoundryClient, "test-app", TEST_SPACE_ID, "test-metadata-id"); requestApplicationEnvironment(this.cloudFoundryClient, "test-metadata-id"); this.applications @@ -665,7 +676,7 @@ public void getEnvironments() { @Test public void getEnvironmentsNoApp() { - requestApplicationsEmpty(this.cloudFoundryClient, "test-app", TEST_SPACE_ID); + requestApplicationsEmptyV3(this.cloudFoundryClient, "test-app", TEST_SPACE_ID); this.applications .getEnvironments(GetApplicationEnvironmentsRequest.builder() @@ -2708,7 +2719,8 @@ public void setHealthCheck() { @Test public void sshEnabled() { - requestApplications(this.cloudFoundryClient, "test-app-name", TEST_SPACE_ID, "test-metadata-id"); + requestApplicationsV3(this.cloudFoundryClient, "test-app-name", TEST_SPACE_ID, "test-application-id"); + requestGetSshEnabled(this.cloudFoundryClient,"test-application-id",true); this.applications .sshEnabled(ApplicationSshEnabledRequest.builder() @@ -2722,7 +2734,7 @@ public void sshEnabled() { @Test public void sshEnabledNoApp() { - requestApplicationsEmpty(this.cloudFoundryClient, "test-app-name", TEST_SPACE_ID); + requestApplicationsEmptyV3(this.cloudFoundryClient, "test-app-name", TEST_SPACE_ID); this.applications .sshEnabled(ApplicationSshEnabledRequest.builder() @@ -2733,6 +2745,7 @@ public void sshEnabledNoApp() { .verify(Duration.ofSeconds(5)); } + @Test public void startApplicationFailurePartial() { requestApplicationsSpecificState(this.cloudFoundryClient, "test-application-name", TEST_SPACE_ID, "STOPPED"); @@ -2962,17 +2975,17 @@ private static void requestApplicationEmptyStats(CloudFoundryClient cloudFoundry } private static void requestApplicationEnvironment(CloudFoundryClient cloudFoundryClient, String applicationId) { - when(cloudFoundryClient.applicationsV2() - .environment(ApplicationEnvironmentRequest.builder() + when(cloudFoundryClient.applicationsV3() + .getEnvironment(GetApplicationEnvironmentRequest.builder() .applicationId(applicationId) .build())) .thenReturn(Mono - .just(ApplicationEnvironmentResponse.builder() - .runningEnvironmentJson("running-env-name", "running-env-value") - .applicationEnvironmentJson("application-env-name", "application-env-value") - .stagingEnvironmentJson("staging-env-name", "staging-env-value") - .environmentJson("env-name", "env-value") - .systemEnvironmentJson("system-env-name", "system-env-value") + .just(GetApplicationEnvironmentResponse.builder() + .runningEnvironmentVariable("running-env-name", "running-env-value") + .applicationEnvironmentVariable("application-env-name", "application-env-value") + .stagingEnvironmentVariable("staging-env-name", "staging-env-value") + .environmentVariable("env-name", "env-value") + .systemEnvironmentVariable("system-env-name", "system-env-value") .build())); } @@ -3326,6 +3339,18 @@ private static void requestApplicationsEmpty(CloudFoundryClient cloudFoundryClie .build())); } + private static void requestApplicationsEmptyV3(CloudFoundryClient cloudFoundryClient, String application, String spaceId) { + when(cloudFoundryClient.applicationsV3() + .list(ListApplicationsRequest.builder() + .name(application) + .spaceId(spaceId) + .page(1) + .build())) + .thenReturn(Mono + .just(fill(ListApplicationsResponse.builder()) + .build())); + } + private static void requestApplicationsSpecificState(CloudFoundryClient cloudFoundryClient, String application, String spaceId, String stateReturned) { when(cloudFoundryClient.spaces() .listApplications(ListSpaceApplicationsRequest.builder() @@ -4240,6 +4265,33 @@ private static void requestUpdateApplicationSsh(CloudFoundryClient cloudFoundryC .build())); } + private static void requestUpdateApplicationSshV3(CloudFoundryClient cloudFoundryClient, String applicationId, Boolean enabled) { + + when(cloudFoundryClient.applicationsV3() + .updateFeature(UpdateApplicationFeatureRequest.builder() + .applicationId(applicationId) + .featureName(APP_FEATURE_SSH) + .enabled(enabled) + .build())) + .thenReturn(Mono + .just(fill(UpdateApplicationFeatureResponse.builder()) + .description("test-description") + .name("test-application-name") + .enabled(enabled) + .build())); + } + + private static void requestGetSshEnabled(CloudFoundryClient cloudFoundryClient, String applicationId,boolean status) { + when(cloudFoundryClient.applicationsV3() + .getSshEnabled(GetApplicationSshEnabledRequest.builder() + .applicationId(applicationId).build())) + .thenReturn(Mono + .just(fill(GetApplicationSshEnabledResponse.builder()) + .reason("test-reason") + .enabled(status) + .build())); + } + private static void requestUpdateApplicationState(CloudFoundryClient cloudFoundryClient, String applicationId, String state) { requestUpdateApplicationState(cloudFoundryClient, applicationId, state, 1); }