Search in sources :

Example 1 with LoadBalancingPolicyWrapper

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());
        });
    }
}
Also used : InOrder(org.mockito.InOrder) AllNodesFailedException(com.datastax.oss.driver.api.core.AllNodesFailedException) Node(com.datastax.oss.driver.api.core.metadata.Node) Request(com.datastax.oss.driver.api.core.session.Request) RequestHandlerTestHarness(com.datastax.oss.driver.internal.core.cql.RequestHandlerTestHarness) ContinuousAsyncResultSet(com.datastax.dse.driver.api.core.cql.continuous.ContinuousAsyncResultSet) LoadBalancingPolicyWrapper(com.datastax.oss.driver.internal.core.metadata.LoadBalancingPolicyWrapper) List(java.util.List) Session(com.datastax.oss.driver.api.core.session.Session) Test(org.junit.Test) UseDataProvider(com.tngtech.java.junit.dataprovider.UseDataProvider)

Example 2 with LoadBalancingPolicyWrapper

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());
        });
    }
}
Also used : InOrder(org.mockito.InOrder) Request(com.datastax.oss.driver.api.core.session.Request) RequestHandlerTestHarness(com.datastax.oss.driver.internal.core.cql.RequestHandlerTestHarness) ContinuousAsyncResultSet(com.datastax.dse.driver.api.core.cql.continuous.ContinuousAsyncResultSet) LoadBalancingPolicyWrapper(com.datastax.oss.driver.internal.core.metadata.LoadBalancingPolicyWrapper) Session(com.datastax.oss.driver.api.core.session.Session) Test(org.junit.Test) UseDataProvider(com.tngtech.java.junit.dataprovider.UseDataProvider)

Aggregations

ContinuousAsyncResultSet (com.datastax.dse.driver.api.core.cql.continuous.ContinuousAsyncResultSet)2 Request (com.datastax.oss.driver.api.core.session.Request)2 Session (com.datastax.oss.driver.api.core.session.Session)2 RequestHandlerTestHarness (com.datastax.oss.driver.internal.core.cql.RequestHandlerTestHarness)2 LoadBalancingPolicyWrapper (com.datastax.oss.driver.internal.core.metadata.LoadBalancingPolicyWrapper)2 UseDataProvider (com.tngtech.java.junit.dataprovider.UseDataProvider)2 Test (org.junit.Test)2 InOrder (org.mockito.InOrder)2 AllNodesFailedException (com.datastax.oss.driver.api.core.AllNodesFailedException)1 Node (com.datastax.oss.driver.api.core.metadata.Node)1 List (java.util.List)1