|
15 | 15 | */
|
16 | 16 | package rx.internal.operators;
|
17 | 17 |
|
18 |
| -import static org.junit.Assert.assertEquals; |
19 |
| -import static org.junit.Assert.assertTrue; |
20 |
| -import static org.junit.Assert.fail; |
| 18 | +import static org.junit.Assert.*; |
21 | 19 | import static org.mockito.Matchers.any;
|
22 |
| -import static org.mockito.Mockito.inOrder; |
23 |
| -import static org.mockito.Mockito.mock; |
24 |
| -import static org.mockito.Mockito.never; |
25 |
| -import static org.mockito.Mockito.verify; |
26 |
| - |
27 |
| -import java.util.ArrayList; |
28 |
| -import java.util.Arrays; |
29 |
| -import java.util.List; |
30 |
| -import java.util.concurrent.CountDownLatch; |
31 |
| -import java.util.concurrent.TimeUnit; |
| 20 | +import static org.mockito.Mockito.*; |
| 21 | + |
| 22 | +import java.util.*; |
| 23 | +import java.util.concurrent.*; |
32 | 24 | import java.util.concurrent.atomic.AtomicInteger;
|
33 | 25 |
|
34 |
| -import org.junit.Before; |
35 |
| -import org.junit.Test; |
36 |
| -import org.mockito.InOrder; |
37 |
| -import org.mockito.MockitoAnnotations; |
| 26 | +import org.junit.*; |
| 27 | +import org.mockito.*; |
38 | 28 |
|
39 |
| -import rx.Observable; |
| 29 | +import rx.*; |
40 | 30 | import rx.Observable.OnSubscribe;
|
| 31 | +import rx.Observable; |
41 | 32 | import rx.Observer;
|
42 |
| -import rx.Subscriber; |
43 |
| -import rx.Subscription; |
44 |
| -import rx.functions.Action0; |
45 |
| -import rx.functions.Action1; |
46 |
| -import rx.functions.Func2; |
47 |
| -import rx.observers.Subscribers; |
48 |
| -import rx.observers.TestSubscriber; |
49 |
| -import rx.schedulers.Schedulers; |
50 |
| -import rx.schedulers.TestScheduler; |
| 33 | +import rx.functions.*; |
| 34 | +import rx.observers.*; |
| 35 | +import rx.schedulers.*; |
51 | 36 | import rx.subjects.ReplaySubject;
|
52 | 37 | import rx.subscriptions.Subscriptions;
|
53 | 38 |
|
@@ -532,4 +517,72 @@ public Integer call(Integer t1, Integer t2) {
|
532 | 517 | ts2.assertReceivedOnNext(Arrays.asList(30));
|
533 | 518 | }
|
534 | 519 |
|
| 520 | + @Test(timeout = 10000) |
| 521 | + public void testUpstreamErrorAllowsRetry() throws InterruptedException { |
| 522 | + final AtomicInteger intervalSubscribed = new AtomicInteger(); |
| 523 | + Observable<String> interval = |
| 524 | + Observable.interval(200,TimeUnit.MILLISECONDS) |
| 525 | + .doOnSubscribe( |
| 526 | + new Action0() { |
| 527 | + @Override |
| 528 | + public void call() { |
| 529 | + System.out.println("Subscribing to interval " + intervalSubscribed.incrementAndGet()); |
| 530 | + } |
| 531 | + } |
| 532 | + ) |
| 533 | + .flatMap(new Func1<Long, Observable<String>>() { |
| 534 | + @Override |
| 535 | + public Observable<String> call(Long t1) { |
| 536 | + return Observable.defer(new Func0<Observable<String>>() { |
| 537 | + @Override |
| 538 | + public Observable<String> call() { |
| 539 | + return Observable.<String>error(new Exception("Some exception")); |
| 540 | + } |
| 541 | + }); |
| 542 | + } |
| 543 | + }) |
| 544 | + .onErrorResumeNext(new Func1<Throwable, Observable<String>>() { |
| 545 | + @Override |
| 546 | + public Observable<String> call(Throwable t1) { |
| 547 | + return Observable.error(t1); |
| 548 | + } |
| 549 | + }) |
| 550 | + .publish() |
| 551 | + .refCount(); |
| 552 | + |
| 553 | + interval |
| 554 | + .doOnError(new Action1<Throwable>() { |
| 555 | + @Override |
| 556 | + public void call(Throwable t1) { |
| 557 | + System.out.println("Subscriber 1 onError: " + t1); |
| 558 | + } |
| 559 | + }) |
| 560 | + .retry(5) |
| 561 | + .subscribe(new Action1<String>() { |
| 562 | + @Override |
| 563 | + public void call(String t1) { |
| 564 | + System.out.println("Subscriber 1: " + t1); |
| 565 | + } |
| 566 | + }); |
| 567 | + Thread.sleep(100); |
| 568 | + interval |
| 569 | + .doOnError(new Action1<Throwable>() { |
| 570 | + @Override |
| 571 | + public void call(Throwable t1) { |
| 572 | + System.out.println("Subscriber 2 onError: " + t1); |
| 573 | + } |
| 574 | + }) |
| 575 | + .retry(5) |
| 576 | + .subscribe(new Action1<String>() { |
| 577 | + @Override |
| 578 | + public void call(String t1) { |
| 579 | + System.out.println("Subscriber 2: " + t1); |
| 580 | + } |
| 581 | + }); |
| 582 | + |
| 583 | + Thread.sleep(1300); |
| 584 | + |
| 585 | + System.out.println(intervalSubscribed.get()); |
| 586 | + assertEquals(6, intervalSubscribed.get()); |
| 587 | + } |
535 | 588 | }
|
0 commit comments