Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
com.netflix.astyanax.cql.test.SchemaTests Maven / Gradle / Ivy
package com.netflix.astyanax.cql.test;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import junit.framework.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import com.google.common.collect.ImmutableMap;
import com.netflix.astyanax.AstyanaxContext;
import com.netflix.astyanax.Keyspace;
import com.netflix.astyanax.annotations.Component;
import com.netflix.astyanax.cql.test.utils.AstyanaxContextFactory;
import com.netflix.astyanax.cql.test.utils.ClusterConfiguration;
import com.netflix.astyanax.cql.test.utils.ClusterConfiguration.Driver;
import com.netflix.astyanax.ddl.ColumnDefinition;
import com.netflix.astyanax.ddl.ColumnFamilyDefinition;
import com.netflix.astyanax.ddl.KeyspaceDefinition;
import com.netflix.astyanax.model.ColumnFamily;
import com.netflix.astyanax.serializers.AnnotatedCompositeSerializer;
import com.netflix.astyanax.serializers.LongSerializer;
import com.netflix.astyanax.serializers.StringSerializer;
public class SchemaTests extends KeyspaceTests {
@BeforeClass
public static void init() throws Exception {
initContext();
}
@Test
public void createKeyspaceUsingOptions() throws Exception {
String keyspaceName = "AstyanaxTestKeyspaceUsingOptions".toLowerCase();
AstyanaxContext context = AstyanaxContextFactory.getKeyspace(keyspaceName);
context.start();
keyspace = context.getClient();
Map options = ImmutableMap.builder()
.put("strategy_options", ImmutableMap.builder()
.put("replication_factor", "1")
.build())
.put("strategy_class", "SimpleStrategy")
.build();
keyspace.createKeyspace(options);
Thread.sleep(1000);
KeyspaceDefinition ksDef = keyspace.describeKeyspace();
verifyKeyspacePropertiesForSimpleStrategy(keyspaceName, ksDef);
keyspace.dropKeyspace();
/** NETWORK TOPOLOGY */
keyspaceName = "AstyanaxTestKeyspaceUsingOptions2".toLowerCase();
context = AstyanaxContextFactory.getKeyspace(keyspaceName);
context.start();
keyspace = context.getClient();
options = ImmutableMap.builder()
.put("strategy_options", ImmutableMap.builder()
.put("us-east", "3")
.put("eu-west", "3")
.build())
.put("strategy_class", "NetworkTopologyStrategy")
.build();
keyspace.createKeyspace(options);
Thread.sleep(1000);
ksDef = keyspace.describeKeyspace();
verifyKeyspacePropertiesForNetworkTopology(keyspaceName, ksDef);
keyspace.dropKeyspace();
}
@Test
public void createKeyspaceUsingProperties() throws Exception {
/** SIMPLE STRATEGY */
String keyspaceName = "AstyanaxTestKeyspaceUsingProperties".toLowerCase();
AstyanaxContext context = AstyanaxContextFactory.getKeyspace(keyspaceName);
context.start();
keyspace = context.getClient();
Properties props = new Properties();
props.setProperty("strategy_options.replication_factor", "1");
props.setProperty("strategy_class", "SimpleStrategy");
keyspace.createKeyspace(props);
Thread.sleep(1000);
KeyspaceDefinition ksDef = keyspace.describeKeyspace();
verifyKeyspacePropertiesForSimpleStrategy(keyspaceName, ksDef);
keyspace.dropKeyspace();
/** NETWORK TOPOLOGY STRATEGY */
keyspaceName = "AstyanaxTestKeyspaceUsingProperties2".toLowerCase();
context = AstyanaxContextFactory.getKeyspace(keyspaceName);
context.start();
keyspace = context.getClient();
props = new Properties();
props.setProperty("strategy_options.us-east", "3");
props.setProperty("strategy_options.eu-west", "3");
props.setProperty("strategy_class", "NetworkTopologyStrategy");
keyspace.createKeyspace(props);
Thread.sleep(1000);
ksDef = keyspace.describeKeyspace();
verifyKeyspacePropertiesForNetworkTopology(keyspaceName, ksDef);
keyspace.dropKeyspace();
}
private void verifyKeyspacePropertiesForSimpleStrategy(String keyspaceName, KeyspaceDefinition ksDef) throws Exception {
Assert.assertEquals(keyspaceName, ksDef.getName());
Assert.assertTrue(ksDef.getStrategyClass().contains("SimpleStrategy"));
Properties properties = ksDef.getProperties();
Assert.assertEquals(keyspaceName, properties.getProperty("name"));
Assert.assertEquals("true", properties.get("durable_writes"));
String strategyClass = properties.getProperty("strategy_class");
if (strategyClass == null) {
strategyClass = properties.getProperty("replication.class");
}
Assert.assertTrue(ksDef.getStrategyClass().contains("SimpleStrategy"));
Map strategyOptions = ksDef.getStrategyOptions();
Assert.assertEquals("1", strategyOptions.get("replication_factor"));
}
private void verifyKeyspacePropertiesForNetworkTopology(String keyspaceName, KeyspaceDefinition ksDef) throws Exception {
Assert.assertEquals(keyspaceName, ksDef.getName());
Assert.assertTrue(ksDef.getStrategyClass().contains("NetworkTopologyStrategy"));
Properties properties = ksDef.getProperties();
Assert.assertEquals(keyspaceName, properties.getProperty("name"));
Assert.assertEquals("true", properties.get("durable_writes"));
String strategyClass = properties.getProperty("strategy_class");
if (strategyClass == null) {
strategyClass = properties.getProperty("replication.class");
}
Assert.assertTrue(ksDef.getStrategyClass().contains("NetworkTopologyStrategy"));
Map strategyOptions = ksDef.getStrategyOptions();
Assert.assertEquals("3", strategyOptions.get("us-east"));
Assert.assertEquals("3", strategyOptions.get("eu-west"));
}
@Test
public void createKeyspaceAndCFsUsingUsingOptions() throws Exception {
String keyspaceName = "AstyanaxTestKeyspaceAndCFsUsingOptions".toLowerCase();
AstyanaxContext context = AstyanaxContextFactory.getKeyspace(keyspaceName);
context.start();
keyspace = context.getClient();
Map options = ImmutableMap.builder()
.put("strategy_options", ImmutableMap.builder()
.put("replication_factor", "1")
.build())
.put("strategy_class", "SimpleStrategy")
.build();
Map> cfs = ImmutableMap.>builder()
.put(new ColumnFamily("testcf1", StringSerializer.get(), StringSerializer.get()),
ImmutableMap.builder()
.put("bloom_filter_fp_chance", 0.01)
.build())
.put(new ColumnFamily("testcf2", LongSerializer.get(), StringSerializer.get()),
ImmutableMap.builder()
.put("read_repair_chance", 0.2)
.put("bloom_filter_fp_chance", 0.01)
.build())
.build();
keyspace.createKeyspace(options, cfs);
Thread.sleep(1000);
KeyspaceDefinition ksDef = keyspace.describeKeyspace();
verifyKeyspacePropertiesForSimpleStrategy(keyspaceName, ksDef);
Map strategyOptions = ksDef.getStrategyOptions();
Assert.assertEquals("1", strategyOptions.get("replication_factor"));
Properties cfProps = keyspace.getColumnFamilyProperties("testcf1");
Assert.assertEquals("0.1", String.valueOf(cfProps.get("read_repair_chance")));
Assert.assertEquals("0.01", String.valueOf(cfProps.get("bloom_filter_fp_chance")));
Assert.assertEquals("KEYS_ONLY", String.valueOf(cfProps.get("caching")));
Assert.assertEquals("4", String.valueOf(cfProps.get("min_compaction_threshold")));
Assert.assertEquals("32", String.valueOf(cfProps.get("max_compaction_threshold")));
cfProps = keyspace.getColumnFamilyProperties("testcf2");
Assert.assertEquals("0.2", String.valueOf(cfProps.get("read_repair_chance")));
Assert.assertEquals("0.01", String.valueOf(cfProps.get("bloom_filter_fp_chance")));
Assert.assertEquals("KEYS_ONLY", String.valueOf(cfProps.get("caching")));
Assert.assertEquals("4", String.valueOf(cfProps.get("min_compaction_threshold")));
Assert.assertEquals("32", String.valueOf(cfProps.get("max_compaction_threshold")));
keyspace.dropKeyspace();
}
@Test
public void createKeyspaceAndCFsDirectly() throws Exception {
String keyspaceName = "AstyanaxTestKeyspaceAndCFsDirect".toLowerCase();
AstyanaxContext context = AstyanaxContextFactory.getKeyspace(keyspaceName);
context.start();
keyspace = context.getClient();
Map ksOptions = ImmutableMap.builder()
.put("strategy_options", ImmutableMap.builder()
.put("replication_factor", "1")
.build())
.put("strategy_class", "SimpleStrategy")
.build();
keyspace.createKeyspace(ksOptions);
ColumnFamily cf1 = new ColumnFamily("testcf1", StringSerializer.get(), StringSerializer.get());
Map options1 = ImmutableMap.builder()
.put("read_repair_chance", 0.2)
.put("bloom_filter_fp_chance", 0.01)
.build();
keyspace.createColumnFamily(cf1, options1);
Map options2 = new HashMap();
options2.put("name", "testcf2");
options2.put("read_repair_chance", 0.4);
options2.put("bloom_filter_fp_chance", 0.01);
keyspace.createColumnFamily(options2);
Thread.sleep(1000);
KeyspaceDefinition ksDef = keyspace.describeKeyspace();
verifyKeyspacePropertiesForSimpleStrategy(keyspaceName, ksDef);
Properties cfProps = keyspace.getColumnFamilyProperties("testcf1");
Assert.assertEquals("0.2", String.valueOf(cfProps.get("read_repair_chance")));
Assert.assertEquals("0.01", String.valueOf(cfProps.get("bloom_filter_fp_chance")));
Assert.assertEquals("KEYS_ONLY", String.valueOf(cfProps.get("caching")));
Assert.assertEquals("4", String.valueOf(cfProps.get("min_compaction_threshold")));
Assert.assertEquals("32", String.valueOf(cfProps.get("max_compaction_threshold")));
cfProps = keyspace.getColumnFamilyProperties("testcf2");
Assert.assertEquals("0.4", String.valueOf(cfProps.get("read_repair_chance")));
Assert.assertEquals("0.01", String.valueOf(cfProps.get("bloom_filter_fp_chance")));
Assert.assertEquals("KEYS_ONLY", String.valueOf(cfProps.get("caching")));
Assert.assertEquals("4", String.valueOf(cfProps.get("min_compaction_threshold")));
Assert.assertEquals("32", String.valueOf(cfProps.get("max_compaction_threshold")));
ColumnFamilyDefinition cfDef = ksDef.getColumnFamily("testcf1");
Assert.assertEquals("testcf1", cfDef.getName());
Assert.assertEquals(0.2, cfDef.getReadRepairChance());
Assert.assertEquals("KEYS_ONLY", cfDef.getCaching());
Assert.assertTrue(32 == cfDef.getMaxCompactionThreshold());
Assert.assertTrue(4 == cfDef.getMinCompactionThreshold());
Assert.assertEquals(0.01, cfDef.getBloomFilterFpChance());
cfDef = ksDef.getColumnFamily("testcf2");
Assert.assertEquals("testcf2", cfDef.getName());
Assert.assertEquals(0.4, cfDef.getReadRepairChance());
Assert.assertEquals("KEYS_ONLY", cfDef.getCaching());
Assert.assertTrue(32 == cfDef.getMaxCompactionThreshold());
Assert.assertTrue(4 == cfDef.getMinCompactionThreshold());
Assert.assertEquals(0.01, cfDef.getBloomFilterFpChance());
List cfDefs = ksDef.getColumnFamilyList();
Assert.assertTrue(2 == cfDefs.size());
cfDef = cfDefs.get(0);
Assert.assertEquals("testcf1", cfDef.getName());
Assert.assertEquals(0.2, cfDef.getReadRepairChance());
Assert.assertEquals("KEYS_ONLY", cfDef.getCaching());
Assert.assertTrue(32 == cfDef.getMaxCompactionThreshold());
Assert.assertTrue(4 == cfDef.getMinCompactionThreshold());
Assert.assertEquals(0.01, cfDef.getBloomFilterFpChance());
cfDef = cfDefs.get(1);
Assert.assertEquals("testcf2", cfDef.getName());
Assert.assertEquals(0.4, cfDef.getReadRepairChance());
Assert.assertEquals("KEYS_ONLY", cfDef.getCaching());
Assert.assertTrue(32 == cfDef.getMaxCompactionThreshold());
Assert.assertTrue(4 == cfDef.getMinCompactionThreshold());
Assert.assertEquals(0.01, cfDef.getBloomFilterFpChance());
keyspace.dropKeyspace();
}
@Test
public void createKeyspaceWithCompositeCF() throws Exception {
// Annotated composite class
class Population {
@Component(ordinal=0) String country;
@Component(ordinal=1) String state;
@Component(ordinal=2) String city;
@Component(ordinal=3) Integer zip;
@Component(ordinal=3) Date district;
// Must have public default constructor
public Population() {
}
}
AnnotatedCompositeSerializer compSerializer = new AnnotatedCompositeSerializer(Population.class);
ColumnFamily CF_POPULATION =
new ColumnFamily("population", StringSerializer.get(), compSerializer);
String keyspaceName = "AstyanaxTestKeyspaceCompositeCFs".toLowerCase();
AstyanaxContext context = AstyanaxContextFactory.getKeyspace(keyspaceName);
context.start();
keyspace = context.getClient();
Map ksOptions = ImmutableMap.builder()
.put("strategy_options", ImmutableMap.builder()
.put("replication_factor", "1")
.build())
.put("strategy_class", "SimpleStrategy")
.build();
keyspace.createKeyspace(ksOptions);
KeyspaceDefinition ksDef = keyspace.describeKeyspace();
Assert.assertEquals(keyspaceName, ksDef.getName());
keyspace.createColumnFamily(CF_POPULATION, ImmutableMap.builder()
.put("default_validation_class", "UTF8Type")
.put("key_validation_class", "UTF8Type")
.put("comparator_type", "CompositeType(UTF8Type, UTF8Type, UTF8Type, Int32Type, DateType)")
.build());
if (ClusterConfiguration.getDriver().equals(Driver.JAVA_DRIVER)) {
List list = ksDef.getColumnFamilyList();
Assert.assertTrue(1 == list.size());
ColumnFamilyDefinition cfDef = list.get(0);
Assert.assertEquals("population", cfDef.getName());
List colDefs = cfDef.getColumnDefinitionList();
Assert.assertTrue(7 == colDefs.size());
for (int i=1; i<=5; i++) {
ColumnDefinition colDef = colDefs.get(i-1);
Assert.assertEquals("column" + i, colDef.getName());
Assert.assertNotNull(colDef.getValidationClass());
}
ColumnDefinition colDef = colDefs.get(6);
Assert.assertEquals("value", colDef.getName());
Assert.assertNotNull(colDef.getValidationClass());
cfDef = ksDef.getColumnFamily("population");
Assert.assertEquals("population", cfDef.getName());
colDefs = cfDef.getColumnDefinitionList();
Assert.assertTrue(7 == colDefs.size());
for (int i=1; i<=5; i++) {
colDef = colDefs.get(i-1);
Assert.assertEquals("column" + i, colDef.getName());
Assert.assertNotNull(colDef.getValidationClass());
}
colDef = colDefs.get(6);
Assert.assertEquals("value", colDef.getName());
Assert.assertNotNull(colDef.getValidationClass());
}
keyspace.dropKeyspace();
}
@Test
public void alterKeyspaceOptions() throws Exception {
String keyspaceName = "AstyanaxTestKeyspaceAlterOptions".toLowerCase();
AstyanaxContext context = AstyanaxContextFactory.getKeyspace(keyspaceName);
context.start();
keyspace = context.getClient();
Map options = ImmutableMap.builder()
.put("strategy_options", ImmutableMap.builder()
.put("replication_factor", "1")
.build())
.put("strategy_class", "SimpleStrategy")
.build();
keyspace.createKeyspace(options);
Thread.sleep(1000);
KeyspaceDefinition ksDef = keyspace.describeKeyspace();
verifyKeyspacePropertiesForSimpleStrategy(keyspaceName, ksDef);
keyspace.updateKeyspace(ImmutableMap.builder()
.put("strategy_options", ImmutableMap.builder()
.put("replication_factor", "2")
.build())
.put("strategy_class", "SimpleStrategy")
.build());
ksDef = keyspace.describeKeyspace();
Assert.assertEquals("2", ksDef.getStrategyOptions().get("replication_factor"));
keyspace.dropKeyspace();
/** NETWORK TOPOLOGY */
keyspaceName = "AstyanaxTestKeyspaceAlterOptions2".toLowerCase();
context = AstyanaxContextFactory.getKeyspace(keyspaceName);
context.start();
keyspace = context.getClient();
options = ImmutableMap.builder()
.put("strategy_options", ImmutableMap.builder()
.put("us-east", "3")
.put("eu-west", "3")
.build())
.put("strategy_class", "NetworkTopologyStrategy")
.build();
keyspace.createKeyspace(options);
Thread.sleep(1000);
KeyspaceDefinition ksDef2 = keyspace.describeKeyspace();
verifyKeyspacePropertiesForNetworkTopology(keyspaceName, ksDef2);
options = ImmutableMap.builder()
.put("strategy_options", ImmutableMap.builder()
.put("us-east", "2")
.put("eu-west", "2")
.build())
.put("strategy_class", "NetworkTopologyStrategy")
.build();
keyspace.updateKeyspace(options);
ksDef2 = keyspace.describeKeyspace();
System.out.println(ksDef2.getStrategyOptions());
Assert.assertEquals("2", ksDef2.getStrategyOptions().get("us-east"));
Assert.assertEquals("2", ksDef2.getStrategyOptions().get("eu-west"));
keyspace.dropKeyspace();
}
@Test
public void alterCFOptions() throws Exception {
String keyspaceName = "AstyanaxTestKeyspaceAlterCFOptions".toLowerCase();
AstyanaxContext context = AstyanaxContextFactory.getKeyspace(keyspaceName);
context.start();
keyspace = context.getClient();
Map options = ImmutableMap.builder()
.put("strategy_options", ImmutableMap.builder()
.put("replication_factor", "1")
.build())
.put("strategy_class", "SimpleStrategy")
.build();
keyspace.createKeyspace(options);
Thread.sleep(1000);
ColumnFamily cf = new ColumnFamily("testaltercf1", StringSerializer.get(), StringSerializer.get());
keyspace.createColumnFamily(cf, null);
Assert.assertEquals(0.1, keyspace.getColumnFamilyProperties("testaltercf1").get("read_repair_chance"));
keyspace.updateColumnFamily(cf, ImmutableMap.builder()
.put("read_repair_chance", 0.2)
.build());
Assert.assertEquals(0.2, keyspace.getColumnFamilyProperties("testaltercf1").get("read_repair_chance"));
keyspace.dropKeyspace();
}
@Test
public void createAndDeleteCF() throws Exception {
String keyspaceName = "AstyanaxTestKeyspaceCreateDeleteCF".toLowerCase();
AstyanaxContext context = AstyanaxContextFactory.getKeyspace(keyspaceName);
context.start();
keyspace = context.getClient();
Map options = ImmutableMap.builder()
.put("strategy_options", ImmutableMap.builder()
.put("replication_factor", "1")
.build())
.put("strategy_class", "SimpleStrategy")
.build();
keyspace.createKeyspace(options);
Thread.sleep(1000);
ColumnFamily cf = new ColumnFamily("testcreatedeletecf1", StringSerializer.get(), StringSerializer.get());
keyspace.createColumnFamily(cf, null);
Assert.assertEquals(0.1, keyspace.getColumnFamilyProperties("testcreatedeletecf1").get("read_repair_chance"));
keyspace.dropColumnFamily(cf);
try {
keyspace.getColumnFamilyProperties("testaltercf1");
Assert.fail("Should have gotten CF not found ex");
} catch(RuntimeException e) {
} finally {
keyspace.dropKeyspace();
}
}
@Test
public void createAndDeleteKeyspace() throws Exception {
String keyspaceName = "AstyanaxTestKeyspaceCreateDeleteKS".toLowerCase();
AstyanaxContext context = AstyanaxContextFactory.getKeyspace(keyspaceName);
context.start();
keyspace = context.getClient();
Map options = ImmutableMap.builder()
.put("strategy_options", ImmutableMap.builder()
.put("replication_factor", "1")
.build())
.put("strategy_class", "SimpleStrategy")
.build();
keyspace.createKeyspace(options);
Thread.sleep(1000);
KeyspaceDefinition ksDef = keyspace.describeKeyspace();
Assert.assertTrue(ksDef.getStrategyClass().contains("SimpleStrategy"));
keyspace.dropKeyspace();
try {
keyspace.describeKeyspace();
Assert.fail("Should have gotten KS not found ex");
} catch(RuntimeException e) {
}
}
@Test
public void keyspaceDescribePartitioner() throws Exception {
String keyspaceName = "AstyanaxTestKeyspaceDescribeRing".toLowerCase();
AstyanaxContext context = AstyanaxContextFactory.getKeyspace(keyspaceName);
context.start();
keyspace = context.getClient();
Map options = ImmutableMap.builder()
.put("strategy_options", ImmutableMap.builder()
.put("replication_factor", "1")
.build())
.put("strategy_class", "SimpleStrategy")
.build();
keyspace.createKeyspace(options);
Thread.sleep(1000);
String partitioner = keyspace.describePartitioner();
Assert.assertNotNull(partitioner);
keyspace.dropKeyspace();
}
}