On the previous post we implemented json and Java based Hoverfly scenarios..
Now it’s time to dive deeper and use other Ηoverfly features.
A big part of testing has to do with negative scenarios. One of them is delays. Although we always mock a server and we are successful to reproduce erroneous scenarios one thing that is key to simulate in todays microservices driven world is delay.
So let me make a server with a 30 secs delay.
public class SimulateDelayTests { private Hoverfly hoverfly; @BeforeEach void setUp() { var simulation = SimulationSource.dsl(service("http://localhost:8085") .get("/delay") .willReturn(success("{\"username\":\"test-user\"}", "application/json").withDelay(30, TimeUnit.SECONDS))); var localConfig = HoverflyConfig.localConfigs().disableTlsVerification().asWebServer().proxyPort(8085); hoverfly = new Hoverfly(localConfig, SIMULATE); hoverfly.start(); hoverfly.simulate(simulation); } @AfterEach void tearDown() { hoverfly.close(); } }
Let’s add the Delay Test
@Test void testWithDelay() { var client = HttpClient.newHttpClient(); var request = HttpRequest.newBuilder() .uri(URI.create("http://localhost:8085/delay")) .build(); var start = Instant.now(); var res = client.sendAsync(request, HttpResponse.BodyHandlers.ofString()) .thenApply(HttpResponse::body) .join(); var end = Instant.now(); Assertions.assertEquals("{\"username\":\"test-user\"}", res); var seconds = Duration.between(start, end).getSeconds(); Assertions.assertTrue(seconds >= 30); }
Delay simulation is there, up and running, so let’s try to simulate timeouts.
@Test void testTimeout() { var client = HttpClient.newHttpClient(); var request = HttpRequest.newBuilder() .uri(URI.create("http://localhost:8085/delay")) .timeout(Duration.ofSeconds(10)) .build(); assertThrows(HttpTimeoutException.class, () -> { try { client.sendAsync(request, HttpResponse.BodyHandlers.ofString()).join(); } catch (CompletionException ex) { throw ex.getCause(); } } ); }
That’s it we got delays and timeouts!
Other test scenarios should contain state which is covered on the next tutorial.
2 thoughts on “Testing with Hoverfly and Java Part 2: Delays”