Skip to content

feat: Replace deprecated Doppler recentLogs with Log Cache client#1237

Open
ZPascal wants to merge 17 commits intocloudfoundry:mainfrom
ZPascal:issue-1181
Open

feat: Replace deprecated Doppler recentLogs with Log Cache client#1237
ZPascal wants to merge 17 commits intocloudfoundry:mainfrom
ZPascal:issue-1181

Conversation

@ZPascal
Copy link

@ZPascal ZPascal commented Aug 1, 2024

Feat: Replace deprecated Doppler recentLogs with Log Cache client

Problem

The DopplerClient.recentLogs() endpoint relies on the Loggregator Traffic Controller /apps/{id}/recentlogs HTTP endpoint, which was removed in Loggregator ≥ 107.0 (shipped with CF Deployment ≥ 24.3 and Tanzu Application Service ≥ 4.0). Calls to this endpoint on modern CF foundations fail at runtime, and the related types (LogsRequest, LogMessage from org.cloudfoundry.doppler) caused compilation errors in the integration tests.

Out of the scope

  • LogCache client-based log streaming support

Fixes #1181 & #1230


Changes

cloudfoundry-client

  • Marked DopplerClient.recentLogs() as @Deprecated with a Javadoc @deprecated note pointing to the replacement API and documenting the platform version boundary (Loggregator < 107.0 / CFD < 24.3 / TAS < 4.0).
  • Added LogCacheClient.recentLogs(ReadRequest) as the new, non-deprecated entry point.

cloudfoundry-client-reactor

  • Implemented ReactorLogCacheEndpoints.recentLogs() — delegates to the existing read() method.
  • Wired the implementation in _ReactorLogCacheClient.

cloudfoundry-operations

  • Extended Applications interface with logsRecent(ReadRequest) backed by LogCacheClient.
  • Updated DefaultApplications to accept and hold a Mono<LogCacheClient> alongside the existing Mono<DopplerClient>.
  • The existing logs(LogsRequest) / logs(ApplicationLogsRequest) methods are now marked @Deprecated.
  • Updated _DefaultCloudFoundryOperations to expose logCacheClient as an optional builder field (mirrors the existing dopplerClient pattern; missing client yields a descriptive IllegalStateException on first use).

Integration & unit tests

  • Updated AbstractOperationsTest and DefaultApplicationsTest to supply the new LogCacheClient mock.
  • Renamed / split test cases to clearly distinguish Doppler (logsRecentDoppler, logsDoppler, logsNoAppDoppler) from Log Cache (logsRecentLogCache) paths; added @SuppressWarnings("deprecation") where the old API is still exercised.
  • Added ApplicationsTest.logsRecent() integration test that provisions an application, fetches recent logs via LogCacheClient, and asserts that each entry carries a valid LogType (OUT or ERR).
  • Updated IntegrationTestConfiguration to inject and wire LogCacheClient into DefaultCloudFoundryOperations.

Documentation (README.md)

  • Added a ## Deprecations section (with a [!WARNING] callout) right after ## Versions, covering:
    • the deprecated API surface (DopplerClient.recentLogs(), RecentLogsRequest, LogMessage),
    • platform version boundaries,
    • a before/after migration code example.
  • Added an inline [!NOTE] callout in the ### CloudFoundryClient, DopplerClient, UaaClient Builders section cross-linking to the new deprecation notice.

Migration guide

// Before (deprecated — only works on CFD < 24.3 / TAS < 4.0)
dopplerClient.recentLogs(RecentLogsRequest.builder()
    .applicationId(appId)
    .build());

// After
logCacheClient.recentLogs(ReadRequest.builder()
    .sourceId(appId)
    .build());

// Or via CloudFoundryOperations
cloudFoundryOperations.applications()
    .logsRecent(ReadRequest.builder()
        .sourceId(appId)
        .build());

Checklist

  • Existing unit tests updated and passing
  • New unit test added (logsRecentLogCache)
  • New integration test added (logsRecent)
  • Deprecated API annotated with @Deprecated + Javadoc @deprecated
  • README.md updated with deprecation notice and migration guide
  • Integration tests verified against a live CF foundation (requires CF Deployment ≥ 24.3 or TAS ≥ 4.0 for the Log Cache path)

Integrationtest results

