/* * Copyright (C) 2012-2015 DataStax Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.datastax.driver.core; import com.datastax.driver.core.utils.CassandraVersion; import org.testng.annotations.Test; import static com.datastax.driver.core.ProtocolVersion.V4; import static com.datastax.driver.core.ProtocolVersion.V5; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.fail; /** * Tests for the new USE_BETA flag introduced in protocol v5 * and Cassandra 3.10. */ @CassandraVersion("3.10") public class ProtocolBetaVersionTest extends CCMTestsSupport { /** * Verifies that the cluster builder fails when version is explicitly set and user attempts to set beta flag. * * @jira_ticket JAVA-1248 */ @Test(groups = "short") public void should_not_initialize_when_version_explicitly_required_and_beta_flag_is_set() throws Exception { try { Cluster.builder() .addContactPoints(getContactPoints()) .withPort(ccm().getBinaryPort()) .withProtocolVersion(V4) .allowBetaProtocolVersion() .build(); fail("Expected IllegalArgumentException"); } catch (IllegalArgumentException e) { assertThat(e.getMessage()).isEqualTo("Can't use beta flag with initial protocol version of V4"); } } /** * Verifies that the cluster builder fails when beta flag is set and user attempts to pass a version explicitly. * * @jira_ticket JAVA-1248 */ @Test(groups = "short") public void should_not_initialize_when_beta_flag_is_set_and_version_explicitly_required() throws Exception { try { Cluster.builder() .addContactPoints(getContactPoints()) .withPort(ccm().getBinaryPort()) .allowBetaProtocolVersion() .withProtocolVersion(V4) .build(); fail("Expected IllegalStateException"); } catch (IllegalStateException e) { assertThat(e.getMessage()).isEqualTo("Can not set the version explicitly if `allowBetaProtocolVersion` was used."); } } /** * Verifies that the driver CANNOT connect to 3.10 with the following combination of options: * Version V5 * Flag UNSET * * @jira_ticket JAVA-1248 */ @Test(groups = "short") public void should_not_connect_when_beta_version_explicitly_required_and_flag_not_set() throws Exception { try { Cluster.builder() .addContactPoints(getContactPoints()) .withPort(ccm().getBinaryPort()) .withProtocolVersion(V5) .build(); fail("Expected IllegalArgumentException"); } catch (IllegalArgumentException e) { assertThat(e.getMessage()).startsWith("Can not use V5 protocol version. Newest supported protocol version is: V4"); } } /** * Verifies that the driver can connect to 3.10 with the following combination of options: * Version UNSET * Flag SET * Expected version: V5 * * @jira_ticket JAVA-1248 */ @Test(groups = "short") public void should_connect_with_beta_when_no_version_explicitly_required_and_flag_set() throws Exception { // Note: when the driver's ProtocolVersion.NEWEST_SUPPORTED will be incremented to V6 or higher // a renegotiation will start taking place here and will downgrade the version from V6 to V5, // but the test should remain valid since it's executed against 3.10 exclusively Cluster cluster = Cluster.builder() .addContactPoints(getContactPoints()) .withPort(ccm().getBinaryPort()) .allowBetaProtocolVersion() .build(); cluster.connect(); assertThat(cluster.getConfiguration().getProtocolOptions().getProtocolVersion()).isEqualTo(V5); } /** * Verifies that the driver can connect to 3.10 with the following combination of options: * Version UNSET * Flag UNSET * Expected version: V4 * * @jira_ticket JAVA-1248 */ @Test(groups = "short") public void should_connect_after_renegotiation_when_no_version_explicitly_required_and_flag_not_set() throws Exception { // Note: when the driver's ProtocolVersion.NEWEST_SUPPORTED will be incremented to V6 or higher // the renegotiation will start downgrading the version from V6 to V4 instead of V5 to V4, // but the test should remain valid since it's executed against 3.10 exclusively Cluster cluster = Cluster.builder() .addContactPoints(getContactPoints()) .withPort(ccm().getBinaryPort()) .build(); cluster.connect(); assertThat(cluster.getConfiguration().getProtocolOptions().getProtocolVersion()).isEqualTo(V4); } }