Search in sources :

Example 6 with TestCollapserTimer

use of com.netflix.hystrix.HystrixCollapserTest.TestCollapserTimer in project Hystrix by Netflix.

the class HystrixObservableCollapserTest method testRequestThenCacheHitAndCacheHitUnsubscribed.

@Test
public void testRequestThenCacheHitAndCacheHitUnsubscribed() throws Exception {
    TestCollapserTimer timer = new TestCollapserTimer();
    HystrixObservableCollapser<String, String, String, String> collapser1 = new SuccessfulCacheableCollapsedCommand(timer, "foo", true);
    Observable<String> response1 = collapser1.observe();
    HystrixObservableCollapser<String, String, String, String> collapser2 = new SuccessfulCacheableCollapsedCommand(timer, "foo", true);
    Observable<String> response2 = collapser2.observe();
    final CountDownLatch latch1 = new CountDownLatch(1);
    final CountDownLatch latch2 = new CountDownLatch(1);
    final AtomicReference<String> value1 = new AtomicReference<String>(null);
    final AtomicReference<String> value2 = new AtomicReference<String>(null);
    Subscription s1 = response1.doOnUnsubscribe(new Action0() {

        @Override
        public void call() {
            System.out.println(System.currentTimeMillis() + " : s1 Unsubscribed!");
            latch1.countDown();
        }
    }).subscribe(new Subscriber<String>() {

        @Override
        public void onCompleted() {
            System.out.println(System.currentTimeMillis() + " : s1 OnCompleted");
            latch1.countDown();
        }

        @Override
        public void onError(Throwable e) {
            System.out.println(System.currentTimeMillis() + " : s1 OnError : " + e);
            latch1.countDown();
        }

        @Override
        public void onNext(String s) {
            System.out.println(System.currentTimeMillis() + " : s1 OnNext : " + s);
            value1.set(s);
        }
    });
    Subscription s2 = response2.doOnUnsubscribe(new Action0() {

        @Override
        public void call() {
            System.out.println(System.currentTimeMillis() + " : s2 Unsubscribed!");
            latch2.countDown();
        }
    }).subscribe(new Subscriber<String>() {

        @Override
        public void onCompleted() {
            System.out.println(System.currentTimeMillis() + " : s2 OnCompleted");
            latch2.countDown();
        }

        @Override
        public void onError(Throwable e) {
            System.out.println(System.currentTimeMillis() + " : s2 OnError : " + e);
            latch2.countDown();
        }

        @Override
        public void onNext(String s) {
            System.out.println(System.currentTimeMillis() + " : s2 OnNext : " + s);
            value2.set(s);
        }
    });
    s2.unsubscribe();
    // let time pass that equals the default delay/period
    timer.incrementTime(10);
    assertTrue(latch1.await(1000, TimeUnit.MILLISECONDS));
    assertTrue(latch2.await(1000, TimeUnit.MILLISECONDS));
    assertEquals("foo", value1.get());
    assertNull(value2.get());
    System.out.println("ReqLog : " + HystrixRequestLog.getCurrentRequest().getExecutedCommandsAsString());
    assertEquals(1, HystrixRequestLog.getCurrentRequest().getAllExecutedCommands().size());
    HystrixInvokableInfo<?> command = HystrixRequestLog.getCurrentRequest().getAllExecutedCommands().iterator().next();
    assertCommandExecutionEvents(command, HystrixEventType.EMIT, HystrixEventType.SUCCESS, HystrixEventType.COLLAPSED);
    //should only be 1 collapsed - other came from cache, then was cancelled
    assertEquals(1, command.getNumberCollapsed());
}
Also used : Action0(rx.functions.Action0) TestCollapserTimer(com.netflix.hystrix.HystrixCollapserTest.TestCollapserTimer) AtomicReference(java.util.concurrent.atomic.AtomicReference) CountDownLatch(java.util.concurrent.CountDownLatch) Subscription(rx.Subscription) Test(org.junit.Test)

Example 7 with TestCollapserTimer