Logs of the Integration test run
[INFO] Scanning for projects...
[INFO] 
[INFO] -----------------< org.cloudfoundry:integration-test >------------------
[INFO] Building Integration Test 6.0.0-SNAPSHOT
[INFO]   from pom.xml
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- clean:3.2.0:clean (default-clean) @ integration-test ---
[INFO] Deleting /Users/I762976/Workspace/cloudfoundry/cf-java-client/integration-test/target
[INFO] 
[INFO] --- resources:3.3.1:resources (default-resources) @ integration-test ---
[INFO] skip non existing resourceDirectory /Users/I762976/Workspace/cloudfoundry/cf-java-client/integration-test/src/main/resources
[INFO] 
[INFO] --- compiler:3.14.0:compile (default-compile) @ integration-test ---
[INFO] No sources to compile
[INFO] 
[INFO] --- resources:3.3.1:testResources (default-testResources) @ integration-test ---
[INFO] Copying 15 resources from src/test/resources to target/test-classes
[INFO] 
[INFO] --- compiler:3.14.0:testCompile (default-testCompile) @ integration-test ---
[INFO] Recompiling the module because of changed source code.
[INFO] Compiling 105 source files with javac [forked debug parameters target 21] to target/test-classes
[WARNING] [path] bad path element "/Users/I762976/Workspace/cloudfoundry/cf-java-client/integration-test/target/classes": no such file or directory
[WARNING] /Users/I762976/Workspace/cloudfoundry/cf-java-client/integration-test/src/test/java/org/cloudfoundry/CloudFoundryVersion.java:[22,19] [deprecation] forIntegers(int,int,int) in Version has been deprecated
[WARNING] /Users/I762976/Workspace/cloudfoundry/cf-java-client/integration-test/src/test/java/org/cloudfoundry/CloudFoundryVersion.java:[24,20] [deprecation] forIntegers(int,int,int) in Version has been deprecated
[WARNING] /Users/I762976/Workspace/cloudfoundry/cf-java-client/integration-test/src/test/java/org/cloudfoundry/CloudFoundryVersion.java:[26,20] [deprecation] forIntegers(int,int,int) in Version has been deprecated
[WARNING] /Users/I762976/Workspace/cloudfoundry/cf-java-client/integration-test/src/test/java/org/cloudfoundry/CloudFoundryVersion.java:[28,20] [deprecation] forIntegers(int,int,int) in Version has been deprecated
[WARNING] /Users/I762976/Workspace/cloudfoundry/cf-java-client/integration-test/src/test/java/org/cloudfoundry/CloudFoundryVersion.java:[30,19] [deprecation] forIntegers(int,int,int) in Version has been deprecated
[WARNING] /Users/I762976/Workspace/cloudfoundry/cf-java-client/integration-test/src/test/java/org/cloudfoundry/CloudFoundryVersion.java:[32,19] [deprecation] forIntegers(int,int,int) in Version has been deprecated
[WARNING] /Users/I762976/Workspace/cloudfoundry/cf-java-client/integration-test/src/test/java/org/cloudfoundry/CloudFoundryVersion.java:[34,19] [deprecation] forIntegers(int,int,int) in Version has been deprecated
[WARNING] /Users/I762976/Workspace/cloudfoundry/cf-java-client/integration-test/src/test/java/org/cloudfoundry/CloudFoundryVersion.java:[36,19] [deprecation] forIntegers(int,int,int) in Version has been deprecated
[WARNING] /Users/I762976/Workspace/cloudfoundry/cf-java-client/integration-test/src/test/java/org/cloudfoundry/CloudFoundryVersion.java:[38,19] [deprecation] forIntegers(int,int,int) in Version has been deprecated
[WARNING] /Users/I762976/Workspace/cloudfoundry/cf-java-client/integration-test/src/test/java/org/cloudfoundry/CloudFoundryVersion.java:[40,19] [deprecation] forIntegers(int,int,int) in Version has been deprecated
[WARNING] /Users/I762976/Workspace/cloudfoundry/cf-java-client/integration-test/src/test/java/org/cloudfoundry/CloudFoundryVersion.java:[42,19] [deprecation] forIntegers(int,int,int) in Version has been deprecated
[WARNING] /Users/I762976/Workspace/cloudfoundry/cf-java-client/integration-test/src/test/java/org/cloudfoundry/CloudFoundryVersion.java:[44,19] [deprecation] forIntegers(int,int,int) in Version has been deprecated
[WARNING] /Users/I762976/Workspace/cloudfoundry/cf-java-client/integration-test/src/test/java/org/cloudfoundry/CloudFoundryVersion.java:[46,19] [deprecation] forIntegers(int,int,int) in Version has been deprecated
[WARNING] /Users/I762976/Workspace/cloudfoundry/cf-java-client/integration-test/src/test/java/org/cloudfoundry/CloudFoundryVersion.java:[48,19] [deprecation] forIntegers(int,int,int) in Version has been deprecated
[WARNING] /Users/I762976/Workspace/cloudfoundry/cf-java-client/integration-test/src/test/java/org/cloudfoundry/CloudFoundryVersion.java:[50,20] [deprecation] forIntegers(int,int,int) in Version has been deprecated
[WARNING] /Users/I762976/Workspace/cloudfoundry/cf-java-client/integration-test/src/test/java/org/cloudfoundry/CloudFoundryVersion.java:[52,20] [deprecation] forIntegers(int,int,int) in Version has been deprecated
[WARNING] /Users/I762976/Workspace/cloudfoundry/cf-java-client/integration-test/src/test/java/org/cloudfoundry/CloudFoundryVersion.java:[54,20] [deprecation] forIntegers(int,int,int) in Version has been deprecated
[WARNING] /Users/I762976/Workspace/cloudfoundry/cf-java-client/integration-test/src/test/java/org/cloudfoundry/CloudFoundryVersion.java:[56,20] [deprecation] forIntegers(int,int,int) in Version has been deprecated
[WARNING] /Users/I762976/Workspace/cloudfoundry/cf-java-client/integration-test/src/test/java/org/cloudfoundry/CloudFoundryVersion.java:[58,20] [deprecation] forIntegers(int,int,int) in Version has been deprecated
[WARNING] /Users/I762976/Workspace/cloudfoundry/cf-java-client/integration-test/src/test/java/org/cloudfoundry/CloudFoundryVersion.java:[60,20] [deprecation] forIntegers(int,int,int) in Version has been deprecated
[WARNING] /Users/I762976/Workspace/cloudfoundry/cf-java-client/integration-test/src/test/java/org/cloudfoundry/CloudFoundryVersion.java:[62,23] [deprecation] forIntegers(int) in Version has been deprecated
[WARNING] /Users/I762976/Workspace/cloudfoundry/cf-java-client/integration-test/src/test/java/org/cloudfoundry/CloudFoundryVersionConditionalRule.java:[62,39] [deprecation] lessThan(Version) in Version has been deprecated
[WARNING] /Users/I762976/Workspace/cloudfoundry/cf-java-client/integration-test/src/test/java/org/cloudfoundry/CloudFoundryVersionConditionalRule.java:[67,37] [deprecation] lessThanOrEqualTo(Version) in Version has been deprecated
[WARNING] /Users/I762976/Workspace/cloudfoundry/cf-java-client/integration-test/src/test/java/org/cloudfoundry/CloudFoundryVersionConditionalRule.java:[77,37] [deprecation] greaterThanOrEqualTo(Version) in Version has been deprecated
[WARNING] /Users/I762976/Workspace/cloudfoundry/cf-java-client/integration-test/src/test/java/org/cloudfoundry/CloudFoundryVersionConditionalRule.java:[82,39] [deprecation] greaterThan(Version) in Version has been deprecated
[WARNING] /Users/I762976/Workspace/cloudfoundry/cf-java-client/integration-test/src/test/java/org/cloudfoundry/IntegrationTestConfiguration.java:[471,40] [deprecation] valueOf(String) in Version has been deprecated
[WARNING] /Users/I762976/Workspace/cloudfoundry/cf-java-client/integration-test/src/test/java/org/cloudfoundry/client/v2/ApplicationsTest.java:[1514,34] [deprecation] getNextTarEntry() in TarArchiveInputStream has been deprecated
[WARNING] /Users/I762976/Workspace/cloudfoundry/cf-java-client/integration-test/src/test/java/org/cloudfoundry/client/v2/InfoTest.java:[45,54] [deprecation] valueOf(String) in Version has been deprecated
[WARNING] /Users/I762976/Workspace/cloudfoundry/cf-java-client/integration-test/src/test/java/org/cloudfoundry/client/v2/InfoTest.java:[46,52] [deprecation] valueOf(String) in Version has been deprecated
[WARNING] /Users/I762976/Workspace/cloudfoundry/cf-java-client/integration-test/src/test/java/org/cloudfoundry/operations/ApplicationsTest.java:[2143,16] [deprecation] createShared(CreateSharedDomainRequest) in Domains has been deprecated
[WARNING] /Users/I762976/Workspace/cloudfoundry/cf-java-client/integration-test/src/test/java/org/cloudfoundry/operations/DomainsTest.java:[110,16] [deprecation] createShared(CreateSharedDomainRequest) in Domains has been deprecated
[WARNING] /Users/I762976/Workspace/cloudfoundry/cf-java-client/integration-test/src/test/java/org/cloudfoundry/operations/DomainsTest.java:[126,16] [deprecation] createShared(CreateSharedDomainRequest) in Domains has been deprecated
[WARNING] /Users/I762976/Workspace/cloudfoundry/cf-java-client/integration-test/src/test/java/org/cloudfoundry/operations/DomainsTest.java:[283,16] [deprecation] createShared(CreateSharedDomainRequest) in Domains has been deprecated
[WARNING] /Users/I762976/Workspace/cloudfoundry/cf-java-client/integration-test/src/test/java/org/cloudfoundry/operations/RoutesTest.java:[867,16] [deprecation] createShared(CreateSharedDomainRequest) in Domains has been deprecated
[INFO] 
[INFO] --- surefire:3.5.3:test (default-test) @ integration-test ---
[INFO] Tests will run in random order. To reproduce ordering use flag -Dsurefire.runOrder.random.seed=225068888324708
[INFO] Using auto detected provider org.apache.maven.surefire.junitplatform.JUnitPlatformProvider
[INFO] 
[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO] Running org.cloudfoundry.operations.ApplicationsTest
10:39:32.209 main                        io.netty.resolver.dns.DnsServerAddressStreamProviders Unable to load io.netty.resolver.dns.macos.MacOSDnsServerAddressStreamProvider, fallback to system defaults. This may result in incorrect DNS resolutions on MacOS. Check whether you have a dependency on 'io.netty:netty-resolver-dns-native-macos'. Use DEBUG level to see the full stack: java.lang.UnsatisfiedLinkError: failed to load the required native library
10:39:34.091 cloudfoundry-client-nio-2   cloudfoundry-client.compatibility     Client supports API version 2.272.0 and is connected to server with API version 2.274.0. Things may not work as expected.
10:39:34.101 main                        cloudfoundry-client.test              Performing clean slate cleanup. Should happen once per integration test run.
10:39:54.364 cloudfoundry-client-nio-6   cloudfoundry-client.compatibility     Client supports API version 2.272.0 and is connected to server with API version 2.274.0. Things may not work as expected.
10:55:54.314 cloudfoundry-client-nio-7   cloudfoundry-client.test              Unable to delete space test-space-6v95p
org.cloudfoundry.client.v2.ClientV2Exception: UnknownError(10001): An unknown error occurred.
	at org.cloudfoundry.util.JobUtils.getError(JobUtils.java:123)
	at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:132)
	at reactor.core.publisher.FluxFilter$FilterSubscriber.onNext(FluxFilter.java:113)
	at reactor.core.publisher.MonoNext$NextSubscriber.onNext(MonoNext.java:82)
	at reactor.core.publisher.SerializedSubscriber.onNext(SerializedSubscriber.java:99)
	at reactor.core.publisher.FluxRepeatWhen$RepeatWhenMainSubscriber.onNext(FluxRepeatWhen.java:142)
	at reactor.core.publisher.FluxFilterFuseable$FilterFuseableSubscriber.onNext(FluxFilterFuseable.java:118)
	at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.onNext(FluxMapFuseable.java:299)
	at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onNext(FluxOnAssembly.java:539)
	at reactor.core.publisher.MonoFlatMap$FlatMapMain.secondComplete(MonoFlatMap.java:245)
	at reactor.core.publisher.MonoFlatMap$FlatMapInner.onNext(MonoFlatMap.java:305)
	at reactor.core.publisher.Operators$MonoInnerProducerBase.complete(Operators.java:2842)
	at reactor.core.publisher.MonoSingle$SingleSubscriber.onComplete(MonoSingle.java:180)
	at reactor.core.publisher.FluxFlatMap$FlatMapMain.checkTerminated(FluxFlatMap.java:850)
	at reactor.core.publisher.FluxFlatMap$FlatMapMain.drainLoop(FluxFlatMap.java:612)
	at reactor.core.publisher.FluxFlatMap$FlatMapMain.innerComplete(FluxFlatMap.java:898)
	at reactor.core.publisher.FluxFlatMap$FlatMapInner.onComplete(FluxFlatMap.java:1001)
	at reactor.core.publisher.FluxMap$MapSubscriber.onComplete(FluxMap.java:144)
	at reactor.core.publisher.FluxHandle$HandleSubscriber.onComplete(FluxHandle.java:223)
	at reactor.core.publisher.FluxMap$MapConditionalSubscriber.onComplete(FluxMap.java:275)
	at reactor.core.publisher.FluxDoFinally$DoFinallySubscriber.onComplete(FluxDoFinally.java:128)
	at reactor.core.publisher.FluxHandleFuseable$HandleFuseableSubscriber.onComplete(FluxHandleFuseable.java:239)
	at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.onComplete(FluxContextWrite.java:126)
	at reactor.core.publisher.Operators$BaseFluxToMonoOperator.completePossiblyEmpty(Operators.java:2098)
	at reactor.core.publisher.MonoCollectList$MonoCollectListSubscriber.onComplete(MonoCollectList.java:118)
	at reactor.core.publisher.FluxPeek$PeekSubscriber.onComplete(FluxPeek.java:260)
	at reactor.core.publisher.FluxMap$MapSubscriber.onComplete(FluxMap.java:144)
	at reactor.core.publisher.FluxDoFinally$DoFinallySubscriber.onComplete(FluxDoFinally.java:128)
	at reactor.core.publisher.FluxMap$MapSubscriber.onComplete(FluxMap.java:144)
	at reactor.netty.channel.FluxReceive.onInboundComplete(FluxReceive.java:415)
	at reactor.netty.channel.ChannelOperations.onInboundComplete(ChannelOperations.java:446)
	at reactor.netty.channel.ChannelOperations.terminate(ChannelOperations.java:500)
	at reactor.netty.http.client.HttpClientOperations.onInboundNext(HttpClientOperations.java:780)
	at reactor.netty.channel.ChannelOperationsHandler.channelRead(ChannelOperationsHandler.java:114)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
	at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
	at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:436)
	at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:346)
	at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:318)
	at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:251)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
	at io.netty.handler.logging.LoggingHandler.channelRead(LoggingHandler.java:280)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
	at io.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1475)
	at io.netty.handler.ssl.SslHandler.decodeJdkCompatible(SslHandler.java:1338)
	at io.netty.handler.ssl.SslHandler.decode(SslHandler.java:1387)
	at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:529)
	at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:468)
	at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:290)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
	at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
	at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166)
	at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:788)
	at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724)
	at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650)
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562)
	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
	at java.base/java.lang.Thread.run(Thread.java:1583)
