package alien4cloud.it.provider.util; import java.io.IOException; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; import org.junit.Assert; import org.springframework.stereotype.Component; @Component @Slf4j public class HttpUtil { private static void sleepWhenErrorHappen(long before, long timeout) { if (System.currentTimeMillis() - before > timeout) { Assert.fail("Test timeout"); } try { Thread.sleep(1000L); } catch (InterruptedException e1) { } } public static void checkUrl(String url, String containingText, long timeout) { log.info("Checking url {}", url); long before = System.currentTimeMillis(); CloseableHttpClient httpClient = HttpClients.custom().build(); while (true) { try { HttpGet httpGet = new HttpGet(url); CloseableHttpResponse response = httpClient.execute(httpGet); try { if (log.isDebugEnabled()) { log.debug("Status code " + response.getStatusLine().getStatusCode()); } if (response.getStatusLine().getStatusCode() < 200 || response.getStatusLine().getStatusCode() >= 300) { log.info("Received error status code " + response.getStatusLine().getStatusCode()); sleepWhenErrorHappen(before, timeout); continue; } String responseText = EntityUtils.toString(response.getEntity()); if (log.isDebugEnabled()) { log.debug(responseText); } if (StringUtils.isNotBlank(containingText)) { if (!responseText.contains(containingText)) { log.info("Expect to receive \n {} but received \n {}", containingText, responseText); sleepWhenErrorHappen(before, timeout); continue; } } return; } finally { response.close(); } } catch (IOException e) { sleepWhenErrorHappen(before, timeout); } } } public static String fetchUrl(String url, long timeout) { log.info("Fetching url {}", url); long before = System.currentTimeMillis(); CloseableHttpClient httpClient = HttpClients.custom().build(); while (true) { try { HttpGet httpGet = new HttpGet(url); CloseableHttpResponse response = httpClient.execute(httpGet); try { if (log.isDebugEnabled()) { log.debug("Status code " + response.getStatusLine().getStatusCode()); } if (response.getStatusLine().getStatusCode() < 200 || response.getStatusLine().getStatusCode() >= 300) { log.info("Received error status code " + response.getStatusLine().getStatusCode()); sleepWhenErrorHappen(before, timeout); continue; } String responseText = EntityUtils.toString(response.getEntity()); if (log.isDebugEnabled()) { log.debug(responseText); } return responseText; } finally { response.close(); } } catch (IOException e) { sleepWhenErrorHappen(before, timeout); } } } }