/*
* Copyright 2013 eBuddy B.V.
*
* 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.ebuddy.cassandra.dao;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotSame;
import static org.testng.Assert.assertNull;
import java.util.Arrays;
import java.util.HashSet;
import java.util.TreeSet;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import com.ebuddy.cassandra.Path;
import com.ebuddy.cassandra.StructuredDataSupport;
import com.ebuddy.cassandra.TypeReference;
import com.ebuddy.cassandra.test.AbstractCassandraThriftSystemTest;
import me.prettyprint.cassandra.serializers.StringSerializer;
import me.prettyprint.hector.api.Serializer;
import me.prettyprint.hector.api.ddl.ColumnFamilyDefinition;
import me.prettyprint.hector.api.ddl.ComparatorType;
import me.prettyprint.hector.api.factory.HFactory;
/**
* System tests for ThriftStructuredDataSupport.
* Requires a Cassandra 1.2.x+ instance
*
* @author Eric Zoerner <a href="mailto:ezoerner@ebuddy.com">ezoerner@ebuddy.com</a>
*/
public class ThriftStructuredDataSupportSystemTest extends AbstractCassandraThriftSystemTest {
private final String columnFamily = "testpojo";
private StructuredDataSupport<String> dao;
@Override
@BeforeMethod(alwaysRun = true)
public void setUp() throws Exception {
super.setUp();
Serializer<String> keySerializer = StringSerializer.get();
Serializer<String> columnNameSerializer = StringSerializer.get();
Serializer<Object> valueSerializer = StructureSerializer.get();
ColumnFamilyOperations<String,String,Object> operations = new ColumnFamilyTemplate<String,String,Object>(
keyspace,
columnFamily,
keySerializer,
columnNameSerializer,
valueSerializer);
dao = new ThriftStructuredDataSupport<String>(operations);
}
@Test(groups = {"system"})
public void shouldWriteReadDeleteTestPojo() throws Exception {
TestPojo testObject = new TestPojo("v1", 42L, true, Arrays.asList("e1", "e2"));
String rowKey = "pojo0";
Path path = dao.createPath("a","b","c");
TypeReference<TestPojo> typeReference = new TypeReference<TestPojo>() { };
dao.writeToPath(rowKey, path, testObject);
TestPojo result = dao.readFromPath(rowKey, path, typeReference);
assertNotSame(result, testObject);
assertEquals(result, testObject);
dao.deletePath(rowKey, path);
TestPojo result2 = dao.readFromPath(rowKey, path, typeReference);
assertNull(result2);
}
@Test(groups = {"system"})
public void shouldWriteReadDeleteTestPojoWithSet() throws Exception {
TestPojoWithSet testObject = getTestPojoWithSubclassedSets();
String rowKey = "pojo1";
Path path = dao.createPath("a","b","c");
TypeReference<TestPojoWithSet> typeReference = new TypeReference<TestPojoWithSet>() { };
dao.writeToPath(rowKey, path, testObject);
TestPojoWithSet result = dao.readFromPath(rowKey, path, typeReference);
assertNotSame(result, testObject);
assertEquals(result, testObject);
dao.deletePath(rowKey, path);
TestPojoWithSet result2 = dao.readFromPath(rowKey, path, typeReference);
assertNull(result2);
}
@Override
protected void dropAndCreateSchema() throws InterruptedException {
super.dropAndCreateSchema();
ColumnFamilyDefinition columnFamilyDefinition = HFactory.createColumnFamilyDefinition(keyspace.getKeyspaceName(),
columnFamily,
ComparatorType.UTF8TYPE);
columnFamilyDefinition.setDefaultValidationClass("UTF8Type");
cluster.addColumnFamily(columnFamilyDefinition);
}
@SuppressWarnings("CloneableClassWithoutClone")
private TestPojoWithSet getTestPojoWithSubclassedSets() {
return new TestPojoWithSet("string",
42L,
true,
Arrays.asList("l2", "l1", "l3"),
new HashSet<Object>() {{
add(1);
add("X");
}},
new HashSet<String>() {{
add("a");
add("b");
}},
new TreeSet<String>() {{
add("x");
add("y");
}});
}
}