10:55:54.318 main                        org.springframework.beans.factory.support.DisposableBeanAdapter Invocation of destroy method failed on bean with name 'cloudFoundryCleaner': org.cloudfoundry.client.v2.ClientV2Exception: UnknownError(10001): An unknown error occurred.
[ERROR] Tests run: 59, Failures: 1, Errors: 0, Skipped: 5, Time elapsed: 982.6 s <<< FAILURE! -- in org.cloudfoundry.operations.ApplicationsTest
[ERROR] org.cloudfoundry.operations.ApplicationsTest.getManifest -- Time elapsed: 5.725 s
[ERROR] org.cloudfoundry.operations.ApplicationsTest.startStarted -- Time elapsed: 12.53 s
[ERROR] org.cloudfoundry.operations.ApplicationsTest.sshEnabled -- Time elapsed: 24.72 s
[ERROR] org.cloudfoundry.operations.ApplicationsTest.unsetEnvironmentVariableComplete -- Time elapsed: 17.36 s
[ERROR] org.cloudfoundry.operations.ApplicationsTest.disableSsh -- Time elapsed: 12.30 s
[ERROR] org.cloudfoundry.operations.ApplicationsTest.restartNotStarted -- Time elapsed: 10.17 s
[ERROR] org.cloudfoundry.operations.ApplicationsTest.pushRouteAndRoutePath -- Time elapsed: 14.15 s
[ERROR] org.cloudfoundry.operations.ApplicationsTest.pushDomainHostPathRoute -- Time elapsed: 15.44 s
[ERROR] org.cloudfoundry.operations.ApplicationsTest.pushMultipleRoutes -- Time elapsed: 13.69 s
[ERROR] org.cloudfoundry.operations.ApplicationsTest.pushTcpRoute skipped
[ERROR] org.cloudfoundry.operations.ApplicationsTest.getTcp skipped
[ERROR] org.cloudfoundry.operations.ApplicationsTest.listTasks -- Time elapsed: 13.46 s
[ERROR] org.cloudfoundry.operations.ApplicationsTest.startNotStarted -- Time elapsed: 16.12 s
[ERROR] org.cloudfoundry.operations.ApplicationsTest.terminateTask -- Time elapsed: 20.00 s
[ERROR] org.cloudfoundry.operations.ApplicationsTest.pushPrivateDomain -- Time elapsed: 24.10 s
[ERROR] org.cloudfoundry.operations.ApplicationsTest.rename -- Time elapsed: 11.59 s
[ERROR] org.cloudfoundry.operations.ApplicationsTest.copySource -- Time elapsed: 29.03 s
[ERROR] org.cloudfoundry.operations.ApplicationsTest.pushManifestV3WithMetadata -- Time elapsed: 22.71 s
[ERROR] org.cloudfoundry.operations.ApplicationsTest.getStopped -- Time elapsed: 4.365 s
[ERROR] org.cloudfoundry.operations.ApplicationsTest.pushManifestV3MultipleApplications -- Time elapsed: 26.77 s
[ERROR] org.cloudfoundry.operations.ApplicationsTest.getMultipleBuildpacks -- Time elapsed: 4.525 s
[ERROR] org.cloudfoundry.operations.ApplicationsTest.enableSsh -- Time elapsed: 12.34 s
[ERROR] org.cloudfoundry.operations.ApplicationsTest.getMultipleBuildpacksManifest -- Time elapsed: 2.342 s
[ERROR] org.cloudfoundry.operations.ApplicationsTest.pushExisting -- Time elapsed: 29.01 s
[ERROR] org.cloudfoundry.operations.ApplicationsTest.pushNew -- Time elapsed: 15.97 s
[ERROR] org.cloudfoundry.operations.ApplicationsTest.pushUpdateTcpRoute skipped
[ERROR] org.cloudfoundry.operations.ApplicationsTest.unsetEnvironmentVariablePartial -- Time elapsed: 20.33 s
[ERROR] org.cloudfoundry.operations.ApplicationsTest.setHealthCheck -- Time elapsed: 24.58 s
[ERROR] org.cloudfoundry.operations.ApplicationsTest.get -- Time elapsed: 24.42 s
[ERROR] org.cloudfoundry.operations.ApplicationsTest.list -- Time elapsed: 11.29 s
[ERROR] org.cloudfoundry.operations.ApplicationsTest.logs skipped
[ERROR] org.cloudfoundry.operations.ApplicationsTest.stop -- Time elapsed: 24.69 s
[ERROR] org.cloudfoundry.operations.ApplicationsTest.pushManifestMultipleBuildpacks -- Time elapsed: 8.602 s
[ERROR] org.cloudfoundry.operations.ApplicationsTest.scale -- Time elapsed: 16.66 s
[ERROR] org.cloudfoundry.operations.ApplicationsTest.pushUpdateRoute -- Time elapsed: 13.73 s
[ERROR] org.cloudfoundry.operations.ApplicationsTest.getManifestForTcpRoute skipped
[ERROR] org.cloudfoundry.operations.ApplicationsTest.pushDomainNotFound -- Time elapsed: 0.364 s
[ERROR] org.cloudfoundry.operations.ApplicationsTest.getEvents -- Time elapsed: 2.207 s
[ERROR] org.cloudfoundry.operations.ApplicationsTest.pushWithHost -- Time elapsed: 24.92 s
[ERROR] org.cloudfoundry.operations.ApplicationsTest.restartStarted -- Time elapsed: 18.99 s
[ERROR] org.cloudfoundry.operations.ApplicationsTest.setReadinessHealthCheck -- Time elapsed: 16.99 s
[ERROR] org.cloudfoundry.operations.ApplicationsTest.pushNewDocker -- Time elapsed: 11.89 s
[ERROR] org.cloudfoundry.operations.ApplicationsTest.pushDirectory -- Time elapsed: 11.95 s
[ERROR] org.cloudfoundry.operations.ApplicationsTest.restage -- Time elapsed: 25.18 s
[ERROR] org.cloudfoundry.operations.ApplicationsTest.setEnvironmentVariable -- Time elapsed: 16.65 s
[ERROR] org.cloudfoundry.operations.ApplicationsTest.restartInstance -- Time elapsed: 19.55 s
[ERROR] org.cloudfoundry.operations.ApplicationsTest.deleteApplicationWithServiceBindings -- Time elapsed: 20.70 s
[ERROR] org.cloudfoundry.operations.ApplicationsTest.deleteApplicationAndRoutes -- Time elapsed: 20.33 s
[ERROR] org.cloudfoundry.operations.ApplicationsTest.runTask -- Time elapsed: 24.43 s
[ERROR] org.cloudfoundry.operations.ApplicationsTest.deleteApplication -- Time elapsed: 12.26 s
[ERROR] org.cloudfoundry.operations.ApplicationsTest.pushBindServices -- Time elapsed: 15.81 s
[ERROR] org.cloudfoundry.operations.ApplicationsTest.getHealthCheck -- Time elapsed: 4.164 s
[ERROR] org.cloudfoundry.operations.ApplicationsTest.pushMultipleBuildpacks -- Time elapsed: 8.430 s
[ERROR] org.cloudfoundry.operations.ApplicationsTest.logCacheLogs -- Time elapsed: 16.66 s
[ERROR] org.cloudfoundry.operations.ApplicationsTest.pushNoHostName -- Time elapsed: 26.56 s
[ERROR] org.cloudfoundry.operations.ApplicationsTest.pushManifestV3 -- Time elapsed: 26.54 s
[ERROR] org.cloudfoundry.operations.ApplicationsTest.pushNoRoute -- Time elapsed: 12.75 s <<< FAILURE!
java.lang.AssertionError: expectation "expectComplete" failed (expected: onComplete(); actual: onError(io.netty.channel.AbstractChannel$AnnotatedConnectException: Operation timed out: api.cf.xxx.io:443))
	at reactor.test.MessageFormatter.assertionError(MessageFormatter.java:115)
	at reactor.test.MessageFormatter.failPrefix(MessageFormatter.java:104)
	at reactor.test.MessageFormatter.fail(MessageFormatter.java:73)
	at reactor.test.MessageFormatter.failOptional(MessageFormatter.java:88)
	at reactor.test.DefaultStepVerifierBuilder.lambda$expectComplete$4(DefaultStepVerifierBuilder.java:344)
	at reactor.test.DefaultStepVerifierBuilder$SignalEvent.test(DefaultStepVerifierBuilder.java:2289)
	at reactor.test.DefaultStepVerifierBuilder$DefaultVerifySubscriber.onSignal(DefaultStepVerifierBuilder.java:1529)
	at reactor.test.DefaultStepVerifierBuilder$DefaultVerifySubscriber.onExpectation(DefaultStepVerifierBuilder.java:1477)
	at reactor.test.DefaultStepVerifierBuilder$DefaultVerifySubscriber.onError(DefaultStepVerifierBuilder.java:1129)
	at reactor.core.publisher.FluxFilterFuseable$FilterFuseableSubscriber.onError(FluxFilterFuseable.java:162)
	at reactor.core.publisher.FluxFlattenIterable$FlattenIterableSubscriber.drainAsync(FluxFlattenIterable.java:351)
	at reactor.core.publisher.FluxFlattenIterable$FlattenIterableSubscriber.drain(FluxFlattenIterable.java:724)
	at reactor.core.publisher.FluxFlattenIterable$FlattenIterableSubscriber.onError(FluxFlattenIterable.java:263)
	at reactor.core.publisher.FluxConcatArray$ConcatArraySubscriber.onError(FluxConcatArray.java:207)
	at reactor.core.publisher.MonoIgnoreElements$IgnoreElementsSubscriber.onError(MonoIgnoreElements.java:84)
	at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onError(MonoIgnoreThen.java:279)
	at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onError(FluxOnAssembly.java:544)
	at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onError(FluxOnAssembly.java:544)
	at reactor.core.publisher.MonoIgnoreElements$IgnoreElementsSubscriber.onError(MonoIgnoreElements.java:84)
	at reactor.core.publisher.MonoFlatMapMany$FlatMapManyInner.onError(MonoFlatMapMany.java:255)
	at reactor.core.publisher.FluxFlatMap$FlatMapMain.checkTerminated(FluxFlatMap.java:846)
	at reactor.core.publisher.FluxFlatMap$FlatMapMain.drainLoop(FluxFlatMap.java:612)
	at reactor.core.publisher.FluxFlatMap$FlatMapMain.drain(FluxFlatMap.java:592)
	at reactor.core.publisher.FluxFlatMap$FlatMapMain.innerError(FluxFlatMap.java:867)
	at reactor.core.publisher.FluxFlatMap$FlatMapInner.onError(FluxFlatMap.java:994)
	at reactor.core.publisher.FluxFlatMap$FlatMapMain.checkTerminated(FluxFlatMap.java:846)
	at reactor.core.publisher.FluxFlatMap$FlatMapMain.drainLoop(FluxFlatMap.java:612)
	at reactor.core.publisher.FluxFlatMap$FlatMapMain.drain(FluxFlatMap.java:592)
	at reactor.core.publisher.FluxFlatMap$FlatMapMain.onError(FluxFlatMap.java:455)
	at reactor.core.publisher.FluxFlatMap$FlatMapMain.checkTerminated(FluxFlatMap.java:846)
	at reactor.core.publisher.FluxFlatMap$FlatMapMain.drainLoop(FluxFlatMap.java:612)
	at reactor.core.publisher.FluxFlatMap$FlatMapMain.drain(FluxFlatMap.java:592)
	at reactor.core.publisher.FluxFlatMap$FlatMapMain.innerError(FluxFlatMap.java:867)
	at reactor.core.publisher.FluxFlatMap$FlatMapInner.onError(FluxFlatMap.java:994)
	at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onError(MonoIgnoreThen.java:279)
	at reactor.core.publisher.MonoWhen$WhenInner.onError(MonoWhen.java:423)
	at reactor.core.publisher.MonoFlatMap$FlatMapMain.secondError(MonoFlatMap.java:241)
	at reactor.core.publisher.MonoFlatMap$FlatMapInner.onError(MonoFlatMap.java:315)
	at reactor.core.publisher.MonoFlatMap$FlatMapMain.onError(MonoFlatMap.java:180)
	at reactor.core.publisher.FluxFilter$FilterSubscriber.onError(FluxFilter.java:157)
	at reactor.core.publisher.MonoNext$NextSubscriber.onError(MonoNext.java:93)
	at reactor.core.publisher.SerializedSubscriber.onError(SerializedSubscriber.java:124)
	at reactor.core.publisher.FluxRepeatWhen$RepeatWhenMainSubscriber.onError(FluxRepeatWhen.java:151)
	at reactor.core.publisher.FluxFilterFuseable$FilterFuseableSubscriber.onError(FluxFilterFuseable.java:162)
	at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.onError(FluxMapFuseable.java:340)
	at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onError(FluxOnAssembly.java:544)
	at reactor.core.publisher.MonoFlatMap$FlatMapMain.secondError(MonoFlatMap.java:241)
	at reactor.core.publisher.MonoFlatMap$FlatMapInner.onError(MonoFlatMap.java:315)
	at reactor.core.publisher.MonoSingle$SingleSubscriber.onError(MonoSingle.java:150)
	at reactor.core.publisher.FluxFlatMap$FlatMapMain.checkTerminated(FluxFlatMap.java:846)
	at reactor.core.publisher.FluxFlatMap$FlatMapMain.drainLoop(FluxFlatMap.java:612)
	at reactor.core.publisher.FluxFlatMap$FlatMapMain.drain(FluxFlatMap.java:592)
	at reactor.core.publisher.FluxFlatMap$FlatMapMain.onError(FluxFlatMap.java:455)
	at reactor.core.publisher.FluxFlatMap$FlatMapMain.checkTerminated(FluxFlatMap.java:846)
	at reactor.core.publisher.FluxFlatMap$FlatMapMain.drainLoop(FluxFlatMap.java:612)
	at reactor.core.publisher.FluxFlatMap$FlatMapMain.drain(FluxFlatMap.java:592)
	at reactor.core.publisher.FluxFlatMap$FlatMapMain.onError(FluxFlatMap.java:455)
	at reactor.core.publisher.FluxFlatMap$FlatMapMain.checkTerminated(FluxFlatMap.java:846)
	at reactor.core.publisher.FluxFlatMap$FlatMapMain.drainLoop(FluxFlatMap.java:612)
	at reactor.core.publisher.FluxFlatMap$FlatMapMain.drain(FluxFlatMap.java:592)
	at reactor.core.publisher.FluxFlatMap$FlatMapMain.onError(FluxFlatMap.java:455)
	at reactor.core.publisher.SerializedSubscriber.onError(SerializedSubscriber.java:124)
	at reactor.core.publisher.FluxRetryWhen$RetryWhenMainSubscriber.whenError(FluxRetryWhen.java:228)
	at reactor.core.publisher.FluxRetryWhen$RetryWhenOtherSubscriber.onError(FluxRetryWhen.java:278)
	at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.onError(FluxContextWrite.java:121)
	at reactor.core.publisher.FluxConcatMapNoPrefetch$FluxConcatMapNoPrefetchSubscriber.maybeOnError(FluxConcatMapNoPrefetch.java:326)
	at reactor.core.publisher.FluxConcatMapNoPrefetch$FluxConcatMapNoPrefetchSubscriber.onNext(FluxConcatMapNoPrefetch.java:211)
	at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.onNext(FluxContextWrite.java:107)
	at reactor.core.publisher.SinkManyEmitterProcessor.drain(SinkManyEmitterProcessor.java:476)
	at reactor.core.publisher.SinkManyEmitterProcessor$EmitterInner.drainParent(SinkManyEmitterProcessor.java:620)
	at reactor.core.publisher.FluxPublish$PubSubInner.request(FluxPublish.java:874)
	at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.request(FluxContextWrite.java:136)
	at reactor.core.publisher.FluxConcatMapNoPrefetch$FluxConcatMapNoPrefetchSubscriber.request(FluxConcatMapNoPrefetch.java:336)
	at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.request(FluxContextWrite.java:136)
	at reactor.core.publisher.Operators$DeferredSubscription.request(Operators.java:1743)
	at reactor.core.publisher.FluxRetryWhen$RetryWhenMainSubscriber.onError(FluxRetryWhen.java:195)
	at reactor.core.publisher.FluxPeek$PeekSubscriber.onError(FluxPeek.java:222)
	at reactor.core.publisher.MonoFlatMapMany$FlatMapManyMain.onError(MonoFlatMapMany.java:204)
	at reactor.core.publisher.MonoFlatMap$FlatMapMain.secondError(MonoFlatMap.java:241)
	at reactor.core.publisher.MonoFlatMap$FlatMapInner.onError(MonoFlatMap.java:315)
	at reactor.core.publisher.SerializedSubscriber.onError(SerializedSubscriber.java:124)
	at reactor.core.publisher.FluxRetryWhen$RetryWhenMainSubscriber.whenError(FluxRetryWhen.java:228)
	at reactor.core.publisher.FluxRetryWhen$RetryWhenOtherSubscriber.onError(FluxRetryWhen.java:278)
	at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.onError(FluxContextWrite.java:121)
	at reactor.core.publisher.FluxConcatMapNoPrefetch$FluxConcatMapNoPrefetchSubscriber.maybeOnError(FluxConcatMapNoPrefetch.java:326)
	at reactor.core.publisher.FluxConcatMapNoPrefetch$FluxConcatMapNoPrefetchSubscriber.onNext(FluxConcatMapNoPrefetch.java:211)
	at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.onNext(FluxContextWrite.java:107)
	at reactor.core.publisher.SinkManyEmitterProcessor.drain(SinkManyEmitterProcessor.java:476)
	at reactor.core.publisher.SinkManyEmitterProcessor$EmitterInner.drainParent(SinkManyEmitterProcessor.java:620)
	at reactor.core.publisher.FluxPublish$PubSubInner.request(FluxPublish.java:874)
	at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.request(FluxContextWrite.java:136)
	at reactor.core.publisher.FluxConcatMapNoPrefetch$FluxConcatMapNoPrefetchSubscriber.request(FluxConcatMapNoPrefetch.java:336)
	at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.request(FluxContextWrite.java:136)
	at reactor.core.publisher.Operators$DeferredSubscription.request(Operators.java:1743)
	at reactor.core.publisher.FluxRetryWhen$RetryWhenMainSubscriber.onError(FluxRetryWhen.java:195)
	at reactor.core.publisher.MonoCreate$DefaultMonoSink.error(MonoCreate.java:205)
	at reactor.netty.http.client.HttpClientConnect$MonoHttpConnect$ClientTransportSubscriber.onError(HttpClientConnect.java:311)
	at reactor.core.publisher.MonoCreate$DefaultMonoSink.error(MonoCreate.java:205)
	at reactor.netty.resources.DefaultPooledConnectionProvider$DisposableAcquire.onError(DefaultPooledConnectionProvider.java:172)
	at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.onError(FluxContextWrite.java:121)
	at reactor.netty.internal.shaded.reactor.pool.AbstractPool$Borrower.fail(AbstractPool.java:488)
	at reactor.netty.internal.shaded.reactor.pool.SimpleDequePool.lambda$drainLoop$9(SimpleDequePool.java:433)
	at reactor.core.publisher.FluxDoOnEach$DoOnEachSubscriber.onError(FluxDoOnEach.java:186)
	at reactor.core.publisher.MonoCreate$DefaultMonoSink.error(MonoCreate.java:205)
	at reactor.netty.resources.DefaultPooledConnectionProvider$PooledConnectionAllocator$PooledConnectionInitializer.onError(DefaultPooledConnectionProvider.java:583)
	at reactor.core.publisher.MonoFlatMap$FlatMapMain.secondError(MonoFlatMap.java:241)
	at reactor.core.publisher.MonoFlatMap$FlatMapInner.onError(MonoFlatMap.java:315)
	at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:106)
	at reactor.core.publisher.Operators.error(Operators.java:198)
	at reactor.core.publisher.MonoError.subscribe(MonoError.java:53)
	at reactor.core.publisher.Mono.subscribe(Mono.java:4512)
	at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:103)
	at reactor.netty.transport.TransportConnector$MonoChannelPromise.tryFailure(TransportConnector.java:576)
	at reactor.netty.transport.TransportConnector$MonoChannelPromise.setFailure(TransportConnector.java:522)
	at reactor.netty.transport.TransportConnector.lambda$doConnect$7(TransportConnector.java:261)
	at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:590)
	at io.netty.util.concurrent.DefaultPromise.notifyListeners0(DefaultPromise.java:583)
	at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:559)
	at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:492)
	at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:636)
	at io.netty.util.concurrent.DefaultPromise.setFailure0(DefaultPromise.java:629)
	at io.netty.util.concurrent.DefaultPromise.tryFailure(DefaultPromise.java:118)
	at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.fulfillConnectPromise(AbstractNioChannel.java:322)
	at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:338)
	at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:776)
	at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724)
	at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650)
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562)
	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
	at java.base/java.lang.Thread.run(Thread.java:1583)
	Suppressed: io.netty.channel.AbstractChannel$AnnotatedConnectException: Operation timed out: api.cf.xxx.io:443
		Suppressed: The stacktrace has been enhanced by Reactor, refer to additional information below: 
