@Test
public void testMultiThreadedBasic() {

    TestMultiThreadedObservable onSubscribe = new TestMultiThreadedObservable("one", "two", "three");
    Observable<String> w = Observable.create(onSubscribe);
    BusyObserver busyObserver = new BusyObserver();
    Observer<String> aw = serializedObserver(busyObserver);
    w.subscribe(aw);
    onSubscribe.waitToFinish();
    assertEquals(3, busyObserver.onNextCount.get());
    assertFalse(busyObserver.onError);
    assertTrue(busyObserver.onCompleted);
    // non-deterministic because unsubscribe happens after 'waitToFinish' releases
    // so commenting out for now as this is not a critical thing to test here
    //            verify(s, times(1)).unsubscribe();
    // we can have concurrency ...
    assertTrue(onSubscribe.maxConcurrentThreads.get() > 1);
    // ... but the onNext execution should be single threaded
    assertEquals(1, busyObserver.maxConcurrentThreads.get());
}