Реактор - использование Flux.publish () препятствует работе StepVerifier.thenCancel ()? - PullRequest
0 голосов
/ 14 февраля 2019

Если я использую свой поток напрямую с StepVerifier, то все работает нормально, но если я вызываю publish().autoConnect() для потока и использую результат с StepVerifier, то шаг verify() никогда не завершается.

Например, у меня есть простой поток, такой как этот, который генерирует целые числа от 0 до бесконечности:

Flux<Integer> flux = Flux.fromStream(Stream.iterate(0, i -> i + 1));

Тогда все отлично работает с StepVerifier, если я просто использую несколько элементов, отмените и проверьте:

StepVerifier.create(flux)
    .thenConsumeWhile(i -> i < 10)
    .thenCancel()
    .verify();

Но если вместо этого я сделаю следующее, то это никогда не закончится:

StepVerifier.create(flux.publish().autoConnect())
    .thenConsumeWhile(i -> i < 10)
    .thenCancel()
    .verify();

Я предполагаю, что здесь происходит что-то довольно очевидное, но я не знаю, что?

Это всплывает, когда я пытаюсь использовать StepVerifier в тесте с API, который выглядит примерно так:

class MyApi {
    private Flux<Integer> underlyingFlux = ...

    Flux<Integer> getFlux() { return underlyingFlux.publish().autoConnect(); }
}

См. Мои примеры github для некоторыхготов для запуска кода, который демонстрирует проблемы, с которыми я сталкивался StepVerifier.


Обновление: эта проблема была принята командой Reactor как ошибка - см. проблему # 1528 - исправление доступно в версии 3.2.9. ВЫПУСК активной зоны реактора.

1 Ответ

0 голосов
/ 01 апреля 2019

Эта проблема была принята командой разработчиков Reactor как ошибка - см. Проблему # 1528 - и исправление доступно в версии 3.2.9.RELEASE активной зоны реактора.

...