X-Git-Url: https://juplo.de/gitweb/?a=blobdiff_plain;f=src%2Ftest%2Fjava%2Fde%2Fjuplo%2Ffacebook%2Ferrors%2FGraphApiExchangeFilterFunctionIntegrationTest.java;h=53b2e6a31628957662ae6b7a9a296c07c10fe399;hb=2ee955aa31aac3dff18457f032fce4ed15049cd2;hp=87c3fe6b4982ef43ea421000f0cd1eba7b82872a;hpb=58021336ff2b6f6e16a0e070d093b61dee8dbc6f;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 87c3fe6..53b2e6a 100644 --- a/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java +++ b/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java @@ -2,21 +2,20 @@ package de.juplo.facebook.errors; import de.juplo.facebook.errors.GraphApiException.Type; -import java.time.Duration; import okhttp3.mockwebserver.MockResponse; import okhttp3.mockwebserver.MockWebServer; import org.junit.After; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; import org.junit.Before; import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.http.client.reactive.ClientHttpConnector; +import org.springframework.http.HttpStatus; import org.springframework.http.client.reactive.JettyClientHttpConnector; -import org.springframework.http.client.reactive.ReactorClientHttpConnector; import org.springframework.web.reactive.function.client.WebClient; +import org.springframework.web.reactive.function.client.WebClientResponseException.BadRequest; +import org.springframework.web.reactive.function.client.WebClientResponseException.InternalServerError; import reactor.core.publisher.Mono; import reactor.test.StepVerifier; @@ -25,7 +24,6 @@ import reactor.test.StepVerifier; * * @author Kai Moritz */ -@RunWith(Parameterized.class) public class GraphApiExchangeFilterFunctionIntegrationTest { private static final Logger LOG = @@ -34,19 +32,6 @@ public class GraphApiExchangeFilterFunctionIntegrationTest private MockWebServer server; private WebClient webClient; - @Parameterized.Parameter(0) - public ClientHttpConnector connector; - - @Parameterized.Parameters(name = "webClient [{0}]") - public static Object[][] arguments() - { - return new Object[][] - { - { new JettyClientHttpConnector() }, - { new ReactorClientHttpConnector() } - }; - } - @Before public void setup() @@ -55,9 +40,9 @@ public class GraphApiExchangeFilterFunctionIntegrationTest webClient = WebClient .builder() - .clientConnector(this.connector) + .clientConnector(new JettyClientHttpConnector()) .baseUrl(server.url("/").toString()) - .filter(GraphApiExchangeFilterFunction.INSTANCE) + .filter(new GraphApiExchangeFilterFunction()) .build(); } @@ -69,14 +54,102 @@ public class GraphApiExchangeFilterFunctionIntegrationTest @Test - public void testValidError() + public void testNoError() { - LOG.info("testValidError"); + Mono result; + + + //server + // .enqueue(new MockResponse() + // .setResponseCode(HttpStatus.CONTINUE.value()) + // .setHeader("Content-Type", "application/json") + // .setBody("Hallo Welt!")); + // + //result = + // webClient + // .get() + // .uri("/egal") + // .retrieve() + // .bodyToMono(String.class); + // + //StepVerifier + // .create(result) + // .expectNext("Hallo Welt!") + // .expectComplete() + // .verify(); + + + server + .enqueue(new MockResponse() + .setResponseCode(HttpStatus.OK.value()) + .setHeader("Content-Type", "text/plain") + .setBody("Hallo Welt!")); + + result = + webClient + .get() + .uri("/egal") + .retrieve() + .bodyToMono(String.class); + + StepVerifier + .create(result) + .expectNext("Hallo Welt!") + .expectComplete() + .verify(); server .enqueue(new MockResponse() - .setStatus("400") + .setResponseCode(HttpStatus.TEMPORARY_REDIRECT.value()) + .setHeader("Location", server.url("/woanders")) + .setHeader("Content-Type", "text/plain") + .setBody("Jetzt doch woanders...")); + server + .enqueue(new MockResponse() + .setResponseCode(HttpStatus.OK.value()) + .setHeader("Content-Type", "text/plain") + .setBody("Hallo Welt!")); + + result = + webClient + .get() + .uri("/egal") + .retrieve() + .bodyToMono(String.class); + + StepVerifier + .create(result) + .expectNext("Hallo Welt!") + .expectComplete() + .verify(); + + + server + .enqueue(new MockResponse() + .setResponseCode(HttpStatus.INTERNAL_SERVER_ERROR.value()) + .setHeader("Content-Type", "text/plain") + .setBody("Hallo Welt!")); + + result = + webClient + .get() + .uri("/egal") + .retrieve() + .bodyToMono(String.class); + + StepVerifier + .create(result) + .expectError(InternalServerError.class) + .verify(); + } + + @Test + public void testValidError() + { + server + .enqueue(new MockResponse() + .setResponseCode(HttpStatus.BAD_REQUEST.value()) .setHeader("Content-Type", "application/json") .setBody( "{\n" + @@ -88,6 +161,42 @@ public class GraphApiExchangeFilterFunctionIntegrationTest " }\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(); + } + + @Test + public void testUnmappedError() + { + server + .enqueue(new MockResponse() + .setResponseCode(HttpStatus.BAD_REQUEST.value()) + .setHeader("Content-Type", "application/json") + .setBody( + "{\n" + + " \"error\":\n" + + " {\n" + + " \"message\": \"This error does not exist.\",\n" + + " \"type\": \"NonexistentTypeException\",\n" + + " \"code\": 999999999\n" + + " }\n" + + "}")); + Mono result = webClient @@ -96,17 +205,67 @@ public class GraphApiExchangeFilterFunctionIntegrationTest .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)); + StepVerifier.create(result).expectErrorSatisfies(throwable -> + { + assertEquals(UnmappedErrorException.class, throwable.getClass()); + UnmappedErrorException e = (UnmappedErrorException)throwable; + LOG.debug("{}", e.toString()); + assertEquals(new Integer(999999999), e.getCode()); + assertEquals("This error does not exist.", e.getMessage()); + try + { + Type type = e.getType(); + LOG.error("unknown type: {}", type); + fail("unmapped type was resolved by enum: " + type); + } + catch (IllegalArgumentException ee) {} + }) + .verify(); + } + + @Test + public void testInvlalidError() + { + Mono result; + + + server + .enqueue(new MockResponse() + .setResponseCode(HttpStatus.BAD_REQUEST.value()) + .setHeader("Content-Type", "application/json") + .setBody( + "{\n" + + " \"error\":\n" + + " {\n" + + " \"message\": \"Not a Graph-Api-Exception.\",\n" + + " \"type\": \"Whatever\",\n" + + " \"code\": \"some string\"\n" + + " }\n" + + "}")); + + result = + webClient + .get() + .uri("/egal") + .retrieve() + .bodyToMono(String.class); + + StepVerifier.create(result).expectError(BadRequest.class).verify(); + + + server + .enqueue(new MockResponse() + .setResponseCode(HttpStatus.BAD_REQUEST.value()) + .setHeader("Content-Type", "text/plain") + .setBody("Hallo Welt!")); + + result = + webClient + .get() + .uri("/egal") + .retrieve() + .bodyToMono(String.class); + + StepVerifier.create(result).expectError(BadRequest.class).verify(); } }