Assembly trace from producer [reactor.core.publisher.MonoFlatMap] :
	reactor.core.publisher.Mono.checkpoint(Mono.java:2206)
	org.cloudfoundry.reactor.client.v2.jobs.ReactorJobs.get(ReactorJobs.java:55)
Error has been observed at the following site(s):
	*__checkpoint() ⇢ at org.cloudfoundry.reactor.client.v2.jobs.ReactorJobs.get(ReactorJobs.java:55)
	*__checkpoint() ⇢ at org.cloudfoundry.operations.applications.DefaultApplications.pushManifest(DefaultApplications.java:685)
	|_ checkpoint() ⇢ at org.cloudfoundry.operations.applications.DefaultApplications.push(DefaultApplications.java:631)
Original Stack Trace:
	Caused by: java.net.ConnectException: Operation timed out
		at java.base/sun.nio.ch.Net.pollConnect(Native Method)
		at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:694)
		at java.base/sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:973)
		at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:337)
		at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:335)
		at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:776)
		at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724)
		at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650)
		at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562)
		at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)
		at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
		at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
		at java.base/java.lang.Thread.run(Thread.java:1583)

[ERROR] org.cloudfoundry.operations.ApplicationsTest.logsRecent -- Time elapsed: 20.07 s
[ERROR] org.cloudfoundry.operations.ApplicationsTest.pushRoutePath -- Time elapsed: 26.43 s
[INFO] Running org.cloudfoundry.operations.ApplicationsTest
10:55:55.104 cloudfoundry-client-nio-2   cloudfoundry-client.compatibility     Client supports API version 2.272.0 and is connected to server with API version 2.274.0. Things may not work as expected.
10:56:09.269 cloudfoundry-client-nio-12  cloudfoundry-client.compatibility     Client supports API version 2.272.0 and is connected to server with API version 2.274.0. Things may not work as expected.
10:57:01.332 main                        org.springframework.test.context.TestContextManager Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener] to prepare test instance [org.cloudfoundry.operations.ApplicationsTest@697c0ae6]
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'org.cloudfoundry.operations.ApplicationsTest': Unsatisfied dependency expressed through field 'serviceBrokerId': Error creating bean with name 'serviceBrokerId' defined in org.cloudfoundry.IntegrationTestConfiguration: io.netty.channel.AbstractChannel$AnnotatedConnectException: Operation timed out: api.cf.xxx.io:443
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:787)
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:767)
	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:145)
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:508)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1418)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireBeanProperties(AbstractAutowireCapableBeanFactory.java:397)
	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:142)
	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:97)
	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260)
	at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:163)
	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:378)
	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:383)
	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:378)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
	at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1708)
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
	at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310)
	at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735)
	at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734)
	at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762)
	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:377)
	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:290)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:289)
	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:279)
	at java.base/java.util.Optional.orElseGet(Optional.java:364)
	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:278)
	at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:106)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:105)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:69)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35)
	at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
	at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:198)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:169)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:93)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:58)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:141)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:57)
	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:103)
	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:85)
	at org.junit.platform.launcher.core.DelegatingLauncher.execute(DelegatingLauncher.java:47)
	at org.apache.maven.surefire.junitplatform.LazyLauncher.execute(LazyLauncher.java:56)
	at org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.invokeAllTests(JUnitPlatformProvider.java:164)
	at org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.invoke(JUnitPlatformProvider.java:124)
	at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:385)
	at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:162)
	at org.apache.maven.surefire.booter.ForkedBooter.run(ForkedBooter.java:507)
	at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:495)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'serviceBrokerId' defined in org.cloudfoundry.IntegrationTestConfiguration: io.netty.channel.AbstractChannel$AnnotatedConnectException: Operation timed out: api.cf.xxx.io:443
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1773)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521)
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:325)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:323)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:254)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1443)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1353)
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:784)
	... 76 common frames omitted
