@Test
public void shouldSubscribeExactlyOnce1() {

  final TestRequesterResponderSupport streamManager = TestRequesterResponderSupport.client();
  final LeaksTrackingByteBufAllocator allocator = streamManager.getAllocator();
  final TestDuplexConnection sender = streamManager.getDuplexConnection();
  for (int i = 1; i < 50000; i += 2) {
    final Payload payload = ByteBufPayload.create("testData", "testMetadata");
    final FireAndForgetRequesterMono fireAndForgetRequesterMono =
        new FireAndForgetRequesterMono(payload, streamManager);
    final StateAssert<FireAndForgetRequesterMono> stateAssert =
        StateAssert.assertThat(FireAndForgetRequesterMono.STATE, fireAndForgetRequesterMono);
    Assertions.assertThatThrownBy(
            () ->
                RaceTestUtils.race(
                    () -> {
                      AtomicReference<Throwable> atomicReference = new AtomicReference();
                      fireAndForgetRequesterMono.subscribe(null, atomicReference::set);
                      Throwable throwable = atomicReference.get();
                      if (throwable != null) {
                        throw Exceptions.propagate(throwable);
                      }
                    },
                    fireAndForgetRequesterMono::block))
        .matches(
            t -> {
              Assertions.assertThat(t)
                  .hasMessageContaining("FireAndForgetMono allows only a single Subscriber");
              return true;
            });
    final ByteBuf frame = sender.awaitFrame();
    FrameAssert.assertThat(frame)
        .isNotNull()
        .hasPayloadSize(
            "testData".getBytes(CharsetUtil.UTF_8).length
                + "testMetadata".getBytes(CharsetUtil.UTF_8).length)
        .hasMetadata("testMetadata")
        .hasData("testData")
        .hasNoFragmentsFollow()
        .typeOf(FrameType.REQUEST_FNF)
        .hasClientSideStreamId()
        .hasStreamId(i)
        .hasNoLeaks();
    stateAssert.isTerminated();
    streamManager.assertNoActiveStreams();
  }
  Assertions.assertThat(sender.isEmpty()).isTrue();
  allocator.assertHasNoLeaks();
}