@Override
    public @Nullable StreamMessage<Object> createAbortedPublisher(long elements) {
        if (elements == 0) {
            final StreamMessage<Object> publisher = SurroundingPublisher.of(null, Mono.empty(), unused -> null);
            publisher.abort();
            return publisher;
        }

        final StreamMessage<Object> publisher = createPublisher(LongMath.saturatedAdd(elements, 1));
        final AtomicLong produced = new AtomicLong();
        return publisher
                .peek(item -> {
                    if (produced.getAndIncrement() >= elements) {
                        publisher.abort();
                    }
                });
    }
Rule 1.4 and 1.9 ensure a Publisher's ability to signal error to the Subscriber, however the
implementation expects such error to occur immediately after subscribing, i.e. {@code onError()} is
called after {@code onSubscribe()}.
The {@link SurroundingPublisher} however subscribes publisher and signals error after the first request,
therefore for the error to be signaled, we must make requests first.

{@link PublisherVerificationRules#optional_spec104_mustSignalOnErrorWhenFails()} and
{@link PublisherVerificationRules#required_spec109_mayRejectCallsToSubscribeIfPublisherIsUnableOrUnwillingToServeThemRejectionMustTriggerOnErrorAfterOnSubscribe()}
are overridden below to call {@link Subscription#request(long)} after subscribing.
core/src/test/java/com/linecorp/armeria/internal/common/stream/SurroundingPublisherTckTest.java