use of com.datastax.oss.driver.internal.core.cql.RequestHandlerTestHarness in project java-driver by datastax.
the class ContinuousCqlRequestHandlerTest method should_complete_multi_page_result.
@Test
@UseDataProvider(value = "allDseProtocolVersions", location = DseTestDataProviders.class)
public void should_complete_multi_page_result(DseProtocolVersion version) {
RequestHandlerTestHarness.Builder builder = continuousHarnessBuilder().withProtocolVersion(version);
PoolBehavior node1Behavior = builder.customBehavior(node1);
try (RequestHandlerTestHarness harness = builder.build()) {
ContinuousCqlRequestHandler handler = new ContinuousCqlRequestHandler(UNDEFINED_IDEMPOTENCE_STATEMENT, harness.getSession(), harness.getContext(), "test");
CompletionStage<ContinuousAsyncResultSet> page1Future = handler.handle();
node1Behavior.setResponseSuccess(defaultFrameOf(DseTestFixtures.tenDseRows(1, false)));
assertThatStage(page1Future).isSuccess(page1 -> {
assertThat(page1.hasMorePages()).isTrue();
assertThat(page1.pageNumber()).isEqualTo(1);
Iterator<Row> rows = page1.currentPage().iterator();
assertThat(rows.hasNext()).isTrue();
assertThat(rows).toIterable().hasSize(10);
ExecutionInfo executionInfo = page1.getExecutionInfo();
assertThat(executionInfo.getCoordinator()).isEqualTo(node1);
assertThat(executionInfo.getErrors()).isEmpty();
assertThat(executionInfo.getIncomingPayload()).isEmpty();
assertThat(executionInfo.getPagingState()).isNotNull();
assertThat(executionInfo.getSpeculativeExecutionCount()).isEqualTo(0);
assertThat(executionInfo.getSuccessfulExecutionIndex()).isEqualTo(0);
assertThat(executionInfo.getWarnings()).isEmpty();
});
ContinuousAsyncResultSet page1 = CompletableFutures.getCompleted(page1Future);
assertThat(handler.getPendingResult()).isNull();
CompletionStage<ContinuousAsyncResultSet> page2Future = page1.fetchNextPage();
assertThat(handler.getPendingResult()).isNotNull();
node1Behavior.setResponseSuccess(defaultFrameOf(DseTestFixtures.tenDseRows(2, true)));
assertThatStage(page2Future).isSuccess(page2 -> {
assertThat(page2.hasMorePages()).isFalse();
assertThat(page2.pageNumber()).isEqualTo(2);
Iterator<Row> rows = page2.currentPage().iterator();
assertThat(rows.hasNext()).isTrue();
assertThat(rows).toIterable().hasSize(10);
ExecutionInfo executionInfo = page2.getExecutionInfo();
assertThat(executionInfo.getCoordinator()).isEqualTo(node1);
assertThat(executionInfo.getErrors()).isEmpty();
assertThat(executionInfo.getIncomingPayload()).isEmpty();
assertThat(executionInfo.getPagingState()).isNull();
assertThat(executionInfo.getSpeculativeExecutionCount()).isEqualTo(0);
assertThat(executionInfo.getSuccessfulExecutionIndex()).isEqualTo(0);
assertThat(executionInfo.getWarnings()).isEmpty();
});
}
}
use of com.datastax.oss.driver.internal.core.cql.RequestHandlerTestHarness in project java-driver by datastax.
the class ContinuousCqlRequestHandlerTest method should_send_cancel_request_if_dse_v2.
@Test
public void should_send_cancel_request_if_dse_v2() {
RequestHandlerTestHarness.Builder builder = continuousHarnessBuilder().withProtocolVersion(DSE_V2);
PoolBehavior node1Behavior = builder.customBehavior(node1);
try (RequestHandlerTestHarness harness = builder.build()) {
ContinuousCqlRequestHandler handler = new ContinuousCqlRequestHandler(UNDEFINED_IDEMPOTENCE_STATEMENT, harness.getSession(), harness.getContext(), "test");
CompletionStage<ContinuousAsyncResultSet> page1Future = handler.handle();
page1Future.toCompletableFuture().cancel(true);
assertThat(handler.getState()).isEqualTo(-2);
verify(node1Behavior.getChannel()).write(argThat(this::isCancelRequest), anyBoolean(), anyMap(), any());
}
}
use of com.datastax.oss.driver.internal.core.cql.RequestHandlerTestHarness in project java-driver by datastax.
the class ContinuousCqlRequestHandlerTest method should_toggle_channel_autoread_if_dse_v1.
@Test
public void should_toggle_channel_autoread_if_dse_v1() {
RequestHandlerTestHarness.Builder builder = continuousHarnessBuilder().withProtocolVersion(DSE_V1);
PoolBehavior node1Behavior = builder.customBehavior(node1);
try (RequestHandlerTestHarness harness = builder.build()) {
CompletionStage<ContinuousAsyncResultSet> page1Future = new ContinuousCqlRequestHandler(UNDEFINED_IDEMPOTENCE_STATEMENT, harness.getSession(), harness.getContext(), "test").handle();
// simulate the arrival of 5 pages, the first one will complete page1 future above,
// the following 4 will be enqueued and should trigger autoread off
node1Behavior.setResponseSuccess(defaultFrameOf(DseTestFixtures.tenDseRows(1, false)));
node1Behavior.setResponseSuccess(defaultFrameOf(DseTestFixtures.tenDseRows(2, false)));
node1Behavior.setResponseSuccess(defaultFrameOf(DseTestFixtures.tenDseRows(3, false)));
node1Behavior.setResponseSuccess(defaultFrameOf(DseTestFixtures.tenDseRows(4, false)));
node1Behavior.setResponseSuccess(defaultFrameOf(DseTestFixtures.tenDseRows(5, false)));
verify(node1Behavior.getChannel().config()).setAutoRead(false);
// simulate the retrieval of 2 pages, this should dequeue page 2
// and trigger autoread on
ContinuousAsyncResultSet page1 = CompletableFutures.getCompleted(page1Future);
CompletableFutures.getCompleted(page1.fetchNextPage());
verify(node1Behavior.getChannel().config()).setAutoRead(true);
// in DSE_V1, the backpressure request should not have been sent
verify(node1Behavior.getChannel(), never()).write(any(Revise.class), anyBoolean(), anyMap(), any());
}
}
use of com.datastax.oss.driver.internal.core.cql.RequestHandlerTestHarness in project java-driver by datastax.
the class ContinuousCqlRequestHandlerTest method should_throw_if_protocol_version_does_not_support_continuous_paging.
@Test
@UseDataProvider(value = "allOssProtocolVersions", location = DseTestDataProviders.class)
public void should_throw_if_protocol_version_does_not_support_continuous_paging(ProtocolVersion version) {
try (RequestHandlerTestHarness harness = continuousHarnessBuilder().withProtocolVersion(version).build()) {
Mockito.when(harness.getContext().getProtocolVersionRegistry().supports(any(DefaultProtocolVersion.class), any(ProtocolFeature.class))).thenReturn(false);
assertThatThrownBy(() -> new ContinuousCqlRequestHandler(UNDEFINED_IDEMPOTENCE_STATEMENT, harness.getSession(), harness.getContext(), "test").handle()).isInstanceOf(IllegalStateException.class).hasMessage("Cannot execute continuous paging requests with protocol version " + version);
}
}
use of com.datastax.oss.driver.internal.core.cql.RequestHandlerTestHarness in project java-driver by datastax.
the class ContinuousCqlRequestHandlerTest method should_cancel_session_if_future_cancelled.
@Test
@UseDataProvider(value = "allDseProtocolVersions", location = DseTestDataProviders.class)
public void should_cancel_session_if_future_cancelled(DseProtocolVersion version) {
RequestHandlerTestHarness.Builder builder = continuousHarnessBuilder().withProtocolVersion(version);
PoolBehavior node1Behavior = builder.customBehavior(node1);
try (RequestHandlerTestHarness harness = builder.build()) {
ContinuousCqlRequestHandler handler = new ContinuousCqlRequestHandler(UNDEFINED_IDEMPOTENCE_STATEMENT, harness.getSession(), harness.getContext(), "test");
CompletionStage<ContinuousAsyncResultSet> page1Future = handler.handle();
page1Future.toCompletableFuture().cancel(true);
// this should be ignored
node1Behavior.setResponseSuccess(defaultFrameOf(DseTestFixtures.tenDseRows(1, false)));
assertThat(handler.getState()).isEqualTo(-2);
}
}
Aggregations