Caused by: reactor.core.Exceptions$ReactiveException: io.netty.channel.AbstractChannel$AnnotatedConnectException: Operation timed out: api.cf.xxx.io:443
	at reactor.core.Exceptions.propagate(Exceptions.java:408)
	at reactor.core.publisher.BlockingSingleSubscriber.blockingGet(BlockingSingleSubscriber.java:101)
	at reactor.core.publisher.Mono.block(Mono.java:1728)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1877)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1830)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1769)
	... 86 common frames omitted
	Suppressed: java.lang.Exception: #block terminated with an error
		at reactor.core.publisher.BlockingSingleSubscriber.blockingGet(BlockingSingleSubscriber.java:103)
		... 92 common frames omitted
Caused by: io.netty.channel.AbstractChannel$AnnotatedConnectException: Operation timed out: api.cf.xxx.io:443
	Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: 
Assembly trace from producer [reactor.core.publisher.MonoFlatMap] :
	reactor.core.publisher.Mono.checkpoint(Mono.java:2206)
	org.cloudfoundry.reactor.client.v2.servicebrokers.ReactorServiceBrokers.create(ReactorServiceBrokers.java:63)
Error has been observed at the following site(s):
	*__checkpoint() ⇢ at org.cloudfoundry.reactor.client.v2.servicebrokers.ReactorServiceBrokers.create(ReactorServiceBrokers.java:63)
