|
65 | 65 | import org.cloudfoundry.reactor.tokenprovider.PasswordGrantTokenProvider; |
66 | 66 | import org.cloudfoundry.reactor.uaa.ReactorUaaClient; |
67 | 67 | import org.cloudfoundry.routing.RoutingClient; |
| 68 | +import org.cloudfoundry.routing.v1.routergroups.ListRouterGroupsRequest; |
| 69 | +import org.cloudfoundry.routing.v1.routergroups.ListRouterGroupsResponse; |
| 70 | +import org.cloudfoundry.routing.v1.routergroups.UpdateRouterGroupRequest; |
68 | 71 | import org.cloudfoundry.uaa.UaaClient; |
69 | 72 | import org.cloudfoundry.uaa.clients.CreateClientRequest; |
70 | 73 | import org.cloudfoundry.uaa.groups.AddMemberRequest; |
@@ -251,6 +254,7 @@ String clientSecret(NameFactory nameFactory) { |
251 | 254 | } |
252 | 255 |
|
253 | 256 | @Bean |
| 257 | + @DependsOn("routerGroupPorts") |
254 | 258 | CloudFoundryCleaner cloudFoundryCleaner( |
255 | 259 | @Qualifier("admin") CloudFoundryClient cloudFoundryClient, |
256 | 260 | NameFactory nameFactory, |
@@ -455,6 +459,55 @@ String planName(NameFactory nameFactory) { |
455 | 459 | return nameFactory.getPlanName(); |
456 | 460 | } |
457 | 461 |
|
| 462 | + // Tests allocate TCP ports from NameFactory, so the default router group has to reserve them |
| 463 | + // regardless of the order in which the tests run (or of the deployment's default range). |
| 464 | + @Bean(initMethod = "block") |
| 465 | + Mono<Void> routerGroupPorts( |
| 466 | + ConnectionContext connectionContext, |
| 467 | + @Value("${test.admin.password}") String password, |
| 468 | + @Value("${test.admin.username}") String username, |
| 469 | + @Value("${skip.tcp.routing.tests:false}") boolean skipTcpRouting) { |
| 470 | + if (skipTcpRouting) { |
| 471 | + return Mono.empty(); |
| 472 | + } |
| 473 | + |
| 474 | + // Not the shared routingClient: its token provider depends on the cleaner, which depends on |
| 475 | + // this bean |
| 476 | + RoutingClient routingClient = |
| 477 | + ReactorRoutingClient.builder() |
| 478 | + .connectionContext(connectionContext) |
| 479 | + .tokenProvider( |
| 480 | + PasswordGrantTokenProvider.builder() |
| 481 | + .password(password) |
| 482 | + .username(username) |
| 483 | + .build()) |
| 484 | + .build(); |
| 485 | + |
| 486 | + return routingClient |
| 487 | + .routerGroups() |
| 488 | + .list(ListRouterGroupsRequest.builder().build()) |
| 489 | + .flatMapIterable(ListRouterGroupsResponse::getRouterGroups) |
| 490 | + .filter(group -> "default-tcp".equals(group.getName())) |
| 491 | + .next() |
| 492 | + .switchIfEmpty( |
| 493 | + Mono.fromRunnable( |
| 494 | + () -> |
| 495 | + this.logger.warn( |
| 496 | + "No default-tcp router group, TCP route tests will" |
| 497 | + + " fail"))) |
| 498 | + .flatMap( |
| 499 | + group -> |
| 500 | + routingClient |
| 501 | + .routerGroups() |
| 502 | + .update( |
| 503 | + UpdateRouterGroupRequest.builder() |
| 504 | + .reservablePorts( |
| 505 | + RandomNameFactory.PORT_RANGE) |
| 506 | + .routerGroupId(group.getRouterGroupId()) |
| 507 | + .build())) |
| 508 | + .then(); |
| 509 | + } |
| 510 | + |
458 | 511 | @Bean |
459 | 512 | RoutingClient routingClient(ConnectionContext connectionContext, TokenProvider tokenProvider) { |
460 | 513 | return ReactorRoutingClient.builder() |
|
0 commit comments