From 871f7f6181cc3fdf93c0e26ea29497e8a2ff8c7e Mon Sep 17 00:00:00 2001 From: Cherian Mathew Date: Thu, 20 Mar 2014 15:20:24 +0000 Subject: [PATCH] added more tests for both lazy loading entities and collections --- .../remoting/RemoteLazyLoadingTest.java | 125 +++++++++--------- .../RemotePersistentCollectionTest.java | 75 ++++++++++- 2 files changed, 133 insertions(+), 67 deletions(-) diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/test/java/eu/etaxonomy/taxeditor/remoting/RemoteLazyLoadingTest.java b/eu.etaxonomy.taxeditor.cdmlib/src/test/java/eu/etaxonomy/taxeditor/remoting/RemoteLazyLoadingTest.java index 288ead057..a0451ae76 100644 --- a/eu.etaxonomy.taxeditor.cdmlib/src/test/java/eu/etaxonomy/taxeditor/remoting/RemoteLazyLoadingTest.java +++ b/eu.etaxonomy.taxeditor.cdmlib/src/test/java/eu/etaxonomy/taxeditor/remoting/RemoteLazyLoadingTest.java @@ -1,5 +1,5 @@ /** -* Copyright (C) 2009 EDIT +* Copyright (C) 2014 EDIT * European Distributed Institute of Taxonomy * http://www.e-taxonomy.eu * @@ -11,100 +11,99 @@ package eu.etaxonomy.taxeditor.remoting; import java.util.HashSet; import java.util.Iterator; +import java.util.List; import java.util.Set; import java.util.UUID; -import org.hibernate.collection.internal.AbstractPersistentCollection; -import org.hibernate.proxy.AbstractLazyInitializer; +import org.apache.log4j.Level; +import org.apache.log4j.Logger; import org.junit.Assert; -import org.junit.Before; +import org.junit.BeforeClass; import org.junit.Test; -import org.springframework.core.io.ClassPathResource; -import org.springframework.core.io.Resource; -import org.unitils.UnitilsJUnit4; -import org.unitils.database.annotations.Transactional; -import org.unitils.database.util.TransactionMode; -import org.unitils.spring.annotation.SpringApplicationContext; -import org.unitils.spring.annotation.SpringBeanByType; +import org.junit.Ignore; -import eu.etaxonomy.cdm.api.application.CdmApplicationController; -import eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration; +import eu.etaxonomy.cdm.api.service.IClassificationService; import eu.etaxonomy.cdm.api.service.ITaxonService; -import eu.etaxonomy.cdm.database.CdmPersistentDataSource; -import eu.etaxonomy.cdm.database.DataSourceNotFoundException; -import eu.etaxonomy.cdm.database.ICdmDataSource; import eu.etaxonomy.cdm.model.common.CdmBase; import eu.etaxonomy.cdm.model.name.NonViralName; +import eu.etaxonomy.cdm.model.name.Rank; +import eu.etaxonomy.cdm.model.name.TaxonNameBase; +import eu.etaxonomy.cdm.model.taxon.Classification; import eu.etaxonomy.cdm.model.taxon.SynonymRelationship; import eu.etaxonomy.cdm.model.taxon.Taxon; +import eu.etaxonomy.cdm.model.taxon.TaxonNode; /** - * This test class is a testing ground for solving the hibernate lazy loading problem using aspects + * Test class which tests remoting for persistent cdm entities. * - * FIXME:Remoting Neet to be able to launch a cdm server here a-la CdmIntegrationTests - * To execute this test you need a local eclipse jetty cdmserver already running. - * The data used in this test corresponds to the cyprus db, so the data should be changed to - * suit the target datasource - * + * FIXME:Remoting saving tests are ignored until the merge development is underway * @author c.mathew * */ -//@SpringApplicationContext("classpath:/eu/etaxonomy/cdm/remotingApplicationContext.xml") -@Transactional(TransactionMode.DISABLED) -public class RemoteLazyLoadingTest extends UnitilsJUnit4 { + +public class RemoteLazyLoadingTest extends RemoteApplicationConfigurationTest { + + private static final Logger logger = Logger.getLogger(RemoteLazyLoadingTest.class); + + private static IClassificationService classificationService; + private static ITaxonService taxonService; - //@SpringBeanByType - private ITaxonService taxonService; + private static List taxonNodes; private UUID taxonUuid1 = UUID.fromString("8217ef77-2ab1-4318-bd67-ccd0cdef07c4"); private UUID taxonUuid2 = UUID.fromString("ef96fafa-7750-4141-b31b-1ad1daab3e76"); - ICdmApplicationConfiguration applicationController; - /** - * @throws DataSourceNotFoundException - */ - @Before - public void initializeContext() throws DataSourceNotFoundException { - Resource DEFAULT_APPLICATION_CONTEXT = new ClassPathResource( - "/eu/etaxonomy/cdm/remotingApplicationContext.xml"); - ICdmDataSource datasource = CdmPersistentDataSource.NewInstance("local-cyprus"); - ICdmApplicationConfiguration applicationController = - CdmApplicationController.NewInstance(DEFAULT_APPLICATION_CONTEXT, - datasource, - null, - false, - null); - AbstractLazyInitializer.setConfiguration(applicationController); - AbstractPersistentCollection.setConfiguration(applicationController); - taxonService = applicationController.getTaxonService(); - } - - @Test - public void testCDMEntityGet() { - Taxon taxon = (Taxon)taxonService.find(taxonUuid1); - System.out.println("Taxon title : " + taxon.getTitleCache()); + @BeforeClass + public static void initializeServices() { + Logger.getRootLogger().setLevel(Level.INFO); - NonViralName nvn = CdmBase.deproxy(taxon.getName(),NonViralName.class); - System.out.println("name : " + nvn.getTitleCache()); + taxonService = applicationController.getTaxonService(); + classificationService= applicationController.getClassificationService(); + List classifications = classificationService.listClassifications(1,0,null,null); + Assert.assertFalse(classifications.isEmpty()); + + Classification classification = classifications.get(0); + Assert.assertNotNull(classification); + taxonNodes = classificationService.getAllNodes(); + Assert.assertFalse(taxonNodes.isEmpty()); + } + + @Test - public void testCDMCollectionGet() { - Taxon taxon = (Taxon)taxonService.find(taxonUuid1); - System.out.println("Taxon title : " + taxon.getTitleCache()); + public void testCDMEntityGet() { + Iterator taxonNodeItr = taxonNodes.iterator(); + int maxcount = 30; + int count = 0; + while(taxonNodeItr.hasNext() && count <= maxcount) { + TaxonNode taxonNode = taxonNodeItr.next(); + Assert.assertNotNull(taxonNode); + + Taxon taxon = taxonNode.getTaxon(); + Assert.assertNotNull(taxon); + + String taxonTitle = taxon.getTitleCache(); + logger.info("Taxon : " + taxonTitle); + + TaxonNameBase name = taxon.getName(); + Assert.assertNotNull(name); + + String nameTitle = name.getTitleCache(); + logger.info("Taxon Name : " + nameTitle); + + count++; + } + - Set synRelations = taxon.getSynonymRelations(); - Iterator srItr = synRelations.iterator(); - while(srItr.hasNext()) { - SynonymRelationship sr = srItr.next(); - System.out.println("Synonym Relationship : " + sr.getType().getTitleCache()); - } } + + @Ignore @Test public void testCDMEntitySaveEager() { Taxon taxon = (Taxon)taxonService.find(taxonUuid1); @@ -130,6 +129,7 @@ public class RemoteLazyLoadingTest extends UnitilsJUnit4 { } + @Ignore @Test public void testCDMEntitySaveLazy() { Taxon taxon = (Taxon)taxonService.find(taxonUuid1); @@ -156,6 +156,7 @@ public class RemoteLazyLoadingTest extends UnitilsJUnit4 { Assert.assertEquals("Title caches should be equal",oldTitleCache,nvnOld.getTitleCache()); } + @Ignore @Test public void testCDMEntitySaveCollection() { Taxon taxon = (Taxon)taxonService.find(taxonUuid1); diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/test/java/eu/etaxonomy/taxeditor/remoting/RemotePersistentCollectionTest.java b/eu.etaxonomy.taxeditor.cdmlib/src/test/java/eu/etaxonomy/taxeditor/remoting/RemotePersistentCollectionTest.java index d0298d9df..2bf756776 100644 --- a/eu.etaxonomy.taxeditor.cdmlib/src/test/java/eu/etaxonomy/taxeditor/remoting/RemotePersistentCollectionTest.java +++ b/eu.etaxonomy.taxeditor.cdmlib/src/test/java/eu/etaxonomy/taxeditor/remoting/RemotePersistentCollectionTest.java @@ -8,11 +8,14 @@ */ package eu.etaxonomy.taxeditor.remoting; +import java.util.Iterator; import java.util.List; +import java.util.Map; import java.util.Set; import org.apache.log4j.Level; import org.apache.log4j.Logger; +import org.hibernate.collection.internal.AbstractPersistentCollection; import org.hibernate.collection.spi.PersistentCollection; import org.junit.Assert; import org.junit.BeforeClass; @@ -20,6 +23,13 @@ import org.junit.Test; import org.unitils.UnitilsJUnit4; import eu.etaxonomy.cdm.api.service.IClassificationService; +import eu.etaxonomy.cdm.model.common.CdmBase; +import eu.etaxonomy.cdm.model.common.Language; +import eu.etaxonomy.cdm.model.common.LanguageString; +import eu.etaxonomy.cdm.model.description.DescriptionElementBase; +import eu.etaxonomy.cdm.model.description.Feature; +import eu.etaxonomy.cdm.model.description.TaxonDescription; +import eu.etaxonomy.cdm.model.description.TextData; import eu.etaxonomy.cdm.model.name.TaxonNameBase; import eu.etaxonomy.cdm.model.taxon.Classification; import eu.etaxonomy.cdm.model.taxon.Taxon; @@ -34,8 +44,7 @@ import eu.etaxonomy.cdm.strategy.match.MatchException; */ public class RemotePersistentCollectionTest extends RemoteApplicationConfigurationTest { private static final Logger logger = Logger.getLogger(RemotePersistentCollectionTest.class); - - + private static IClassificationService classificationService; @BeforeClass @@ -44,9 +53,8 @@ public class RemotePersistentCollectionTest extends RemoteApplicationConfigurati classificationService= applicationController.getClassificationService(); } - /** - * Test class which checks remoting for persistent lists. + * Test method which checks remoting for persistent lists. * */ @Test @@ -156,6 +164,63 @@ public class RemotePersistentCollectionTest extends RemoteApplicationConfigurati @Test public void persistentMapTest() { - + List taxonNodes = classificationService.getAllNodes(); + // calling iterator will initialise the collection + Iterator taxonNodesItr = taxonNodes.iterator(); + while(taxonNodesItr.hasNext()) { + TaxonNode taxonNode = taxonNodesItr.next(); + Taxon taxon = taxonNode.getTaxon(); + + if(taxon != null) { + Set descriptions = taxon.getDescriptions(); + Iterator descriptionsItr = descriptions.iterator(); + while(descriptionsItr.hasNext()) { + TaxonDescription desc = descriptionsItr.next(); + if(desc != null) { + for (DescriptionElementBase element : desc.getElements()){ + if (element.isInstanceOf(TextData.class)){ + // usually a call to 'get' collections should not initialise the collection, + // but the 'getMultilanguageText' call internally calls readSize on the collection + // which triggers the initialisation + Map multilanguagetextMap = ((TextData)element).getMultilanguageText(); + boolean init = AbstractPersistentCollection.isInitialized(multilanguagetextMap); + Assert.assertTrue(init); + + if(!multilanguagetextMap.isEmpty()) { + // found a map whcih we can test! + logger.info("Found Non-empty multilanguagetextMap"); + boolean empty = applicationController.getCommonService().isEmpty((PersistentCollection)multilanguagetextMap); + Assert.assertFalse(empty); + // test retrieval of key set, which should already by initialised + Set langKeySet = multilanguagetextMap.keySet(); + Iterator langKeySetItr = langKeySet.iterator(); + while(langKeySetItr.hasNext()) { + Language key = langKeySetItr.next(); + // testing 'containsKey' on locally initialised collection + boolean localContainsKey = multilanguagetextMap.containsKey(key); + Assert.assertTrue(localContainsKey); + // testing 'containsKey' on remotely initialised collection + boolean remoteContainsKey = + applicationController.getCommonService().containsKey((PersistentCollection)multilanguagetextMap, key); + Assert.assertTrue(remoteContainsKey); + + LanguageString value = multilanguagetextMap.get(key); + // testing 'containsValue' on locally initialised collection + boolean localContainsValue = multilanguagetextMap.containsValue(value); + Assert.assertTrue(localContainsValue); + // testing 'containsValue' on remotely initialised collection + boolean remoteContainsValue = + applicationController.getCommonService().containsValue((PersistentCollection)multilanguagetextMap, value); + Assert.assertTrue(remoteContainsValue); + + } + return; + } + } + } + } + } + } + } } } -- 2.34.1