Original Stack Trace:
Caused by: java.net.ConnectException: Operation timed out
	at java.base/sun.nio.ch.Net.pollConnect(Native Method)
	at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:694)
	at java.base/sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:973)
	at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:337)
	at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:335)
	at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:776)
	at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724)
	at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650)
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562)
	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
	at java.base/java.lang.Thread.run(Thread.java:1583)
10:57:11.087 cloudfoundry-client-nio-5   cloudfoundry-client.test              Unable to delete space test-space-nrpsf
org.cloudfoundry.client.v2.ClientV2Exception: UnknownError(10001): An unknown error occurred.
	at org.cloudfoundry.util.JobUtils.getError(JobUtils.java:123)
	at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:132)
	at reactor.core.publisher.FluxFilter$FilterSubscriber.onNext(FluxFilter.java:113)
	at reactor.core.publisher.MonoNext$NextSubscriber.onNext(MonoNext.java:82)
	at reactor.core.publisher.SerializedSubscriber.onNext(SerializedSubscriber.java:99)
	at reactor.core.publisher.FluxRepeatWhen$RepeatWhenMainSubscriber.onNext(FluxRepeatWhen.java:142)
	at reactor.core.publisher.FluxFilterFuseable$FilterFuseableSubscriber.onNext(FluxFilterFuseable.java:118)
	at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.onNext(FluxMapFuseable.java:299)
	at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onNext(FluxOnAssembly.java:539)
	at reactor.core.publisher.MonoFlatMap$FlatMapMain.secondComplete(MonoFlatMap.java:245)
	at reactor.core.publisher.MonoFlatMap$FlatMapInner.onNext(MonoFlatMap.java:305)
	at reactor.core.publisher.Operators$MonoInnerProducerBase.complete(Operators.java:2842)
	at reactor.core.publisher.MonoSingle$SingleSubscriber.onComplete(MonoSingle.java:180)
	at reactor.core.publisher.FluxFlatMap$FlatMapMain.checkTerminated(FluxFlatMap.java:850)
	at reactor.core.publisher.FluxFlatMap$FlatMapMain.drainLoop(FluxFlatMap.java:612)
	at reactor.core.publisher.FluxFlatMap$FlatMapMain.innerComplete(FluxFlatMap.java:898)
	at reactor.core.publisher.FluxFlatMap$FlatMapInner.onComplete(FluxFlatMap.java:1001)
	at reactor.core.publisher.FluxMap$MapSubscriber.onComplete(FluxMap.java:144)
	at reactor.core.publisher.FluxHandle$HandleSubscriber.onComplete(FluxHandle.java:223)
	at reactor.core.publisher.FluxMap$MapConditionalSubscriber.onComplete(FluxMap.java:275)
	at reactor.core.publisher.FluxDoFinally$DoFinallySubscriber.onComplete(FluxDoFinally.java:128)
	at reactor.core.publisher.FluxHandleFuseable$HandleFuseableSubscriber.onComplete(FluxHandleFuseable.java:239)
	at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.onComplete(FluxContextWrite.java:126)
	at reactor.core.publisher.Operators$BaseFluxToMonoOperator.completePossiblyEmpty(Operators.java:2098)
	at reactor.core.publisher.MonoCollectList$MonoCollectListSubscriber.onComplete(MonoCollectList.java:118)
	at reactor.core.publisher.FluxPeek$PeekSubscriber.onComplete(FluxPeek.java:260)
	at reactor.core.publisher.FluxMap$MapSubscriber.onComplete(FluxMap.java:144)
	at reactor.core.publisher.FluxDoFinally$DoFinallySubscriber.onComplete(FluxDoFinally.java:128)
	at reactor.core.publisher.FluxMap$MapSubscriber.onComplete(FluxMap.java:144)
	at reactor.netty.channel.FluxReceive.onInboundComplete(FluxReceive.java:415)
	at reactor.netty.channel.ChannelOperations.onInboundComplete(ChannelOperations.java:446)
	at reactor.netty.channel.ChannelOperations.terminate(ChannelOperations.java:500)
	at reactor.netty.http.client.HttpClientOperations.onInboundNext(HttpClientOperations.java:780)
	at reactor.netty.channel.ChannelOperationsHandler.channelRead(ChannelOperationsHandler.java:114)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
	at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
	at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:436)
	at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:346)
	at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:318)
	at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:251)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
	at io.netty.handler.logging.LoggingHandler.channelRead(LoggingHandler.java:280)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
	at io.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1475)
	at io.netty.handler.ssl.SslHandler.decodeJdkCompatible(SslHandler.java:1338)
	at io.netty.handler.ssl.SslHandler.decode(SslHandler.java:1387)
	at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:529)
	at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:468)
	at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:290)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
	at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
	at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166)
	at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:788)
	at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724)
	at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650)
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562)
	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
	at java.base/java.lang.Thread.run(Thread.java:1583)