use of com.netflix.hystrix.HystrixCollapserTest.TestCollapserTimer in project Hystrix by Netflix.

the class HystrixObservableCollapserTest method testTwoRequests.

@Test
public void testTwoRequests() throws Exception {
    TestCollapserTimer timer = new TestCollapserTimer();
    HystrixObservableCollapser<String, String, String, String> collapser1 = new TestRequestCollapser(timer, 1);
    HystrixObservableCollapser<String, String, String, String> collapser2 = new TestRequestCollapser(timer, 2);
    Future<String> response1 = collapser1.observe().toBlocking().toFuture();
    Future<String> response2 = collapser2.observe().toBlocking().toFuture();
    // let time pass that equals the default delay/period
    timer.incrementTime(10);
    assertEquals("1", response1.get());
    assertEquals("2", response2.get());
    assertEquals(1, HystrixRequestLog.getCurrentRequest().getAllExecutedCommands().size());
    Iterator<HystrixInvokableInfo<?>> cmdIterator = HystrixRequestLog.getCurrentRequest().getAllExecutedCommands().iterator();
    assertEquals(2, cmdIterator.next().getNumberCollapsed());
}
Also used : TestCollapserTimer(com.netflix.hystrix.HystrixCollapserTest.TestCollapserTimer) Test(org.junit.Test)

Example 8 with TestCollapserTimer

use of com.netflix.hystrix.HystrixCollapserTest.TestCollapserTimer in project Hystrix by Netflix.

the class HystrixObservableCollapserTest method testTwoRequestsWithValuesForOneArgOnlyAndOnMissingFillInStaticValue.

@Test
public void testTwoRequestsWithValuesForOneArgOnlyAndOnMissingFillInStaticValue() {
    TestCollapserTimer timer = new TestCollapserTimer();
    HystrixObservableCollapser<String, String, String, String> collapser1 = new TestCollapserWithMultipleResponses(timer, 1, 0, onMissingFillIn);
    HystrixObservableCollapser<String, String, String, String> collapser2 = new TestCollapserWithMultipleResponses(timer, 2, 5, onMissingFillIn);
    System.out.println("Starting to observe collapser1");
    Observable<String> result1 = collapser1.observe();
    Observable<String> result2 = collapser2.observe();
    // let time pass that equals the default delay/period
    timer.incrementTime(10);
    TestSubscriber<String> testSubscriber1 = new TestSubscriber<String>();
    result1.subscribe(testSubscriber1);
    TestSubscriber<String> testSubscriber2 = new TestSubscriber<String>();
    result2.subscribe(testSubscriber2);
    testSubscriber1.awaitTerminalEvent();
    testSubscriber2.awaitTerminalEvent();
    testSubscriber1.assertCompleted();
    testSubscriber1.assertNoErrors();
    testSubscriber1.assertValues("fillin");
    testSubscriber2.assertCompleted();
    testSubscriber2.assertNoErrors();
    testSubscriber2.assertValues("2:2", "2:4", "2:6", "2:8", "2:10");
}
Also used : TestSubscriber(rx.observers.TestSubscriber) TestCollapserTimer(com.netflix.hystrix.HystrixCollapserTest.TestCollapserTimer) Test(org.junit.Test)

Example 9 with TestCollapserTimer

use of com.netflix.hystrix.HystrixCollapserTest.TestCollapserTimer in project Hystrix by Netflix.

the class HystrixObservableCollapserTest method testTwoRequestsWhichShouldEachEmitTwice.

