/*******************************************************************************
* * Copyright 2012 Impetus Infotech.
* *
* * 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.impetus.kundera.tests.crossdatastore.useraddress.datatype;
import java.nio.ByteBuffer;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import junit.framework.Assert;
import org.apache.cassandra.thrift.Compression;
import org.apache.cassandra.thrift.ConsistencyLevel;
import org.apache.cassandra.thrift.InvalidRequestException;
import org.apache.cassandra.thrift.SchemaDisagreementException;
import org.apache.cassandra.thrift.TimedOutException;
import org.apache.cassandra.thrift.UnavailableException;
import org.apache.thrift.TException;
import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import com.impetus.kundera.client.cassandra.persistence.CassandraCli;
import com.impetus.kundera.tests.crossdatastore.useraddress.TwinAssociation;
import com.impetus.kundera.tests.crossdatastore.useraddress.datatype.entities.HabitatUniMTo1Long;
import com.impetus.kundera.tests.crossdatastore.useraddress.datatype.entities.PersonnelUniMTo1Int;
/**
* @author vivek.mishra
*
*/
public class MTOUniAssociationIntTest extends TwinAssociation
{
private static final Long ADDRESS_ID = new Long(123456);
public static final String[] ALL_PUs_UNDER_TEST = new String[] { "addCassandra", "addMongo", "oracle_kvstore",
"addCouchdb" };
/**
* Inits the.
*/
@BeforeClass
public static void init() throws Exception
{
if (RUN_IN_EMBEDDED_MODE)
{
CassandraCli.cassandraSetUp();
}
if (AUTO_MANAGE_SCHEMA)
{
CassandraCli.initClient();
}
List<Class> clazzz = new ArrayList<Class>(2);
clazzz.add(PersonnelUniMTo1Int.class);
clazzz.add(HabitatUniMTo1Long.class);
init(clazzz, ALL_PUs_UNDER_TEST);
}
/**
* Sets the up.
*
* @throws Exception
* the exception
*/
@Before
public void setUp() throws Exception
{
setUpInternal("HabitatUniMTo1Long", "PersonnelUniMTo1Int");
}
/**
* Test CRUD.
*/
@Test
public void testCRUD()
{
tryOperation(ALL_PUs_UNDER_TEST);
}
@Override
protected void insert()
{
PersonnelUniMTo1Int person1 = new PersonnelUniMTo1Int();
person1.setPersonId(12345);
person1.setPersonName("Amresh");
PersonnelUniMTo1Int person2 = new PersonnelUniMTo1Int();
person2.setPersonId(12346);
person2.setPersonName("Vivek");
HabitatUniMTo1Long address = new HabitatUniMTo1Long();
address.setAddressId(ADDRESS_ID);
address.setStreet("AAAAAAAAAAAAA");
person1.setAddress(address);
person2.setAddress(address);
Set<PersonnelUniMTo1Int> persons = new HashSet<PersonnelUniMTo1Int>();
persons.add(person1);
persons.add(person2);
dao.savePersons(persons);
col.add(person1);
col.add(person2);
col.add(address);
}
@Override
protected void find()
{
// Find Person 1
PersonnelUniMTo1Int p1 = (PersonnelUniMTo1Int) dao.findPerson(PersonnelUniMTo1Int.class, 12345);
assertPerson1(p1);
// Find Person 2
PersonnelUniMTo1Int p2 = (PersonnelUniMTo1Int) dao.findPerson(PersonnelUniMTo1Int.class, 12346);
assertPerson2(p2);
}
@Override
protected void findPersonByIdColumn()
{
PersonnelUniMTo1Int p = (PersonnelUniMTo1Int) dao.findPersonByIdColumn(PersonnelUniMTo1Int.class, 12345);
assertPerson1(p);
}
@Override
protected void findPersonByName()
{
List<PersonnelUniMTo1Int> persons = dao.findPersonByName(PersonnelUniMTo1Int.class, "Amresh");
Assert.assertNotNull(persons);
Assert.assertFalse(persons.isEmpty());
Assert.assertTrue(persons.size() == 1);
PersonnelUniMTo1Int person = persons.get(0);
assertPerson1(person);
}
@Override
protected void findAddressByIdColumn()
{
HabitatUniMTo1Long a = (HabitatUniMTo1Long) dao.findAddressByIdColumn(HabitatUniMTo1Long.class, ADDRESS_ID);
assertAddress(a);
}
@Override
protected void findAddressByStreet()
{
List<HabitatUniMTo1Long> adds = dao.findAddressByStreet(HabitatUniMTo1Long.class, "AAAAAAAAAAAAA");
Assert.assertNotNull(adds);
Assert.assertFalse(adds.isEmpty());
Assert.assertTrue(adds.size() == 1);
assertAddress(adds.get(0));
}
@Override
protected void update()
{
// Find Person 1
PersonnelUniMTo1Int p1 = (PersonnelUniMTo1Int) dao.findPerson(PersonnelUniMTo1Int.class, 12345);
Assert.assertNotNull(p1);
p1.setPersonName("Saurabh");
p1.getAddress().setStreet("Brand New Street");
dao.merge(p1);
PersonnelUniMTo1Int p1AfterMerge = (PersonnelUniMTo1Int) dao.findPerson(PersonnelUniMTo1Int.class, 12345);
Assert.assertNotNull(p1AfterMerge);
Assert.assertEquals("Saurabh", p1AfterMerge.getPersonName());
Assert.assertEquals("Brand New Street", p1AfterMerge.getAddress().getStreet());
// Find Person 2
PersonnelUniMTo1Int p2 = (PersonnelUniMTo1Int) dao.findPerson(PersonnelUniMTo1Int.class, 12346);
Assert.assertNotNull(p2);
p2.setPersonName("Prateek");
dao.merge(p2);
PersonnelUniMTo1Int p2AfterMerge = (PersonnelUniMTo1Int) dao.findPerson(PersonnelUniMTo1Int.class, 12346);
Assert.assertNotNull(p2AfterMerge);
Assert.assertEquals("Prateek", p2AfterMerge.getPersonName());
Assert.assertEquals("Brand New Street", p2AfterMerge.getAddress().getStreet());
}
@Override
protected void remove()
{
// Remove Person 1
dao.remove(12345, PersonnelUniMTo1Int.class);
PersonnelUniMTo1Int p1AfterRemoval = (PersonnelUniMTo1Int) dao.findPerson(PersonnelUniMTo1Int.class, 12345);
Assert.assertNull(p1AfterRemoval);
// Remove Person 2
dao.remove(12346, PersonnelUniMTo1Int.class);
PersonnelUniMTo1Int p2AfterRemoval = (PersonnelUniMTo1Int) dao.findPerson(PersonnelUniMTo1Int.class, 12346);
Assert.assertNull(p2AfterRemoval);
}
/**
* Tear down.
*
* @throws Exception
* the exception
*/
@After
public void tearDown() throws Exception
{
// tearDownInternal(ALL_PUs_UNDER_TEST);
// shutDownRdbmsServer();
}
/**
* @param p2
*/
private void assertPerson2(PersonnelUniMTo1Int p2)
{
Assert.assertNotNull(p2);
Assert.assertEquals(12346, p2.getPersonId());
Assert.assertEquals("Vivek", p2.getPersonName());
HabitatUniMTo1Long add2 = p2.getAddress();
assertAddress(add2);
}
/**
* @param p1
*/
private void assertPerson1(PersonnelUniMTo1Int p1)
{
Assert.assertNotNull(p1);
Assert.assertEquals(12345, p1.getPersonId());
Assert.assertEquals("Amresh", p1.getPersonName());
HabitatUniMTo1Long add = p1.getAddress();
assertAddress(add);
}
/**
* @param add2
*/
private void assertAddress(HabitatUniMTo1Long add2)
{
Assert.assertNotNull(add2);
Assert.assertEquals(ADDRESS_ID, add2.getAddressId());
Assert.assertEquals("AAAAAAAAAAAAA", add2.getStreet());
}
@Override
protected void loadDataForPERSONNEL() throws TException, InvalidRequestException, UnavailableException,
TimedOutException, SchemaDisagreementException
{
String keyspaceName = "KunderaTests";
CassandraCli.createKeySpace(keyspaceName);
CassandraCli.client.set_keyspace(keyspaceName);
try
{
CassandraCli.client.execute_cql3_query(
ByteBuffer.wrap("drop table \"PersonnelUniMTo1Int\"".getBytes("UTF-8")), Compression.NONE,
ConsistencyLevel.ONE);
}
catch (Exception ex)
{
}
CassandraCli
.executeCqlQuery(
"create table \"PersonnelUniMTo1Int\" ( \"PERSON_ID\" int PRIMARY KEY, \"PERSON_NAME\" text, \"ADDRESS_ID\" bigint)",
keyspaceName);
CassandraCli.executeCqlQuery("create index on \"PersonnelUniMTo1Int\" ( \"PERSON_NAME\")", keyspaceName);
CassandraCli.executeCqlQuery("create index on \"PersonnelUniMTo1Int\" ( \"ADDRESS_ID\")", keyspaceName);
}
@Override
protected void loadDataForHABITAT() throws TException, InvalidRequestException, UnavailableException,
TimedOutException, SchemaDisagreementException
{
String keyspaceName = "KunderaTests";
CassandraCli.createKeySpace(keyspaceName);
CassandraCli.client.set_keyspace(keyspaceName);
try
{
CassandraCli.client.execute_cql3_query(ByteBuffer.wrap("drop table \"HabitatUniMTo1Long\"".getBytes("UTF-8")),
Compression.NONE, ConsistencyLevel.ONE);
}
catch (Exception ex)
{
}
CassandraCli.executeCqlQuery(
"create table \"HabitatUniMTo1Long\" ( \"ADDRESS_ID\" bigint PRIMARY KEY, \"STREET\" text)", keyspaceName);
CassandraCli.executeCqlQuery("create index on \"HabitatUniMTo1Long\" ( \"STREET\")", keyspaceName);
}
/*
* (non-Javadoc)
*
* @see
* com.impetus.kundera.tests.crossdatastore.useraddress.AssociationBase#
* createSchemaForPERSONNEL()
*/
@Override
protected void createSchemaForPERSONNEL() throws SQLException
{
try
{
cli.update("CREATE TABLE KUNDERATESTS.PersonnelUniMTo1Int (PERSON_ID INTEGER PRIMARY KEY, PERSON_NAME VARCHAR(256), ADDRESS_ID BIGINT)");
}
catch (Exception e)
{
cli.update("DELETE FROM KUNDERATESTS.PersonnelUniMTo1Int");
cli.update("DROP TABLE KUNDERATESTS.PersonnelUniMTo1Int");
cli.update("CREATE TABLE KUNDERATESTS.PersonnelUniMTo1Int (PERSON_ID INTEGER PRIMARY KEY, PERSON_NAME VARCHAR(256), ADDRESS_ID BIGINT)");
}
}
/*
* (non-Javadoc)
*
* @see
* com.impetus.kundera.tests.crossdatastore.useraddress.AssociationBase#
* createSchemaForHABITAT()
*/
@Override
protected void createSchemaForHABITAT() throws SQLException
{
try
{
cli.update("CREATE TABLE KUNDERATESTS.HabitatUniMTo1Long (ADDRESS_ID BIGINT PRIMARY KEY, STREET VARCHAR(256))");
}
catch (Exception e)
{
cli.update("DELETE FROM KUNDERATESTS.HabitatUniMTo1Long");
cli.update("DROP TABLE KUNDERATESTS.HabitatUniMTo1Long");
cli.update("CREATE TABLE KUNDERATESTS.HabitatUniMTo1Long(ADDRESS_ID BIGINT PRIMARY KEY, STREET VARCHAR(256))");
}
}
}