10:57:11.089 main                        org.springframework.beans.factory.support.DisposableBeanAdapter Invocation of destroy method failed on bean with name 'cloudFoundryCleaner': org.cloudfoundry.client.v2.ClientV2Exception: UnknownError(10001): An unknown error occurred.
[ERROR] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 76.75 s <<< FAILURE! -- in org.cloudfoundry.operations.ApplicationsTest
[ERROR] org.cloudfoundry.operations.ApplicationsTest.pushNoRoute -- Time elapsed: 0 s <<< ERROR!
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'org.cloudfoundry.operations.ApplicationsTest': Unsatisfied dependency expressed through field 'serviceBrokerId': Error creating bean with name 'serviceBrokerId' defined in org.cloudfoundry.IntegrationTestConfiguration: io.netty.channel.AbstractChannel$AnnotatedConnectException: Operation timed out: api.cf.xxx.io:443
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:787)
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:767)
	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:145)
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:508)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1418)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireBeanProperties(AbstractAutowireCapableBeanFactory.java:397)
	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:142)
	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:97)
	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260)
	at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:163)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
	at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1708)
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
	at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310)
	at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735)
	at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734)
	at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762)
	at java.base/java.util.Optional.orElseGet(Optional.java:364)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'serviceBrokerId' defined in org.cloudfoundry.IntegrationTestConfiguration: io.netty.channel.AbstractChannel$AnnotatedConnectException: Operation timed out: api.cf.xxx.io:443
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1773)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521)
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:325)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:323)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:254)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1443)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1353)
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:784)
	... 21 more
