/*
* Copyright 2013-2017 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.cloudfoundry.operations.applications;
import org.cloudfoundry.client.CloudFoundryClient;
import org.cloudfoundry.client.v2.ClientV2Exception;
import org.cloudfoundry.client.v2.Metadata;
import org.cloudfoundry.client.v2.OrderDirection;
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;
import org.cloudfoundry.client.v2.applications.ApplicationResource;
import org.cloudfoundry.client.v2.applications.ApplicationStatisticsRequest;
import org.cloudfoundry.client.v2.applications.ApplicationStatisticsResponse;
import org.cloudfoundry.client.v2.applications.AssociateApplicationRouteRequest;
import org.cloudfoundry.client.v2.applications.CopyApplicationRequest;
import org.cloudfoundry.client.v2.applications.CopyApplicationResponse;
import org.cloudfoundry.client.v2.applications.CreateApplicationRequest;
import org.cloudfoundry.client.v2.applications.CreateApplicationResponse;
import org.cloudfoundry.client.v2.applications.GetApplicationResponse;
import org.cloudfoundry.client.v2.applications.InstanceStatistics;
import org.cloudfoundry.client.v2.applications.ListApplicationRoutesRequest;
import org.cloudfoundry.client.v2.applications.ListApplicationRoutesResponse;
import org.cloudfoundry.client.v2.applications.ListApplicationServiceBindingsRequest;
import org.cloudfoundry.client.v2.applications.ListApplicationServiceBindingsResponse;
import org.cloudfoundry.client.v2.applications.RemoveApplicationRouteRequest;
import org.cloudfoundry.client.v2.applications.RemoveApplicationServiceBindingRequest;
import org.cloudfoundry.client.v2.applications.RestageApplicationResponse;
import org.cloudfoundry.client.v2.applications.Statistics;
import org.cloudfoundry.client.v2.applications.SummaryApplicationRequest;
import org.cloudfoundry.client.v2.applications.SummaryApplicationResponse;
import org.cloudfoundry.client.v2.applications.TerminateApplicationInstanceRequest;
import org.cloudfoundry.client.v2.applications.UpdateApplicationRequest;
import org.cloudfoundry.client.v2.applications.UpdateApplicationResponse;
import org.cloudfoundry.client.v2.applications.UploadApplicationRequest;
import org.cloudfoundry.client.v2.applications.UploadApplicationResponse;
import org.cloudfoundry.client.v2.applications.Usage;
import org.cloudfoundry.client.v2.events.EventEntity;
import org.cloudfoundry.client.v2.events.EventResource;
import org.cloudfoundry.client.v2.events.ListEventsRequest;
import org.cloudfoundry.client.v2.events.ListEventsResponse;
import org.cloudfoundry.client.v2.jobs.ErrorDetails;
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.v2.organizations.ListOrganizationPrivateDomainsRequest;
import org.cloudfoundry.client.v2.organizations.ListOrganizationPrivateDomainsResponse;
import org.cloudfoundry.client.v2.organizations.ListOrganizationSpacesRequest;
import org.cloudfoundry.client.v2.organizations.ListOrganizationSpacesResponse;
import org.cloudfoundry.client.v2.organizations.ListOrganizationsRequest;
import org.cloudfoundry.client.v2.organizations.ListOrganizationsResponse;
import org.cloudfoundry.client.v2.organizations.OrganizationEntity;
import org.cloudfoundry.client.v2.organizations.OrganizationResource;
import org.cloudfoundry.client.v2.privatedomains.PrivateDomainEntity;
import org.cloudfoundry.client.v2.privatedomains.PrivateDomainResource;
import org.cloudfoundry.client.v2.resourcematch.ListMatchingResourcesRequest;
import org.cloudfoundry.client.v2.resourcematch.ListMatchingResourcesResponse;
import org.cloudfoundry.client.v2.resourcematch.Resource;
import org.cloudfoundry.client.v2.routes.CreateRouteRequest;
import org.cloudfoundry.client.v2.routes.CreateRouteResponse;
import org.cloudfoundry.client.v2.routes.DeleteRouteResponse;
import org.cloudfoundry.client.v2.routes.ListRoutesRequest;
import org.cloudfoundry.client.v2.routes.ListRoutesResponse;
import org.cloudfoundry.client.v2.routes.RouteEntity;
import org.cloudfoundry.client.v2.routes.RouteResource;
import org.cloudfoundry.client.v2.servicebindings.ServiceBindingResource;
import org.cloudfoundry.client.v2.serviceinstances.ServiceInstance;
import org.cloudfoundry.client.v2.shareddomains.GetSharedDomainRequest;
import org.cloudfoundry.client.v2.shareddomains.GetSharedDomainResponse;
import org.cloudfoundry.client.v2.shareddomains.ListSharedDomainsRequest;
import org.cloudfoundry.client.v2.shareddomains.ListSharedDomainsResponse;
import org.cloudfoundry.client.v2.shareddomains.SharedDomainEntity;
import org.cloudfoundry.client.v2.shareddomains.SharedDomainResource;
import org.cloudfoundry.client.v2.spaces.GetSpaceRequest;
import org.cloudfoundry.client.v2.spaces.GetSpaceResponse;
import org.cloudfoundry.client.v2.spaces.GetSpaceSummaryRequest;
import org.cloudfoundry.client.v2.spaces.GetSpaceSummaryResponse;
import org.cloudfoundry.client.v2.spaces.ListSpaceApplicationsRequest;
import org.cloudfoundry.client.v2.spaces.ListSpaceApplicationsResponse;
import org.cloudfoundry.client.v2.spaces.SpaceApplicationSummary;
import org.cloudfoundry.client.v2.spaces.SpaceEntity;
import org.cloudfoundry.client.v2.spaces.SpaceResource;
import org.cloudfoundry.client.v2.stacks.GetStackRequest;
import org.cloudfoundry.client.v2.stacks.GetStackResponse;
import org.cloudfoundry.client.v2.stacks.ListStacksRequest;
import org.cloudfoundry.client.v2.stacks.ListStacksResponse;
import org.cloudfoundry.client.v2.stacks.StackEntity;
import org.cloudfoundry.doppler.DopplerClient;
import org.cloudfoundry.doppler.Envelope;
import org.cloudfoundry.doppler.EventType;
import org.cloudfoundry.doppler.LogMessage;
import org.cloudfoundry.doppler.RecentLogsRequest;
import org.cloudfoundry.doppler.StreamRequest;
import org.cloudfoundry.operations.AbstractOperationsTest;
import org.cloudfoundry.util.DateUtils;
import org.cloudfoundry.util.FluentMap;
import org.cloudfoundry.util.ResourceMatchingUtils;
import org.junit.Test;
import org.springframework.core.io.ClassPathResource;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import reactor.test.StepVerifier;
import java.io.IOException;
import java.nio.file.Path;
import java.time.Duration;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.LinkedList;
import java.util.Map;
import java.util.Optional;
import java.util.Queue;
import java.util.function.Supplier;
import static org.assertj.core.api.Assertions.assertThat;
import static org.cloudfoundry.operations.TestObjects.fill;
import static org.mockito.Mockito.RETURNS_SMART_NULLS;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public final class DefaultApplicationsTest extends AbstractOperationsTest {
private RandomWords randomWords = mock(RandomWords.class, RETURNS_SMART_NULLS);
private final DefaultApplications applications = new DefaultApplications(Mono.just(this.cloudFoundryClient), Mono.just(this.dopplerClient), Mono.just(TEST_SPACE_ID), this.randomWords);
@Test
public void copySourceNoRestartOrgSpace() {
requestApplications(this.cloudFoundryClient, "test-application-name", TEST_SPACE_ID, "test-metadata-id");
requestSpace(this.cloudFoundryClient, TEST_SPACE_ID, TEST_ORGANIZATION_ID);
requestOrganizations(this.cloudFoundryClient, "test-target-organization");
requestOrganizationSpacesByName(this.cloudFoundryClient, "test-organization-resource-metadata-id", "test-target-space");
requestApplications(this.cloudFoundryClient, "test-target-application-name", "test-space-resource-metadata-id", "test-metadata-id");
requestCopyBits(this.cloudFoundryClient, "test-metadata-id", "test-metadata-id");
requestJobSuccess(this.cloudFoundryClient, "test-copy-bits-id");
this.applications
.copySource(CopySourceApplicationRequest.builder()
.name("test-application-name")
.targetName("test-target-application-name")
.targetSpace("test-target-space")
.targetOrganization("test-target-organization")
.build())
.as(StepVerifier::create)
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void copySourceNoRestartSpace() {
requestApplications(this.cloudFoundryClient, "test-application-name", TEST_SPACE_ID, "test-metadata-id");
requestSpace(this.cloudFoundryClient, TEST_SPACE_ID, TEST_ORGANIZATION_ID);
requestOrganizationSpacesByName(this.cloudFoundryClient, TEST_ORGANIZATION_ID, "test-target-space");
requestApplications(this.cloudFoundryClient, "test-target-application-name", "test-space-resource-metadata-id", "test-metadata-id");
requestCopyBits(this.cloudFoundryClient, "test-metadata-id", "test-metadata-id");
requestJobSuccess(this.cloudFoundryClient, "test-copy-bits-id");
this.applications
.copySource(CopySourceApplicationRequest.builder()
.name("test-application-name")
.targetName("test-target-application-name")
.targetSpace("test-target-space")
.build())
.as(StepVerifier::create)
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void copySourceOrganizationNotFound() {
requestApplications(this.cloudFoundryClient, "test-application-name", TEST_SPACE_ID, "test-metadata-id");
requestSpace(this.cloudFoundryClient, TEST_SPACE_ID, TEST_ORGANIZATION_ID);
requestOrganizationsNotFound(this.cloudFoundryClient, "test-target-organization");
this.applications
.copySource(CopySourceApplicationRequest.builder()
.name("test-application-name")
.targetName("test-target-application-name")
.targetOrganization("test-target-organization")
.targetSpace("test-target-space")
.build())
.as(StepVerifier::create)
.consumeErrorWith(t -> assertThat(t).isInstanceOf(IllegalArgumentException.class).hasMessage("Organization test-target-organization not found"))
.verify(Duration.ofSeconds(5));
}
@Test
public void copySourceRestart() {
requestApplications(this.cloudFoundryClient, "test-application-name", TEST_SPACE_ID, "test-metadata-id");
requestSpace(this.cloudFoundryClient, TEST_SPACE_ID, TEST_ORGANIZATION_ID);
requestApplications(this.cloudFoundryClient, "test-target-application-name", TEST_SPACE_ID, "test-metadata-id");
requestCopyBits(this.cloudFoundryClient, "test-metadata-id", "test-metadata-id");
requestJobSuccess(this.cloudFoundryClient, "test-copy-bits-id");
requestUpdateApplicationState(this.cloudFoundryClient, "test-metadata-id", "STOPPED");
requestUpdateApplicationState(this.cloudFoundryClient, "test-metadata-id", "STARTED");
requestGetApplication(this.cloudFoundryClient, "test-metadata-id");
requestApplicationInstancesRunning(this.cloudFoundryClient, "test-metadata-id");
this.applications
.copySource(CopySourceApplicationRequest.builder()
.name("test-application-name")
.targetName("test-target-application-name")
.restart(true)
.build())
.as(StepVerifier::create)
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void copySourceSpaceNotFound() {
requestApplications(this.cloudFoundryClient, "test-application-name", "test-space-id", "test-metadata-id");
requestSpace(this.cloudFoundryClient, TEST_SPACE_ID, TEST_ORGANIZATION_ID);
requestOrganizationSpacesByNameNotFound(this.cloudFoundryClient, TEST_ORGANIZATION_ID, "test-target-space");
this.applications
.copySource(CopySourceApplicationRequest.builder()
.name("test-application-name")
.targetName("test-target-application-name")
.targetSpace("test-target-space")
.build())
.as(StepVerifier::create)
.consumeErrorWith(t -> assertThat(t).isInstanceOf(IllegalArgumentException.class).hasMessage("Space test-target-space not found"))
.verify(Duration.ofSeconds(5));
}
@Test
public void deleteAndDeleteRoutes() {
requestApplications(this.cloudFoundryClient, "test-name", TEST_SPACE_ID, "test-metadata-id");
requestApplicationSummary(this.cloudFoundryClient, "test-metadata-id");
requestDeleteRoute(this.cloudFoundryClient, "test-route-id");
requestApplicationServiceBindingsEmpty(this.cloudFoundryClient, "test-metadata-id");
requestDeleteApplication(this.cloudFoundryClient, "test-metadata-id");
requestJobSuccess(this.cloudFoundryClient, "test-job-entity-id");
this.applications
.delete(DeleteApplicationRequest.builder()
.deleteRoutes(true)
.name("test-name")
.build())
.as(StepVerifier::create)
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void deleteAndDeleteRoutesFailure() {
requestApplications(this.cloudFoundryClient, "test-name", TEST_SPACE_ID, "test-metadata-id");
requestApplicationSummary(this.cloudFoundryClient, "test-metadata-id");
requestDeleteRoute(this.cloudFoundryClient, "test-route-id");
requestDeleteApplication(this.cloudFoundryClient, "test-metadata-id");
requestJobFailure(this.cloudFoundryClient, "test-job-entity-id");
this.applications
.delete(DeleteApplicationRequest.builder()
.deleteRoutes(true)
.name("test-name")
.build())
.as(StepVerifier::create)
.consumeErrorWith(t -> assertThat(t).isInstanceOf(ClientV2Exception.class).hasMessage("test-error-details-errorCode(1): test-error-details-description"))
.verify(Duration.ofSeconds(5));
}
@Test
public void deleteAndDoNotDeleteRoutes() {
requestApplications(this.cloudFoundryClient, "test-name", TEST_SPACE_ID, "test-metadata-id");
requestApplicationSummary(this.cloudFoundryClient, "test-metadata-id");
requestApplicationServiceBindingsEmpty(this.cloudFoundryClient, "test-metadata-id");
requestDeleteApplication(this.cloudFoundryClient, "test-metadata-id");
this.applications
.delete(DeleteApplicationRequest.builder()
.name("test-name")
.build())
.as(StepVerifier::create)
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void deleteWithBoundRoutes() {
requestApplications(this.cloudFoundryClient, "test-name", TEST_SPACE_ID, "test-metadata-id");
requestApplicationSummary(this.cloudFoundryClient, "test-metadata-id");
requestDeleteRoute(this.cloudFoundryClient, "test-route-id");
requestApplicationServiceBindings(this.cloudFoundryClient, "test-metadata-id");
requestRemoveServiceBinding(this.cloudFoundryClient, "test-metadata-id", "test-service-binding-id");
requestDeleteApplication(this.cloudFoundryClient, "test-metadata-id");
requestJobSuccess(this.cloudFoundryClient, "test-job-entity-id");
this.applications
.delete(DeleteApplicationRequest.builder()
.deleteRoutes(true)
.name("test-name")
.build())
.as(StepVerifier::create)
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void disableSsh() {
requestApplications(this.cloudFoundryClient, "test-app-name", TEST_SPACE_ID, "test-metadata-id");
requestUpdateApplicationSsh(this.cloudFoundryClient, "test-metadata-id", false);
this.applications
.disableSsh(DisableApplicationSshRequest.builder()
.name("test-app-name")
.build())
.as(StepVerifier::create)
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void disableSshAlreadyDisabled() {
requestApplicationsWithSsh(this.cloudFoundryClient, "test-app-name", TEST_SPACE_ID, false);
this.applications
.disableSsh(DisableApplicationSshRequest.builder()
.name("test-app-name")
.build())
.as(StepVerifier::create)
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void disableSshNoApp() {
requestApplicationsEmpty(this.cloudFoundryClient, "test-app-name", TEST_SPACE_ID);
this.applications
.disableSsh(DisableApplicationSshRequest.builder()
.name("test-app-name")
.build())
.as(StepVerifier::create)
.consumeErrorWith(t -> assertThat(t).isInstanceOf(IllegalArgumentException.class).hasMessage("Application test-app-name does not exist"))
.verify(Duration.ofSeconds(5));
}
@Test
public void enableSsh() {
requestApplications(this.cloudFoundryClient, "test-app-name", TEST_SPACE_ID, "test-metadata-id");
requestUpdateApplicationSsh(this.cloudFoundryClient, "test-application-id", true);
this.applications
.enableSsh(EnableApplicationSshRequest.builder()
.name("test-app-name")
.build())
.as(StepVerifier::create)
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void enableSshAlreadyEnabled() {
requestApplicationsWithSsh(this.cloudFoundryClient, "test-app-name", TEST_SPACE_ID, true);
this.applications
.enableSsh(EnableApplicationSshRequest.builder()
.name("test-app-name")
.build())
.as(StepVerifier::create)
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void enableSshNoApp() {
requestApplicationsEmpty(this.cloudFoundryClient, "test-app-name", TEST_SPACE_ID);
this.applications
.enableSsh(EnableApplicationSshRequest.builder()
.name("test-app-name")
.build())
.as(StepVerifier::create)
.consumeErrorWith(t -> assertThat(t).isInstanceOf(IllegalArgumentException.class).hasMessage("Application test-app-name does not exist"))
.verify(Duration.ofSeconds(5));
}
@Test
public void get() {
requestApplications(this.cloudFoundryClient, "test-app", TEST_SPACE_ID, "test-metadata-id");
requestApplicationStatistics(this.cloudFoundryClient, "test-metadata-id");
requestStack(this.cloudFoundryClient, "test-application-stackId");
requestApplicationSummary(this.cloudFoundryClient, "test-metadata-id");
requestApplicationInstances(this.cloudFoundryClient, "test-metadata-id");
this.applications
.get(GetApplicationRequest.builder()
.name("test-app")
.build())
.as(StepVerifier::create)
.expectNext(fill(ApplicationDetail.builder())
.buildpack("test-application-summary-buildpack")
.id("test-application-summary-id")
.instanceDetail(fill(InstanceDetail.builder())
.index("instance-0")
.since(new Date(1000))
.state("test-application-instance-info-state")
.build())
.lastUploaded(new Date(0))
.name("test-application-summary-name")
.requestedState("test-application-summary-state")
.stack("test-stack-entity-name")
.url("test-route-host.test-domain-name")
.build())
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void getApplicationManifest() {
requestApplications(this.cloudFoundryClient, "test-app", TEST_SPACE_ID, "test-metadata-id");
requestApplicationSummary(this.cloudFoundryClient, "test-metadata-id");
requestStack(this.cloudFoundryClient, "test-application-summary-stackId");
this.applications
.getApplicationManifest(GetApplicationManifestRequest.builder()
.name("test-app")
.build())
.as(StepVerifier::create)
.expectNext(ApplicationManifest.builder()
.buildpack("test-application-summary-buildpack")
.command("test-application-summary-command")
.disk(1)
.environmentVariables(Collections.emptyMap())
.healthCheckHttpEndpoint("test-application-summary-healthCheckHttpEndpoint")
.healthCheckType(ApplicationHealthCheck.PORT)
.instances(1)
.memory(1)
.name("test-application-summary-name")
.route(Route.builder()
.route("test-route-host.test-domain-name/test-path")
.build())
.service("test-service-instance-name")
.stack("test-stack-entity-name")
.timeout(1)
.build())
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void getApplicationManifestNoRoutes() {
requestApplications(this.cloudFoundryClient, "test-app", TEST_SPACE_ID, "test-metadata-id");
requestApplicationSummaryNoRoutes(this.cloudFoundryClient, "test-metadata-id");
requestStack(this.cloudFoundryClient, "test-application-summary-stackId");
this.applications
.getApplicationManifest(GetApplicationManifestRequest.builder()
.name("test-app")
.build())
.as(StepVerifier::create)
.expectNext(ApplicationManifest.builder()
.buildpack("test-application-summary-buildpack")
.command("test-application-summary-command")
.disk(1)
.environmentVariables(Collections.emptyMap())
.healthCheckHttpEndpoint("test-application-summary-healthCheckHttpEndpoint")
.healthCheckType(ApplicationHealthCheck.PORT)
.instances(1)
.memory(1)
.name("test-application-summary-name")
.noRoute(true)
.stack("test-stack-entity-name")
.timeout(1)
.build())
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void getApplicationManifestTcp() {
requestApplications(this.cloudFoundryClient, "test-app", TEST_SPACE_ID, "test-metadata-id");
requestApplicationSummaryTcp(this.cloudFoundryClient, "test-metadata-id");
requestStack(this.cloudFoundryClient, "test-application-summary-stackId");
this.applications
.getApplicationManifest(GetApplicationManifestRequest.builder()
.name("test-app")
.build())
.as(StepVerifier::create)
.expectNext(ApplicationManifest.builder()
.buildpack("test-application-summary-buildpack")
.command("test-application-summary-command")
.disk(1)
.environmentVariables(Collections.emptyMap())
.healthCheckHttpEndpoint("test-application-summary-healthCheckHttpEndpoint")
.healthCheckType(ApplicationHealthCheck.PORT)
.instances(1)
.memory(1)
.name("test-application-summary-name")
.route(Route.builder()
.route("test-route-host.test-domain-name:999")
.build())
.service("test-service-instance-name")
.stack("test-stack-entity-name")
.timeout(1)
.build())
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void getBuildpackError() {
requestApplications(this.cloudFoundryClient, "test-app", TEST_SPACE_ID, "test-metadata-id");
requestApplicationStatistics(this.cloudFoundryClient, "test-metadata-id");
requestStack(this.cloudFoundryClient, "test-application-stackId");
requestApplicationSummary(this.cloudFoundryClient, "test-metadata-id");
requestApplicationInstancesError(this.cloudFoundryClient, "test-metadata-id", 170004);
this.applications
.get(GetApplicationRequest.builder()
.name("test-app")
.build())
.as(StepVerifier::create)
.expectNext(fill(ApplicationDetail.builder())
.buildpack("test-application-summary-buildpack")
.id("test-application-summary-id")
.lastUploaded(new Date(0))
.name("test-application-summary-name")
.requestedState("test-application-summary-state")
.stack("test-stack-entity-name")
.url("test-route-host.test-domain-name")
.build())
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void getDetectedBuildpack() {
requestApplications(this.cloudFoundryClient, "test-app", TEST_SPACE_ID, "test-metadata-id");
requestApplicationStatistics(this.cloudFoundryClient, "test-metadata-id");
requestStack(this.cloudFoundryClient, "test-application-stackId");
requestApplicationSummaryDetectedBuildpack(this.cloudFoundryClient, "test-metadata-id");
requestApplicationInstances(this.cloudFoundryClient, "test-metadata-id");
this.applications
.get(GetApplicationRequest.builder()
.name("test-app")
.build())
.as(StepVerifier::create)
.expectNext(fill(ApplicationDetail.builder())
.buildpack("test-application-summary-detectedBuildpack")
.id("test-application-summary-id")
.instanceDetail(fill(InstanceDetail.builder())
.index("instance-0")
.since(new Date(1000))
.state("test-application-instance-info-state")
.build())
.lastUploaded(new Date(0))
.name("test-application-summary-name")
.requestedState("test-application-summary-state")
.stack("test-stack-entity-name")
.url("test-route-host.test-domain-name")
.build())
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void getEnvironments() {
requestApplications(this.cloudFoundryClient, "test-app", TEST_SPACE_ID, "test-metadata-id");
requestApplicationEnvironment(this.cloudFoundryClient, "test-metadata-id");
this.applications
.getEnvironments(GetApplicationEnvironmentsRequest.builder()
.name("test-app")
.build())
.as(StepVerifier::create)
.expectNext(ApplicationEnvironments.builder()
.running(FluentMap.<String, Object>builder()
.entry("running-env-name", "running-env-value")
.build())
.staging(FluentMap.<String, Object>builder()
.entry("staging-env-name", "staging-env-value")
.build())
.systemProvided(FluentMap.<String, Object>builder()
.entry("system-env-name", "system-env-value")
.build())
.userProvided(FluentMap.<String, Object>builder()
.entry("env-name", "env-value")
.build())
.build())
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void getEnvironmentsNoApp() {
requestApplicationsEmpty(this.cloudFoundryClient, "test-app", TEST_SPACE_ID);
this.applications
.getEnvironments(GetApplicationEnvironmentsRequest.builder()
.name("test-app")
.build())
.as(StepVerifier::create)
.consumeErrorWith(t -> assertThat(t).isInstanceOf(IllegalArgumentException.class).hasMessage("Application test-app does not exist"))
.verify(Duration.ofSeconds(5));
}
@Test
public void getEvents() {
requestApplications(this.cloudFoundryClient, "test-app", TEST_SPACE_ID, "test-metadata-id");
requestEvents(this.cloudFoundryClient, "test-metadata-id",
fill(EventEntity.builder(), "event-")
.timestamp("2016-02-08T15:45:59Z")
.metadata("request", Optional.of(FluentMap.builder()
.entry("instances", 1)
.entry("memory", 2)
.entry("environment_json", "test-data")
.entry("state", "test-state")
.build()))
.build());
this.applications
.getEvents(GetApplicationEventsRequest.builder()
.name("test-app")
.build())
.as(StepVerifier::create)
.expectNext(ApplicationEvent.builder()
.actor("test-event-actorName")
.description("instances: 1, memory: 2, state: test-state, environment_json: test-data")
.event("test-event-type")
.id("test-event-id")
.time(DateUtils.parseFromIso8601("2016-02-08T15:45:59Z"))
.build())
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void getEventsBadTimeSparseMetadata() {
requestApplications(this.cloudFoundryClient, "test-app", TEST_SPACE_ID, "test-metadata-id");
requestEvents(this.cloudFoundryClient, "test-metadata-id",
fill(EventEntity.builder(), "event-")
.timestamp("BAD-TIMESTAMP")
.metadata("request", Optional.of(FluentMap.builder()
.entry("memory", 2)
.entry("environment_json", "test-data")
.entry("state", "test-state")
.build()))
.build());
this.applications
.getEvents(GetApplicationEventsRequest.builder()
.name("test-app")
.build())
.as(StepVerifier::create)
.expectNext(ApplicationEvent.builder()
.actor("test-event-actorName")
.description("memory: 2, state: test-state, environment_json: test-data")
.event("test-event-type")
.id("test-event-id")
.build())
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void getEventsFoundZero() {
requestApplications(this.cloudFoundryClient, "test-app", TEST_SPACE_ID, "test-metadata-id");
requestEvents(this.cloudFoundryClient, "test-metadata-id");
this.applications
.getEvents(GetApplicationEventsRequest.builder()
.name("test-app")
.build())
.as(StepVerifier::create)
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void getEventsLimitZero() {
requestApplications(this.cloudFoundryClient, "test-app", TEST_SPACE_ID, "test-metadata-id");
requestEvents(this.cloudFoundryClient, "test-metadata-id",
fill(EventEntity.builder(), "event-")
.timestamp("2016-02-08T15:45:59Z")
.metadata("request", Optional.of(FluentMap.builder()
.entry("instances", 1)
.entry("memory", 2)
.entry("environment_json", "test-data")
.entry("state", "test-state")
.build()))
.build());
this.applications
.getEvents(GetApplicationEventsRequest.builder()
.name("test-app")
.maxNumberOfEvents(0)
.build())
.as(StepVerifier::create)
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void getEventsNoRequestMetadata() {
requestApplications(this.cloudFoundryClient, "test-app", TEST_SPACE_ID, "test-metadata-id");
requestEvents(this.cloudFoundryClient, "test-metadata-id",
fill(EventEntity.builder(), "event-")
.timestamp("2016-02-08T15:45:59Z")
.metadata("index", Optional.of(1))
.build());
this.applications
.getEvents(GetApplicationEventsRequest.builder()
.name("test-app")
.build())
.as(StepVerifier::create)
.expectNext(ApplicationEvent.builder()
.actor("test-event-actorName")
.description("")
.event("test-event-type")
.time(DateUtils.parseFromIso8601("2016-02-08T15:45:59Z"))
.id("test-event-id")
.build())
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void getEventsTwo() {
requestApplications(this.cloudFoundryClient, "test-app", TEST_SPACE_ID, "test-metadata-id");
requestEvents(this.cloudFoundryClient, "test-metadata-id",
fill(EventEntity.builder(), "event-")
.timestamp("2016-02-08T15:45:59Z")
.metadata("request", Optional.of(FluentMap.builder()
.entry("instances", 1)
.entry("memory", 2)
.entry("environment_json", "test-data")
.entry("state", "test-state")
.build()))
.build(),
fill(EventEntity.builder(), "event-")
.timestamp("2016-02-08T15:49:07Z")
.metadata("request", Optional.of(FluentMap.builder()
.entry("state", "test-state-two")
.build()))
.build()
);
this.applications
.getEvents(GetApplicationEventsRequest.builder()
.name("test-app")
.build())
.as(StepVerifier::create)
.expectNext(ApplicationEvent.builder()
.actor("test-event-actorName")
.description("instances: 1, memory: 2, state: test-state, environment_json: test-data")
.event("test-event-type")
.id("test-event-id")
.time(DateUtils.parseFromIso8601("2016-02-08T15:45:59Z"))
.build(),
ApplicationEvent.builder()
.actor("test-event-actorName")
.description("state: test-state-two")
.event("test-event-type")
.id("test-event-id")
.time(DateUtils.parseFromIso8601("2016-02-08T15:49:07Z"))
.build())
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void getHealthCheck() {
requestApplications(this.cloudFoundryClient, "test-application-name", TEST_SPACE_ID, "test-metadata-id");
this.applications
.getHealthCheck(GetApplicationHealthCheckRequest.builder()
.name("test-application-name")
.build())
.as(StepVerifier::create)
.expectNext(ApplicationHealthCheck.PORT)
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void getInstancesError() {
requestApplications(this.cloudFoundryClient, "test-app", TEST_SPACE_ID, "test-metadata-id");
requestApplicationStatistics(this.cloudFoundryClient, "test-metadata-id");
requestStack(this.cloudFoundryClient, "test-application-stackId");
requestApplicationSummary(this.cloudFoundryClient, "test-metadata-id");
requestApplicationInstancesError(this.cloudFoundryClient, "test-metadata-id", 220001);
this.applications
.get(GetApplicationRequest.builder()
.name("test-app")
.build())
.as(StepVerifier::create)
.expectNext(fill(ApplicationDetail.builder())
.buildpack("test-application-summary-buildpack")
.id("test-application-summary-id")
.lastUploaded(new Date(0))
.name("test-application-summary-name")
.requestedState("test-application-summary-state")
.stack("test-stack-entity-name")
.url("test-route-host.test-domain-name")
.build())
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void getNoBuildpack() {
requestApplications(this.cloudFoundryClient, "test-app", TEST_SPACE_ID, "test-metadata-id");
requestApplicationStatistics(this.cloudFoundryClient, "test-metadata-id");
requestStack(this.cloudFoundryClient, "test-application-stackId");
requestApplicationSummaryNoBuildpack(this.cloudFoundryClient, "test-metadata-id");
requestApplicationInstances(this.cloudFoundryClient, "test-metadata-id");
this.applications
.get(GetApplicationRequest.builder()
.name("test-app")
.build())
.as(StepVerifier::create)
.expectNext(fill(ApplicationDetail.builder())
.buildpack(null)
.id("test-application-summary-id")
.instanceDetail(fill(InstanceDetail.builder())
.index("instance-0")
.since(new Date(1000))
.state("test-application-instance-info-state")
.build())
.lastUploaded(new Date(0))
.name("test-application-summary-name")
.requestedState("test-application-summary-state")
.stack("test-stack-entity-name")
.url("test-route-host.test-domain-name")
.build())
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void getStagingError() {
requestApplications(this.cloudFoundryClient, "test-app", TEST_SPACE_ID, "test-metadata-id");
requestApplicationStatistics(this.cloudFoundryClient, "test-metadata-id");
requestStack(this.cloudFoundryClient, "test-application-stackId");
requestApplicationSummary(this.cloudFoundryClient, "test-metadata-id");
requestApplicationInstancesError(this.cloudFoundryClient, "test-metadata-id", 170002);
this.applications
.get(GetApplicationRequest.builder()
.name("test-app")
.build())
.as(StepVerifier::create)
.expectNext(fill(ApplicationDetail.builder())
.buildpack("test-application-summary-buildpack")
.id("test-application-summary-id")
.lastUploaded(new Date(0))
.name("test-application-summary-name")
.requestedState("test-application-summary-state")
.stack("test-stack-entity-name")
.url("test-route-host.test-domain-name")
.build())
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void getStoppedError() {
requestApplications(this.cloudFoundryClient, "test-app", TEST_SPACE_ID, "test-metadata-id");
requestApplicationStatisticsError(this.cloudFoundryClient, "test-metadata-id", 200003);
requestStack(this.cloudFoundryClient, "test-application-stackId");
requestApplicationSummary(this.cloudFoundryClient, "test-metadata-id");
requestApplicationInstances(this.cloudFoundryClient, "test-metadata-id");
this.applications
.get(GetApplicationRequest.builder()
.name("test-app")
.build())
.as(StepVerifier::create)
.expectNext(fill(ApplicationDetail.builder())
.buildpack("test-application-summary-buildpack")
.id("test-application-summary-id")
.instanceDetail(InstanceDetail.builder()
.index("instance-0")
.since(new Date(1000))
.state("test-application-instance-info-state")
.build())
.lastUploaded(new Date(0))
.name("test-application-summary-name")
.requestedState("test-application-summary-state")
.stack("test-stack-entity-name")
.url("test-route-host.test-domain-name")
.build())
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void getWithEmptyInstance() {
requestApplications(this.cloudFoundryClient, "test-app", TEST_SPACE_ID, "test-metadata-id");
requestApplicationStatistics(this.cloudFoundryClient, "test-metadata-id");
requestStack(this.cloudFoundryClient, "test-application-stackId");
requestApplicationSummary(this.cloudFoundryClient, "test-metadata-id");
requestApplicationEmptyInstance(this.cloudFoundryClient, "test-metadata-id");
this.applications
.get(GetApplicationRequest.builder()
.name("test-app")
.build())
.as(StepVerifier::create)
.expectNext(fill(ApplicationDetail.builder())
.buildpack("test-application-summary-buildpack")
.id("test-application-summary-id")
.instanceDetail(fill(InstanceDetail.builder())
.index("instance-0")
.since(null)
.state(null)
.build())
.lastUploaded(new Date(0))
.name("test-application-summary-name")
.requestedState("test-application-summary-state")
.stack("test-stack-entity-name")
.url("test-route-host.test-domain-name")
.build())
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void getWithEmptyInstanceStats() {
requestApplications(this.cloudFoundryClient, "test-app", TEST_SPACE_ID, "test-metadata-id");
requestApplicationEmptyStats(this.cloudFoundryClient, "test-metadata-id");
requestStack(this.cloudFoundryClient, "test-application-stackId");
requestApplicationSummary(this.cloudFoundryClient, "test-metadata-id");
requestApplicationInstances(this.cloudFoundryClient, "test-metadata-id");
this.applications
.get(GetApplicationRequest.builder()
.name("test-app")
.build())
.as(StepVerifier::create)
.expectNext(fill(ApplicationDetail.builder())
.buildpack("test-application-summary-buildpack")
.id("test-application-summary-id")
.instanceDetail(InstanceDetail.builder()
.index("instance-0")
.since(new Date(1000))
.state("test-application-instance-info-state")
.build())
.lastUploaded(new Date(0))
.name("test-application-summary-name")
.requestedState("test-application-summary-state")
.stack("test-stack-entity-name")
.url("test-route-host.test-domain-name")
.build())
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void getWithNoInstances() {
requestApplications(this.cloudFoundryClient, "test-app", TEST_SPACE_ID, "test-metadata-id");
requestApplicationStatistics(this.cloudFoundryClient, "test-metadata-id");
requestStack(this.cloudFoundryClient, "test-application-stackId");
requestApplicationSummary(this.cloudFoundryClient, "test-metadata-id");
requestApplicationNoInstances(this.cloudFoundryClient, "test-metadata-id");
this.applications
.get(GetApplicationRequest.builder()
.name("test-app")
.build())
.as(StepVerifier::create)
.expectNext(fill(ApplicationDetail.builder())
.buildpack("test-application-summary-buildpack")
.id("test-application-summary-id")
.lastUploaded(new Date(0))
.name("test-application-summary-name")
.requestedState("test-application-summary-state")
.stack("test-stack-entity-name")
.url("test-route-host.test-domain-name")
.build())
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void getWithNullStats() {
requestApplications(this.cloudFoundryClient, "test-app", TEST_SPACE_ID, "test-metadata-id");
requestApplicationNullStats(this.cloudFoundryClient, "test-metadata-id");
requestStack(this.cloudFoundryClient, "test-application-stackId");
requestApplicationSummary(this.cloudFoundryClient, "test-metadata-id");
requestApplicationInstances(this.cloudFoundryClient, "test-metadata-id");
this.applications
.get(GetApplicationRequest.builder()
.name("test-app")
.build())
.as(StepVerifier::create)
.expectNext(fill(ApplicationDetail.builder())
.buildpack("test-application-summary-buildpack")
.id("test-application-summary-id")
.instanceDetail(InstanceDetail.builder()
.index("instance-0")
.since(new Date(1000))
.state("test-application-instance-info-state")
.build())
.lastUploaded(new Date(0))
.name("test-application-summary-name")
.requestedState("test-application-summary-state")
.stack("test-stack-entity-name")
.url("test-route-host.test-domain-name")
.build())
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void getWithNullUsage() {
requestApplications(this.cloudFoundryClient, "test-app", TEST_SPACE_ID, "test-metadata-id");
requestApplicationNullUsage(this.cloudFoundryClient, "test-metadata-id");
requestStack(this.cloudFoundryClient, "test-application-stackId");
requestApplicationSummary(this.cloudFoundryClient, "test-metadata-id");
requestApplicationInstances(this.cloudFoundryClient, "test-metadata-id");
this.applications
.get(GetApplicationRequest.builder()
.name("test-app")
.build())
.as(StepVerifier::create)
.expectNext(fill(ApplicationDetail.builder())
.buildpack("test-application-summary-buildpack")
.id("test-application-summary-id")
.instanceDetail(InstanceDetail.builder()
.index("instance-0")
.diskQuota(1L)
.memoryQuota(1L)
.since(new Date(1000))
.state("test-application-instance-info-state")
.build())
.lastUploaded(new Date(0))
.name("test-application-summary-name")
.requestedState("test-application-summary-state")
.stack("test-stack-entity-name")
.url("test-route-host.test-domain-name")
.build())
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void list() {
requestSpaceSummary(this.cloudFoundryClient, TEST_SPACE_ID);
this.applications.list()
.as(StepVerifier::create)
.expectNext(fill(ApplicationSummary.builder())
.id("test-application-summary-id")
.name("test-application-summary-name")
.requestedState("test-application-summary-state")
.build())
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void logs() {
requestApplications(this.cloudFoundryClient, "test-application-name", TEST_SPACE_ID, "test-metadata-id");
requestLogsStream(this.dopplerClient, "test-metadata-id");
this.applications
.logs(LogsRequest.builder()
.name("test-application-name")
.recent(false)
.build())
.as(StepVerifier::create)
.expectNext(fill(LogMessage.builder(), "log-message-")
.build())
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void logsNoApp() {
requestApplicationsEmpty(this.cloudFoundryClient, "test-application-name", TEST_SPACE_ID);
this.applications
.logs(LogsRequest.builder()
.name("test-application-name")
.build())
.as(StepVerifier::create)
.consumeErrorWith(t -> assertThat(t).isInstanceOf(IllegalArgumentException.class).hasMessage("Application test-application-name does not exist"))
.verify(Duration.ofSeconds(5));
}
@Test
public void logsRecent() {
requestApplications(this.cloudFoundryClient, "test-application-name", TEST_SPACE_ID, "test-metadata-id");
requestLogsRecent(this.dopplerClient, "test-metadata-id");
this.applications
.logs(LogsRequest.builder()
.name("test-application-name")
.recent(true)
.build())
.as(StepVerifier::create)
.expectNext(fill(LogMessage.builder(), "log-message-")
.build())
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void logsRecentNotSet() {
requestApplications(this.cloudFoundryClient, "test-application-name", TEST_SPACE_ID, "test-metadata-id");
requestLogsStream(this.dopplerClient, "test-metadata-id");
this.applications
.logs(LogsRequest.builder()
.name("test-application-name")
.build())
.as(StepVerifier::create)
.expectNext(fill(LogMessage.builder(), "log-message-")
.build())
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void pushDocker() {
requestApplicationsEmpty(this.cloudFoundryClient, "test-name", TEST_SPACE_ID);
requestCreateDockerApplication(this.cloudFoundryClient, PushApplicationRequest.builder()
.dockerImage("cloudfoundry/lattice-app")
.domain("test-shared-domain")
.name("test-name")
.build(), TEST_SPACE_ID, null, "test-application-id");
requestSpace(this.cloudFoundryClient, TEST_SPACE_ID, TEST_ORGANIZATION_ID);
requestPrivateDomainNotFound(this.cloudFoundryClient, "test-shared-domain", TEST_ORGANIZATION_ID);
requestPrivateDomainsEmpty(this.cloudFoundryClient, TEST_ORGANIZATION_ID);
requestSharedDomain(this.cloudFoundryClient, "test-shared-domain", "test-shared-domain-id");
requestSharedDomains(this.cloudFoundryClient, "test-shared-domain", "test-shared-domain-id");
requestGetSharedDomain(this.cloudFoundryClient, "test-shared-domain-id");
requestRoutesEmpty(this.cloudFoundryClient, "test-shared-domain-id", "test-name", null);
requestCreateRoute(this.cloudFoundryClient, "test-shared-domain-id", "test-name", null, TEST_SPACE_ID, "test-route-id");
requestAssociateRoute(this.cloudFoundryClient, "test-application-id", "test-route-id");
requestUpdateApplicationState(this.cloudFoundryClient, "test-application-id", "STOPPED");
requestUpdateApplicationState(this.cloudFoundryClient, "test-application-id", "STARTED");
requestGetApplication(this.cloudFoundryClient, "test-application-id");
requestApplicationInstancesRunning(this.cloudFoundryClient, "test-application-id");
this.applications
.push(PushApplicationRequest.builder()
.dockerImage("cloudfoundry/lattice-app")
.domain("test-shared-domain")
.name("test-name")
.build())
.as(StepVerifier::create)
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void pushDomainNotFound() throws IOException {
Path testApplication = new ClassPathResource("test-application.zip").getFile().toPath();
requestApplicationsEmpty(this.cloudFoundryClient, "test-name", TEST_SPACE_ID);
requestCreateApplication(this.cloudFoundryClient, ApplicationManifest.builder()
.path(testApplication)
.domain("test-shared-domain")
.name("test-name")
.build(), TEST_SPACE_ID, null, "test-application-id");
requestSpace(this.cloudFoundryClient, TEST_SPACE_ID, TEST_ORGANIZATION_ID);
requestPrivateDomainsEmpty(this.cloudFoundryClient, TEST_ORGANIZATION_ID);
requestSharedDomainsEmpty(this.cloudFoundryClient);
requestListMatchingResources(this.cloudFoundryClient, Arrays.asList(new ResourceMatchingUtils.ArtifactMetadata("da39a3ee5e6b4b0d3255bfef95601890afd80709", "Staticfile", "100644", 0),
new ResourceMatchingUtils.ArtifactMetadata("45044a6ddbfe11415a8f8a6219de68a2c66b496b", "index.html", "100644", 178)));
this.applications
.push(PushApplicationRequest.builder()
.path(testApplication)
.domain("test-shared-domain")
.name("test-name")
.build())
.as(StepVerifier::create)
.consumeErrorWith(t -> assertThat(t).isInstanceOf(IllegalArgumentException.class).hasMessage("The route test-shared-domain did not match any existing domains"))
.verify(Duration.ofSeconds(5));
}
@Test
public void pushExistingApplication() throws IOException {
Path testApplication = new ClassPathResource("test-application.zip").getFile().toPath();
requestApplications(this.cloudFoundryClient, "test-name", TEST_SPACE_ID, "test-application-id");
requestUpdateApplication(this.cloudFoundryClient, "test-application-id", ApplicationManifest.builder()
.path(testApplication)
.environmentVariable("test-var", "test-value")
.domain("test-shared-domain")
.name("test-name")
.build(), null);
requestSpace(this.cloudFoundryClient, TEST_SPACE_ID, TEST_ORGANIZATION_ID);
requestPrivateDomainsEmpty(this.cloudFoundryClient, TEST_ORGANIZATION_ID);
requestSharedDomains(this.cloudFoundryClient, "test-shared-domain", "test-shared-domain-id");
requestRoutesEmpty(this.cloudFoundryClient, "test-shared-domain-id", "test-name", null);
requestListMatchingResources(this.cloudFoundryClient, Arrays.asList(new ResourceMatchingUtils.ArtifactMetadata("da39a3ee5e6b4b0d3255bfef95601890afd80709", "Staticfile", "100644", 0),
new ResourceMatchingUtils.ArtifactMetadata("45044a6ddbfe11415a8f8a6219de68a2c66b496b", "index.html", "100644", 178)));
requestCreateRoute(this.cloudFoundryClient, "test-shared-domain-id", "test-name", null, TEST_SPACE_ID, "test-route-id");
requestAssociateRoute(this.cloudFoundryClient, "test-application-id", "test-route-id");
requestUpload(this.cloudFoundryClient, "test-application-id", testApplication, "test-job-id");
requestJobSuccess(this.cloudFoundryClient, "test-job-entity-id");
requestUpdateApplicationState(this.cloudFoundryClient, "test-application-id", "STOPPED");
requestUpdateApplicationState(this.cloudFoundryClient, "test-application-id", "STARTED");
requestGetApplication(this.cloudFoundryClient, "test-application-id");
requestApplicationInstancesRunning(this.cloudFoundryClient, "test-application-id");
this.applications
.push(PushApplicationRequest.builder()
.path(testApplication)
.domain("test-shared-domain")
.name("test-name")
.build())
.as(StepVerifier::create)
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void pushExistingApplicationWithEnvironmentVariables() throws IOException {
Path testApplication = new ClassPathResource("test-application.zip").getFile().toPath();
requestApplications(this.cloudFoundryClient, "test-name", TEST_SPACE_ID, "test-application-id", Collections.singletonMap("test-key-1", "test-value-1"));
requestUpdateApplication(this.cloudFoundryClient, "test-application-id", ApplicationManifest.builder()
.path(testApplication)
.domain("test-shared-domain")
.environmentVariable("test-key-1", "test-value-1")
.environmentVariable("test-key-2", "test-value-2")
.name("test-name")
.build(), null);
requestSpace(this.cloudFoundryClient, TEST_SPACE_ID, TEST_ORGANIZATION_ID);
requestPrivateDomainsEmpty(this.cloudFoundryClient, TEST_ORGANIZATION_ID);
requestSharedDomains(this.cloudFoundryClient, "test-shared-domain", "test-shared-domain-id");
requestRoutesEmpty(this.cloudFoundryClient, "test-shared-domain-id", "test-name", null);
requestListMatchingResources(this.cloudFoundryClient, Arrays.asList(new ResourceMatchingUtils.ArtifactMetadata("da39a3ee5e6b4b0d3255bfef95601890afd80709", "Staticfile", "100644", 0),
new ResourceMatchingUtils.ArtifactMetadata("45044a6ddbfe11415a8f8a6219de68a2c66b496b", "index.html", "100644", 178)));
requestCreateRoute(this.cloudFoundryClient, "test-shared-domain-id", "test-name", null, TEST_SPACE_ID, "test-route-id");
requestAssociateRoute(this.cloudFoundryClient, "test-application-id", "test-route-id");
requestUpload(this.cloudFoundryClient, "test-application-id", testApplication, "test-job-id");
requestJobSuccess(this.cloudFoundryClient, "test-job-entity-id");
requestUpdateApplicationState(this.cloudFoundryClient, "test-application-id", "STOPPED");
requestUpdateApplicationState(this.cloudFoundryClient, "test-application-id", "STARTED");
requestGetApplication(this.cloudFoundryClient, "test-application-id");
requestApplicationInstancesRunning(this.cloudFoundryClient, "test-application-id");
this.applications
.pushManifest(PushApplicationManifestRequest.builder()
.manifest(ApplicationManifest.builder()
.path(testApplication)
.domain("test-shared-domain")
.environmentVariable("test-key-2", "test-value-2")
.name("test-name")
.build())
.build())
.as(StepVerifier::create)
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void pushExistingRouteWithHost() throws IOException {
Path testApplication = new ClassPathResource("test-application.zip").getFile().toPath();
requestApplicationsEmpty(this.cloudFoundryClient, "test-name", TEST_SPACE_ID);
requestCreateApplication(this.cloudFoundryClient, ApplicationManifest.builder()
.path(testApplication)
.domain("test-shared-domain")
.host("test-host")
.name("test-name")
.build(), TEST_SPACE_ID, null, "test-application-id");
requestSpace(this.cloudFoundryClient, TEST_SPACE_ID, TEST_ORGANIZATION_ID);
requestPrivateDomainsEmpty(this.cloudFoundryClient, TEST_ORGANIZATION_ID);
requestSharedDomains(this.cloudFoundryClient, "test-shared-domain", "test-shared-domain-id");
requestRoutes(this.cloudFoundryClient, "test-shared-domain-id", "test-host", null, "test-route-id");
requestListMatchingResources(this.cloudFoundryClient, Arrays.asList(new ResourceMatchingUtils.ArtifactMetadata("da39a3ee5e6b4b0d3255bfef95601890afd80709", "Staticfile", "100644", 0),
new ResourceMatchingUtils.ArtifactMetadata("45044a6ddbfe11415a8f8a6219de68a2c66b496b", "index.html", "100644", 178)));
requestAssociateRoute(this.cloudFoundryClient, "test-application-id", "test-route-id");
requestUpload(this.cloudFoundryClient, "test-application-id", testApplication, "test-job-id");
requestJobSuccess(this.cloudFoundryClient, "test-job-entity-id");
requestUpdateApplicationState(this.cloudFoundryClient, "test-application-id", "STOPPED");
requestUpdateApplicationState(this.cloudFoundryClient, "test-application-id", "STARTED");
requestGetApplication(this.cloudFoundryClient, "test-application-id");
requestApplicationInstancesRunning(this.cloudFoundryClient, "test-application-id");
this.applications
.push(PushApplicationRequest.builder()
.path(testApplication)
.domain("test-shared-domain")
.host("test-host")
.name("test-name")
.build())
.as(StepVerifier::create)
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void pushExistingRouteWithNoHost() throws IOException {
Path testApplication = new ClassPathResource("test-application.zip").getFile().toPath();
requestApplicationsEmpty(this.cloudFoundryClient, "test-name", TEST_SPACE_ID);
requestCreateApplication(this.cloudFoundryClient, ApplicationManifest.builder()
.path(testApplication)
.domain("test-shared-domain")
.noHostname(true)
.name("test-name")
.build(), TEST_SPACE_ID, null, "test-application-id");
requestSpace(this.cloudFoundryClient, TEST_SPACE_ID, TEST_ORGANIZATION_ID);
requestPrivateDomainsEmpty(this.cloudFoundryClient, TEST_ORGANIZATION_ID);
requestSharedDomains(this.cloudFoundryClient, "test-shared-domain", "test-shared-domain-id");
requestRoutes(this.cloudFoundryClient, "test-shared-domain-id", "test-name", null, "test-route-id");
requestListMatchingResources(this.cloudFoundryClient, Arrays.asList(new ResourceMatchingUtils.ArtifactMetadata("da39a3ee5e6b4b0d3255bfef95601890afd80709", "Staticfile", "100644", 0),
new ResourceMatchingUtils.ArtifactMetadata("45044a6ddbfe11415a8f8a6219de68a2c66b496b", "index.html", "100644", 178)));
requestAssociateRoute(this.cloudFoundryClient, "test-application-id", "test-route-id");
requestUpload(this.cloudFoundryClient, "test-application-id", testApplication, "test-job-id");
requestJobSuccess(this.cloudFoundryClient, "test-job-entity-id");
requestUpdateApplicationState(this.cloudFoundryClient, "test-application-id", "STOPPED");
requestUpdateApplicationState(this.cloudFoundryClient, "test-application-id", "STARTED");
requestGetApplication(this.cloudFoundryClient, "test-application-id");
requestApplicationInstancesRunning(this.cloudFoundryClient, "test-application-id");
this.applications
.push(PushApplicationRequest.builder()
.path(testApplication)
.domain("test-shared-domain")
.noHostname(true)
.name("test-name")
.build())
.as(StepVerifier::create)
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void pushInvalidStack() throws IOException {
Path testApplication = new ClassPathResource("test-application.zip").getFile().toPath();
requestSpace(this.cloudFoundryClient, TEST_SPACE_ID, TEST_ORGANIZATION_ID);
requestPrivateDomainsEmpty(this.cloudFoundryClient, TEST_ORGANIZATION_ID);
requestSharedDomains(this.cloudFoundryClient, "test-shared-domain", "test-shared-domain-id");
requestStackIdEmpty(this.cloudFoundryClient, "invalid-stack");
this.applications
.push(PushApplicationRequest.builder()
.path(testApplication)
.name("test-name")
.stack("invalid-stack")
.build())
.as(StepVerifier::create)
.consumeErrorWith(t -> assertThat(t).isInstanceOf(IllegalArgumentException.class).hasMessage("Stack invalid-stack does not exist"))
.verify(Duration.ofSeconds(5));
}
@Test
public void pushMultipleRoutes() throws IOException {
Path testApplication = new ClassPathResource("test-application.zip").getFile().toPath();
requestSpace(this.cloudFoundryClient, TEST_SPACE_ID, TEST_ORGANIZATION_ID);
requestPrivateDomainsEmpty(this.cloudFoundryClient, TEST_ORGANIZATION_ID);
requestSharedDomains(this.cloudFoundryClient, "test-shared-domain", "test-shared-domain-id");
requestApplicationsEmpty(this.cloudFoundryClient, "test-name", TEST_SPACE_ID);
requestCreateApplication(this.cloudFoundryClient, ApplicationManifest.builder()
.path(testApplication)
.domain("test-shared-domain")
.name("test-name")
.build(), TEST_SPACE_ID, null, "test-application-id");
requestListMatchingResources(this.cloudFoundryClient, Arrays.asList(new ResourceMatchingUtils.ArtifactMetadata("da39a3ee5e6b4b0d3255bfef95601890afd80709", "Staticfile", "100644", 0),
new ResourceMatchingUtils.ArtifactMetadata("45044a6ddbfe11415a8f8a6219de68a2c66b496b", "index.html", "100644", 178)));
requestRoutesEmpty(this.cloudFoundryClient, "test-shared-domain-id", "test1", null);
requestCreateRoute(this.cloudFoundryClient, "test-shared-domain-id", "test1", null, TEST_SPACE_ID, "test-route-id");
requestRoutesEmpty(this.cloudFoundryClient, "test-shared-domain-id", "test2", null);
requestCreateRoute(this.cloudFoundryClient, "test-shared-domain-id", "test2", null, TEST_SPACE_ID, "test-route-id");
requestAssociateRoute(this.cloudFoundryClient, "test-application-id", "test-route-id");
requestUpload(this.cloudFoundryClient, "test-application-id", testApplication, "test-job-id");
requestJobSuccess(this.cloudFoundryClient, "test-job-entity-id");
requestUpdateApplicationState(this.cloudFoundryClient, "test-application-id", "STOPPED");
requestUpdateApplicationState(this.cloudFoundryClient, "test-application-id", "STARTED");
requestGetApplication(this.cloudFoundryClient, "test-application-id");
requestApplicationInstancesRunning(this.cloudFoundryClient, "test-application-id");
this.applications
.pushManifest(PushApplicationManifestRequest.builder()
.manifest(ApplicationManifest.builder()
.path(testApplication)
.name("test-name")
.route(Route.builder()
.route("test1.test-shared-domain-id")
.build())
.route(Route.builder()
.route("test2.test-shared-domain-id")
.build())
.build())
.build())
.as(StepVerifier::create)
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void pushNewApplication() throws IOException {
Path testApplication = new ClassPathResource("test-application.zip").getFile().toPath();
requestApplicationsEmpty(this.cloudFoundryClient, "test-name", TEST_SPACE_ID);
requestCreateApplication(this.cloudFoundryClient, ApplicationManifest.builder()
.path(testApplication)
.domain("test-shared-domain")
.name("test-name")
.build(), TEST_SPACE_ID, null, "test-application-id");
requestSpace(this.cloudFoundryClient, TEST_SPACE_ID, TEST_ORGANIZATION_ID);
requestListMatchingResources(this.cloudFoundryClient, Arrays.asList(new ResourceMatchingUtils.ArtifactMetadata("da39a3ee5e6b4b0d3255bfef95601890afd80709", "Staticfile", "100644", 0),
new ResourceMatchingUtils.ArtifactMetadata("45044a6ddbfe11415a8f8a6219de68a2c66b496b", "index.html", "100644", 178)));
requestPrivateDomainsEmpty(this.cloudFoundryClient, TEST_ORGANIZATION_ID);
requestSharedDomains(this.cloudFoundryClient, "test-shared-domain", "test-shared-domain-id");
requestRoutesEmpty(this.cloudFoundryClient, "test-shared-domain-id", "test-name", null);
requestCreateRoute(this.cloudFoundryClient, "test-shared-domain-id", "test-name", null, TEST_SPACE_ID, "test-route-id");
requestAssociateRoute(this.cloudFoundryClient, "test-application-id", "test-route-id");
requestUpload(this.cloudFoundryClient, "test-application-id", testApplication, "test-job-id");
requestJobSuccess(this.cloudFoundryClient, "test-job-entity-id");
requestUpdateApplicationState(this.cloudFoundryClient, "test-application-id", "STOPPED");
requestUpdateApplicationState(this.cloudFoundryClient, "test-application-id", "STARTED");
requestGetApplication(this.cloudFoundryClient, "test-application-id");
requestApplicationInstancesRunning(this.cloudFoundryClient, "test-application-id");
this.applications
.push(PushApplicationRequest.builder()
.path(testApplication)
.domain("test-shared-domain")
.name("test-name")
.build())
.as(StepVerifier::create)
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void pushNewApplicationWithEnvironmentVariables() throws IOException {
Path testApplication = new ClassPathResource("test-application.zip").getFile().toPath();
requestApplicationsEmpty(this.cloudFoundryClient, "test-name", TEST_SPACE_ID);
requestCreateApplication(this.cloudFoundryClient, ApplicationManifest.builder()
.path(testApplication)
.environmentVariable("test-key", "test-value")
.domain("test-shared-domain")
.name("test-name")
.build(), TEST_SPACE_ID, null, "test-application-id");
requestSpace(this.cloudFoundryClient, TEST_SPACE_ID, TEST_ORGANIZATION_ID);
requestListMatchingResources(this.cloudFoundryClient, Arrays.asList(new ResourceMatchingUtils.ArtifactMetadata("da39a3ee5e6b4b0d3255bfef95601890afd80709", "Staticfile", "100644", 0),
new ResourceMatchingUtils.ArtifactMetadata("45044a6ddbfe11415a8f8a6219de68a2c66b496b", "index.html", "100644", 178)));
requestPrivateDomainsEmpty(this.cloudFoundryClient, TEST_ORGANIZATION_ID);
requestSharedDomains(this.cloudFoundryClient, "test-shared-domain", "test-shared-domain-id");
requestRoutesEmpty(this.cloudFoundryClient, "test-shared-domain-id", "test-name", null);
requestCreateRoute(this.cloudFoundryClient, "test-shared-domain-id", "test-name", null, TEST_SPACE_ID, "test-route-id");
requestAssociateRoute(this.cloudFoundryClient, "test-application-id", "test-route-id");
requestUpload(this.cloudFoundryClient, "test-application-id", testApplication, "test-job-id");
requestJobSuccess(this.cloudFoundryClient, "test-job-entity-id");
requestUpdateApplicationState(this.cloudFoundryClient, "test-application-id", "STOPPED");
requestUpdateApplicationState(this.cloudFoundryClient, "test-application-id", "STARTED");
requestGetApplication(this.cloudFoundryClient, "test-application-id");
requestApplicationInstancesRunning(this.cloudFoundryClient, "test-application-id");
this.applications
.pushManifest(PushApplicationManifestRequest.builder()
.manifest(ApplicationManifest.builder()
.path(testApplication)
.domain("test-shared-domain")
.environmentVariable("test-key", "test-value")
.name("test-name")
.build())
.build())
.as(StepVerifier::create)
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void pushNewRouteWithHost() throws IOException {
Path testApplication = new ClassPathResource("test-application.zip").getFile().toPath();
requestApplicationsEmpty(this.cloudFoundryClient, "test-name", TEST_SPACE_ID);
requestCreateApplication(this.cloudFoundryClient, ApplicationManifest.builder()
.path(testApplication)
.domain("test-shared-domain")
.host("test-host")
.name("test-name")
.build(), TEST_SPACE_ID, null, "test-application-id");
requestSpace(this.cloudFoundryClient, TEST_SPACE_ID, TEST_ORGANIZATION_ID);
requestPrivateDomainsEmpty(this.cloudFoundryClient, TEST_ORGANIZATION_ID);
requestSharedDomains(this.cloudFoundryClient, "test-shared-domain", "test-shared-domain-id");
requestRoutesEmpty(this.cloudFoundryClient, "test-shared-domain-id", "test-host", null);
requestListMatchingResources(this.cloudFoundryClient, Arrays.asList(new ResourceMatchingUtils.ArtifactMetadata("da39a3ee5e6b4b0d3255bfef95601890afd80709", "Staticfile", "100644", 0),
new ResourceMatchingUtils.ArtifactMetadata("45044a6ddbfe11415a8f8a6219de68a2c66b496b", "index.html", "100644", 178)));
requestCreateRoute(this.cloudFoundryClient, "test-shared-domain-id", "test-host", null, TEST_SPACE_ID, "test-route-id");
requestAssociateRoute(this.cloudFoundryClient, "test-application-id", "test-route-id");
requestUpload(this.cloudFoundryClient, "test-application-id", testApplication, "test-job-id");
requestJobSuccess(this.cloudFoundryClient, "test-job-entity-id");
requestUpdateApplicationState(this.cloudFoundryClient, "test-application-id", "STOPPED");
requestUpdateApplicationState(this.cloudFoundryClient, "test-application-id", "STARTED");
requestGetApplication(this.cloudFoundryClient, "test-application-id");
requestApplicationInstancesRunning(this.cloudFoundryClient, "test-application-id");
this.applications
.push(PushApplicationRequest.builder()
.path(testApplication)
.domain("test-shared-domain")
.host("test-host")
.name("test-name")
.build())
.as(StepVerifier::create)
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void pushNewRouteWithNoHost() throws IOException {
Path testApplication = new ClassPathResource("test-application.zip").getFile().toPath();
requestApplicationsEmpty(this.cloudFoundryClient, "test-name", TEST_SPACE_ID);
requestCreateApplication(this.cloudFoundryClient, ApplicationManifest.builder()
.path(testApplication)
.domain("test-shared-domain")
.noHostname(true)
.name("test-name")
.build(), TEST_SPACE_ID, null, "test-application-id");
requestSpace(this.cloudFoundryClient, TEST_SPACE_ID, TEST_ORGANIZATION_ID);
requestPrivateDomainsEmpty(this.cloudFoundryClient, TEST_ORGANIZATION_ID);
requestSharedDomains(this.cloudFoundryClient, "test-shared-domain", "test-shared-domain-id");
requestRoutesEmpty(this.cloudFoundryClient, "test-shared-domain-id", "test-name", null);
requestListMatchingResources(this.cloudFoundryClient, Arrays.asList(new ResourceMatchingUtils.ArtifactMetadata("da39a3ee5e6b4b0d3255bfef95601890afd80709", "Staticfile", "100644", 0),
new ResourceMatchingUtils.ArtifactMetadata("45044a6ddbfe11415a8f8a6219de68a2c66b496b", "index.html", "100644", 178)));
requestCreateRoute(this.cloudFoundryClient, "test-shared-domain-id", "test-name", null, TEST_SPACE_ID, "test-route-id");
requestAssociateRoute(this.cloudFoundryClient, "test-application-id", "test-route-id");
requestUpload(this.cloudFoundryClient, "test-application-id", testApplication, "test-job-id");
requestJobSuccess(this.cloudFoundryClient, "test-job-entity-id");
requestUpdateApplicationState(this.cloudFoundryClient, "test-application-id", "STOPPED");
requestUpdateApplicationState(this.cloudFoundryClient, "test-application-id", "STARTED");
requestGetApplication(this.cloudFoundryClient, "test-application-id");
requestApplicationInstancesRunning(this.cloudFoundryClient, "test-application-id");
this.applications
.push(PushApplicationRequest.builder()
.path(testApplication)
.domain("test-shared-domain")
.noHostname(true)
.name("test-name")
.build())
.as(StepVerifier::create)
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void pushNoDomainNoneFound() throws IOException {
Path testApplication = new ClassPathResource("test-application.zip").getFile().toPath();
requestApplicationsEmpty(this.cloudFoundryClient, "test-name", TEST_SPACE_ID);
requestCreateApplication(this.cloudFoundryClient, ApplicationManifest.builder()
.path(testApplication)
.name("test-name")
.build(), TEST_SPACE_ID, null, "test-application-id");
requestSpace(this.cloudFoundryClient, TEST_SPACE_ID, TEST_ORGANIZATION_ID);
requestPrivateDomainsEmpty(this.cloudFoundryClient, TEST_ORGANIZATION_ID);
requestSharedDomainsEmpty(this.cloudFoundryClient);
requestListMatchingResources(this.cloudFoundryClient, Arrays.asList(new ResourceMatchingUtils.ArtifactMetadata("da39a3ee5e6b4b0d3255bfef95601890afd80709", "Staticfile", "100644", 0),
new ResourceMatchingUtils.ArtifactMetadata("45044a6ddbfe11415a8f8a6219de68a2c66b496b", "index.html", "100644", 178)));
requestApplicationRoutesEmpty(this.cloudFoundryClient, "test-application-id");
this.applications
.push(PushApplicationRequest.builder()
.path(testApplication)
.name("test-name")
.build())
.as(StepVerifier::create)
.consumeErrorWith(t -> assertThat(t).isInstanceOf(IllegalArgumentException.class).hasMessage("No default domain found"))
.verify(Duration.ofSeconds(5));
}
@Test
public void pushNoDomainPrivate() throws IOException {
Path testApplication = new ClassPathResource("test-application.zip").getFile().toPath();
requestApplicationsEmpty(this.cloudFoundryClient, "test-name", TEST_SPACE_ID);
requestCreateApplication(this.cloudFoundryClient, ApplicationManifest.builder()
.path(testApplication)
.name("test-name")
.build(), TEST_SPACE_ID, null, "test-application-id");
requestSpace(this.cloudFoundryClient, TEST_SPACE_ID, TEST_ORGANIZATION_ID);
requestPrivateDomains(this.cloudFoundryClient, TEST_ORGANIZATION_ID, "test-private-domain-id");
requestSharedDomainsEmpty(this.cloudFoundryClient);
requestListMatchingResources(this.cloudFoundryClient, Arrays.asList(new ResourceMatchingUtils.ArtifactMetadata("da39a3ee5e6b4b0d3255bfef95601890afd80709", "Staticfile", "100644", 0),
new ResourceMatchingUtils.ArtifactMetadata("45044a6ddbfe11415a8f8a6219de68a2c66b496b", "index.html", "100644", 178)));
requestApplicationRoutesEmpty(this.cloudFoundryClient, "test-application-id");
this.applications
.push(PushApplicationRequest.builder()
.path(testApplication)
.name("test-name")
.build())
.as(StepVerifier::create)
.consumeErrorWith(t -> assertThat(t).isInstanceOf(IllegalArgumentException.class).hasMessage("No default domain found"))
.verify(Duration.ofSeconds(5));
}
@Test
public void pushNoDomainShared() throws IOException {
Path testApplication = new ClassPathResource("test-application.zip").getFile().toPath();
requestApplicationsEmpty(this.cloudFoundryClient, "test-name", TEST_SPACE_ID);
requestCreateApplication(this.cloudFoundryClient, ApplicationManifest.builder()
.path(testApplication)
.name("test-name")
.build(), TEST_SPACE_ID, null, "test-application-id");
requestSpace(this.cloudFoundryClient, TEST_SPACE_ID, TEST_ORGANIZATION_ID);
requestPrivateDomainsEmpty(this.cloudFoundryClient, TEST_ORGANIZATION_ID);
requestSharedDomains(this.cloudFoundryClient, "test-shared-domain", "test-shared-domain-id");
requestRoutesEmpty(this.cloudFoundryClient, "test-shared-domain-id", "test-name", null);
requestListMatchingResources(this.cloudFoundryClient, Arrays.asList(new ResourceMatchingUtils.ArtifactMetadata("da39a3ee5e6b4b0d3255bfef95601890afd80709", "Staticfile", "100644", 0),
new ResourceMatchingUtils.ArtifactMetadata("45044a6ddbfe11415a8f8a6219de68a2c66b496b", "index.html", "100644", 178)));
requestApplicationRoutesEmpty(this.cloudFoundryClient, "test-application-id");
requestCreateRoute(this.cloudFoundryClient, "test-shared-domain-id", "test-name", null, TEST_SPACE_ID, "test-route-id");
requestAssociateRoute(this.cloudFoundryClient, "test-application-id", "test-route-id");
requestUpload(this.cloudFoundryClient, "test-application-id", testApplication, "test-job-id");
requestJobSuccess(this.cloudFoundryClient, "test-job-entity-id");
requestUpdateApplicationState(this.cloudFoundryClient, "test-application-id", "STOPPED");
requestUpdateApplicationState(this.cloudFoundryClient, "test-application-id", "STARTED");
requestGetApplication(this.cloudFoundryClient, "test-application-id");
requestApplicationInstancesRunning(this.cloudFoundryClient, "test-application-id");
this.applications
.push(PushApplicationRequest.builder()
.path(testApplication)
.name("test-name")
.build())
.as(StepVerifier::create)
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void pushNoHostnameFlag() throws IOException {
Path testApplication = new ClassPathResource("test-application.zip").getFile().toPath();
requestSpace(this.cloudFoundryClient, TEST_SPACE_ID, TEST_ORGANIZATION_ID);
requestPrivateDomainsEmpty(this.cloudFoundryClient, TEST_ORGANIZATION_ID);
requestSharedDomains(this.cloudFoundryClient, "test-shared-domain", "test-shared-domain-id");
requestApplicationsEmpty(this.cloudFoundryClient, "test-name", TEST_SPACE_ID);
requestCreateApplication(this.cloudFoundryClient, ApplicationManifest.builder()
.path(testApplication)
.domain("test-shared-domain")
.name("test-name")
.build(), TEST_SPACE_ID, null, "test-application-id");
requestListMatchingResources(this.cloudFoundryClient, Arrays.asList(new ResourceMatchingUtils.ArtifactMetadata("da39a3ee5e6b4b0d3255bfef95601890afd80709", "Staticfile", "100644", 0),
new ResourceMatchingUtils.ArtifactMetadata("45044a6ddbfe11415a8f8a6219de68a2c66b496b", "index.html", "100644", 178)));
requestApplicationRoutesEmpty(this.cloudFoundryClient, "test-application-id");
requestRoutesEmpty(this.cloudFoundryClient, "test-shared-domain-id", null, null);
requestCreateRoute(this.cloudFoundryClient, "test-shared-domain-id", null, null, TEST_SPACE_ID, "test-route-id");
requestAssociateRoute(this.cloudFoundryClient, "test-application-id", "test-route-id");
requestUpload(this.cloudFoundryClient, "test-application-id", testApplication, "test-job-id");
requestJobSuccess(this.cloudFoundryClient, "test-job-entity-id");
requestUpdateApplicationState(this.cloudFoundryClient, "test-application-id", "STOPPED");
requestUpdateApplicationState(this.cloudFoundryClient, "test-application-id", "STARTED");
requestGetApplication(this.cloudFoundryClient, "test-application-id");
requestApplicationInstancesRunning(this.cloudFoundryClient, "test-application-id");
this.applications
.pushManifest(PushApplicationManifestRequest.builder()
.manifest(ApplicationManifest.builder()
.path(testApplication)
.name("test-name")
.noHostname(true)
.build())
.build())
.as(StepVerifier::create)
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void pushNoRoute() throws IOException {
Path testApplication = new ClassPathResource("test-application.zip").getFile().toPath();
requestApplicationsEmpty(this.cloudFoundryClient, "test-name", TEST_SPACE_ID);
requestCreateApplication(this.cloudFoundryClient, ApplicationManifest.builder()
.path(testApplication)
.noRoute(true)
.name("test-name")
.build(), TEST_SPACE_ID, null, "test-application-id");
requestSpace(this.cloudFoundryClient, TEST_SPACE_ID, TEST_ORGANIZATION_ID);
requestPrivateDomainsEmpty(this.cloudFoundryClient, TEST_ORGANIZATION_ID);
requestSharedDomains(this.cloudFoundryClient, "test-shared-domain", "test-shared-domain-id");
requestListMatchingResources(this.cloudFoundryClient, Arrays.asList(new ResourceMatchingUtils.ArtifactMetadata("da39a3ee5e6b4b0d3255bfef95601890afd80709", "Staticfile", "100644", 0),
new ResourceMatchingUtils.ArtifactMetadata("45044a6ddbfe11415a8f8a6219de68a2c66b496b", "index.html", "100644", 178)));
requestApplicationRoutesEmpty(this.cloudFoundryClient, "test-application-id");
requestUpload(this.cloudFoundryClient, "test-application-id", testApplication, "test-job-id");
requestUpdateApplicationState(this.cloudFoundryClient, "test-application-id", "STOPPED");
requestUpdateApplicationState(this.cloudFoundryClient, "test-application-id", "STARTED");
requestJobSuccess(this.cloudFoundryClient, "test-job-entity-id");
requestGetApplication(this.cloudFoundryClient, "test-application-id");
requestApplicationInstancesRunning(this.cloudFoundryClient, "test-application-id");
this.applications
.push(PushApplicationRequest.builder()
.path(testApplication)
.noRoute(true)
.name("test-name")
.build())
.as(StepVerifier::create)
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void pushNoRouteFlag() throws IOException {
Path testApplication = new ClassPathResource("test-application.zip").getFile().toPath();
requestSpace(this.cloudFoundryClient, TEST_SPACE_ID, TEST_ORGANIZATION_ID);
requestPrivateDomainsEmpty(this.cloudFoundryClient, TEST_ORGANIZATION_ID);
requestSharedDomains(this.cloudFoundryClient, "test-shared-domain", "test-shared-domain-id");
requestApplicationsEmpty(this.cloudFoundryClient, "test-name", TEST_SPACE_ID);
requestCreateApplication(this.cloudFoundryClient, ApplicationManifest.builder()
.path(testApplication)
.domain("test-shared-domain")
.name("test-name")
.build(), TEST_SPACE_ID, null, "test-application-id");
requestListMatchingResources(this.cloudFoundryClient, Arrays.asList(new ResourceMatchingUtils.ArtifactMetadata("da39a3ee5e6b4b0d3255bfef95601890afd80709", "Staticfile", "100644", 0),
new ResourceMatchingUtils.ArtifactMetadata("45044a6ddbfe11415a8f8a6219de68a2c66b496b", "index.html", "100644", 178)));
requestApplicationRoutes(this.cloudFoundryClient, "test-application-id", "test-route-id");
requestRemoveApplicationRoute(this.cloudFoundryClient, "test-application-id", "test-route-id");
requestUpload(this.cloudFoundryClient, "test-application-id", testApplication, "test-job-id");
requestJobSuccess(this.cloudFoundryClient, "test-job-entity-id");
requestUpdateApplicationState(this.cloudFoundryClient, "test-application-id", "STOPPED");
requestUpdateApplicationState(this.cloudFoundryClient, "test-application-id", "STARTED");
requestGetApplication(this.cloudFoundryClient, "test-application-id");
requestApplicationInstancesRunning(this.cloudFoundryClient, "test-application-id");
this.applications
.pushManifest(PushApplicationManifestRequest.builder()
.manifest(ApplicationManifest.builder()
.path(testApplication)
.name("test-name")
.noRoute(true)
.build())
.build())
.as(StepVerifier::create)
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void pushNoStart() throws IOException {
Path testApplication = new ClassPathResource("test-application.zip").getFile().toPath();
requestApplicationsEmpty(this.cloudFoundryClient, "test-name", TEST_SPACE_ID);
requestCreateApplication(this.cloudFoundryClient, ApplicationManifest.builder()
.path(testApplication)
.name("test-name")
.build(), TEST_SPACE_ID, null, "test-application-id");
requestSpace(this.cloudFoundryClient, TEST_SPACE_ID, TEST_ORGANIZATION_ID);
requestPrivateDomainsEmpty(this.cloudFoundryClient, TEST_ORGANIZATION_ID);
requestSharedDomains(this.cloudFoundryClient, "test-shared-domain", "test-shared-domain-id");
requestRoutesEmpty(this.cloudFoundryClient, "test-shared-domain-id", "test-name", null);
requestListMatchingResources(this.cloudFoundryClient, Arrays.asList(new ResourceMatchingUtils.ArtifactMetadata("da39a3ee5e6b4b0d3255bfef95601890afd80709", "Staticfile", "100644", 0),
new ResourceMatchingUtils.ArtifactMetadata("45044a6ddbfe11415a8f8a6219de68a2c66b496b", "index.html", "100644", 178)));
requestApplicationRoutesEmpty(this.cloudFoundryClient, "test-application-id");
requestCreateRoute(this.cloudFoundryClient, "test-shared-domain-id", "test-name", null, TEST_SPACE_ID, "test-route-id");
requestAssociateRoute(this.cloudFoundryClient, "test-application-id", "test-route-id");
requestUpload(this.cloudFoundryClient, "test-application-id", testApplication, "test-job-id");
requestJobSuccess(this.cloudFoundryClient, "test-job-entity-id");
requestUpdateApplicationState(this.cloudFoundryClient, "test-application-id", "STOPPED");
this.applications
.push(PushApplicationRequest.builder()
.path(testApplication)
.name("test-name")
.noStart(true)
.build())
.as(StepVerifier::create)
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void pushPrivateDomain() throws IOException {
Path testApplication = new ClassPathResource("test-application.zip").getFile().toPath();
requestApplicationsEmpty(this.cloudFoundryClient, "test-name", TEST_SPACE_ID);
requestCreateApplication(this.cloudFoundryClient, ApplicationManifest.builder()
.path(testApplication)
.domain("test-private-domain")
.name("test-name")
.build(), TEST_SPACE_ID, null, "test-application-id");
requestSpace(this.cloudFoundryClient, TEST_SPACE_ID, TEST_ORGANIZATION_ID);
requestPrivateDomains(this.cloudFoundryClient, TEST_ORGANIZATION_ID, "test-private-domain-id");
requestSharedDomainsEmpty(this.cloudFoundryClient);
requestRoutesEmpty(this.cloudFoundryClient, "test-private-domain-id", "test-name", null);
requestListMatchingResources(this.cloudFoundryClient, Arrays.asList(new ResourceMatchingUtils.ArtifactMetadata("da39a3ee5e6b4b0d3255bfef95601890afd80709", "Staticfile", "100644", 0),
new ResourceMatchingUtils.ArtifactMetadata("45044a6ddbfe11415a8f8a6219de68a2c66b496b", "index.html", "100644", 178)));
requestCreateRoute(this.cloudFoundryClient, "test-private-domain-id", "test-name", null, TEST_SPACE_ID, "test-route-id");
requestAssociateRoute(this.cloudFoundryClient, "test-application-id", "test-route-id");
requestUpload(this.cloudFoundryClient, "test-application-id", testApplication, "test-job-id");
requestJobSuccess(this.cloudFoundryClient, "test-job-entity-id");
requestUpdateApplicationState(this.cloudFoundryClient, "test-application-id", "STOPPED");
requestUpdateApplicationState(this.cloudFoundryClient, "test-application-id", "STARTED");
requestGetApplication(this.cloudFoundryClient, "test-application-id");
requestApplicationInstancesRunning(this.cloudFoundryClient, "test-application-id");
this.applications
.push(PushApplicationRequest.builder()
.path(testApplication)
.domain("test-private-domain")
.name("test-name")
.build())
.as(StepVerifier::create)
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void pushRandomRoute() throws IOException {
Path testApplication = new ClassPathResource("test-application.zip").getFile().toPath();
requestApplicationsEmpty(this.cloudFoundryClient, "test-name", TEST_SPACE_ID);
requestCreateApplication(this.cloudFoundryClient, ApplicationManifest.builder()
.path(testApplication)
.domain("test-shared-domain")
.name("test-name")
.randomRoute(true)
.build(), TEST_SPACE_ID, null, "test-application-id");
requestSpace(this.cloudFoundryClient, TEST_SPACE_ID, TEST_ORGANIZATION_ID);
requestPrivateDomainsEmpty(this.cloudFoundryClient, TEST_ORGANIZATION_ID);
requestSharedDomains(this.cloudFoundryClient, "test-shared-domain", "test-shared-domain-id");
provideRandomWords(this.randomWords);
requestRoutesEmpty(this.cloudFoundryClient, "test-shared-domain-id", "test-name-test-adjective-test-noun", null);
requestListMatchingResources(this.cloudFoundryClient, Arrays.asList(new ResourceMatchingUtils.ArtifactMetadata("da39a3ee5e6b4b0d3255bfef95601890afd80709", "Staticfile", "100644", 0),
new ResourceMatchingUtils.ArtifactMetadata("45044a6ddbfe11415a8f8a6219de68a2c66b496b", "index.html", "100644", 178)));
requestCreateRoute(this.cloudFoundryClient, "test-shared-domain-id", "test-name-test-adjective-test-noun", null, TEST_SPACE_ID, "test-route-id");
requestAssociateRoute(this.cloudFoundryClient, "test-application-id", "test-route-id");
requestUpload(this.cloudFoundryClient, "test-application-id", testApplication, "test-job-id");
requestJobSuccess(this.cloudFoundryClient, "test-job-entity-id");
requestUpdateApplicationState(this.cloudFoundryClient, "test-application-id", "STOPPED");
requestUpdateApplicationState(this.cloudFoundryClient, "test-application-id", "STARTED");
requestGetApplication(this.cloudFoundryClient, "test-application-id");
requestApplicationInstancesRunning(this.cloudFoundryClient, "test-application-id");
this.applications
.push(PushApplicationRequest.builder()
.path(testApplication)
.domain("test-shared-domain")
.name("test-name")
.randomRoute(true)
.build())
.as(StepVerifier::create)
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void pushSharedDomain() throws IOException {
Path testApplication = new ClassPathResource("test-application.zip").getFile().toPath();
requestApplicationsEmpty(this.cloudFoundryClient, "test-name", TEST_SPACE_ID);
requestCreateApplication(this.cloudFoundryClient, ApplicationManifest.builder()
.path(testApplication)
.domain("test-shared-domain")
.name("test-name")
.build(), TEST_SPACE_ID, null, "test-application-id");
requestSpace(this.cloudFoundryClient, TEST_SPACE_ID, TEST_ORGANIZATION_ID);
requestPrivateDomainsEmpty(this.cloudFoundryClient, TEST_ORGANIZATION_ID);
requestSharedDomains(this.cloudFoundryClient, "test-shared-domain", "test-shared-domain-id");
requestRoutesEmpty(this.cloudFoundryClient, "test-shared-domain-id", "test-name", null);
requestListMatchingResources(this.cloudFoundryClient, Arrays.asList(new ResourceMatchingUtils.ArtifactMetadata("da39a3ee5e6b4b0d3255bfef95601890afd80709", "Staticfile", "100644", 0),
new ResourceMatchingUtils.ArtifactMetadata("45044a6ddbfe11415a8f8a6219de68a2c66b496b", "index.html", "100644", 178)));
requestCreateRoute(this.cloudFoundryClient, "test-shared-domain-id", "test-name", null, TEST_SPACE_ID, "test-route-id");
requestAssociateRoute(this.cloudFoundryClient, "test-application-id", "test-route-id");
requestUpload(this.cloudFoundryClient, "test-application-id", testApplication, "test-job-id");
requestJobSuccess(this.cloudFoundryClient, "test-job-entity-id");
requestUpdateApplicationState(this.cloudFoundryClient, "test-application-id", "STOPPED");
requestUpdateApplicationState(this.cloudFoundryClient, "test-application-id", "STARTED");
requestGetApplication(this.cloudFoundryClient, "test-application-id");
requestApplicationInstancesRunning(this.cloudFoundryClient, "test-application-id");
this.applications
.push(PushApplicationRequest.builder()
.path(testApplication)
.domain("test-shared-domain")
.name("test-name")
.build())
.as(StepVerifier::create)
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void pushStartFailsRunning() throws IOException {
Path testApplication = new ClassPathResource("test-application.zip").getFile().toPath();
requestApplicationsEmpty(this.cloudFoundryClient, "test-name", TEST_SPACE_ID);
requestCreateApplication(this.cloudFoundryClient, ApplicationManifest.builder()
.path(testApplication)
.domain("test-shared-domain")
.name("test-name")
.build(), TEST_SPACE_ID, null, "test-application-id");
requestSpace(this.cloudFoundryClient, TEST_SPACE_ID, TEST_ORGANIZATION_ID);
requestPrivateDomainsEmpty(this.cloudFoundryClient, TEST_ORGANIZATION_ID);
requestSharedDomains(this.cloudFoundryClient, "test-shared-domain", "test-shared-domain-id");
requestRoutesEmpty(this.cloudFoundryClient, "test-shared-domain-id", "test-name", null);
requestListMatchingResources(this.cloudFoundryClient, Arrays.asList(new ResourceMatchingUtils.ArtifactMetadata("da39a3ee5e6b4b0d3255bfef95601890afd80709", "Staticfile", "100644", 0),
new ResourceMatchingUtils.ArtifactMetadata("45044a6ddbfe11415a8f8a6219de68a2c66b496b", "index.html", "100644", 178)));
requestCreateRoute(this.cloudFoundryClient, "test-shared-domain-id", "test-name", null, TEST_SPACE_ID, "test-route-id");
requestAssociateRoute(this.cloudFoundryClient, "test-application-id", "test-route-id");
requestUpload(this.cloudFoundryClient, "test-application-id", testApplication, "test-job-id");
requestJobSuccess(this.cloudFoundryClient, "test-job-entity-id");
requestUpdateApplicationState(this.cloudFoundryClient, "test-application-id", "STOPPED");
requestUpdateApplicationState(this.cloudFoundryClient, "test-application-id", "STARTED");
requestGetApplication(this.cloudFoundryClient, "test-application-id");
requestApplicationInstancesFailingTotal(this.cloudFoundryClient, "test-application-id");
this.applications
.push(PushApplicationRequest.builder()
.path(testApplication)
.domain("test-shared-domain")
.name("test-name")
.build())
.as(StepVerifier::create)
.consumeErrorWith(t -> assertThat(t).isInstanceOf(IllegalStateException.class).hasMessage("Application test-name failed during start"))
.verify(Duration.ofSeconds(5));
}
@Test
public void pushStartFailsStaging() throws IOException {
Path testApplication = new ClassPathResource("test-application.zip").getFile().toPath();
requestApplicationsEmpty(this.cloudFoundryClient, "test-name", TEST_SPACE_ID);
requestCreateApplication(this.cloudFoundryClient, ApplicationManifest.builder()
.path(testApplication)
.domain("test-shared-domain")
.name("test-name")
.build(), TEST_SPACE_ID, null, "test-application-id");
requestSpace(this.cloudFoundryClient, TEST_SPACE_ID, TEST_ORGANIZATION_ID);
requestPrivateDomains(this.cloudFoundryClient, TEST_ORGANIZATION_ID, "test-private-domain-id");
requestSharedDomains(this.cloudFoundryClient, "test-shared-domain", "test-shared-domain-id");
requestRoutesEmpty(this.cloudFoundryClient, "test-shared-domain-id", "test-name", null);
requestListMatchingResources(this.cloudFoundryClient, Arrays.asList(new ResourceMatchingUtils.ArtifactMetadata("da39a3ee5e6b4b0d3255bfef95601890afd80709", "Staticfile", "100644", 0),
new ResourceMatchingUtils.ArtifactMetadata("45044a6ddbfe11415a8f8a6219de68a2c66b496b", "index.html", "100644", 178)));
requestCreateRoute(this.cloudFoundryClient, "test-shared-domain-id", "test-name", null, TEST_SPACE_ID, "test-route-id");
requestAssociateRoute(this.cloudFoundryClient, "test-application-id", "test-route-id");
requestUpload(this.cloudFoundryClient, "test-application-id", testApplication, "test-job-id");
requestJobSuccess(this.cloudFoundryClient, "test-job-entity-id");
requestUpdateApplicationState(this.cloudFoundryClient, "test-application-id", "STOPPED");
requestUpdateApplicationState(this.cloudFoundryClient, "test-application-id", "STARTED");
requestGetApplicationFailing(this.cloudFoundryClient, "test-application-id");
this.applications
.push(PushApplicationRequest.builder()
.path(testApplication)
.domain("test-shared-domain")
.name("test-name")
.build())
.as(StepVerifier::create)
.consumeErrorWith(t -> assertThat(t).isInstanceOf(IllegalStateException.class).hasMessage("Application test-name failed during staging"))
.verify(Duration.ofSeconds(5));
}
@Test
public void pushTcpRoute() throws IOException {
Path testApplication = new ClassPathResource("test-application.zip").getFile().toPath();
requestApplicationsEmpty(this.cloudFoundryClient, "test-name", TEST_SPACE_ID);
requestCreateApplication(this.cloudFoundryClient, ApplicationManifest.builder()
.path(testApplication)
.domain("test-tcp-domain")
.name("test-name")
.build(), TEST_SPACE_ID, null, "test-application-id");
requestListMatchingResources(this.cloudFoundryClient, Arrays.asList(new ResourceMatchingUtils.ArtifactMetadata("da39a3ee5e6b4b0d3255bfef95601890afd80709", "Staticfile", "100644", 0),
new ResourceMatchingUtils.ArtifactMetadata("45044a6ddbfe11415a8f8a6219de68a2c66b496b", "index.html", "100644", 178)));
requestSpace(this.cloudFoundryClient, TEST_SPACE_ID, TEST_ORGANIZATION_ID);
requestPrivateDomainsEmpty(this.cloudFoundryClient, TEST_ORGANIZATION_ID);
requestTcpDomains(this.cloudFoundryClient, "test-tcp-domain", "test-tcp-domain-id");
requestRoutesEmpty(this.cloudFoundryClient, "test-tcp-domain-id", null, null);
requestCreateRoute(this.cloudFoundryClient, "test-tcp-domain-id", null, null, TEST_SPACE_ID, "test-route-id");
requestAssociateRoute(this.cloudFoundryClient, "test-application-id", "test-route-id");
requestUpload(this.cloudFoundryClient, "test-application-id", testApplication, "test-job-id");
requestJobSuccess(this.cloudFoundryClient, "test-job-entity-id");
requestUpdateApplicationState(this.cloudFoundryClient, "test-application-id", "STOPPED");
requestUpdateApplicationState(this.cloudFoundryClient, "test-application-id", "STARTED");
requestGetApplication(this.cloudFoundryClient, "test-application-id");
requestApplicationInstancesRunning(this.cloudFoundryClient, "test-application-id");
this.applications
.push(PushApplicationRequest.builder()
.path(testApplication)
.domain("test-tcp-domain")
.name("test-name")
.build())
.as(StepVerifier::create)
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void pushUploadFails() throws IOException {
Path testApplication = new ClassPathResource("test-application.zip").getFile().toPath();
requestApplicationsEmpty(this.cloudFoundryClient, "test-name", TEST_SPACE_ID);
requestCreateApplication(this.cloudFoundryClient, ApplicationManifest.builder()
.path(testApplication)
.domain("test-shared-domain")
.name("test-name")
.build(), TEST_SPACE_ID, null, "test-application-id");
requestSpace(this.cloudFoundryClient, TEST_SPACE_ID, TEST_ORGANIZATION_ID);
requestPrivateDomainsEmpty(this.cloudFoundryClient, TEST_ORGANIZATION_ID);
requestSharedDomains(this.cloudFoundryClient, "test-shared-domain", "test-shared-domain-id");
requestRoutesEmpty(this.cloudFoundryClient, "test-shared-domain-id", "test-name", null);
requestListMatchingResources(this.cloudFoundryClient, Arrays.asList(new ResourceMatchingUtils.ArtifactMetadata("da39a3ee5e6b4b0d3255bfef95601890afd80709", "Staticfile", "100644", 0),
new ResourceMatchingUtils.ArtifactMetadata("45044a6ddbfe11415a8f8a6219de68a2c66b496b", "index.html", "100644", 178)));
requestCreateRoute(this.cloudFoundryClient, "test-shared-domain-id", "test-name", null, TEST_SPACE_ID, "test-route-id");
requestAssociateRoute(this.cloudFoundryClient, "test-application-id", "test-route-id");
requestUpload(this.cloudFoundryClient, "test-application-id", testApplication, "test-job-id");
requestJobFailure(this.cloudFoundryClient, "test-job-entity-id");
this.applications
.push(PushApplicationRequest.builder()
.path(testApplication)
.domain("test-shared-domain")
.name("test-name")
.build())
.as(StepVerifier::create)
.consumeErrorWith(t -> assertThat(t).isInstanceOf(ClientV2Exception.class).hasMessage("test-error-details-errorCode(1): test-error-details-description"))
.verify(Duration.ofSeconds(5));
}
@Test
public void rename() {
requestApplications(this.cloudFoundryClient, "test-app-name", TEST_SPACE_ID, "test-metadata-id");
requestUpdateApplicationRename(this.cloudFoundryClient, "test-metadata-id", "test-new-app-name");
this.applications
.rename(RenameApplicationRequest.builder()
.name("test-app-name")
.newName("test-new-app-name")
.build())
.as(StepVerifier::create)
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void renameNoApp() {
requestApplicationsEmpty(this.cloudFoundryClient, "test-app-name", TEST_SPACE_ID);
this.applications
.rename(RenameApplicationRequest.builder()
.name("test-app-name")
.newName("test-new-app-name")
.build())
.as(StepVerifier::create)
.consumeErrorWith(t -> assertThat(t).isInstanceOf(IllegalArgumentException.class).hasMessage("Application test-app-name does not exist"))
.verify(Duration.ofSeconds(5));
}
@Test
public void restage() {
requestApplications(this.cloudFoundryClient, "test-application-name", TEST_SPACE_ID, "test-metadata-id");
requestRestageApplication(this.cloudFoundryClient, "test-metadata-id");
requestGetApplication(this.cloudFoundryClient, "test-metadata-id");
requestApplicationInstancesRunning(this.cloudFoundryClient, "test-metadata-id");
this.applications
.restage(RestageApplicationRequest.builder()
.name("test-application-name")
.build())
.as(StepVerifier::create)
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void restageInvalidApplication() {
requestApplicationsEmpty(this.cloudFoundryClient, "test-application-name", TEST_SPACE_ID);
this.applications
.restage(RestageApplicationRequest.builder()
.name("test-application-name")
.build())
.as(StepVerifier::create)
.consumeErrorWith(t -> assertThat(t).isInstanceOf(IllegalArgumentException.class).hasMessage("Application test-application-name does not exist"))
.verify(Duration.ofSeconds(5));
}
@Test
public void restageStagingFailure() {
requestApplications(this.cloudFoundryClient, "test-application-name", TEST_SPACE_ID, "test-metadata-id");
requestRestageApplication(this.cloudFoundryClient, "test-metadata-id");
requestGetApplicationFailing(this.cloudFoundryClient, "test-metadata-id");
this.applications
.restage(RestageApplicationRequest.builder()
.name("test-application-name")
.build())
.as(StepVerifier::create)
.consumeErrorWith(t -> assertThat(t).isInstanceOf(IllegalStateException.class).hasMessage("Application test-application-name failed during staging"))
.verify(Duration.ofSeconds(5));
}
@Test
public void restageStartingFailurePartial() {
requestApplications(this.cloudFoundryClient, "test-application-name", TEST_SPACE_ID, "test-metadata-id");
requestRestageApplication(this.cloudFoundryClient, "test-metadata-id");
requestGetApplication(this.cloudFoundryClient, "test-metadata-id");
requestApplicationInstancesFailingPartial(this.cloudFoundryClient, "test-metadata-id");
this.applications
.restage(RestageApplicationRequest.builder()
.name("test-application-name")
.build())
.as(StepVerifier::create)
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void restageStartingFailureTotal() {
requestApplications(this.cloudFoundryClient, "test-application-name", TEST_SPACE_ID, "test-metadata-id");
requestRestageApplication(this.cloudFoundryClient, "test-metadata-id");
requestGetApplication(this.cloudFoundryClient, "test-metadata-id");
requestApplicationInstancesFailingTotal(this.cloudFoundryClient, "test-metadata-id");
this.applications
.restage(RestageApplicationRequest.builder()
.name("test-application-name")
.build())
.as(StepVerifier::create)
.consumeErrorWith(t -> assertThat(t).isInstanceOf(IllegalStateException.class).hasMessage("Application test-application-name failed during start"))
.verify(Duration.ofSeconds(5));
}
@Test
public void restageTimeout() {
requestApplications(this.cloudFoundryClient, "test-application-name", TEST_SPACE_ID, "test-metadata-id");
requestRestageApplication(this.cloudFoundryClient, "test-metadata-id");
requestGetApplicationTimeout(this.cloudFoundryClient, "test-metadata-id");
this.applications
.restage(RestageApplicationRequest.builder()
.name("test-application-name")
.stagingTimeout(Duration.ofSeconds(1))
.build())
.as(StepVerifier::create)
.consumeErrorWith(t -> assertThat(t).isInstanceOf(IllegalStateException.class).hasMessage("Application test-application-name timed out during staging"))
.verify(Duration.ofSeconds(5));
}
@Test
public void restartFailurePartial() {
requestApplicationsSpecificState(this.cloudFoundryClient, "test-app-name", TEST_SPACE_ID, "STARTED");
requestUpdateApplicationState(this.cloudFoundryClient, "test-application-id", "STOPPED");
requestUpdateApplicationState(this.cloudFoundryClient, "test-application-id", "STARTED");
requestGetApplication(this.cloudFoundryClient, "test-application-id");
requestApplicationInstancesFailingPartial(this.cloudFoundryClient, "test-application-id");
this.applications
.restart(RestartApplicationRequest.builder()
.name("test-app-name")
.build())
.as(StepVerifier::create)
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void restartFailureTotal() {
requestApplicationsSpecificState(this.cloudFoundryClient, "test-app-name", TEST_SPACE_ID, "STARTED");
requestUpdateApplicationState(this.cloudFoundryClient, "test-application-id", "STOPPED");
requestUpdateApplicationState(this.cloudFoundryClient, "test-application-id", "STARTED");
requestGetApplication(this.cloudFoundryClient, "test-application-id");
requestApplicationInstancesFailingTotal(this.cloudFoundryClient, "test-application-id");
this.applications
.restart(RestartApplicationRequest.builder()
.name("test-app-name")
.build())
.as(StepVerifier::create)
.consumeErrorWith(t -> assertThat(t).isInstanceOf(IllegalStateException.class).hasMessage("Application test-app-name failed during start"))
.verify(Duration.ofSeconds(5));
}
@Test
public void restartInstance() {
requestApplications(this.cloudFoundryClient, "test-application-name", TEST_SPACE_ID, "test-metadata-id");
requestTerminateApplicationInstance(this.cloudFoundryClient, "test-metadata-id", "0");
this.applications
.restartInstance(RestartApplicationInstanceRequest.builder()
.name("test-application-name")
.instanceIndex(0)
.build())
.as(StepVerifier::create)
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void restartNoApp() {
requestApplicationsEmpty(this.cloudFoundryClient, "test-non-existent-app-name", TEST_SPACE_ID);
this.applications
.restart(RestartApplicationRequest.builder()
.name("test-non-existent-app-name")
.build())
.as(StepVerifier::create)
.consumeErrorWith(t -> assertThat(t).isInstanceOf(IllegalArgumentException.class).hasMessage("Application test-non-existent-app-name does not exist"))
.verify(Duration.ofSeconds(5));
}
@Test
public void restartNotStartedAndNotStopped() {
requestApplicationsSpecificState(this.cloudFoundryClient, "test-app-name", TEST_SPACE_ID, "unknown-state");
requestUpdateApplicationState(this.cloudFoundryClient, "test-application-id", "STOPPED");
requestUpdateApplicationState(this.cloudFoundryClient, "test-application-id", "STARTED");
requestGetApplication(this.cloudFoundryClient, "test-application-id");
requestApplicationInstancesRunning(this.cloudFoundryClient, "test-application-id");
this.applications
.restart(RestartApplicationRequest.builder()
.name("test-app-name")
.build())
.as(StepVerifier::create)
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void restartStarted() {
requestApplicationsSpecificState(this.cloudFoundryClient, "test-app-name", TEST_SPACE_ID, "STARTED");
requestUpdateApplicationState(this.cloudFoundryClient, "test-application-id", "STOPPED");
requestUpdateApplicationState(this.cloudFoundryClient, "test-application-id", "STARTED");
requestGetApplication(this.cloudFoundryClient, "test-application-id");
requestApplicationInstancesRunning(this.cloudFoundryClient, "test-application-id");
this.applications
.restart(RestartApplicationRequest.builder()
.name("test-app-name")
.build())
.as(StepVerifier::create)
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void restartStopped() {
requestApplicationsSpecificState(this.cloudFoundryClient, "test-app-name", TEST_SPACE_ID, "STOPPED");
requestUpdateApplicationState(this.cloudFoundryClient, "test-application-id", "STARTED");
requestGetApplication(this.cloudFoundryClient, "test-application-id");
requestApplicationInstancesRunning(this.cloudFoundryClient, "test-application-id");
this.applications
.restart(RestartApplicationRequest.builder()
.name("test-app-name")
.build())
.as(StepVerifier::create)
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void scaleDiskAndInstancesNotStarted() {
requestApplicationsSpecificState(this.cloudFoundryClient, "test-app-name", TEST_SPACE_ID, "STOPPED");
requestUpdateApplicationScale(this.cloudFoundryClient, "test-application-id", 2048, 2, null);
this.applications
.scale(ScaleApplicationRequest.builder()
.name("test-app-name")
.instances(2)
.diskLimit(2048)
.build())
.as(StepVerifier::create)
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void scaleDiskAndInstancesStarted() {
requestApplicationsSpecificState(this.cloudFoundryClient, "test-app-name", TEST_SPACE_ID, "STARTED");
requestUpdateApplicationScale(this.cloudFoundryClient, "test-application-id", 2048, 2, null);
requestUpdateApplicationState(this.cloudFoundryClient, "test-application-id", "STOPPED");
requestUpdateApplicationState(this.cloudFoundryClient, "test-application-id", "STARTED");
this.applications
.scale(ScaleApplicationRequest.builder()
.name("test-app-name")
.instances(2)
.diskLimit(2048)
.build())
.as(StepVerifier::create)
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void scaleInstances() {
requestApplications(this.cloudFoundryClient, "test-app-name", TEST_SPACE_ID, "test-metadata-id");
requestUpdateApplicationScale(this.cloudFoundryClient, "test-metadata-id", null, 2, null);
this.applications
.scale(ScaleApplicationRequest.builder()
.name("test-app-name")
.instances(2)
.build())
.as(StepVerifier::create)
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void scaleInstancesNoApp() {
requestApplicationsEmpty(this.cloudFoundryClient, "test-app-name", TEST_SPACE_ID);
this.applications
.scale(ScaleApplicationRequest.builder()
.name("test-app-name")
.instances(2)
.build())
.as(StepVerifier::create)
.consumeErrorWith(t -> assertThat(t).isInstanceOf(IllegalArgumentException.class).hasMessage("Application test-app-name does not exist"))
.verify(Duration.ofSeconds(5));
}
@Test
public void scaleNoChange() {
requestApplications(this.cloudFoundryClient, "test-app-name", TEST_SPACE_ID, "test-metadata-id");
this.applications
.scale(ScaleApplicationRequest.builder()
.name("test-app-name")
.build())
.as(StepVerifier::create)
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void setEnvironmentVariable() {
requestApplications(this.cloudFoundryClient, "test-app", TEST_SPACE_ID, "test-metadata-id",
FluentMap.<String, Object>builder()
.entry("test-var", "test-value")
.entry("test-var2", "test-value2")
.build());
requestUpdateApplicationEnvironment(this.cloudFoundryClient, "test-metadata-id",
FluentMap.<String, Object>builder()
.entry("test-var", "test-value")
.entry("test-var2", "test-value2")
.entry("test-var-name", "test-var-value")
.build()
);
this.applications
.setEnvironmentVariable(SetEnvironmentVariableApplicationRequest.builder()
.name("test-app")
.variableName("test-var-name")
.variableValue("test-var-value")
.build())
.as(StepVerifier::create)
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void setEnvironmentVariableNoApp() {
requestApplicationsEmpty(this.cloudFoundryClient, "test-app", TEST_SPACE_ID);
this.applications
.setEnvironmentVariable(SetEnvironmentVariableApplicationRequest.builder()
.name("test-app")
.variableName("test-var-name")
.variableValue("test-var-value")
.build())
.as(StepVerifier::create)
.consumeErrorWith(t -> assertThat(t).isInstanceOf(IllegalArgumentException.class).hasMessage("Application test-app does not exist"))
.verify(Duration.ofSeconds(5));
}
@Test
public void setHealthCheck() {
requestApplications(this.cloudFoundryClient, "test-application-name", TEST_SPACE_ID, "test-application-id");
requestUpdateApplicationHealthCheck(this.cloudFoundryClient, "test-application-id", ApplicationHealthCheck.PORT);
this.applications
.setHealthCheck(SetApplicationHealthCheckRequest.builder()
.name("test-application-name")
.type(ApplicationHealthCheck.PORT)
.build())
.as(StepVerifier::create)
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void sshEnabled() {
requestApplications(this.cloudFoundryClient, "test-app-name", TEST_SPACE_ID, "test-metadata-id");
this.applications
.sshEnabled(ApplicationSshEnabledRequest.builder()
.name("test-app-name")
.build())
.as(StepVerifier::create)
.expectNext(true)
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void sshEnabledNoApp() {
requestApplicationsEmpty(this.cloudFoundryClient, "test-app-name", TEST_SPACE_ID);
this.applications
.sshEnabled(ApplicationSshEnabledRequest.builder()
.name("test-app-name")
.build())
.as(StepVerifier::create)
.consumeErrorWith(t -> assertThat(t).isInstanceOf(IllegalArgumentException.class).hasMessage("Application test-app-name does not exist"))
.verify(Duration.ofSeconds(5));
}
@Test
public void startApplicationFailurePartial() {
requestApplicationsSpecificState(this.cloudFoundryClient, "test-application-name", TEST_SPACE_ID, "STOPPED");
requestUpdateApplicationState(this.cloudFoundryClient, "test-application-id", "STARTED");
requestGetApplication(this.cloudFoundryClient, "test-application-id");
requestApplicationInstancesFailingPartial(this.cloudFoundryClient, "test-application-id");
this.applications
.start(StartApplicationRequest.builder()
.name("test-application-name")
.build())
.as(StepVerifier::create)
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void startApplicationFailureTotal() {
requestApplicationsSpecificState(this.cloudFoundryClient, "test-application-name", TEST_SPACE_ID, "STOPPED");
requestUpdateApplicationState(this.cloudFoundryClient, "test-application-id", "STARTED");
requestGetApplication(this.cloudFoundryClient, "test-application-id");
requestApplicationInstancesFailingTotal(this.cloudFoundryClient, "test-application-id");
this.applications
.start(StartApplicationRequest.builder()
.name("test-application-name")
.build())
.as(StepVerifier::create)
.consumeErrorWith(t -> assertThat(t).isInstanceOf(IllegalStateException.class).hasMessage("Application test-application-name failed during start"))
.verify(Duration.ofSeconds(5));
}
@Test
public void startApplicationTimeout() {
requestApplicationsSpecificState(this.cloudFoundryClient, "test-application-name", TEST_SPACE_ID, "STOPPED");
requestUpdateApplicationState(this.cloudFoundryClient, "test-application-id", "STARTED");
requestGetApplication(this.cloudFoundryClient, "test-application-id");
requestApplicationInstancesTimeout(this.cloudFoundryClient, "test-application-id");
this.applications
.start(StartApplicationRequest.builder()
.name("test-application-name")
.startupTimeout(Duration.ofSeconds(1))
.build())
.as(StepVerifier::create)
.consumeErrorWith(t -> assertThat(t).isInstanceOf(IllegalStateException.class).hasMessage("Application test-application-name timed out during start"))
.verify(Duration.ofSeconds(5));
}
@Test
public void startInvalidApplication() {
requestApplicationsEmpty(this.cloudFoundryClient, "test-application-name", TEST_SPACE_ID);
this.applications
.start(StartApplicationRequest.builder()
.name("test-application-name")
.build())
.as(StepVerifier::create)
.consumeErrorWith(t -> assertThat(t).isInstanceOf(IllegalArgumentException.class).hasMessage("Application test-application-name does not exist"))
.verify(Duration.ofSeconds(5));
}
@Test
public void startStartedApplication() {
requestApplicationsSpecificState(this.cloudFoundryClient, "test-application-name", TEST_SPACE_ID, "STARTED");
this.applications
.start(StartApplicationRequest.builder()
.name("test-application-name")
.build())
.as(StepVerifier::create)
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void startStoppedApplication() {
requestApplicationsSpecificState(this.cloudFoundryClient, "test-application-name", TEST_SPACE_ID, "STOPPED");
requestUpdateApplicationState(this.cloudFoundryClient, "test-application-id", "STARTED");
requestGetApplication(this.cloudFoundryClient, "test-application-id");
requestApplicationInstancesRunning(this.cloudFoundryClient, "test-application-id");
this.applications
.start(StartApplicationRequest.builder()
.name("test-application-name")
.build())
.as(StepVerifier::create)
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void stopInvalidApplication() {
requestApplicationsEmpty(this.cloudFoundryClient, "test-application-name", TEST_SPACE_ID);
this.applications
.stop(StopApplicationRequest.builder()
.name("test-application-name")
.build())
.as(StepVerifier::create)
.consumeErrorWith(t -> assertThat(t).isInstanceOf(IllegalArgumentException.class).hasMessage("Application test-application-name does not exist"))
.verify(Duration.ofSeconds(5));
}
@Test
public void stopStartedApplication() {
requestApplicationsSpecificState(this.cloudFoundryClient, "test-application-name", TEST_SPACE_ID, "STARTED");
requestUpdateApplicationState(this.cloudFoundryClient, "test-application-id", "STOPPED");
this.applications
.stop(StopApplicationRequest.builder()
.name("test-application-name")
.build())
.as(StepVerifier::create)
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void stopStoppedApplication() {
requestApplicationsSpecificState(this.cloudFoundryClient, "test-application-name", TEST_SPACE_ID, "STOPPED");
this.applications
.stop(StopApplicationRequest.builder()
.name("test-application-name")
.build())
.as(StepVerifier::create)
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void unsetEnvironmentVariable() {
requestApplications(this.cloudFoundryClient, "test-app", TEST_SPACE_ID, "test-metadata-id",
FluentMap.<String, Object>builder()
.entry("test-var", "test-value")
.entry("test-var2", "test-value2")
.entry("test-var-name", "test-var-value")
.build());
requestUpdateApplicationEnvironment(this.cloudFoundryClient, "test-metadata-id",
FluentMap.<String, Object>builder()
.entry("test-var2", "test-value2")
.entry("test-var-name", "test-var-value")
.build());
this.applications
.unsetEnvironmentVariable(UnsetEnvironmentVariableApplicationRequest.builder()
.name("test-app")
.variableName("test-var")
.build())
.as(StepVerifier::create)
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void unsetEnvironmentVariableNoApp() {
requestApplicationsEmpty(this.cloudFoundryClient, "test-app", TEST_SPACE_ID);
this.applications
.unsetEnvironmentVariable(UnsetEnvironmentVariableApplicationRequest.builder()
.name("test-app")
.variableName("test-var")
.build())
.as(StepVerifier::create)
.consumeErrorWith(t -> assertThat(t).isInstanceOf(IllegalArgumentException.class).hasMessage("Application test-app does not exist"))
.verify(Duration.ofSeconds(5));
}
private static void provideRandomWords(RandomWords randomWords) {
when(randomWords.getAdjective()).thenReturn("test-adjective");
when(randomWords.getNoun()).thenReturn("test-noun");
}
private static void requestApplicationEmptyInstance(CloudFoundryClient cloudFoundryClient, String applicationId) {
when(cloudFoundryClient.applicationsV2()
.instances(ApplicationInstancesRequest.builder()
.applicationId(applicationId)
.build()))
.thenReturn(Mono
.just(ApplicationInstancesResponse.builder()
.instance("instance-0", ApplicationInstanceInfo.builder()
.build())
.build()));
}
private static void requestApplicationEmptyStats(CloudFoundryClient cloudFoundryClient, String applicationId) {
when(cloudFoundryClient.applicationsV2()
.statistics(ApplicationStatisticsRequest.builder()
.applicationId(applicationId)
.build()))
.thenReturn(Mono
.just(ApplicationStatisticsResponse.builder()
.build()));
}
private static void requestApplicationEnvironment(CloudFoundryClient cloudFoundryClient, String applicationId) {
when(cloudFoundryClient.applicationsV2()
.environment(ApplicationEnvironmentRequest.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")
.build()));
}
private static void requestApplicationInstances(CloudFoundryClient cloudFoundryClient, String applicationId) {
when(cloudFoundryClient.applicationsV2()
.instances(ApplicationInstancesRequest.builder()
.applicationId(applicationId)
.build()))
.thenReturn(Mono
.just(ApplicationInstancesResponse.builder()
.instance("instance-0", fill(ApplicationInstanceInfo.builder(), "application-instance-info-")
.build())
.build()));
}
private static void requestApplicationInstancesError(CloudFoundryClient cloudFoundryClient, String applicationId, Integer code) {
when(cloudFoundryClient.applicationsV2()
.instances(ApplicationInstancesRequest.builder()
.applicationId(applicationId)
.build()))
.thenReturn(Mono
.error(new ClientV2Exception(null, code, "test-exception-description", "test-exception-errorCode")));
}
private static void requestApplicationInstancesFailingPartial(CloudFoundryClient cloudFoundryClient, String applicationId) {
when(cloudFoundryClient.applicationsV2()
.instances(ApplicationInstancesRequest.builder()
.applicationId(applicationId)
.build()))
.thenReturn(Mono
.just(fill(ApplicationInstancesResponse.builder(), "application-instances-")
.instance("instance-0", fill(ApplicationInstanceInfo.builder(), "application-instance-info-")
.state("RUNNING")
.build())
.instance("instance-1", fill(ApplicationInstanceInfo.builder(), "application-instance-info-")
.state("FLAPPING")
.build())
.build()));
}
private static void requestApplicationInstancesFailingTotal(CloudFoundryClient cloudFoundryClient, String applicationId) {
when(cloudFoundryClient.applicationsV2()
.instances(ApplicationInstancesRequest.builder()
.applicationId(applicationId)
.build()))
.thenReturn(Mono
.just(fill(ApplicationInstancesResponse.builder(), "application-instances-")
.instance("instance-0", fill(ApplicationInstanceInfo.builder(), "application-instance-info-")
.state("FLAPPING")
.build())
.build()));
}
private static void requestApplicationInstancesRunning(CloudFoundryClient cloudFoundryClient, String applicationId) {
when(cloudFoundryClient.applicationsV2()
.instances(ApplicationInstancesRequest.builder()
.applicationId(applicationId)
.build()))
.thenReturn(Mono
.just(fill(ApplicationInstancesResponse.builder(), "application-instances-")
.instance("instance-0", fill(ApplicationInstanceInfo.builder(), "application-instance-info-")
.state("RUNNING")
.build())
.build()));
}
private static void requestApplicationInstancesTimeout(CloudFoundryClient cloudFoundryClient, String applicationId) {
when(cloudFoundryClient.applicationsV2()
.instances(ApplicationInstancesRequest.builder()
.applicationId(applicationId)
.build()))
.thenReturn(Mono
.just(fill(ApplicationInstancesResponse.builder(), "application-instances-")
.instance("instance-0", fill(ApplicationInstanceInfo.builder(), "application-instance-info-")
.state("STARTING")
.build())
.build()));
}
private static void requestApplicationNoInstances(CloudFoundryClient cloudFoundryClient, String applicationId) {
when(cloudFoundryClient.applicationsV2()
.instances(ApplicationInstancesRequest.builder()
.applicationId(applicationId)
.build()))
.thenReturn(Mono
.just(ApplicationInstancesResponse.builder().build()));
}
private static void requestApplicationNullStats(CloudFoundryClient cloudFoundryClient, String applicationId) {
when(cloudFoundryClient.applicationsV2()
.statistics(ApplicationStatisticsRequest.builder()
.applicationId(applicationId)
.build()))
.thenReturn(Mono
.just(ApplicationStatisticsResponse.builder()
.instance("instance-0", fill(InstanceStatistics.builder(), "instance-statistics-")
.statistics(null)
.build())
.build()));
}
private static void requestApplicationNullUsage(CloudFoundryClient cloudFoundryClient, String applicationId) {
when(cloudFoundryClient.applicationsV2()
.statistics(ApplicationStatisticsRequest.builder()
.applicationId(applicationId)
.build()))
.thenReturn(Mono
.just(ApplicationStatisticsResponse.builder()
.instance("instance-0", fill(InstanceStatistics.builder(), "instance-statistics-")
.statistics(fill(Statistics.builder(), "statistics-")
.usage(null)
.build())
.build())
.build()));
}
private static void requestApplicationRoutes(CloudFoundryClient cloudFoundryClient, String applicationId, String routeId) {
when(cloudFoundryClient.applicationsV2()
.listRoutes(ListApplicationRoutesRequest.builder()
.applicationId(applicationId)
.page(1)
.build()))
.thenReturn(Mono
.just(fill(ListApplicationRoutesResponse.builder())
.resource(fill(RouteResource.builder())
.metadata(fill(Metadata.builder())
.id(routeId)
.build())
.build())
.totalPages(1)
.build()));
}
private static void requestApplicationRoutesEmpty(CloudFoundryClient cloudFoundryClient, String applicationId) {
when(cloudFoundryClient.applicationsV2()
.listRoutes(ListApplicationRoutesRequest.builder()
.applicationId(applicationId)
.page(1)
.build()))
.thenReturn(Mono
.just(fill(ListApplicationRoutesResponse.builder())
.totalPages(1)
.build()));
}
private static void requestApplicationServiceBindings(CloudFoundryClient cloudFoundryClient, String applicationId) {
when(cloudFoundryClient.applicationsV2()
.listServiceBindings(ListApplicationServiceBindingsRequest.builder()
.applicationId(applicationId)
.page(1)
.build()))
.thenReturn(Mono
.just(fill(ListApplicationServiceBindingsResponse.builder(), "test-service-binding-")
.resource(fill(ServiceBindingResource.builder())
.metadata(fill(Metadata.builder())
.id("test-service-binding-id")
.build())
.build())
.totalPages(1)
.build()));
}
private static void requestApplicationServiceBindingsEmpty(CloudFoundryClient cloudFoundryClient, String applicationId) {
when(cloudFoundryClient.applicationsV2()
.listServiceBindings(ListApplicationServiceBindingsRequest.builder()
.applicationId(applicationId)
.page(1)
.build()))
.thenReturn(Mono.empty());
}
private static void requestApplicationStatistics(CloudFoundryClient cloudFoundryClient, String applicationId) {
when(cloudFoundryClient.applicationsV2()
.statistics(ApplicationStatisticsRequest.builder()
.applicationId(applicationId)
.build()))
.thenReturn(Mono
.just(ApplicationStatisticsResponse.builder()
.instance("instance-0", fill(InstanceStatistics.builder(), "instance-statistics-")
.statistics(fill(Statistics.builder(), "statistics-")
.usage(fill(Usage.builder(), "usage-")
.build())
.build())
.build())
.build()));
}
private static void requestApplicationStatisticsError(CloudFoundryClient cloudFoundryClient, String applicationId, Integer code) {
when(cloudFoundryClient.applicationsV2()
.statistics(ApplicationStatisticsRequest.builder()
.applicationId(applicationId)
.build()))
.thenReturn(Mono
.error(new ClientV2Exception(null, code, "test-exception-description", "test-exception-errorCode")));
}
private static void requestApplicationSummary(CloudFoundryClient cloudFoundryClient, String applicationId) {
when(cloudFoundryClient.applicationsV2()
.summary(SummaryApplicationRequest.builder()
.applicationId(applicationId)
.build()))
.thenReturn(Mono
.just(fill(SummaryApplicationResponse.builder(), "application-summary-")
.healthCheckType("port")
.packageUpdatedAt(DateUtils.formatToIso8601(new Date(0)))
.route(fill(org.cloudfoundry.client.v2.routes.Route.builder(), "route-")
.domain(fill(org.cloudfoundry.client.v2.domains.Domain.builder(), "domain-").build())
.path("/test-path")
.port(null)
.build())
.service(fill(ServiceInstance.builder(), "service-instance-").build())
.build()));
}
private static void requestApplicationSummaryDetectedBuildpack(CloudFoundryClient cloudFoundryClient, String applicationId) {
when(cloudFoundryClient.applicationsV2()
.summary(SummaryApplicationRequest.builder()
.applicationId(applicationId)
.build()))
.thenReturn(Mono
.just(fill(SummaryApplicationResponse.builder(), "application-summary-")
.route(fill(org.cloudfoundry.client.v2.routes.Route.builder(), "route-")
.domain(fill(org.cloudfoundry.client.v2.domains.Domain.builder(), "domain-")
.build())
.build())
.buildpack(null)
.packageUpdatedAt(DateUtils.formatToIso8601(new Date(0)))
.build()));
}
private static void requestApplicationSummaryNoBuildpack(CloudFoundryClient cloudFoundryClient, String applicationId) {
when(cloudFoundryClient.applicationsV2()
.summary(SummaryApplicationRequest.builder()
.applicationId(applicationId)
.build()))
.thenReturn(Mono
.just(fill(SummaryApplicationResponse.builder(), "application-summary-")
.route(fill(org.cloudfoundry.client.v2.routes.Route.builder(), "route-")
.domain(fill(org.cloudfoundry.client.v2.domains.Domain.builder(), "domain-")
.build())
.build())
.buildpack(null)
.detectedBuildpack(null)
.packageUpdatedAt(DateUtils.formatToIso8601(new Date(0)))
.build()));
}
private static void requestApplicationSummaryNoRoutes(CloudFoundryClient cloudFoundryClient, String applicationId) {
when(cloudFoundryClient.applicationsV2()
.summary(SummaryApplicationRequest.builder()
.applicationId(applicationId)
.build()))
.thenReturn(Mono
.just(fill(SummaryApplicationResponse.builder(), "application-summary-")
.healthCheckType("port")
.packageUpdatedAt(DateUtils.formatToIso8601(new Date(0)))
.build()));
}
private static void requestApplicationSummaryTcp(CloudFoundryClient cloudFoundryClient, String applicationId) {
when(cloudFoundryClient.applicationsV2()
.summary(SummaryApplicationRequest.builder()
.applicationId(applicationId)
.build()))
.thenReturn(Mono
.just(fill(SummaryApplicationResponse.builder(), "application-summary-")
.healthCheckType("port")
.packageUpdatedAt(DateUtils.formatToIso8601(new Date(0)))
.route(fill(org.cloudfoundry.client.v2.routes.Route.builder(), "route-")
.domain(fill(org.cloudfoundry.client.v2.domains.Domain.builder(), "domain-").build())
.port(999)
.build())
.service(fill(ServiceInstance.builder(), "service-instance-").build())
.build()));
}
private static void requestApplications(CloudFoundryClient cloudFoundryClient, String application, String spaceId, String applicationId) {
requestApplications(cloudFoundryClient, application, spaceId, applicationId, Collections.singletonMap("test-var", "test-value"));
}
private static void requestApplications(CloudFoundryClient cloudFoundryClient, String application, String spaceId, String applicationId, Map<String, Object> envResponse) {
when(cloudFoundryClient.spaces()
.listApplications(ListSpaceApplicationsRequest.builder()
.name(application)
.page(1)
.spaceId(spaceId)
.build()))
.thenReturn(Mono
.just(fill(ListSpaceApplicationsResponse.builder())
.resource(ApplicationResource.builder()
.metadata(fill(Metadata.builder())
.id(applicationId)
.build())
.entity(fill(ApplicationEntity.builder(), "application-")
.environmentJsons(envResponse)
.healthCheckType(ApplicationHealthCheck.PORT.getValue())
.build())
.build())
.totalPages(1)
.build()));
}
private static void requestApplicationsEmpty(CloudFoundryClient cloudFoundryClient, String application, String spaceId) {
when(cloudFoundryClient.spaces()
.listApplications(ListSpaceApplicationsRequest.builder()
.name(application)
.page(1)
.spaceId(spaceId)
.build()))
.thenReturn(Mono
.just(fill(ListSpaceApplicationsResponse.builder())
.build()));
}
private static void requestApplicationsSpecificState(CloudFoundryClient cloudFoundryClient, String application, String spaceId, String stateReturned) {
when(cloudFoundryClient.spaces()
.listApplications(ListSpaceApplicationsRequest.builder()
.name(application)
.page(1)
.spaceId(spaceId)
.build()))
.thenReturn(Mono
.just(fill(ListSpaceApplicationsResponse.builder())
.resource(fill(ApplicationResource.builder(), "application-")
.entity(fill(ApplicationEntity.builder(), "application-entity-")
.state(stateReturned)
.build())
.build())
.build()));
}
private static void requestApplicationsWithSsh(CloudFoundryClient cloudFoundryClient, String application, String spaceId, Boolean sshEnabled) {
when(cloudFoundryClient.spaces()
.listApplications(ListSpaceApplicationsRequest.builder()
.name(application)
.spaceId(spaceId)
.page(1)
.build()))
.thenReturn(Mono
.just(fill(ListSpaceApplicationsResponse.builder())
.resource(ApplicationResource.builder()
.metadata(fill(Metadata.builder())
.id("test-application-id")
.build())
.entity(fill(ApplicationEntity.builder(), "application-")
.environmentJson("test-var", "test-value")
.enableSsh(sshEnabled)
.build())
.build())
.totalPages(1)
.build()));
}
private static void requestAssociateRoute(CloudFoundryClient cloudFoundryClient, String applicationId, String routeId) {
when(cloudFoundryClient.applicationsV2()
.associateRoute(AssociateApplicationRouteRequest.builder()
.applicationId(applicationId)
.routeId(routeId)
.build()))
.thenReturn(Mono.empty());
}
private static void requestCopyBits(CloudFoundryClient cloudFoundryClient, String sourceApplicationId, String targetApplicationId) {
when(cloudFoundryClient.applicationsV2()
.copy(CopyApplicationRequest.builder()
.applicationId(targetApplicationId)
.sourceApplicationId(sourceApplicationId)
.build()))
.thenReturn(Mono
.just(fill(CopyApplicationResponse.builder(), "copy-bits-")
.build()));
}
private static void requestCreateApplication(CloudFoundryClient cloudFoundryClient, ApplicationManifest manifest, String spaceId, String stackId, String applicationId) {
when(cloudFoundryClient.applicationsV2()
.create(CreateApplicationRequest.builder()
.buildpack(manifest.getBuildpack())
.command(manifest.getCommand())
.diskQuota(manifest.getDisk())
.environmentJsons(manifest.getEnvironmentVariables())
.healthCheckTimeout(manifest.getTimeout())
.healthCheckType(Optional.ofNullable(manifest.getHealthCheckType()).map(ApplicationHealthCheck::getValue).orElse(null))
.instances(manifest.getInstances())
.memory(manifest.getMemory())
.name(manifest.getName())
.spaceId(spaceId)
.stackId(stackId)
.build()))
.thenReturn(Mono
.just(fill(CreateApplicationResponse.builder(), "create-")
.metadata(fill(Metadata.builder())
.id(applicationId)
.build())
.build()));
}
private static void requestCreateDockerApplication(CloudFoundryClient cloudFoundryClient, PushApplicationRequest request, String spaceId, String stackId, String applicationId) {
when(cloudFoundryClient.applicationsV2()
.create(CreateApplicationRequest.builder()
.buildpack(request.getBuildpack())
.command(request.getCommand())
.diego(true)
.diskQuota(request.getDiskQuota())
.dockerImage(request.getDockerImage())
.healthCheckTimeout(request.getTimeout())
.healthCheckType(Optional.ofNullable(request.getHealthCheckType()).map(ApplicationHealthCheck::getValue).orElse(null))
.instances(request.getInstances())
.memory(request.getMemory())
.name(request.getName())
.spaceId(spaceId)
.stackId(stackId)
.build()))
.thenReturn(Mono
.just(fill(CreateApplicationResponse.builder(), "create-")
.metadata(fill(Metadata.builder())
.id(applicationId)
.build())
.build()));
}
private static void requestCreateRoute(CloudFoundryClient cloudFoundryClient, String domainId, String host, String path, String spaceId, String routeId) {
when(cloudFoundryClient.routes()
.create(CreateRouteRequest.builder()
.domainId(domainId)
.host(host)
.path(path)
.spaceId(spaceId)
.build()))
.thenReturn(Mono
.just(fill(CreateRouteResponse.builder())
.metadata(fill(Metadata.builder())
.id(routeId)
.build())
.entity(fill(RouteEntity.builder())
.build())
.build()));
}
private static void requestDeleteApplication(CloudFoundryClient cloudFoundryClient, String applicationId) {
when(cloudFoundryClient.applicationsV2()
.delete(org.cloudfoundry.client.v2.applications.DeleteApplicationRequest.builder()
.applicationId(applicationId)
.build())).
thenReturn(Mono.empty());
}
private static void requestDeleteRoute(CloudFoundryClient cloudFoundryClient, String routeId) {
when(cloudFoundryClient.routes()
.delete(org.cloudfoundry.client.v2.routes.DeleteRouteRequest.builder()
.async(true)
.routeId(routeId)
.build()))
.thenReturn(Mono
.just(fill(DeleteRouteResponse.builder())
.entity(fill(JobEntity.builder(), "job-entity-")
.build())
.build()));
}
private static void requestEvents(CloudFoundryClient cloudFoundryClient, String applicationId, EventEntity... entities) {
ListEventsResponse.Builder responseBuilder = fill(ListEventsResponse.builder());
for (EventEntity entity : entities) {
responseBuilder.resource(EventResource.builder()
.metadata(fill(Metadata.builder())
.id("test-event-id")
.build())
.entity(entity)
.build());
}
when(cloudFoundryClient.events()
.list(ListEventsRequest.builder()
.actee(applicationId)
.orderDirection(OrderDirection.DESCENDING)
.resultsPerPage(50)
.page(1)
.build()))
.thenReturn(Mono
.just(responseBuilder
.totalPages(1)
.build()));
}
private static void requestGetApplication(CloudFoundryClient cloudFoundryClient, String applicationId) {
when(cloudFoundryClient.applicationsV2()
.get(org.cloudfoundry.client.v2.applications.GetApplicationRequest.builder()
.applicationId(applicationId)
.build()))
.thenReturn(Mono
.defer(new Supplier<Mono<GetApplicationResponse>>() {
private final Queue<GetApplicationResponse> responses = new LinkedList<>(Arrays.asList(
fill(GetApplicationResponse.builder(), "job-")
.entity(fill(ApplicationEntity.builder())
.packageState("STAGING")
.build())
.build(),
fill(GetApplicationResponse.builder(), "job-")
.entity(fill(ApplicationEntity.builder())
.packageState("STAGED")
.build())
.build()
));
@Override
public Mono<GetApplicationResponse> get() {
return Mono.just(this.responses.poll());
}
}));
}
private static void requestGetApplicationFailing(CloudFoundryClient cloudFoundryClient, String applicationId) {
when(cloudFoundryClient.applicationsV2()
.get(org.cloudfoundry.client.v2.applications.GetApplicationRequest.builder()
.applicationId(applicationId)
.build()))
.thenReturn(Mono
.just(fill(GetApplicationResponse.builder())
.entity(fill(ApplicationEntity.builder())
.packageState("FAILED")
.build())
.build()));
}
private static void requestGetApplicationTimeout(CloudFoundryClient cloudFoundryClient, String applicationId) {
when(cloudFoundryClient.applicationsV2()
.get(org.cloudfoundry.client.v2.applications.GetApplicationRequest.builder()
.applicationId(applicationId)
.build()))
.thenReturn(Mono
.just(fill(GetApplicationResponse.builder())
.entity(fill(ApplicationEntity.builder())
.packageState("STAGING")
.build())
.build()));
}
private static void requestGetSharedDomain(CloudFoundryClient cloudFoundryClient, String domainId) {
when(cloudFoundryClient.sharedDomains()
.get(GetSharedDomainRequest.builder()
.sharedDomainId(domainId)
.build()))
.thenReturn(Mono
.just(fill(GetSharedDomainResponse.builder())
.entity(SharedDomainEntity.builder()
.build())
.build()));
}
private static void requestJobFailure(CloudFoundryClient cloudFoundryClient, String jobId) {
when(cloudFoundryClient.jobs()
.get(GetJobRequest.builder()
.jobId(jobId)
.build()))
.thenReturn(Mono
.defer(new Supplier<Mono<GetJobResponse>>() {
private final Queue<GetJobResponse> responses = new LinkedList<>(Arrays.asList(
fill(GetJobResponse.builder(), "job-")
.entity(fill(JobEntity.builder())
.status("running")
.build())
.build(),
fill(GetJobResponse.builder(), "job-")
.entity(fill(JobEntity.builder())
.errorDetails(fill(ErrorDetails.builder(), "error-details-")
.build())
.status("failed")
.build())
.build()
));
@Override
public Mono<GetJobResponse> get() {
return Mono.just(this.responses.poll());
}
}));
}
private static void requestJobSuccess(CloudFoundryClient cloudFoundryClient, String jobId) {
when(cloudFoundryClient.jobs()
.get(GetJobRequest.builder()
.jobId(jobId)
.build()))
.thenReturn(Mono
.defer(new Supplier<Mono<GetJobResponse>>() {
private final Queue<GetJobResponse> responses = new LinkedList<>(Arrays.asList(
fill(GetJobResponse.builder(), "job-")
.entity(fill(JobEntity.builder())
.status("running")
.build())
.build(),
fill(GetJobResponse.builder(), "job-")
.entity(fill(JobEntity.builder())
.status("finished")
.build())
.build()
));
@Override
public Mono<GetJobResponse> get() {
return Mono.just(this.responses.poll());
}
}));
}
private static void requestListMatchingResources(CloudFoundryClient cloudFoundryClient, Collection<ResourceMatchingUtils.ArtifactMetadata> artifactMetadatas) {
ListMatchingResourcesRequest request = artifactMetadatas.stream()
.reduce(ListMatchingResourcesRequest.builder(), (builder, artifactMetadata) -> builder.resource(Resource.builder()
.hash(artifactMetadata.getHash())
.mode(artifactMetadata.getPermissions())
.size(artifactMetadata.getSize())
.build()), (a, b) -> a.addAllResources(b.build().getResources()))
.build();
when(cloudFoundryClient.resourceMatch()
.list(request))
.thenReturn(Mono
.just(ListMatchingResourcesResponse.builder()
.build()));
}
private static void requestLogsRecent(DopplerClient dopplerClient, String applicationId) {
when(dopplerClient
.recentLogs(RecentLogsRequest.builder()
.applicationId(applicationId)
.build()))
.thenReturn(Flux
.just(Envelope.builder()
.eventType(EventType.LOG_MESSAGE)
.logMessage(fill(LogMessage.builder(), "log-message-")
.build())
.origin("rsp")
.build()));
}
private static void requestLogsStream(DopplerClient dopplerClient, String applicationId) {
when(dopplerClient
.stream(StreamRequest.builder()
.applicationId(applicationId)
.build()))
.thenReturn(Flux
.just(Envelope.builder()
.eventType(EventType.LOG_MESSAGE)
.logMessage(fill(LogMessage.builder(), "log-message-")
.build())
.origin("rsp")
.build()));
}
private static void requestOrganizationSpacesByName(CloudFoundryClient cloudFoundryClient, String organizationId, String space) {
when(cloudFoundryClient.organizations()
.listSpaces(ListOrganizationSpacesRequest.builder()
.organizationId(organizationId)
.name(space)
.page(1)
.build()))
.thenReturn(Mono
.just(fill(ListOrganizationSpacesResponse.builder())
.resource(SpaceResource.builder()
.metadata(fill(Metadata.builder(), "space-resource-metadata-")
.build())
.entity(fill(SpaceEntity.builder())
.build())
.build())
.totalPages(1)
.build()));
}
private static void requestOrganizationSpacesByNameNotFound(CloudFoundryClient cloudFoundryClient, String organizationId, String space) {
when(cloudFoundryClient.organizations()
.listSpaces(ListOrganizationSpacesRequest.builder()
.organizationId(organizationId)
.name(space)
.page(1)
.build()))
.thenReturn(Mono
.just(fill(ListOrganizationSpacesResponse.builder())
.totalPages(1)
.build()));
}
private static void requestOrganizations(CloudFoundryClient cloudFoundryClient, String organization) {
when(cloudFoundryClient.organizations()
.list(ListOrganizationsRequest.builder()
.name(organization)
.page(1)
.build()))
.thenReturn(Mono
.just(fill(ListOrganizationsResponse.builder())
.resource(OrganizationResource.builder()
.metadata(fill(Metadata.builder(), "organization-resource-metadata-")
.build())
.entity(fill(OrganizationEntity.builder())
.build())
.build())
.totalPages(1)
.build()));
}
private static void requestOrganizationsNotFound(CloudFoundryClient cloudFoundryClient, String organization) {
when(cloudFoundryClient.organizations()
.list(ListOrganizationsRequest.builder()
.name(organization)
.page(1)
.build()))
.thenReturn(Mono
.just(fill(ListOrganizationsResponse.builder())
.totalPages(1)
.build()));
}
private static void requestPrivateDomainNotFound(CloudFoundryClient cloudFoundryClient, String domain, String organizationId) {
when(cloudFoundryClient.organizations()
.listPrivateDomains(ListOrganizationPrivateDomainsRequest.builder()
.name(domain)
.organizationId(organizationId)
.page(1)
.build()))
.thenReturn(Mono
.just(fill(ListOrganizationPrivateDomainsResponse.builder())
.build()));
}
private static void requestPrivateDomains(CloudFoundryClient cloudFoundryClient, String organizationId, String domainId) {
when(cloudFoundryClient.organizations()
.listPrivateDomains(ListOrganizationPrivateDomainsRequest.builder()
.organizationId(organizationId)
.page(1)
.build()))
.thenReturn(Mono
.just(fill(ListOrganizationPrivateDomainsResponse.builder())
.resource(fill(PrivateDomainResource.builder())
.metadata(fill(Metadata.builder())
.id(domainId)
.build())
.entity(fill(PrivateDomainEntity.builder())
.name("test-private-domain")
.build())
.build())
.build()));
}
private static void requestPrivateDomainsEmpty(CloudFoundryClient cloudFoundryClient, String organizationId) {
when(cloudFoundryClient.organizations()
.listPrivateDomains(ListOrganizationPrivateDomainsRequest.builder()
.organizationId(organizationId)
.page(1)
.build()))
.thenReturn(Mono
.just(fill(ListOrganizationPrivateDomainsResponse.builder())
.build()));
}
private static void requestRemoveApplicationRoute(CloudFoundryClient cloudFoundryClient, String applicationId, String routeId) {
when(cloudFoundryClient.applicationsV2()
.removeRoute(RemoveApplicationRouteRequest.builder()
.applicationId(applicationId)
.routeId(routeId)
.build()))
.thenReturn(Mono.empty());
}
private static void requestRemoveServiceBinding(CloudFoundryClient cloudFoundryClient, String applicationId, String serviceBindingId) {
when(cloudFoundryClient.applicationsV2()
.removeServiceBinding(RemoveApplicationServiceBindingRequest.builder()
.applicationId(applicationId)
.serviceBindingId(serviceBindingId)
.build()))
.thenReturn(Mono.empty());
}
private static void requestRestageApplication(CloudFoundryClient cloudFoundryClient, String applicationId) {
when(cloudFoundryClient.applicationsV2()
.restage(org.cloudfoundry.client.v2.applications.RestageApplicationRequest.builder()
.applicationId(applicationId)
.build()))
.thenReturn(Mono
.just(fill(RestageApplicationResponse.builder(), "application-")
.build()));
}
private static void requestRoutes(CloudFoundryClient cloudFoundryClient, String domainId, String host, String routePath, String routeId) {
ListRoutesRequest.Builder requestBuilder = ListRoutesRequest.builder();
Optional.ofNullable(host).ifPresent(requestBuilder::host);
Optional.ofNullable(routePath).ifPresent(requestBuilder::path);
when(cloudFoundryClient.routes()
.list(requestBuilder
.domainId(domainId)
.page(1)
.build()))
.thenReturn(Mono
.just(fill(ListRoutesResponse.builder())
.resource(RouteResource.builder()
.metadata(fill(Metadata.builder())
.id(routeId)
.build())
.entity(RouteEntity.builder()
.host(host)
.path(routePath == null ? "" : routePath)
.build())
.build())
.build()));
}
private static void requestRoutesEmpty(CloudFoundryClient cloudFoundryClient, String domainId, String host, String routePath) {
ListRoutesRequest.Builder requestBuilder = ListRoutesRequest.builder();
Optional.ofNullable(domainId).ifPresent(requestBuilder::domainId);
Optional.ofNullable(host).ifPresent(requestBuilder::host);
Optional.ofNullable(routePath).ifPresent(requestBuilder::path);
when(cloudFoundryClient.routes()
.list(requestBuilder
.page(1)
.build()))
.thenReturn(Mono
.just(fill(ListRoutesResponse.builder())
.build()));
}
private static void requestSharedDomain(CloudFoundryClient cloudFoundryClient, String domain, String domainId) {
when(cloudFoundryClient.sharedDomains()
.list(ListSharedDomainsRequest.builder()
.page(1)
.name(domain)
.build()))
.thenReturn(Mono
.just(fill(ListSharedDomainsResponse.builder())
.resource(SharedDomainResource.builder()
.metadata(fill(Metadata.builder())
.id(domainId)
.build())
.entity(SharedDomainEntity.builder()
.name(domain)
.build())
.build())
.build()));
}
private static void requestSharedDomains(CloudFoundryClient cloudFoundryClient, String domain, String domainId) {
when(cloudFoundryClient.sharedDomains()
.list(ListSharedDomainsRequest.builder()
.page(1)
.build()))
.thenReturn(Mono
.just(fill(ListSharedDomainsResponse.builder())
.resource(SharedDomainResource.builder()
.metadata(fill(Metadata.builder())
.id(domainId)
.build())
.entity(fill(SharedDomainEntity.builder())
.name(domain)
.build())
.build())
.build()));
}
private static void requestSharedDomainsEmpty(CloudFoundryClient cloudFoundryClient) {
when(cloudFoundryClient.sharedDomains()
.list(ListSharedDomainsRequest.builder()
.page(1)
.build()))
.thenReturn(Mono
.just(fill(ListSharedDomainsResponse.builder())
.build()));
}
private static void requestSpace(CloudFoundryClient cloudFoundryClient, String spaceId, String organizationId) {
when(cloudFoundryClient.spaces()
.get(GetSpaceRequest.builder()
.spaceId(spaceId)
.build()))
.thenReturn(Mono
.just(fill(GetSpaceResponse.builder())
.entity(fill(SpaceEntity.builder())
.organizationId(organizationId)
.build())
.build()));
}
private static void requestSpaceSummary(CloudFoundryClient cloudFoundryClient, String spaceId) {
when(cloudFoundryClient.spaces()
.getSummary(GetSpaceSummaryRequest.builder()
.spaceId(spaceId)
.build()))
.thenReturn(Mono
.just(fill(GetSpaceSummaryResponse.builder(), "space-summary-")
.application(fill(SpaceApplicationSummary.builder(), "application-summary-")
.build())
.build()));
}
private static void requestStack(CloudFoundryClient cloudFoundryClient, String stackId) {
when(cloudFoundryClient.stacks()
.get(GetStackRequest.builder()
.stackId(stackId)
.build()))
.thenReturn(Mono
.just(fill(GetStackResponse.builder())
.entity(fill(StackEntity.builder(), "stack-entity-")
.build())
.build()));
}
private static void requestStackIdEmpty(CloudFoundryClient cloudFoundryClient, String stack) {
when(cloudFoundryClient.stacks()
.list(ListStacksRequest.builder()
.name(stack)
.page(1)
.build()))
.thenReturn(Mono
.just(fill(ListStacksResponse.builder())
.build()));
}
private static void requestTcpDomains(CloudFoundryClient cloudFoundryClient, String domain, String domainId) {
when(cloudFoundryClient.sharedDomains()
.list(ListSharedDomainsRequest.builder()
.page(1)
.build()))
.thenReturn(Mono
.just(fill(ListSharedDomainsResponse.builder())
.resource(SharedDomainResource.builder()
.metadata(fill(Metadata.builder())
.id(domainId)
.build())
.entity(fill(SharedDomainEntity.builder())
.name(domain)
.routerGroupType("tcp")
.build())
.build())
.build()));
}
private static void requestTerminateApplicationInstance(CloudFoundryClient cloudFoundryClient, String applicationId, String instanceIndex) {
when(cloudFoundryClient.applicationsV2()
.terminateInstance(TerminateApplicationInstanceRequest.builder()
.applicationId(applicationId)
.index(instanceIndex)
.build())).
thenReturn(Mono.empty());
}
private static void requestUpdateApplication(CloudFoundryClient cloudFoundryClient, String applicationId, ApplicationManifest manifest, String stackId) {
when(cloudFoundryClient.applicationsV2()
.update(UpdateApplicationRequest.builder()
.applicationId(applicationId)
.buildpack(manifest.getBuildpack())
.command(manifest.getCommand())
.diskQuota(manifest.getDisk())
.dockerImage(manifest.getDockerImage())
.environmentJsons(manifest.getEnvironmentVariables())
.healthCheckTimeout(manifest.getTimeout())
.healthCheckType(Optional.ofNullable(manifest.getHealthCheckType()).map(ApplicationHealthCheck::getValue).orElse(null))
.instances(manifest.getInstances())
.memory(manifest.getMemory())
.name(manifest.getName())
.stackId(stackId)
.build()))
.thenReturn(Mono
.just(fill(UpdateApplicationResponse.builder())
.metadata(fill(Metadata.builder())
.id(applicationId)
.build())
.build()));
}
private static void requestUpdateApplicationEnvironment(CloudFoundryClient cloudFoundryClient, String applicationId, Map<String, Object> environment) {
when(cloudFoundryClient.applicationsV2()
.update(UpdateApplicationRequest.builder()
.applicationId(applicationId)
.environmentJsons(environment)
.build()))
.thenReturn(Mono.just(fill(UpdateApplicationResponse.builder())
.entity(fill(ApplicationEntity.builder())
.environmentJsons(environment)
.build())
.build()));
}
private static void requestUpdateApplicationHealthCheck(CloudFoundryClient cloudFoundryClient, String applicationId, ApplicationHealthCheck type) {
when(cloudFoundryClient.applicationsV2()
.update(UpdateApplicationRequest.builder()
.applicationId(applicationId)
.healthCheckType(type.getValue())
.build()))
.thenReturn(Mono
.just(fill(UpdateApplicationResponse.builder())
.entity(fill(ApplicationEntity.builder(), "application-entity-")
.build())
.build()));
}
private static void requestUpdateApplicationRename(CloudFoundryClient cloudFoundryClient, String applicationId, String name) {
when(cloudFoundryClient.applicationsV2()
.update(UpdateApplicationRequest.builder()
.applicationId(applicationId)
.name(name)
.build()))
.thenReturn(Mono
.just(fill(UpdateApplicationResponse.builder())
.entity(fill(ApplicationEntity.builder(), "application-entity-")
.build())
.build()));
}
private static void requestUpdateApplicationScale(CloudFoundryClient cloudFoundryClient, String applicationId, Integer disk, Integer instances, Integer memory) {
when(cloudFoundryClient.applicationsV2()
.update(UpdateApplicationRequest.builder()
.applicationId(applicationId)
.diskQuota(disk)
.instances(instances)
.memory(memory)
.build()))
.thenReturn(Mono
.just(fill(UpdateApplicationResponse.builder())
.entity(fill(ApplicationEntity.builder())
.build())
.build()));
}
private static void requestUpdateApplicationSsh(CloudFoundryClient cloudFoundryClient, String applicationId, Boolean enabled) {
when(cloudFoundryClient.applicationsV2()
.update(UpdateApplicationRequest.builder()
.applicationId(applicationId)
.enableSsh(enabled)
.build()))
.thenReturn(Mono
.just(fill(UpdateApplicationResponse.builder())
.entity(fill(ApplicationEntity.builder(), "application-entity-")
.build())
.build()));
}
private static void requestUpdateApplicationState(CloudFoundryClient cloudFoundryClient, String applicationId, String state) {
when(cloudFoundryClient.applicationsV2()
.update(UpdateApplicationRequest.builder()
.applicationId(applicationId)
.state(state)
.build()))
.thenReturn(Mono
.just(UpdateApplicationResponse.builder()
.metadata(fill(Metadata.builder())
.id(applicationId)
.build())
.entity(fill(ApplicationEntity.builder())
.state(state)
.build())
.build()));
}
private static void requestUpload(CloudFoundryClient cloudFoundryClient, String applicationId, Path application, String jobId) {
when(cloudFoundryClient.applicationsV2()
.upload(UploadApplicationRequest.builder()
.applicationId(applicationId)
.async(true)
.application(application)
.build()))
.thenReturn(Mono
.just(fill(UploadApplicationResponse.builder())
.metadata(fill(Metadata.builder())
.id(jobId)
.build())
.entity(fill(JobEntity.builder(), "job-entity-")
.build())
.build()));
}
}