package demo; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.io.InputStream; import java.net.URL; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.context.embedded.LocalServerPort; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; import org.springframework.boot.test.web.client.TestRestTemplate; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class) @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) @DirtiesContext public class HystrixApplicationTests { @LocalServerPort int port; @Test public void testOk() { ResponseEntity<String> response = new TestRestTemplate().getForEntity("http://localhost:" + port, String.class); assertNotNull("response was null", response); assertEquals("Bad status code", HttpStatus.OK, response.getStatusCode()); assertEquals("Wrong response text", "OK", response.getBody()); } @Test public void testFallback() { ResponseEntity<String> response = new TestRestTemplate().getForEntity("http://localhost:" + port+"/fail", String.class); assertNotNull("response was null", response); assertEquals("Bad status code", HttpStatus.OK, response.getStatusCode()); assertEquals("Wrong response text", "from the fallback", response.getBody()); } @Test public void hystrixStreamWorks() throws Exception { String url = "http://localhost:" + port; //you have to hit a Hystrix circuit breaker before the stream sends anything ResponseEntity<String> response = new TestRestTemplate().getForEntity(url, String.class); assertEquals("bad response code", HttpStatus.OK, response.getStatusCode()); URL hystrixUrl = new URL(url + "/hystrix.stream"); InputStream in = hystrixUrl.openStream(); byte[] buffer = new byte[1024]; in.read(buffer); String contents = new String(buffer); assertTrue("Wrong content: \n" + contents, contents.contains("data") || contents.contains("ping")); in.close(); } }