@Test
public void testMultiThreadedBasic() {

    TestMultiThreadedObservable onSubscribe = new TestMultiThreadedObservable("one", "two", "three");
    Flowable<String> w = Flowable.unsafeCreate(onSubscribe);
    BusySubscriber busySubscriber = new BusySubscriber();
    Subscriber<String> aw = serializedSubscriber(busySubscriber);
    w.subscribe(aw);
    onSubscribe.waitToFinish();
    assertEquals(3, busySubscriber.onNextCount.get());
    assertFalse(busySubscriber.onError);
    assertTrue(busySubscriber.onComplete);
    // 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, busySubscriber.maxConcurrentThreads.get());
}