use of com.datastax.oss.driver.internal.core.metadata.LoadBalancingPolicyWrapper in project java-driver by datastax.
the class ContinuousCqlRequestHandlerNodeTargetingTest method should_fail_if_targeted_node_not_available.
@Test
@UseDataProvider(value = "allDseProtocolVersions", location = DseTestDataProviders.class)
public void should_fail_if_targeted_node_not_available(DseProtocolVersion version) {
try (RequestHandlerTestHarness harness = continuousHarnessBuilder().withResponse(node1, defaultFrameOf(DseTestFixtures.singleDseRow())).withResponse(node2, defaultFrameOf(DseTestFixtures.singleDseRow())).withEmptyPool(node3).withProtocolVersion(version).build()) {
LoadBalancingPolicyWrapper loadBalancingPolicy = harness.getContext().getLoadBalancingPolicyWrapper();
InOrder invocations = Mockito.inOrder(loadBalancingPolicy);
// target node3, which should be unavailable
CompletionStage<ContinuousAsyncResultSet> resultSetFuture = new ContinuousCqlRequestHandler(UNDEFINED_IDEMPOTENCE_STATEMENT.setNode(node3), harness.getSession(), harness.getContext(), "target node 3, unavailable").handle();
assertThatStage(resultSetFuture).isFailed(error -> {
assertThat(error).isInstanceOf(AllNodesFailedException.class);
Map<Node, List<Throwable>> errors = ((AllNodesFailedException) error).getAllErrors();
assertThat(errors).hasSize(1);
List<Throwable> nodeErrors = errors.values().iterator().next();
assertThat(nodeErrors).singleElement().isInstanceOf(NodeUnavailableException.class);
invocations.verify(loadBalancingPolicy, never()).newQueryPlan(any(Request.class), anyString(), any(Session.class));
});
resultSetFuture = new ContinuousCqlRequestHandler(UNDEFINED_IDEMPOTENCE_STATEMENT, harness.getSession(), harness.getContext(), "no node targeting, should use node 1").handle();
assertThatStage(resultSetFuture).isSuccess(resultSet -> {
assertThat(resultSet.getExecutionInfo().getCoordinator()).isEqualTo(node1);
invocations.verify(loadBalancingPolicy).newQueryPlan(UNDEFINED_IDEMPOTENCE_STATEMENT, DriverExecutionProfile.DEFAULT_NAME, harness.getSession());
});
resultSetFuture = new ContinuousCqlRequestHandler(UNDEFINED_IDEMPOTENCE_STATEMENT, harness.getSession(), harness.getContext(), "no node targeting, should use node 2").handle();
assertThatStage(resultSetFuture).isSuccess(resultSet -> {
assertThat(resultSet.getExecutionInfo().getCoordinator()).isEqualTo(node2);
invocations.verify(loadBalancingPolicy).newQueryPlan(UNDEFINED_IDEMPOTENCE_STATEMENT, DriverExecutionProfile.DEFAULT_NAME, harness.getSession());
});
}
}
use of com.datastax.oss.driver.internal.core.metadata.LoadBalancingPolicyWrapper in project java-driver by datastax.
the class ContinuousCqlRequestHandlerNodeTargetingTest method should_target_node.
@Test
@UseDataProvider(value = "allDseProtocolVersions", location = DseTestDataProviders.class)
public void should_target_node(DseProtocolVersion version) {
try (RequestHandlerTestHarness harness = continuousHarnessBuilder().withResponse(node1, defaultFrameOf(DseTestFixtures.singleDseRow())).withResponse(node2, defaultFrameOf(DseTestFixtures.singleDseRow())).withResponse(node3, defaultFrameOf(DseTestFixtures.singleDseRow())).withProtocolVersion(version).build()) {
LoadBalancingPolicyWrapper loadBalancingPolicy = harness.getContext().getLoadBalancingPolicyWrapper();
InOrder invocations = Mockito.inOrder(loadBalancingPolicy);
CompletionStage<ContinuousAsyncResultSet> resultSetFuture = new ContinuousCqlRequestHandler(UNDEFINED_IDEMPOTENCE_STATEMENT.setNode(node3), harness.getSession(), harness.getContext(), "target node 3").handle();
assertThatStage(resultSetFuture).isSuccess(resultSet -> {
assertThat(resultSet.getExecutionInfo().getCoordinator()).isEqualTo(node3);
invocations.verify(loadBalancingPolicy, never()).newQueryPlan(any(Request.class), anyString(), any(Session.class));
});
resultSetFuture = new ContinuousCqlRequestHandler(UNDEFINED_IDEMPOTENCE_STATEMENT, harness.getSession(), harness.getContext(), "no node targeting").handle();
assertThatStage(resultSetFuture).isSuccess(resultSet -> {
assertThat(resultSet.getExecutionInfo().getCoordinator()).isEqualTo(node1);
invocations.verify(loadBalancingPolicy).newQueryPlan(UNDEFINED_IDEMPOTENCE_STATEMENT, DriverExecutionProfile.DEFAULT_NAME, harness.getSession());
});
}
}
Aggregations