frameDecoder, errorConsumer, StreamIdSupplier.clientSupplier(), tickPeriod, ackTimeout,
static Supplier<TestData> requester(int tickPeriod, int timeout, int missedAcks) { return () -> { TestDuplexConnection connection = new TestDuplexConnection(); Errors errors = new Errors(); RSocketClient rSocket = new RSocketClient( connection, DefaultPayload::create, errors, StreamIdSupplier.clientSupplier(), Duration.ofMillis(tickPeriod), Duration.ofMillis(timeout), missedAcks); return new TestData(rSocket, errors, connection); }; }
@Test void requesterStreamsTerminatedOnZeroErrorFrame() { TestDuplexConnection conn = new TestDuplexConnection(); List<Throwable> errors = new ArrayList<>(); RSocketClient rSocket = new RSocketClient( conn, DefaultPayload::create, errors::add, StreamIdSupplier.clientSupplier()); String errorMsg = "error"; Mono.delay(Duration.ofMillis(100)) .doOnTerminate( () -> conn.addToReceivedBuffer(Frame.Error.from(0, new RejectedSetupException(errorMsg)))) .subscribe(); StepVerifier.create(rSocket.requestResponse(DefaultPayload.create("test"))) .expectErrorMatches( err -> err instanceof RejectedSetupException && errorMsg.equals(err.getMessage())) .verify(Duration.ofSeconds(5)); assertThat(errors).hasSize(1); assertThat(rSocket.isDisposed()).isTrue(); }
@Test void requesterNewStreamsTerminatedAfterZeroErrorFrame() { TestDuplexConnection conn = new TestDuplexConnection(); RSocketClient rSocket = new RSocketClient( conn, DefaultPayload::create, err -> {}, StreamIdSupplier.clientSupplier()); conn.addToReceivedBuffer(Frame.Error.from(0, new RejectedSetupException("error"))); StepVerifier.create( rSocket .requestResponse(DefaultPayload.create("test")) .delaySubscription(Duration.ofMillis(100))) .expectErrorMatches( err -> err instanceof RejectedSetupException && "error".equals(err.getMessage())) .verify(Duration.ofSeconds(5)); }
DefaultPayload::create, throwable -> clientErrors.add(throwable), StreamIdSupplier.clientSupplier());
@Test public void testClientSequence() { StreamIdSupplier s = StreamIdSupplier.clientSupplier(); assertEquals(1, s.nextStreamId()); assertEquals(3, s.nextStreamId()); assertEquals(5, s.nextStreamId()); }
@Test public void testClientIsValid() { StreamIdSupplier s = StreamIdSupplier.clientSupplier(); assertFalse(s.isBeforeOrCurrent(1)); assertFalse(s.isBeforeOrCurrent(3)); s.nextStreamId(); assertTrue(s.isBeforeOrCurrent(1)); assertFalse(s.isBeforeOrCurrent(3)); s.nextStreamId(); assertTrue(s.isBeforeOrCurrent(3)); // negative assertFalse(s.isBeforeOrCurrent(-1)); // connection assertFalse(s.isBeforeOrCurrent(0)); // server also accepted (checked externally) assertTrue(s.isBeforeOrCurrent(2)); }
frameDecoder, errorConsumer, StreamIdSupplier.clientSupplier(), tickPeriod, ackTimeout,