diff --git a/gateway-service/src/main/java/org/zowe/apiml/gateway/filters/ZaasSchemeTransformRest.java b/gateway-service/src/main/java/org/zowe/apiml/gateway/filters/ZaasSchemeTransformRest.java index 263bf2d6f3..4b68ed818f 100644 --- a/gateway-service/src/main/java/org/zowe/apiml/gateway/filters/ZaasSchemeTransformRest.java +++ b/gateway-service/src/main/java/org/zowe/apiml/gateway/filters/ZaasSchemeTransformRest.java @@ -48,7 +48,7 @@ public class ZaasSchemeTransformRest implements ZaasSchemeTransform { private static final String HEADER_SERVICE_ID = "X-Service-Id"; - private static final String SERVICE_IS_UNAVAILABLE_MESSAGE = "There are no instance of ZAAS available"; + private static final String SERVICE_IS_UNAVAILABLE_MESSAGE = "There are no instances of ZAAS available"; private static final ObjectWriter WRITER = new ObjectMapper().writer(); diff --git a/gateway-service/src/main/java/org/zowe/apiml/gateway/service/AbstractAuthProviderFilter.java b/gateway-service/src/main/java/org/zowe/apiml/gateway/service/AbstractAuthProviderFilter.java index 58e2ef7343..166bde3100 100644 --- a/gateway-service/src/main/java/org/zowe/apiml/gateway/service/AbstractAuthProviderFilter.java +++ b/gateway-service/src/main/java/org/zowe/apiml/gateway/service/AbstractAuthProviderFilter.java @@ -65,7 +65,7 @@ protected Mono invoke( ) { Iterator i = robinRound.getIterator(serviceInstances); if (!i.hasNext()) { - throw new ServiceNotAccessibleException("There are no instance of ZAAS available"); + throw new ServiceNotAccessibleException("There are no instances of ZAAS available"); } return requestWithHa(i, requestCreator); diff --git a/gateway-service/src/test/java/org/zowe/apiml/gateway/acceptance/RetryPerServiceTest.java b/gateway-service/src/test/java/org/zowe/apiml/gateway/acceptance/RetryPerServiceTest.java index a421a9b483..f6b03011ad 100644 --- a/gateway-service/src/test/java/org/zowe/apiml/gateway/acceptance/RetryPerServiceTest.java +++ b/gateway-service/src/test/java/org/zowe/apiml/gateway/acceptance/RetryPerServiceTest.java @@ -158,7 +158,8 @@ class GivenZaas extends AcceptanceTestWithMockServices { @MockitoSpyBean private ReactiveDiscoveryClient reactiveDiscoveryClient; - private AtomicInteger counter = new AtomicInteger(0); + private AtomicInteger queryCounter = new AtomicInteger(0); + private AtomicInteger loginCounter = new AtomicInteger(0); @BeforeAll void setup() { @@ -167,12 +168,13 @@ void setup() { .responseCode(204) .assertion(he -> assertEquals("Basic dXNlcjpwYXNz", he.getRequestHeaders().getFirst(HttpHeaders.AUTHORIZATION))) .assertion(he -> assertEquals("POST", he.getRequestMethod())) + .assertion(he -> loginCounter.incrementAndGet()) .and() .addEndpoint("/zaas/api/v1/auth/query") .responseCode(200) .assertion(he -> { assertNotNull(he); - counter.incrementAndGet(); + queryCounter.incrementAndGet(); }) .contentType(APPLICATION_JSON) .body("{\"status\":\"valid\"}") @@ -194,7 +196,7 @@ String login() { } @Test - void whenOneZaasUnresponsive_thenQueryDoesNotFail() { + void whenTwoZaasUnresponsive_thenQueryDoesNotFail() { var token = login(); // 2 out of 3 instances will fail @@ -221,8 +223,32 @@ void whenOneZaasUnresponsive_thenQueryDoesNotFail() { .statusCode(SC_OK); } - assertEquals(50, counter.get()); + assertEquals(50, queryCounter.get()); + } + + @Test + void whenTwoZaasUnresponsive_thenLoginDoesNotFail() { + // 2 out of 3 instances will fail + when(discoveryClient.getInstances(CoreService.ZAAS.getServiceId())) + .thenReturn(List.of( + buildZaasInfo(randomPort()), + buildZaasInfo(zaasService.getPort()), + buildZaasInfo(randomPort()) + )); + + when(reactiveDiscoveryClient.getInstances(CoreService.ZAAS.getServiceId())) + .thenReturn(Flux.just( + buildZaasInfo(randomPort()), + buildZaasInfo(zaasService.getPort()), + buildZaasInfo(randomPort()) + )); + + System.out.println("test"); + for (int i = 0; i < 50; i ++) { + login(); + } + assertEquals(50, loginCounter.get()); } private int randomPort() {