Caused by: reactor.core.Exceptions$ReactiveException: io.netty.channel.AbstractChannel$AnnotatedConnectException: Operation timed out: api.cf.xxx.io:443
	at reactor.core.Exceptions.propagate(Exceptions.java:408)
	at reactor.core.publisher.BlockingSingleSubscriber.blockingGet(BlockingSingleSubscriber.java:101)
	at reactor.core.publisher.Mono.block(Mono.java:1728)
	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1877)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1830)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1769)
	... 31 more
	Suppressed: java.lang.Exception: #block terminated with an error
		at reactor.core.publisher.BlockingSingleSubscriber.blockingGet(BlockingSingleSubscriber.java:103)
		... 36 more
Caused by: io.netty.channel.AbstractChannel$AnnotatedConnectException: Operation timed out: api.cf.xxx.io:443
	Suppressed: The stacktrace has been enhanced by Reactor, refer to additional information below: 
Assembly trace from producer [reactor.core.publisher.MonoFlatMap] :
	reactor.core.publisher.Mono.checkpoint(Mono.java:2206)
	org.cloudfoundry.reactor.client.v2.servicebrokers.ReactorServiceBrokers.create(ReactorServiceBrokers.java:63)
Error has been observed at the following site(s):
	*__checkpoint() ⇢ at org.cloudfoundry.reactor.client.v2.servicebrokers.ReactorServiceBrokers.create(ReactorServiceBrokers.java:63)
Original Stack Trace:
Caused by: java.net.ConnectException: Operation timed out
	at java.base/sun.nio.ch.Net.pollConnect(Native Method)
	at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:694)
	at java.base/sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:973)
	at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:337)
	at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:335)
	at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:776)
	at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724)
	at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650)
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562)
	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
	at java.base/java.lang.Thread.run(Thread.java:1583)

[INFO] Running org.cloudfoundry.operations.ApplicationsTest
10:57:11.507 cloudfoundry-client-nio-2   cloudfoundry-client.compatibility     Client supports API version 2.272.0 and is connected to server with API version 2.274.0. Things may not work as expected.
10:57:25.070 cloudfoundry-client-nio-12  cloudfoundry-client.compatibility     Client supports API version 2.272.0 and is connected to server with API version 2.274.0. Things may not work as expected.
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 73.93 s -- in org.cloudfoundry.operations.ApplicationsTest
[INFO] org.cloudfoundry.operations.ApplicationsTest.pushNoRoute -- Time elapsed: 8.510 s
[INFO] 
[INFO] Results:
[INFO] 
[WARNING] Flakes: 
[WARNING] org.cloudfoundry.operations.ApplicationsTest.pushNoRoute
[ERROR]   Run 1: ApplicationsTest.pushNoRoute expectation "expectComplete" failed (expected: onComplete(); actual: onError(io.netty.channel.AbstractChannel$AnnotatedConnectException: Operation timed out: api.cf.xxx.io:443))
[ERROR]   Run 2: ApplicationsTest.pushNoRoute » UnsatisfiedDependency Error creating bean with name 'org.cloudfoundry.operations.ApplicationsTest': Unsatisfied dependency expressed through field 'serviceBrokerId': Error creating bean with name 'serviceBrokerId' defined in org.cloudfoundry.IntegrationTestConfiguration: io.netty.channel.AbstractChannel$AnnotatedConnectException: Operation timed out: api.cf.xxx.io:443
[INFO]   Run 3: PASS
[INFO] 
[INFO] 
[WARNING] Tests run: 59, Failures: 0, Errors: 0, Skipped: 5, Flakes: 1
[INFO] 
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  18:58 min
[INFO] Finished at: 2026-03-03T10:58:25+01:00
[INFO] ------------------------------------------------------------------------

@pivotal-david-osullivan
Copy link
Contributor

Thank you for the PR!

Compilation is currently failing on the implementation missing the new recentLogs method that you added to the client

@ZPascal
Copy link
Author

ZPascal commented Nov 1, 2024

Thank you @pivotal-david-osullivan & @anthonydahanne for fixing the tests and the reactor part. I am also working on the issue again from the SAP side and I plan to set up a BBL environment to test the change in a CF environment. Let's sync on Slack how we can handle it together and we can discuss the test setup/steps.

@anthonydahanne
Copy link
Contributor

Thank you @pivotal-david-osullivan & @anthonydahanne for fixing the tests and the reactor part. I am also working on the issue again from the SAP side and I plan to set up a BBL environment to test the change in a CF environment. Let's sync on Slack how we can handle it together and we can discuss the test setup/steps.

cool!
the current struggle is supporting recent , since there does not seem to be a Websocket or SSE endpoint for streaming logs; apparently the CLI polls, so we'd need to do just that.

@linux-foundation-easycla
Copy link

linux-foundation-easycla bot commented Apr 9, 2025

CLA Signed

The committers listed above are authorized under a signed CLA.

Kehrlann added a commit to Kehrlann/cf-java-client that referenced this pull request Apr 9, 2025
- The DopplerClient does not work with Loggregator >= 107.0.0, and we
  cannot obtain "recent" logs. Until this is fixed, we cannot cut a
  release. That is the only blocking test.
- See cloudfoundrygh-1181, cloudfoundrygh-1230, cloudfoundrygh-1237
pivotal-david-osullivan pushed a commit that referenced this pull request Apr 11, 2025
…CF 2.x line (#1265)

* Restrict ApplicationsTests#logs to CF 2.x line

- The DopplerClient does not work with Loggregator >= 107.0.0, and we
  cannot obtain "recent" logs. Until this is fixed, we cannot cut a
  release. That is the only blocking test.
- See gh-1181, gh-1230, gh-1237

* Introduce Applications#logs API that will replace the doppler-based implementation

Signed-off-by: Daniel Garnier-Moiroux <daniel.garnier-moiroux@broadcom.com>

---------

Signed-off-by: Daniel Garnier-Moiroux <daniel.garnier-moiroux@broadcom.com>
@Kehrlann Kehrlann self-assigned this May 28, 2025
@Kehrlann Kehrlann added this to the 6.0.0 release milestone May 28, 2025
@ZPascal ZPascal force-pushed the issue-1181 branch 5 times, most recently from 1edaf8c to 210376c Compare February 26, 2026 16:11
ZPascal and others added 9 commits February 26, 2026 17:18
* because of the findFirst() on the envelopes, it could be type OUT or ERR, so we don't really care, as long as the payload is the same.
Also, we don't care about the precise argument to the recentLogs call
The old "Applications.logs" method is keept for
compatibility and when a log stream is needed.

Adding new "logsRecent" method to access the logCache.

integration-tests "ApplicationTest.logs" and
"ApplicationTest.logsRecent" work.

Minor changes in DefaultApplicationsTest in other JUnit tests
to make them execute in Eclipse.
@ZPascal ZPascal changed the title feat: Add RecentLogs support feat: Replace deprecated Doppler recentLogs with Log Cache client Mar 3, 2026
@ZPascal ZPascal marked this pull request as ready for review March 3, 2026 14:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

recentLogs in DopplerClient does not work anymore since loggregator-release v107.0.0

6 participants