Search in sources :

Example 1 with EmitFailureHandler

use of reactor.core.publisher.Sinks.EmitFailureHandler in project reactor-core by reactor.

the class InternalOneSinkTest method shouldDelegateToHandler.

@ParameterizedTestWithName
@EnumSource(value = Sinks.EmitResult.class)
void shouldDelegateToHandler(EmitResult emitResult) {
    assumeThat(emitResult.isFailure()).isTrue();
    Sinks.One<Object> sink = new InternalOneSinkAdapter<Object>() {

        @Override
        public Sinks.EmitResult tryEmitValue(Object value) {
            return emitResult;
        }

        @Override
        public Sinks.EmitResult tryEmitError(Throwable error) {
            return emitResult;
        }

        @Override
        public Sinks.EmitResult tryEmitEmpty() {
            return emitResult;
        }
    };
    for (SignalType signalType : new SignalType[] { SignalType.ON_NEXT, SignalType.ON_ERROR, SignalType.ON_COMPLETE }) {
        AtomicReference<Sinks.EmitResult> emissionRef = new AtomicReference<>();
        try {
            EmitFailureHandler handler = (failedSignalType, failedEmission) -> {
                emissionRef.set(failedEmission);
                return false;
            };
            switch(signalType) {
                case ON_NEXT:
                    sink.emitValue("Hello", handler);
                    break;
                case ON_ERROR:
                    sink.emitError(new Exception("boom"), handler);
                    break;
                case ON_COMPLETE:
                    sink.emitEmpty(handler);
                    break;
                default:
                    throw new IllegalStateException();
            }
        } catch (EmissionException e) {
            assertThat(e.getReason()).isEqualTo(Sinks.EmitResult.FAIL_NON_SERIALIZED);
        }
        assertThat(emissionRef).as("emitResult").hasValue(emitResult);
    }
}
Also used : ParameterizedTestWithName(reactor.test.ParameterizedTestWithName) Assumptions.assumeThat(org.assertj.core.api.Assumptions.assumeThat) Context(reactor.util.context.Context) Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) EnumSource(org.junit.jupiter.params.provider.EnumSource) AtomicReference(java.util.concurrent.atomic.AtomicReference) Test(org.junit.jupiter.api.Test) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) EmissionException(reactor.core.publisher.Sinks.EmissionException) Assertions.assertThatExceptionOfType(org.assertj.core.api.Assertions.assertThatExceptionOfType) EmitResult(reactor.core.publisher.Sinks.EmitResult) EmitFailureHandler(reactor.core.publisher.Sinks.EmitFailureHandler) Exceptions(reactor.core.Exceptions) AtomicReference(java.util.concurrent.atomic.AtomicReference) EmissionException(reactor.core.publisher.Sinks.EmissionException) EmitFailureHandler(reactor.core.publisher.Sinks.EmitFailureHandler) EmitResult(reactor.core.publisher.Sinks.EmitResult) EmissionException(reactor.core.publisher.Sinks.EmissionException) EnumSource(org.junit.jupiter.params.provider.EnumSource) ParameterizedTestWithName(reactor.test.ParameterizedTestWithName)

Example 2 with EmitFailureHandler

use of reactor.core.publisher.Sinks.EmitFailureHandler in project reactor-core by reactor.

the class InternalManySinkTest method shouldDelegateToHandler.

@ParameterizedTestWithName
@EnumSource(value = Sinks.EmitResult.class)
void shouldDelegateToHandler(Sinks.EmitResult emitResult) {
    assumeThat(emitResult.isFailure()).isTrue();
    Sinks.Many<Object> sink = new InternalManySinkAdapter<Object>() {

        @Override
        public EmitResult tryEmitNext(Object o) {
            return emitResult;
        }

        @Override
        public Sinks.EmitResult tryEmitError(Throwable error) {
            return emitResult;
        }

        @Override
        public EmitResult tryEmitComplete() {
            return emitResult;
        }
    };
    for (SignalType signalType : new SignalType[] { SignalType.ON_NEXT, SignalType.ON_ERROR, SignalType.ON_COMPLETE }) {
        AtomicReference<EmitResult> emissionRef = new AtomicReference<>();
        try {
            EmitFailureHandler handler = (failedSignalType, failedEmission) -> {
                emissionRef.set(failedEmission);
                return false;
            };
            switch(signalType) {
                case ON_NEXT:
                    sink.emitNext("Hello", handler);
                    break;
                case ON_ERROR:
                    sink.emitError(new Exception("boom"), handler);
                    break;
                case ON_COMPLETE:
                    sink.emitComplete(handler);
                    break;
                default:
                    throw new IllegalStateException();
            }
        } catch (EmissionException e) {
            assertThat(e.getReason()).isEqualTo(EmitResult.FAIL_NON_SERIALIZED);
        }
        assertThat(emissionRef).as("emitResult").hasValue(emitResult);
    }
}
Also used : ParameterizedTestWithName(reactor.test.ParameterizedTestWithName) Assumptions.assumeThat(org.assertj.core.api.Assumptions.assumeThat) Context(reactor.util.context.Context) Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) EnumSource(org.junit.jupiter.params.provider.EnumSource) AtomicReference(java.util.concurrent.atomic.AtomicReference) Test(org.junit.jupiter.api.Test) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) EmissionException(reactor.core.publisher.Sinks.EmissionException) Assertions.assertThatExceptionOfType(org.assertj.core.api.Assertions.assertThatExceptionOfType) EmitResult(reactor.core.publisher.Sinks.EmitResult) EmitFailureHandler(reactor.core.publisher.Sinks.EmitFailureHandler) Exceptions(reactor.core.Exceptions) AtomicReference(java.util.concurrent.atomic.AtomicReference) EmissionException(reactor.core.publisher.Sinks.EmissionException) EmitFailureHandler(reactor.core.publisher.Sinks.EmitFailureHandler) EmitResult(reactor.core.publisher.Sinks.EmitResult) EmissionException(reactor.core.publisher.Sinks.EmissionException) EnumSource(org.junit.jupiter.params.provider.EnumSource) ParameterizedTestWithName(reactor.test.ParameterizedTestWithName)

Aggregations

AtomicInteger (java.util.concurrent.atomic.AtomicInteger)2 AtomicReference (java.util.concurrent.atomic.AtomicReference)2 Assertions.assertThat (org.assertj.core.api.Assertions.assertThat)2 Assertions.assertThatExceptionOfType (org.assertj.core.api.Assertions.assertThatExceptionOfType)2 Assumptions.assumeThat (org.assertj.core.api.Assumptions.assumeThat)2 Test (org.junit.jupiter.api.Test)2 EnumSource (org.junit.jupiter.params.provider.EnumSource)2 Exceptions (reactor.core.Exceptions)2 EmissionException (reactor.core.publisher.Sinks.EmissionException)2 EmitFailureHandler (reactor.core.publisher.Sinks.EmitFailureHandler)2 EmitResult (reactor.core.publisher.Sinks.EmitResult)2 ParameterizedTestWithName (reactor.test.ParameterizedTestWithName)2 Context (reactor.util.context.Context)2