@Test
public void testTwoRequestsWhichShouldEachEmitTwice() throws Exception {
    //TestCollapserTimer timer = new TestCollapserTimer();
    CollapserTimer timer = new RealCollapserTimer();
    HystrixObservableCollapser<String, String, String, String> collapser1 = new TestCollapserWithMultipleResponses(timer, 1, 3, false, false, prefixMapper, onMissingComplete);
    HystrixObservableCollapser<String, String, String, String> collapser2 = new TestCollapserWithMultipleResponses(timer, 2, 3, false, false, prefixMapper, onMissingComplete);
    TestSubscriber<String> testSubscriber1 = new TestSubscriber<String>();
    TestSubscriber<String> testSubscriber2 = new TestSubscriber<String>();
    System.out.println(System.currentTimeMillis() + "Starting to observe collapser1");
    collapser1.observe().subscribe(testSubscriber1);
    collapser2.observe().subscribe(testSubscriber2);
    System.out.println(System.currentTimeMillis() + "Done with collapser observe()s");
    //Note that removing these awaits breaks the unit test.  That implies that the above subscribe does not wait for a terminal event
    testSubscriber1.awaitTerminalEvent();
    testSubscriber2.awaitTerminalEvent();
    testSubscriber1.assertCompleted();
    testSubscriber1.assertNoErrors();
    testSubscriber1.assertValues("1:1", "1:2", "1:3");
    testSubscriber2.assertCompleted();
    testSubscriber2.assertNoErrors();
    testSubscriber2.assertValues("2:2", "2:4", "2:6");
}
Also used : RealCollapserTimer(com.netflix.hystrix.collapser.RealCollapserTimer) CollapserTimer(com.netflix.hystrix.collapser.CollapserTimer) TestCollapserTimer(com.netflix.hystrix.HystrixCollapserTest.TestCollapserTimer) RealCollapserTimer(com.netflix.hystrix.collapser.RealCollapserTimer) TestSubscriber(rx.observers.TestSubscriber) Test(org.junit.Test)

Example 10 with TestCollapserTimer

use of com.netflix.hystrix.HystrixCollapserTest.TestCollapserTimer in project Hystrix by Netflix.

the class HystrixObservableCollapserTest method testTwoRequestsWithValuesForOneArgOnlyAndOnMissingThrow.

@Test
public void testTwoRequestsWithValuesForOneArgOnlyAndOnMissingThrow() {
    TestCollapserTimer timer = new TestCollapserTimer();
    HystrixObservableCollapser<String, String, String, String> collapser1 = new TestCollapserWithMultipleResponses(timer, 1, 0, onMissingThrow);
    HystrixObservableCollapser<String, String, String, String> collapser2 = new TestCollapserWithMultipleResponses(timer, 2, 5, onMissingThrow);
    System.out.println("Starting to observe collapser1");
    Observable<String> result1 = collapser1.observe();
    Observable<String> result2 = collapser2.observe();
    // let time pass that equals the default delay/period
    timer.incrementTime(10);
    TestSubscriber<String> testSubscriber1 = new TestSubscriber<String>();
    result1.subscribe(testSubscriber1);
    TestSubscriber<String> testSubscriber2 = new TestSubscriber<String>();
    result2.subscribe(testSubscriber2);
    testSubscriber1.awaitTerminalEvent();
    testSubscriber2.awaitTerminalEvent();
    testSubscriber1.assertError(RuntimeException.class);
    testSubscriber1.assertNoValues();
    testSubscriber2.assertCompleted();
    testSubscriber2.assertNoErrors();
    testSubscriber2.assertValues("2:2", "2:4", "2:6", "2:8", "2:10");
}
Also used : TestSubscriber(rx.observers.TestSubscriber) TestCollapserTimer(com.netflix.hystrix.HystrixCollapserTest.TestCollapserTimer) Test(org.junit.Test)

Aggregations

TestCollapserTimer (com.netflix.hystrix.HystrixCollapserTest.TestCollapserTimer)23 Test (org.junit.Test)23 TestSubscriber (rx.observers.TestSubscriber)15 CountDownLatch (java.util.concurrent.CountDownLatch)7 AtomicReference (java.util.concurrent.atomic.AtomicReference)7 Subscription (rx.Subscription)7 Action0 (rx.functions.Action0)7 CollapserTimer (com.netflix.hystrix.collapser.CollapserTimer)1 RealCollapserTimer (com.netflix.hystrix.collapser.RealCollapserTimer)1