X-Git-Url: https://juplo.de/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Ftest%2Fjava%2Fde%2Fjuplo%2Ffacebook%2Ferrors%2FGraphApiExchangeFilterFunctionIntegrationTest.java;h=b9636ce12bb920b7c25352dab0493112f6e4aaa9;hb=f16862b51e98a30710fe20dc867110d48bb03be3;hp=d17c7f7760fef086893a0eded85a59bdbfff2974;hpb=b4a025a1af059d5fb844dc1f0c3d4c9ae76ac17b;p=facebook-errors diff --git a/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java b/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java index d17c7f7..b9636ce 100644 --- a/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java +++ b/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java @@ -1,17 +1,21 @@ package de.juplo.facebook.errors; +import de.juplo.facebook.errors.GraphApiException.Type; import java.time.Duration; -import java.util.List; import okhttp3.mockwebserver.MockResponse; import okhttp3.mockwebserver.MockWebServer; import org.junit.After; -import org.junit.Assert; +import static org.junit.Assert.assertEquals; import org.junit.Before; import org.junit.Test; -import org.springframework.web.reactive.function.client.ExchangeFilterFunction; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.HttpStatus; +import org.springframework.http.client.reactive.JettyClientHttpConnector; import org.springframework.web.reactive.function.client.WebClient; import reactor.core.publisher.Mono; +import reactor.test.StepVerifier; /** @@ -20,69 +24,107 @@ import reactor.core.publisher.Mono; */ public class GraphApiExchangeFilterFunctionIntegrationTest { - private MockWebServer server; + private static final Logger LOG = + LoggerFactory.getLogger(GraphApiExchangeFilterFunctionIntegrationTest.class); + private MockWebServer server; private WebClient webClient; @Before - public void setup() { - this.server = new MockWebServer(); - String baseUrl = this.server.url("/").toString(); - this.webClient = WebClient.create(baseUrl); + public void setup() + { + server = new MockWebServer(); + webClient = + WebClient + .builder() + .clientConnector(new JettyClientHttpConnector()) + .baseUrl(server.url("/").toString()) + .filter(new GraphApiExchangeFilterFunction()) + .build(); } @After - public void shutdown() throws Exception { - this.server.shutdown(); + public void shutdown() throws Exception + { + this.server.shutdown(); } @Test - public void errorHandlingFilter() throws Exception + public void testValidError() { - - ExchangeFilterFunction filter = ExchangeFilterFunction.ofResponseProcessor( - clientResponse -> - { - List headerValues = clientResponse.headers().header("Foo"); - return headerValues.isEmpty() ? Mono.error( - new MyException("Response does not contain Foo header")) : Mono.just( - clientResponse); - } - ); - - WebClient filteredClient = this.webClient.filter(filter); - - // header not present - this.server.enqueue(new MockResponse().setHeader("Content-Type", - "text/plain").setBody("Hello Spring!")); - - Mono result = filteredClient.get() - .uri("/greeting?name=Spring") - .retrieve() - .bodyToMono(String.class); - - StepVerifier.create(result) - .expectError(MyException.class) + server + .enqueue(new MockResponse() + .setResponseCode(HttpStatus.BAD_REQUEST.value()) + .setHeader("Content-Type", "application/json") + .setBody( + "{\n" + + " \"error\":\n" + + " {\n" + + " \"message\": \"(#613) Calls to stream have exceeded the rate of 600 calls per 600 seconds.\",\n" + + " \"type\": \"OAuthException\",\n" + + " \"code\": 613\n" + + " }\n" + + "}")); + + + Mono result = + webClient + .get() + .uri("/egal") + .retrieve() + .bodyToMono(String.class); + + StepVerifier + .create(result) + .expectErrorSatisfies(throwable -> + { + assertEquals(RateLimitExceededException.class, throwable.getClass()); + RateLimitExceededException e = (RateLimitExceededException)throwable; + LOG.debug("{}", e.toString()); + assertEquals(new Integer(613), e.getCode()); + assertEquals("(#613) Calls to stream have exceeded the rate of 600 calls per 600 seconds.", e.getMessage()); + assertEquals(Type.OAuthException, e.getType()); + }) .verify(Duration.ofSeconds(3)); + } - // header present - this.server.enqueue(new MockResponse().setHeader("Content-Type", - "text/plain") - .setHeader("Foo", "Bar") - .setBody("Hello Spring!")); - - result = filteredClient.get() - .uri("/greeting?name=Spring") - .retrieve() - .bodyToMono(String.class); - - StepVerifier.create(result) - .expectNext("Hello Spring!") + @Test + public void testTest() + { + server + .enqueue(new MockResponse() + .setResponseCode(400) + .setHeader("Content-Type", "text/plain") + .setBody("Hello Spring!")); + + Mono result; + + result = webClient.get() + .uri("/greeting?name=Spring") + .retrieve() + .bodyToMono(String.class); + + StepVerifier.create(result) + .expectError(Exception.class) + .verify(Duration.ofSeconds(3)); + + server + .enqueue(new MockResponse() + .setResponseCode(200) + .setHeader("Content-Type", "text/plain") + .setHeader("Foo", "Bar") + .setBody("Hello Spring!")); + + result = webClient.get() + .uri("/greeting?name=Spring") + .retrieve() + .bodyToMono(String.class); + + StepVerifier.create(result) + .expectNext("Hello Spring!") .expectComplete() - .verify(Duration.ofSeconds(3)); - - Assert.assertEquals(2, server.getRequestCount()); + .verify(Duration.ofSeconds(3)); } }