From ee743bf8d6bf75562113bc884e25146d4e71dee3 Mon Sep 17 00:00:00 2001 From: Matt Jacobs Date: Tue, 6 Jan 2015 17:46:56 -0800 Subject: [PATCH 1/2] Added more comprehensive tests for HystrixObservableCommand.isResponseFromFallback() --- .../hystrix/HystrixObservableCommandTest.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/hystrix-core/src/test/java/com/netflix/hystrix/HystrixObservableCommandTest.java b/hystrix-core/src/test/java/com/netflix/hystrix/HystrixObservableCommandTest.java index 684c01a3f..2d91e1f14 100644 --- a/hystrix-core/src/test/java/com/netflix/hystrix/HystrixObservableCommandTest.java +++ b/hystrix-core/src/test/java/com/netflix/hystrix/HystrixObservableCommandTest.java @@ -135,6 +135,7 @@ public void testExecutionSuccess() { assertTrue(command.getExecutionTimeInMilliseconds() > -1); assertTrue(command.isSuccessfulExecution()); + assertFalse(command.isResponseFromFallback()); assertEquals(0, command.builder.metrics.getRollingCount(HystrixRollingNumberEvent.EXCEPTION_THROWN)); assertEquals(0, command.builder.metrics.getRollingCount(HystrixRollingNumberEvent.FALLBACK_REJECTION)); @@ -171,6 +172,7 @@ public void testExecutionMultipleTimes() { assertFalse(command.isExecutedInThread()); assertTrue(command.getExecutionTimeInMilliseconds() > -1); assertTrue(command.isSuccessfulExecution()); + assertFalse(command.isResponseFromFallback()); try { // second should fail command.observe().toBlocking().single(); @@ -217,6 +219,7 @@ public void testExecutionKnownFailureWithNoFallback() { } assertTrue(command.getExecutionTimeInMilliseconds() > -1); assertTrue(command.isFailedExecution()); + assertFalse(command.isResponseFromFallback()); assertEquals(1, circuitBreaker.metrics.getRollingCount(HystrixRollingNumberEvent.FAILURE)); assertEquals(0, circuitBreaker.metrics.getRollingCount(HystrixRollingNumberEvent.SUCCESS)); @@ -259,6 +262,7 @@ public void testExecutionUnknownFailureWithNoFallback() { assertTrue(command.getExecutionTimeInMilliseconds() > -1); assertTrue(command.isFailedExecution()); + assertFalse(command.isResponseFromFallback()); assertEquals(0, command.builder.metrics.getRollingCount(HystrixRollingNumberEvent.SUCCESS)); assertEquals(1, command.builder.metrics.getRollingCount(HystrixRollingNumberEvent.EXCEPTION_THROWN)); @@ -297,6 +301,7 @@ public void testExecutionFailureWithFallback() { assertTrue(command.getExecutionTimeInMilliseconds() > -1); assertTrue(command.isFailedExecution()); + assertTrue(command.isResponseFromFallback()); assertEquals(0, command.builder.metrics.getRollingCount(HystrixRollingNumberEvent.SUCCESS)); assertEquals(0, command.builder.metrics.getRollingCount(HystrixRollingNumberEvent.EXCEPTION_THROWN)); @@ -336,6 +341,7 @@ public void testExecutionFailureWithFallbackFailure() { assertTrue(command.getExecutionTimeInMilliseconds() > -1); assertTrue(command.isFailedExecution()); + assertFalse(command.isResponseFromFallback()); assertEquals(0, command.builder.metrics.getRollingCount(HystrixRollingNumberEvent.SUCCESS)); assertEquals(1, command.builder.metrics.getRollingCount(HystrixRollingNumberEvent.EXCEPTION_THROWN)); @@ -373,6 +379,7 @@ public void testQueueSuccess() { assertTrue(command.getExecutionTimeInMilliseconds() > -1); assertTrue(command.isSuccessfulExecution()); + assertFalse(command.isResponseFromFallback()); assertEquals(1, command.builder.metrics.getRollingCount(HystrixRollingNumberEvent.SUCCESS)); assertEquals(0, command.builder.metrics.getRollingCount(HystrixRollingNumberEvent.EXCEPTION_THROWN)); @@ -418,6 +425,7 @@ public void testQueueKnownFailureWithNoFallback() { assertTrue(command.getExecutionTimeInMilliseconds() > -1); assertTrue(command.isFailedExecution()); + assertFalse(command.isResponseFromFallback()); assertEquals(0, circuitBreaker.metrics.getRollingCount(HystrixRollingNumberEvent.SUCCESS)); assertEquals(1, circuitBreaker.metrics.getRollingCount(HystrixRollingNumberEvent.EXCEPTION_THROWN)); @@ -461,6 +469,7 @@ public void testQueueUnknownFailureWithNoFallback() { assertTrue(command.getExecutionTimeInMilliseconds() > -1); assertTrue(command.isFailedExecution()); + assertFalse(command.isResponseFromFallback()); assertEquals(0, command.builder.metrics.getRollingCount(HystrixRollingNumberEvent.SUCCESS)); assertEquals(1, command.builder.metrics.getRollingCount(HystrixRollingNumberEvent.EXCEPTION_THROWN)); @@ -498,6 +507,7 @@ public void testQueueFailureWithFallback() { assertTrue(command.getExecutionTimeInMilliseconds() > -1); assertTrue(command.isFailedExecution()); + assertTrue(command.isResponseFromFallback()); assertEquals(0, command.builder.metrics.getRollingCount(HystrixRollingNumberEvent.SUCCESS)); assertEquals(0, command.builder.metrics.getRollingCount(HystrixRollingNumberEvent.EXCEPTION_THROWN)); @@ -540,6 +550,7 @@ public void testQueueFailureWithFallbackFailure() { assertTrue(command.getExecutionTimeInMilliseconds() > -1); assertTrue(command.isFailedExecution()); + assertFalse(command.isResponseFromFallback()); assertEquals(0, command.builder.metrics.getRollingCount(HystrixRollingNumberEvent.SUCCESS)); assertEquals(1, command.builder.metrics.getRollingCount(HystrixRollingNumberEvent.EXCEPTION_THROWN)); @@ -581,6 +592,7 @@ public void testObserveSuccess() { assertTrue(command.getExecutionTimeInMilliseconds() > -1); assertTrue(command.isSuccessfulExecution()); + assertFalse(command.isResponseFromFallback()); assertEquals(0, command.builder.metrics.getRollingCount(HystrixRollingNumberEvent.EXCEPTION_THROWN)); assertEquals(0, command.builder.metrics.getRollingCount(HystrixRollingNumberEvent.FALLBACK_REJECTION)); @@ -793,6 +805,8 @@ public void onNext(Boolean args) { // semaphore isolated assertFalse(command.isExecutedInThread()); + + assertFalse(command.isResponseFromFallback()); } /** From 7cadf305c4a518d8d4b17b4e1749d0c76d52fffb Mon Sep 17 00:00:00 2001 From: Matt Jacobs Date: Tue, 6 Jan 2015 18:09:40 -0800 Subject: [PATCH 2/2] Added test to HystrixObservableCommandTest that asserts upon onNext --- .../hystrix/HystrixObservableCommandTest.java | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/hystrix-core/src/test/java/com/netflix/hystrix/HystrixObservableCommandTest.java b/hystrix-core/src/test/java/com/netflix/hystrix/HystrixObservableCommandTest.java index 2d91e1f14..3a57ff784 100644 --- a/hystrix-core/src/test/java/com/netflix/hystrix/HystrixObservableCommandTest.java +++ b/hystrix-core/src/test/java/com/netflix/hystrix/HystrixObservableCommandTest.java @@ -615,6 +615,70 @@ public void testObserveSuccess() { } } + /** + * Test a successful command execution. + */ + @Test + public void testObserveSuccessWithFallback() { + try { + final TestHystrixCommand command = new KnownFailureTestCommandWithFallback(new TestCircuitBreaker()); + assertEquals(0, command.builder.metrics.getRollingCount(HystrixRollingNumberEvent.FAILURE)); + assertEquals(0, command.builder.metrics.getRollingCount(HystrixRollingNumberEvent.TIMEOUT)); + assertEquals(0, command.builder.metrics.getRollingCount(HystrixRollingNumberEvent.SUCCESS)); + + final CountDownLatch latch = new CountDownLatch(1); + + command.observe().subscribe(new Subscriber() { + @Override + public void onCompleted() { + System.out.println("*** onCompleted"); + assertEquals(1, command.builder.metrics.getRollingCount(HystrixRollingNumberEvent.FAILURE)); + assertEquals(0, command.builder.metrics.getRollingCount(HystrixRollingNumberEvent.TIMEOUT)); + assertEquals(0, command.builder.metrics.getRollingCount(HystrixRollingNumberEvent.SUCCESS)); + assertEquals(0, command.builder.metrics.getRollingCount(HystrixRollingNumberEvent.EXCEPTION_THROWN)); + assertEquals(0, command.builder.metrics.getRollingCount(HystrixRollingNumberEvent.FALLBACK_REJECTION)); + assertEquals(0, command.builder.metrics.getRollingCount(HystrixRollingNumberEvent.FALLBACK_FAILURE)); + assertEquals(1, command.builder.metrics.getRollingCount(HystrixRollingNumberEvent.FALLBACK_SUCCESS)); + assertEquals(0, command.builder.metrics.getRollingCount(HystrixRollingNumberEvent.SEMAPHORE_REJECTED)); + assertEquals(0, command.builder.metrics.getRollingCount(HystrixRollingNumberEvent.SHORT_CIRCUITED)); + assertEquals(0, command.builder.metrics.getRollingCount(HystrixRollingNumberEvent.THREAD_POOL_REJECTED)); + assertEquals(0, command.builder.metrics.getRollingCount(HystrixRollingNumberEvent.RESPONSE_FROM_CACHE)); + + assertEquals(100, command.builder.metrics.getHealthCounts().getErrorPercentage()); + + assertEquals(1, HystrixRequestLog.getCurrentRequest().getAllExecutedCommands().size()); + + // semaphore isolated + assertFalse(command.isExecutedInThread()); + + latch.countDown(); + } + + @Override + public void onError(Throwable e) { + System.out.println("*** onError : " + e); + fail(e.getMessage()); + } + + @Override + public void onNext(Boolean b) { + System.out.println("*** onNext : " + b); + assertEquals(false, b); + assertTrue(command.getExecutionTimeInMilliseconds() > -1); + assertFalse(command.isSuccessfulExecution()); + assertTrue(command.isFailedExecution()); + assertTrue(command.isResponseFromFallback()); + } + }); + + latch.await(1000, TimeUnit.MILLISECONDS); + + } catch (Exception e) { + e.printStackTrace(); + fail("We received an exception."); + } + } + /** * Test a successful command execution. *