@Override public Eventual<LiveHttpResponse> handle(LiveHttpRequest request, HttpInterceptor.Context context) { return router.route(request, context) .map(pipeline -> pipeline.handle(request, context)) .orElseGet(() -> Eventual.error(new NoServiceConfiguredException(request.path()))); } }
@Test public void createFromError() { Eventual<String> eventual = Eventual.error(new RuntimeException("things went wrong")); StepVerifier.create(eventual) .expectError(RuntimeException.class) .verify(); }
@Override public Eventual<LiveHttpResponse> proceed(LiveHttpRequest request) { requestTracker.trackRequest(request); if (index < interceptors.size()) { HttpInterceptor.Chain chain = new HttpInterceptorChain(this, index + 1); HttpInterceptor interceptor = interceptors.get(index); try { return interceptor.intercept(request, chain); } catch (Throwable e) { return Eventual.error(e); } } requestTracker.markRequestAsSent(request); return new Eventual<>(toPublisher(toObservable(client.handle(request, this.context)) .compose(StandardHttpPipeline::sendErrorOnDoubleSubscription))); } }
@Test public void mapsErrors() { Eventual<String> eventual = Eventual.<String>error(new RuntimeException("ouch")) .onError(it -> Eventual.of("mapped error: " + it.getMessage())); StepVerifier.create(eventual) .expectNext("mapped error: ouch") .verifyComplete(); } }
@Override public Eventual<LiveHttpResponse> intercept(LiveHttpRequest request, Chain originalChain) { StatusRecordingChain chain = new StatusRecordingChain(originalChain); try { return new Eventual<>(toPublisher( toObservable(plugin.intercept(request, chain)) .doOnNext(response -> recordStatusCode(chain, response)) .onErrorResumeNext(error -> error(recordAndWrapError(chain, error))))); } catch (Throwable e) { recordException(e); return Eventual.error(new PluginException(e, plugin.name())); } }