Interface PublisherVerificationRules

All Known Implementing Classes:
FlowPublisherVerification, IdentityFlowProcessorVerification, IdentityProcessorVerification, PublisherVerification

public interface PublisherVerificationRules
Internal TCK use only. Add / Remove tests for PublisherVerification here to make sure that they arre added/removed in the other places.
  • Method Details

    • required_validate_maxElementsFromPublisher

      void required_validate_maxElementsFromPublisher() throws Exception
      Validates that the override of PublisherVerification.maxElementsFromPublisher() returns a non-negative value.
      Throws:
      Exception
    • required_validate_boundedDepthOfOnNextAndRequestRecursion

      void required_validate_boundedDepthOfOnNextAndRequestRecursion() throws Exception
      Validates that the override of PublisherVerification.boundedDepthOfOnNextAndRequestRecursion() returns a positive value.
      Throws:
      Exception
    • required_createPublisher1MustProduceAStreamOfExactly1Element

      void required_createPublisher1MustProduceAStreamOfExactly1Element() throws Throwable
      Asks for a Publisher that should emit exactly one item and complete (both within a timeout specified by TestEnvironment.defaultTimeoutMillis()) in response to a request(1).

      The test is not executed if PublisherVerification.maxElementsFromPublisher() returns zero. If this test fails, the following could be checked within the Publisher implementation:

      • the Publisher.subscribe(Subscriber) method has actual implementation,
      • in the Publisher.subscribe(Subscriber) method, if there is an upstream Publisher, that Publisher is actually subscribed to,
      • if the Publisher is part of a chain, all elements actually issue a request() call in response to the test subscriber or by default to their upstream,
      • in the Publisher.subscribe(Subscriber) method, the Subscriber.onSubscribe is called as part of the preparation process (usually before subscribing to other Publishers),
      • if the Publisher implementation works for a consumer that calls request(1),
      • if the Publisher implementation is able to emit an onComplete without requests,
      • that the Publisher implementation does not emit more than the allowed elements (exactly one).
      Throws:
      Throwable
    • required_createPublisher3MustProduceAStreamOfExactly3Elements

      void required_createPublisher3MustProduceAStreamOfExactly3Elements() throws Throwable
      Asks for a Publisher that should emit exactly three items and complete (all within a timeout specified by TestEnvironment.defaultTimeoutMillis()).

      The test is not executed if PublisherVerification.maxElementsFromPublisher() is less than 3.

      The tests requests one-by-one and verifies each single response item arrives in time.

      If this test fails, the following could be checked within the Publisher implementation:

      • the Publisher.subscribe(Subscriber) method has actual implementation,
      • in the Publisher.subscribe(Subscriber) method, if there is an upstream Publisher, that Publisher is actually subscribed to,
      • if the Publisher is part of a chain, all elements actually issue a request() call in response to the test subscriber or by default to their upstream,
      • in the Publisher.subscribe(Subscriber) method, the Subscriber.onSubscribe is called as part of the preparation process (usually before subscribing to other Publishers),
      • if the Publisher implementation works for a subscriber that calls request(1) after consuming an item,
      • if the Publisher implementation is able to emit an onComplete without requests.
      Throws:
      Throwable
    • required_spec101_subscriptionRequestMustResultInTheCorrectNumberOfProducedElements

      void required_spec101_subscriptionRequestMustResultInTheCorrectNumberOfProducedElements() throws Throwable
      Asks for a Publisher that responds to a request pattern of 0 (not requesting upfront), 1, 1 and 2 in a timely manner.

      Verifies rule: 1.1

      The test is not executed if PublisherVerification.maxElementsFromPublisher() is less than 5.

      This test ensures that the Publisher implementation correctly responds to request() calls that in total are less than the number of elements this Publisher could emit (thus the completion event won't be emitted).

      If this test fails, the following could be checked within the Publisher implementation:

      Throws:
      Throwable
    • required_spec102_maySignalLessThanRequestedAndTerminateSubscription

      void required_spec102_maySignalLessThanRequestedAndTerminateSubscription() throws Throwable
      Asks for a short Publisher and verifies that requesting once and with more than the length (but bounded) results in the correct number of items to be emitted (i.e., length 3 and request 10) followed by an onComplete signal.

      Verifies rule: 1.2

      The test is not executed if PublisherVerification.maxElementsFromPublisher() is less than 3.

      This test ensures that the Publisher implementation can deal with larger requests than the number of items it can produce.

      If this test fails, the following could be checked within the Publisher implementation:

      Throws:
      Throwable
    • stochastic_spec103_mustSignalOnMethodsSequentially

      void stochastic_spec103_mustSignalOnMethodsSequentially() throws Throwable
      Asks for a short Publisher (i.e., length 10), repeatedly subscribes to this Publisher, requests items one by one and verifies the Publisher calls the onXXX methods non-overlappingly.

      Verifies rule: 1.3

      The test is not executed if PublisherVerification.maxElementsFromPublisher() is less than 10.

      Note that this test is probabilistic, that is, may not capture any concurrent invocation in a {code Publisher} implementation. Note also that this test is sensitive to cases when a request() call in onSubscribe() triggers an asynchronous call to the other onXXX methods. In contrast, the test allows synchronous call chain of onSubscribe -> request -> onNext.

      If this test fails, the following could be checked within the Publisher implementation:

      Throws:
      Throwable
    • optional_spec104_mustSignalOnErrorWhenFails

      void optional_spec104_mustSignalOnErrorWhenFails() throws Throwable
      Asks for an error Publisher that should call onSubscribe exactly once followed by a single call to onError() without receiving any requests and otherwise not throwing any exception.

      Verifies rule: 1.4

      The test is not executed if PublisherVerification.createErrorPublisher() returns null.

      If this test fails, the following could be checked within the error Publisher implementation:

      • the Publisher.subscribe(Subscriber) method has actual implementation,
      • in the Publisher.subscribe(Subscriber) method, if there is an upstream Publisher, that Publisher is actually subscribed to,
      • if the Publisher implementation does signal an onSubscribe before signalling onError,
      • if the Publisher implementation is able to emit an onError without requests,
      • if the Publisher is non-empty as this test requires a Publisher to signal an onError eagerly.
      Throws:
      Throwable
    • required_spec105_mustSignalOnCompleteWhenFiniteStreamTerminates

      void required_spec105_mustSignalOnCompleteWhenFiniteStreamTerminates() throws Throwable
      Asks for a short Publisher (i.e., length 3) and verifies, after requesting one by one, the sequence completes normally.

      Verifies rule: 1.5

      The test is not executed if PublisherVerification.maxElementsFromPublisher() is less than 3.

      Note that the tests requests 1 after the items have been received and before expecting an onComplete signal.

      If this test fails, the following could be checked within the Publisher implementation:

      Throws:
      Throwable
    • optional_spec105_emptyStreamMustTerminateBySignallingOnComplete

      void optional_spec105_emptyStreamMustTerminateBySignallingOnComplete() throws Throwable
      Asks for an empty Publisher (i.e., length 0) and verifies it completes in a timely manner.

      Verifies rule: 1.5

      Note that the tests requests 1 before expecting an onComplete signal.

      If this test fails, the following could be checked within the Publisher implementation:

      • the TestEnvironment has large enough timeout specified in case the Publisher has some time-delay behavior,
      • if the Publisher is non-empty as this test requires a Publisher without items.
      Throws:
      Throwable
    • untested_spec106_mustConsiderSubscriptionCancelledAfterOnErrorOrOnCompleteHasBeenCalled

      void untested_spec106_mustConsiderSubscriptionCancelledAfterOnErrorOrOnCompleteHasBeenCalled() throws Throwable
      Currently, this test is skipped because it is unclear this rule can be effectively checked on a Publisher instance without looking into or hooking into the implementation of it.

      Verifies rule: 1.6

      Throws:
      Throwable
    • required_spec107_mustNotEmitFurtherSignalsOnceOnCompleteHasBeenSignalled

      void required_spec107_mustNotEmitFurtherSignalsOnceOnCompleteHasBeenSignalled() throws Throwable
      Asks for a single-element Publisher and checks if requesting after the terminal event doesn't lead to more items or terminal signals to be emitted.

      Verifies rule: 1.7

      The test is not executed if PublisherVerification.maxElementsFromPublisher() is less than 1.

      The tests requests more items than the expected Publisher length upfront and some more items after its completion.

      If this test fails, the following could be checked within the Publisher implementation:

      • the TestEnvironment has large enough timeout specified in case the Publisher has some time-delay behavior,
      • the indication for the terminal state is properly persisted and a request call can't trigger emission of more items or another terminal signal.
      Throws:
      Throwable
    • untested_spec107_mustNotEmitFurtherSignalsOnceOnErrorHasBeenSignalled

      void untested_spec107_mustNotEmitFurtherSignalsOnceOnErrorHasBeenSignalled() throws Throwable
      Currently, this test is skipped, although it is possible to validate an error Publisher along the same lines as required_spec107_mustNotEmitFurtherSignalsOnceOnCompleteHasBeenSignalled().

      Verifies rule: 1.7

      Throws:
      Throwable
    • untested_spec108_possiblyCanceledSubscriptionShouldNotReceiveOnErrorOrOnCompleteSignals

      void untested_spec108_possiblyCanceledSubscriptionShouldNotReceiveOnErrorOrOnCompleteSignals() throws Throwable
      Currently, this test is skipped because there was no agreement on how to verify its "eventually" requirement.

      Verifies rule: 1.8

      Throws:
      Throwable
    • required_spec109_mustIssueOnSubscribeForNonNullSubscriber

      void required_spec109_mustIssueOnSubscribeForNonNullSubscriber() throws Throwable
      Asks for an empty Publisher and verifies if onSubscribe signal was emitted before any other onNext, onError or onComplete signal.

      Verifies rule: 1.9

      Note that this test doesn't request anything, however, an onNext is not considered as a failure.

      If this test fails, the following could be checked within the Publisher implementation:

      • the TestEnvironment has large enough timeout specified in case the Publisher has some time-delay behavior,
      • the Publisher.subscribe(Subscriber) method has actual implementation,
      • in the Publisher.subscribe(Subscriber) method, if there is an upstream Publisher, that Publisher is actually subscribed to,
      • in the Publisher.subscribe(Subscriber) method, the Subscriber.onSubscribe is called as part of the preparation process (usually before subscribing to other Publishers).
      Throws:
      Throwable
    • untested_spec109_subscribeShouldNotThrowNonFatalThrowable

      void untested_spec109_subscribeShouldNotThrowNonFatalThrowable() throws Throwable
      Currently, this test is skipped because there is no common agreement on what is to be considered a fatal exception and besides, Publisher.subscribe is only allowed throw a NullPointerException and any other exception would require looking into or hooking into the implementation of the Publisher.

      Verifies rule: 1.9

      Throws:
      Throwable
    • required_spec109_subscribeThrowNPEOnNullSubscriber

      void required_spec109_subscribeThrowNPEOnNullSubscriber() throws Throwable
      Asks for an empty Publisher and calls subscribe on it with null that should result in a NullPointerException to be thrown.

      Verifies rule: 1.9

      If this test fails, check if the subscribe() implementation has an explicit null check (or a method dereference on the Subscriber), especially if the incoming Subscriber is wrapped or stored to be used later.

      Throws:
      Throwable
    • required_spec109_mayRejectCallsToSubscribeIfPublisherIsUnableOrUnwillingToServeThemRejectionMustTriggerOnErrorAfterOnSubscribe

      void required_spec109_mayRejectCallsToSubscribeIfPublisherIsUnableOrUnwillingToServeThemRejectionMustTriggerOnErrorAfterOnSubscribe() throws Throwable
      Asks for an error Publisher that should call onSubscribe exactly once followed by a single call to onError() without receiving any requests.

      Verifies rule: 1.9

      The test is not executed if PublisherVerification.createErrorPublisher() returns null.

      The difference between this test and optional_spec104_mustSignalOnErrorWhenFails() is that there is no explicit verification if exceptions were thrown in addition to the regular onSubscribe+onError signal pair.

      If this test fails, the following could be checked within the error Publisher implementation:

      • the Publisher.subscribe(Subscriber) method has actual implementation,
      • in the Publisher.subscribe(Subscriber) method, if there is an upstream Publisher, that Publisher is actually subscribed to,
      • if the Publisher implementation is able to emit an onError without requests,
      • if the Publisher is non-empty as this test expects a Publisher without items.
      Throws:
      Throwable
    • untested_spec110_rejectASubscriptionRequestIfTheSameSubscriberSubscribesTwice

      void untested_spec110_rejectASubscriptionRequestIfTheSameSubscriberSubscribesTwice() throws Throwable
      Currently, this test is skipped because enforcing rule §1.10 requires unlimited retention and reference-equal checks on all incoming Subscriber which is generally infeasible, plus reusing the same Subscriber instance is better detected (or ignored) inside Subscriber.onSubscribe when the method is called multiple times.

      Verifies rule: 1.10

      Throws:
      Throwable
    • optional_spec111_maySupportMultiSubscribe

      void optional_spec111_maySupportMultiSubscribe() throws Throwable
      Asks for a single-element Publisher and subscribes to it twice, without consuming with either Subscriber instance (i.e., no requests are issued).

      Verifies rule: 1.11

      The test is not executed if PublisherVerification.maxElementsFromPublisher() is less than 1.

      Note that this test ignores what signals the Publisher emits. Any exception thrown through non-regular means will indicate a skipped test.

      Throws:
      Throwable
    • optional_spec111_registeredSubscribersMustReceiveOnNextOrOnCompleteSignals

      void optional_spec111_registeredSubscribersMustReceiveOnNextOrOnCompleteSignals() throws Throwable
      Asks for a single-element Publisher and subscribes to it twice. Each Subscriber requests for 1 element and checks if onNext or onComplete signals was received.

      Verifies rule: 1.11, and depends on valid implementation of rule 1.5 in order to verify this.

      The test is not executed if PublisherVerification.maxElementsFromPublisher() is less than 1.

      Any exception thrown through non-regular means will indicate a skipped test.

      Throws:
      Throwable
    • optional_spec111_multicast_mustProduceTheSameElementsInTheSameSequenceToAllOfItsSubscribersWhenRequestingOneByOne

      void optional_spec111_multicast_mustProduceTheSameElementsInTheSameSequenceToAllOfItsSubscribersWhenRequestingOneByOne() throws Throwable
      Asks for a short Publisher (length 5), subscribes 3 Subscribers to it, requests with different patterns and checks if all 3 received the same events in the same order.

      Verifies rule: 1.11

      The test is not executed if PublisherVerification.maxElementsFromPublisher() is less than 5.

      The request pattern for the first Subscriber is (1, 1, 2, 1); for the second is (2, 3) and for the third is (3, 1, 1).

      Note that this test requires a Publisher that always emits the same signals to any Subscriber, regardless of when they subscribe and how they request elements. I.e., a "live" Publisher emitting the current time would not pass this test.

      Note that this test is optional and may appear skipped even if the behavior should be actually supported by the Publisher, see the skip message for an indication of this.

      If this test fails, the following could be checked within the Publisher implementation:

      Throws:
      Throwable
    • optional_spec111_multicast_mustProduceTheSameElementsInTheSameSequenceToAllOfItsSubscribersWhenRequestingManyUpfront

      void optional_spec111_multicast_mustProduceTheSameElementsInTheSameSequenceToAllOfItsSubscribersWhenRequestingManyUpfront() throws Throwable
      Asks for a short Publisher (length 3), subscribes 3 Subscribers to it, requests more than the length items upfront with each and verifies they all received the same items in the same order (but does not verify they all complete).

      Verifies rule: 1.11

      The test is not executed if PublisherVerification.maxElementsFromPublisher() is less than 3.

      Note that this test requires a Publisher that always emits the same signals to any Subscriber, regardless of when they subscribe and how they request elements. I.e., a "live" Publisher emitting the current time would not pass this test.

      Note that this test is optional and may appear skipped even if the behavior should be actually supported by the Publisher, see the skip message for an indication of this.

      If this test fails, the following could be checked within the Publisher implementation:

      Throws:
      Throwable
    • optional_spec111_multicast_mustProduceTheSameElementsInTheSameSequenceToAllOfItsSubscribersWhenRequestingManyUpfrontAndCompleteAsExpected

      void optional_spec111_multicast_mustProduceTheSameElementsInTheSameSequenceToAllOfItsSubscribersWhenRequestingManyUpfrontAndCompleteAsExpected() throws Throwable
      Asks for a short Publisher (length 3), subscribes 3 Subscribers to it, requests more than the length items upfront with each and verifies they all received the same items in the same order followed by an onComplete signal.

      Verifies rule: 1.11

      The test is not executed if PublisherVerification.maxElementsFromPublisher() is less than 3.

      Note that this test requires a Publisher that always emits the same signals to any Subscriber, regardless of when they subscribe and how they request elements. I.e., a "live" Publisher emitting the current time would not pass this test.

      Note that this test is optional and may appear skipped even if the behavior should be actually supported by the Publisher, see the skip message for an indication of this.

      If this test fails, the following could be checked within the Publisher implementation:

      Throws:
      Throwable
    • required_spec302_mustAllowSynchronousRequestCallsFromOnNextAndOnSubscribe

      void required_spec302_mustAllowSynchronousRequestCallsFromOnNextAndOnSubscribe() throws Throwable
      Asks for a short Publisher (length 6), requests several times from within onSubscribe and then requests one-by-one from onNext.

      Verifies rule: 3.2

      The test is not executed if PublisherVerification.maxElementsFromPublisher() is less than 6.

      The request pattern is 3 x 1 from within onSubscribe and one from within each onNext invocation.

      The test consumes the Publisher but otherwise doesn't verify the Publisher completes (however, it checks for errors).

      If this test fails, the following could be checked within the Publisher implementation:

      Throws:
      Throwable
    • required_spec303_mustNotAllowUnboundedRecursion

      void required_spec303_mustNotAllowUnboundedRecursion() throws Throwable
      Asks for a Publisher with length equal to the value returned by required_validate_boundedDepthOfOnNextAndRequestRecursion() plus 1, calls request(1) externally and then from within onNext and checks if the stack depth did not increase beyond the amount permitted by required_validate_boundedDepthOfOnNextAndRequestRecursion().

      Verifies rule: 3.3

      The test is not executed if PublisherVerification.maxElementsFromPublisher() is less than required_validate_boundedDepthOfOnNextAndRequestRecursion() plus 1.

      If this test fails, the following could be checked within the Publisher implementation:

      Throws:
      Throwable
    • untested_spec304_requestShouldNotPerformHeavyComputations

      void untested_spec304_requestShouldNotPerformHeavyComputations() throws Exception
      Currently, this test is skipped because a request could enter into a synchronous computation via onNext legally and otherwise there is no common agreement how to detect such heavy computation reliably.

      Verifies rule: 3.4

      Throws:
      Exception
    • untested_spec305_cancelMustNotSynchronouslyPerformHeavyComputation

      void untested_spec305_cancelMustNotSynchronouslyPerformHeavyComputation() throws Exception
      Currently, this test is skipped because there is no reliable agreed upon way to detect a heavy computation.

      Verifies rule: 3.5

      Throws:
      Exception
    • required_spec306_afterSubscriptionIsCancelledRequestMustBeNops

      void required_spec306_afterSubscriptionIsCancelledRequestMustBeNops() throws Throwable
      Asks for a short Publisher (length 3) and verifies that cancelling without requesting anything, then requesting items should result in no signals to be emitted.

      Verifies rule: 3.6

      The test is not executed if PublisherVerification.maxElementsFromPublisher() is less than 3.

      The post-cancellation request pattern is (1, 1, 1).

      If this test fails, the following could be checked within the Publisher implementation:

      Throws:
      Throwable
    • required_spec307_afterSubscriptionIsCancelledAdditionalCancelationsMustBeNops

      void required_spec307_afterSubscriptionIsCancelledAdditionalCancelationsMustBeNops() throws Throwable
      Asks for a single-element Publisher and verifies that without requesting anything, cancelling the sequence multiple times should result in no signals to be emitted and should result in an thrown exception.

      Verifies rule: 3.7

      The test is not executed if PublisherVerification.maxElementsFromPublisher() is less than 1.

      If this test fails, the following could be checked within the Publisher implementation:

      Throws:
      Throwable
    • required_spec309_requestZeroMustSignalIllegalArgumentException

      void required_spec309_requestZeroMustSignalIllegalArgumentException() throws Throwable
      Asks for a short Publisher (length 10) and issues a request(0) which should trigger an onError call with an IllegalArgumentException.

      Verifies rule: 3.9

      The test is not executed if PublisherVerification.maxElementsFromPublisher() is less than 10.

      Note that this test expects the IllegalArgumentException being signalled through onError, not by throwing from request() (which is also forbidden) or signalling the error by any other means (i.e., through the Thread.currentThread().getUncaughtExceptionHandler() for example).

      Note also that requesting and emission may happen concurrently and honoring this rule may require extra coordination within the Publisher.

      If this test fails, the following could be checked within the Publisher implementation:

      Throws:
      Throwable
    • required_spec309_requestNegativeNumberMustSignalIllegalArgumentException

      void required_spec309_requestNegativeNumberMustSignalIllegalArgumentException() throws Throwable
      Asks for a short Publisher (length 10) and issues a random, negative request() call which should trigger an onError call with an IllegalArgumentException.

      Verifies rule: 3.9

      The test is not executed if PublisherVerification.maxElementsFromPublisher() is less than 10.

      Note that this test expects the IllegalArgumentException being signalled through onError, not by throwing from request() (which is also forbidden) or signalling the error by any other means (i.e., through the Thread.currentThread().getUncaughtExceptionHandler() for example).

      Note also that requesting and emission may happen concurrently and honoring this rule may require extra coordination within the Publisher.

      If this test fails, the following could be checked within the Publisher implementation:

      Throws:
      Throwable
    • optional_spec309_requestNegativeNumberMaySignalIllegalArgumentExceptionWithSpecificMessage

      void optional_spec309_requestNegativeNumberMaySignalIllegalArgumentExceptionWithSpecificMessage() throws Throwable
      Asks for a short Publisher (length 10) and issues a random, negative request() call which should trigger an onError call with an IllegalArgumentException.

      Verifies rule: 3.9

      The test is not executed if PublisherVerification.maxElementsFromPublisher() is less than 10.

      Note that this test expects the IllegalArgumentException being signalled through onError, not by throwing from request() (which is also forbidden) or signalling the error by any other means (i.e., through the Thread.currentThread().getUncaughtExceptionHandler() for example).

      Note also that requesting and emission may happen concurrently and honoring this rule may require extra coordination within the Publisher.

      If this test fails, the following could be checked within the Publisher implementation:

      Throws:
      Throwable
    • required_spec312_cancelMustMakeThePublisherToEventuallyStopSignaling

      void required_spec312_cancelMustMakeThePublisherToEventuallyStopSignaling() throws Throwable
      Asks for a short Publisher (length 20), requests some items (less than the length), consumes one item then cancels the sequence and verifies the publisher emitted at most the requested amount and stopped emitting (or terminated).

      Verifies rule: 3.12

      The test is not executed if PublisherVerification.maxElementsFromPublisher() is less than 20.

      If this test fails, the following could be checked within the Publisher implementation:

      Throws:
      Throwable
    • required_spec313_cancelMustMakeThePublisherEventuallyDropAllReferencesToTheSubscriber

      void required_spec313_cancelMustMakeThePublisherEventuallyDropAllReferencesToTheSubscriber() throws Throwable
      Asks for a short Publisher (length 3) requests and consumes one element from it, cancels the Subscription , calls System.gc() and then checks if all references to the test Subscriber has been dropped (by checking the WeakReference has been emptied).

      Verifies rule: 3.13

      The test is not executed if PublisherVerification.maxElementsFromPublisher() is less than 3.

      If this test fails, the following could be checked within the Publisher implementation:

      • the TestEnvironment has large enough timeout specified in case the Publisher has some time-delay behavior,
      • make sure the required_createPublisher1MustProduceAStreamOfExactly1Element() and required_createPublisher3MustProduceAStreamOfExactly3Elements() tests pass,
      • the cancellation indicator flag is properly persisted (may require volatile) and checked as part of the signal emission process.
      • the Publisher stores the Subscriber reference somewhere which is then not cleaned up when the Subscriber is cancelled. Note that this may happen on many code paths in a Publisher, for example in an emission loop that terminates because of the cancel signal or because reaching a terminal state. Note also that eagerly nulling Subscriber references may not be necessary for this test to pass in case there is a self-contained chain of them (i.e., Publisher.subscribe() creates a chain of fresh Subscriber instances where each of them only references their downstream Subscriber thus the chain can get GC'd when the reference to the final Subscriber is dropped).
      Throws:
      Throwable
    • required_spec317_mustSupportAPendingElementCountUpToLongMaxValue

      void required_spec317_mustSupportAPendingElementCountUpToLongMaxValue() throws Throwable
      Asks for a short Publisher (length 3) and requests Long.MAX_VALUE from it, verifying that the Publisher emits all of its items and completes normally and does not keep spinning attempting to fulfill the Long.MAX_VALUE demand by some means.

      Verifies rule: 3.17

      The test is not executed if PublisherVerification.maxElementsFromPublisher() is less than 3.

      If this test fails, the following could be checked within the Publisher implementation:

      Throws:
      Throwable
    • required_spec317_mustSupportACumulativePendingElementCountUpToLongMaxValue

      void required_spec317_mustSupportACumulativePendingElementCountUpToLongMaxValue() throws Throwable
      Asks for a short Publisher (length 3) and requests Long.MAX_VALUE from it in total (split across two Long.MAX_VALUE / 2 and one request(1)), verifying that the Publisher emits all of its items and completes normally.

      Verifies rule: 3.17

      The test is not executed if PublisherVerification.maxElementsFromPublisher() is less than 3.

      If this test fails, the following could be checked within the Publisher implementation:

      • the TestEnvironment has large enough timeout specified in case the Publisher has some time-delay behavior,
      • make sure the required_createPublisher1MustProduceAStreamOfExactly1Element() and required_createPublisher3MustProduceAStreamOfExactly3Elements() tests pass,
      • if the Publisher implementation considers the cumulative request amount it receives,
      • if the Publisher implements adding individual request amounts together properly (not overflowing into zero or negative pending request amounts) or not properly deducing the number of emitted items from the pending amount,
      • if the Publisher doesn't lose any request() signal and the state transition from idle -> emitting or emitting -> keep emitting works properly.
      Throws:
      Throwable
    • required_spec317_mustNotSignalOnErrorWhenPendingAboveLongMaxValue

      void required_spec317_mustNotSignalOnErrorWhenPendingAboveLongMaxValue() throws Throwable
      Asks for a very long Publisher (up to Integer.MAX_VALUE), requests Long.MAX_VALUE - 1 after each received item and expects no failure due to a potential overflow in the pending emission count while consuming 10 items and cancelling the sequence.

      Verifies rule: 3.17

      The test is not executed if PublisherVerification.maxElementsFromPublisher() is less than Integer.MAX_VALUE.

      The request pattern is one request(1) upfront and ten request(Long.MAX_VALUE - 1) after.

      If this test fails, the following could be checked within the Publisher implementation:

      • the TestEnvironment has large enough timeout specified in case the Publisher has some time-delay behavior,
      • make sure the required_createPublisher1MustProduceAStreamOfExactly1Element() and required_createPublisher3MustProduceAStreamOfExactly3Elements() tests pass,
      • if the Publisher implementation considers the cumulative request amount it receives,
      • if the Publisher implements adding individual request amounts together properly (not overflowing into zero or negative pending request amounts) or not properly deducing the number of emitted items from the pending amount,
      • if the Publisher doesn't lose any request() signal and the state transition from idle -> emitting or emitting -> keep emitting works properly.
      Throws:
      Throwable