package me.prettyprint.hom; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import java.util.ArrayList; import java.util.List; import java.util.Map.Entry; import java.util.UUID; import me.prettyprint.cassandra.serializers.StringSerializer; import me.prettyprint.cassandra.serializers.UUIDSerializer; import me.prettyprint.hector.api.beans.HColumn; import me.prettyprint.hector.api.factory.HFactory; import me.prettyprint.hector.api.mutation.Mutator; import me.prettyprint.hom.beans.AnonymousWithCustomType; import me.prettyprint.hom.beans.MyBlueTestBean; import me.prettyprint.hom.beans.MyComplexEntity; import me.prettyprint.hom.beans.MyComposite2PK; import me.prettyprint.hom.beans.MyCompositeEntity; import me.prettyprint.hom.beans.MyCompositePK; import me.prettyprint.hom.beans.MyConvertedCollectionBean; import me.prettyprint.hom.beans.MyCustomIdBean; import me.prettyprint.hom.beans.MyGreenTestBean; import me.prettyprint.hom.beans.MyPurpleTestBean; import me.prettyprint.hom.beans.MyRedTestBean; import me.prettyprint.hom.beans.MyTestBean; import me.prettyprint.hom.beans.MyTestBeanNoAnonymous; import org.junit.Test; import com.mycompany.furniture.Drawer; public class EntityManagerTest extends CassandraTestBase { @Test public void testInitializeSaveLoad() { EntityManagerImpl em = new EntityManagerImpl(keyspace, "me.prettyprint.hom.beans"); MyTestBean o1 = new MyTestBean(); o1.setBaseId(UUID.randomUUID()); o1.setIntProp1(1); o1.setBoolProp1(Boolean.TRUE); o1.setLongProp1(123L); em.persist(o1); MyTestBean o2 = em.find(MyTestBean.class, o1.getBaseId()); assertEquals(o1.getBaseId(), o2.getBaseId()); assertEquals(o1.getIntProp1(), o2.getIntProp1()); assertEquals(o1.isBoolProp1(), o2.isBoolProp1()); assertEquals(o1.getLongProp1(), o2.getLongProp1()); } @Test public void testInitializeSaveLoadCollection() { List<Object> objList = new ArrayList<Object>(3); EntityManagerImpl em = new EntityManagerImpl(keyspace, "me.prettyprint.hom.beans"); MyGreenTestBean green = new MyGreenTestBean(); green.setBaseId(UUID.randomUUID()); green.setIntProp1(1); objList.add(green); MyBlueTestBean blue = new MyBlueTestBean(); blue.setBaseId(UUID.randomUUID()); blue.setIntProp1(2); objList.add(blue); MyPurpleTestBean purple = new MyPurpleTestBean(); purple.setId("purple"); purple.setLongProp1(3); objList.add(purple); em.persist(objList); MyGreenTestBean green2 = em.find(MyGreenTestBean.class, green.getBaseId()); MyBlueTestBean blue2 = em.find(MyBlueTestBean.class, blue.getBaseId()); MyPurpleTestBean purple2 = em.find(MyPurpleTestBean.class, purple.getId()); assertEquals( green, green2); assertEquals(blue, blue2); assertEquals( purple, purple2); } @Test public void testInitializeSaveLoadCustomId() { EntityManagerImpl em = new EntityManagerImpl(keyspace, "me.prettyprint.hom.beans"); MyCustomIdBean o1 = new MyCustomIdBean(); o1.setId(Colors.GREEN); o1.setLongProp1(111L); em.persist(o1); MyCustomIdBean o2 = em.find(MyCustomIdBean.class, Colors.GREEN); assertEquals(o1.getId(), o2.getId()); assertEquals(o1.getLongProp1(), o2.getLongProp1()); } @Test public void testExtraColumnShouldNotBeRead() { EntityManagerImpl em = new EntityManagerImpl(keyspace, "me.prettyprint.hom.beans"); MyTestBeanNoAnonymous bean1 = new MyTestBeanNoAnonymous(); bean1.setBaseId(UUID.randomUUID()); bean1.setLongProp1(1L); em.persist(bean1); // now add column that is not a property of bean Mutator<UUID> m = HFactory.createMutator(keyspace, UUIDSerializer.get()); HColumn<String, String> col = HFactory.createColumn("anonymousProperty", "blah", StringSerializer.get(), StringSerializer.get()); m.insert(bean1.getBaseId(), "NoAnonymousColumnFamily", col); MyTestBeanNoAnonymous bean2 = em.find(MyTestBeanNoAnonymous.class, bean1.getBaseId()); assertNotNull("Could not load bean from cassandra", bean2); assertEquals(bean1.getLongProp1(), bean2.getLongProp1()); } @Test public void testPersistAndFindComplexType() { EntityManagerImpl em = new EntityManagerImpl(keyspace, "me.prettyprint.hom.beans"); MyCompositePK pkKey = new MyCompositePK(1, "str-prop"); MyComplexEntity entity1 = new MyComplexEntity(); entity1.setIntProp1(pkKey.getIntProp1()); entity1.setStrProp1(pkKey.getStrProp1()); entity1.setStrProp2("str-prop-two"); entity1.setDrawer(new Drawer(true, false, "a very nice drawer")); em.persist(entity1); MyComplexEntity entity2 = em.find(MyComplexEntity.class, pkKey); assertEquals(entity1.getIntProp1(), entity2.getIntProp1()); assertEquals(entity1.getStrProp1(), entity2.getStrProp1()); assertEquals(entity1.getStrProp2(), entity2.getStrProp2()); assertEquals(entity1.getDrawer(), entity2.getDrawer()); } @Test public void testPersistAndFindCompositeType() { EntityManagerImpl em = new EntityManagerImpl(keyspace, "me.prettyprint.hom.beans"); MyComposite2PK pkKey = new MyComposite2PK("str-prop", 1); MyCompositeEntity entity1 = new MyCompositeEntity(); entity1.setIntProp1(pkKey.getIntProp1()); entity1.setStrProp1(pkKey.getStrProp1()); entity1.setStrProp2("str-prop-two"); entity1.setDrawer(new Drawer(true, false, "a very nice drawer")); em.persist(entity1); MyCompositeEntity entity2 = em.find(MyCompositeEntity.class, pkKey); assertEquals(entity1.getIntProp1(), entity2.getIntProp1()); assertEquals(entity1.getStrProp1(), entity2.getStrProp1()); assertEquals(entity1.getStrProp2(), entity2.getStrProp2()); assertEquals(entity1.getDrawer(), entity2.getDrawer()); } @Test public void testMissingColumnsForPojoProps() { // Mutator<Long> m = HFactory.createMutator(keyspace, LongSerializer.get()); // m.insert(1, "SimpleTestBeanColumnFamily", HFactory.createColumn(name, // value, nameSerializer, valueSerializer)) EntityManagerImpl em = new EntityManagerImpl(keyspace, "me.prettyprint.hom.beans"); MyCompositePK pkKey = new MyCompositePK(1, "str-prop"); MyComplexEntity entity1 = new MyComplexEntity(); entity1.setIntProp1(pkKey.getIntProp1()); entity1.setStrProp1(pkKey.getStrProp1()); entity1.setStrProp2("str-prop-two"); em.persist(entity1); MyComplexEntity entity2 = em.find(MyComplexEntity.class, pkKey); assertEquals(entity1.getIntProp1(), entity2.getIntProp1()); assertEquals(entity1.getStrProp1(), entity2.getStrProp1()); assertEquals(entity1.getStrProp2(), entity2.getStrProp2()); assertNull(entity2.getStrProp3()); } @Test public void testPojoWithListCollection() { EntityManagerImpl em = new EntityManagerImpl(keyspace, "me.prettyprint.hom.beans"); MyBlueTestBean b1 = new MyBlueTestBean(); b1.setBaseId(UUID.randomUUID()); b1.addToList(100).addToList(200).addToList(300); em.persist(b1); MyBlueTestBean b2 = em.find(MyBlueTestBean.class, b1.getBaseId()); assertEquals(b1.getMySet().size(), b2.getMySet().size()); for (Integer myInt : b1.getMySet()) { assertTrue(b2.getMySet().remove(myInt)); } } @Test public void testPojoWithListUpdateCollection() { EntityManagerImpl em = new EntityManagerImpl(keyspace, "me.prettyprint.hom.beans"); MyBlueTestBean b1 = new MyBlueTestBean(); b1.setBaseId(UUID.randomUUID()); b1.addToList(100).addToList(200).addToList(300); em.persist(b1); MyBlueTestBean b2 = new MyBlueTestBean(); b2.setBaseId(b1.getBaseId()); b2.addToList(400); em.persist(b2); MyBlueTestBean b3 = em.find(MyBlueTestBean.class, b1.getBaseId()); assertEquals(b2.getMySet().size(), b3.getMySet().size()); for (Integer myInt : b2.getMySet()) { assertTrue(b3.getMySet().remove(myInt)); } } @Test public void testPojoWithSetCollection() { EntityManagerImpl em = new EntityManagerImpl(keyspace, "me.prettyprint.hom.beans"); MyBlueTestBean b1 = new MyBlueTestBean(); b1.setBaseId(UUID.randomUUID()); b1.addToList(100).addToList(200).addToList(300); em.persist(b1); MyBlueTestBean b2 = em.find(MyBlueTestBean.class, b1.getBaseId()); assertEquals(b1.getMySet().size(), b2.getMySet().size()); for (Integer myInt : b1.getMySet()) { assertTrue(b2.getMySet().remove(myInt)); } } @Test public void testPojoWithCustomCollection() { EntityManagerImpl em = new EntityManagerImpl(keyspace, "me.prettyprint.hom.beans"); MyConvertedCollectionBean b1 = new MyConvertedCollectionBean(); b1.setId("me"); b1.addToList(100).addToList(200).addToList(300); em.persist(b1); MyConvertedCollectionBean b2 = em.find(MyConvertedCollectionBean.class, b1.getId()); assertEquals(b1.getMyCollection().size(), b2.getMyCollection().size()); for (Integer myInt : b1.getMyCollection()) { assertTrue(b2.getMyCollection().remove(myInt)); } } @Test public void testAnonymousCustomValuesObjectSerializer() { EntityManagerImpl em = new EntityManagerImpl(keyspace, "me.prettyprint.hom.beans"); AnonymousWithCustomType b1 = new AnonymousWithCustomType(); b1.setId(123); b1.addAnonymousProp("one", new Drawer(true, false, "one")); b1.addAnonymousProp("two", new Drawer(false, true, "two")); b1.addAnonymousProp("three", new Drawer(true, true, "three")); em.persist(b1); AnonymousWithCustomType b2 = em.find(AnonymousWithCustomType.class, b1.getId()); assertEquals(b1.getId(), b2.getId()); assertEquals(b1.getAnonymousProps().size(), b2.getAnonymousProps().size()); for (Entry<String, Drawer> entry : b1.getAnonymousProps()) { assertTrue("anonymous prop is in b1, but not b2", b2.getAnonymousProps().contains(entry)); } } @Test public void testAnonymousHandlerOnBaseClass() { EntityManagerImpl em = new EntityManagerImpl(keyspace, "me.prettyprint.hom.beans"); MyRedTestBean b1 = new MyRedTestBean(); b1.setBaseId(UUID.randomUUID()); b1.addAnonymousProp("one", "1"); b1.addAnonymousProp("two", "2"); b1.addAnonymousProp("three", "3"); em.persist(b1); MyRedTestBean b2 = em.find(MyRedTestBean.class, b1.getBaseId()); assertEquals(b1.getBaseId(), b2.getBaseId()); assertEquals(b1.getAnonymousProps().size(), b2.getAnonymousProps().size()); for (Entry<String, String> entry : b1.getAnonymousProps()) { assertTrue("anonymous prop is in b1, but not b2", b2.getAnonymousProps().contains(entry)); } } // -------------------- }