/*
* 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.facebook.presto.cassandra;
import com.datastax.driver.core.ConsistencyLevel;
import com.datastax.driver.core.SocketOptions;
import com.google.common.collect.ImmutableMap;
import io.airlift.configuration.testing.ConfigAssertions;
import io.airlift.units.Duration;
import org.testng.annotations.Test;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import static java.util.concurrent.TimeUnit.MILLISECONDS;
import static java.util.concurrent.TimeUnit.MINUTES;
import static java.util.concurrent.TimeUnit.SECONDS;
public class TestCassandraClientConfig
{
@Test
public void testDefaults()
{
ConfigAssertions.assertRecordedDefaults(ConfigAssertions.recordDefaults(CassandraClientConfig.class)
.setMaxSchemaRefreshThreads(1)
.setSchemaCacheTtl(new Duration(1, TimeUnit.HOURS))
.setSchemaRefreshInterval(new Duration(2, TimeUnit.MINUTES))
.setFetchSize(5_000)
.setConsistencyLevel(ConsistencyLevel.ONE)
.setContactPoints("")
.setNativeProtocolPort(9042)
.setPartitionSizeForBatchSelect(100)
.setSplitSize(1_024)
.setAllowDropTable(false)
.setUsername(null)
.setPassword(null)
.setClientReadTimeout(new Duration(SocketOptions.DEFAULT_READ_TIMEOUT_MILLIS, MILLISECONDS))
.setClientConnectTimeout(new Duration(SocketOptions.DEFAULT_CONNECT_TIMEOUT_MILLIS, MILLISECONDS))
.setClientSoLinger(null)
.setRetryPolicy(RetryPolicyType.DEFAULT)
.setUseDCAware(false)
.setDcAwareLocalDC(null)
.setDcAwareUsedHostsPerRemoteDc(0)
.setDcAwareAllowRemoteDCsForLocal(false)
.setUseTokenAware(false)
.setTokenAwareShuffleReplicas(false)
.setUseWhiteList(false)
.setWhiteListAddresses("")
.setNoHostAvailableRetryTimeout(new Duration(1, MINUTES))
.setSpeculativeExecutionLimit(1)
.setSpeculativeExecutionDelay(new Duration(500, MILLISECONDS)));
}
@Test
public void testExplicitPropertyMappings()
{
Map<String, String> properties = new ImmutableMap.Builder<String, String>()
.put("cassandra.max-schema-refresh-threads", "2")
.put("cassandra.schema-cache-ttl", "2h")
.put("cassandra.schema-refresh-interval", "30m")
.put("cassandra.contact-points", "host1,host2")
.put("cassandra.native-protocol-port", "9999")
.put("cassandra.fetch-size", "10000")
.put("cassandra.consistency-level", "TWO")
.put("cassandra.partition-size-for-batch-select", "77")
.put("cassandra.split-size", "1025")
.put("cassandra.allow-drop-table", "true")
.put("cassandra.username", "my_username")
.put("cassandra.password", "my_password")
.put("cassandra.client.read-timeout", "11ms")
.put("cassandra.client.connect-timeout", "22ms")
.put("cassandra.client.so-linger", "33")
.put("cassandra.retry-policy", "BACKOFF")
.put("cassandra.load-policy.use-dc-aware", "true")
.put("cassandra.load-policy.dc-aware.local-dc", "dc1")
.put("cassandra.load-policy.dc-aware.used-hosts-per-remote-dc", "1")
.put("cassandra.load-policy.dc-aware.allow-remote-dc-for-local", "true")
.put("cassandra.load-policy.use-token-aware", "true")
.put("cassandra.load-policy.token-aware.shuffle-replicas", "true")
.put("cassandra.load-policy.use-white-list", "true")
.put("cassandra.load-policy.white-list.addresses", "host1")
.put("cassandra.no-host-available-retry-timeout", "3m")
.put("cassandra.speculative-execution.limit", "10")
.put("cassandra.speculative-execution.delay", "101s")
.build();
CassandraClientConfig expected = new CassandraClientConfig()
.setMaxSchemaRefreshThreads(2)
.setSchemaCacheTtl(new Duration(2, TimeUnit.HOURS))
.setSchemaRefreshInterval(new Duration(30, TimeUnit.MINUTES))
.setContactPoints("host1", "host2")
.setNativeProtocolPort(9999)
.setFetchSize(10_000)
.setConsistencyLevel(ConsistencyLevel.TWO)
.setPartitionSizeForBatchSelect(77)
.setSplitSize(1_025)
.setAllowDropTable(true)
.setUsername("my_username")
.setPassword("my_password")
.setClientReadTimeout(new Duration(11, MILLISECONDS))
.setClientConnectTimeout(new Duration(22, MILLISECONDS))
.setClientSoLinger(33)
.setRetryPolicy(RetryPolicyType.BACKOFF)
.setUseDCAware(true)
.setDcAwareLocalDC("dc1")
.setDcAwareUsedHostsPerRemoteDc(1)
.setDcAwareAllowRemoteDCsForLocal(true)
.setUseTokenAware(true)
.setTokenAwareShuffleReplicas(true)
.setUseWhiteList(true)
.setWhiteListAddresses("host1")
.setNoHostAvailableRetryTimeout(new Duration(3, MINUTES))
.setSpeculativeExecutionLimit(10)
.setSpeculativeExecutionDelay(new Duration(101, SECONDS));
ConfigAssertions.assertFullMapping(properties, expected);
}
}