Search in sources :

Example 6 with EmitResult

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

the class SinkOneMulticastTest method rejectedSubscribeCallback.

@Test
void rejectedSubscribeCallback() {
    SinkOneMulticast<String> sink = new SinkOneMulticast<>();
    AtomicReference<Throwable> ref = new AtomicReference<>();
    sink.subscribe(v -> {
    }, ref::set);
    EmitResult emitResult = sink.tryEmitError(new Exception("test"));
    assertThat(emitResult).isEqualTo(EmitResult.OK);
    assertThat(ref.get()).hasMessage("test");
    assertThat(sink.scan(Scannable.Attr.ERROR)).hasMessage("test");
    assertThat(sink.scan(Scannable.Attr.TERMINATED)).isTrue();
}
Also used : AtomicReference(java.util.concurrent.atomic.AtomicReference) EmitResult(reactor.core.publisher.Sinks.EmitResult) Test(org.junit.jupiter.api.Test)

Example 7 with EmitResult

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

the class SinkOneMulticastTest method nullFulfill.

@Test
void nullFulfill() {
    SinkOneMulticast<String> sink = new SinkOneMulticast<>();
    EmitResult emitResult = sink.tryEmitValue(null);
    assertThat(emitResult).isEqualTo(EmitResult.OK);
    assertThat(sink.scan(Scannable.Attr.ERROR)).isNull();
    assertThat(sink.scan(Scannable.Attr.TERMINATED)).isTrue();
}
Also used : EmitResult(reactor.core.publisher.Sinks.EmitResult) Test(org.junit.jupiter.api.Test)

Example 8 with EmitResult

use of reactor.core.publisher.Sinks.EmitResult 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 9 with EmitResult

use of reactor.core.publisher.Sinks.EmitResult 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)

Example 10 with EmitResult

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

the class SinkOneMulticastTest method successSubscribeCallback.

@Test
void successSubscribeCallback() {
    SinkOneMulticast<String> sink = new SinkOneMulticast<>();
    AtomicReference<String> ref = new AtomicReference<>();
    sink.subscribe(ref::set);
    EmitResult emitResult = sink.tryEmitValue("test");
    assertThat(emitResult).isEqualTo(EmitResult.OK);
    assertThat(ref.get()).isEqualToIgnoringCase("test");
    assertThat(sink.scan(Scannable.Attr.ERROR)).isNull();
    assertThat(sink.scan(Scannable.Attr.TERMINATED)).isTrue();
}
Also used : AtomicReference(java.util.concurrent.atomic.AtomicReference) EmitResult(reactor.core.publisher.Sinks.EmitResult) Test(org.junit.jupiter.api.Test)

Aggregations

EmitResult (reactor.core.publisher.Sinks.EmitResult)12 Test (org.junit.jupiter.api.Test)9 AtomicReference (java.util.concurrent.atomic.AtomicReference)6 EmissionException (reactor.core.publisher.Sinks.EmissionException)5 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)4 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 EnumSource (org.junit.jupiter.params.provider.EnumSource)2 Exceptions (reactor.core.Exceptions)2 EmitFailureHandler (reactor.core.publisher.Sinks.EmitFailureHandler)2 ParameterizedTestWithName (reactor.test.ParameterizedTestWithName)2 Context (reactor.util.context.Context)2