Project

General

Profile

Download (4.34 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2007 EDIT
3
* European Distributed Institute of Taxonomy
4
* http://www.e-taxonomy.eu
5
*
6
* The contents of this file are subject to the Mozilla Public License Version 1.1
7
* See LICENSE.TXT at the top of this package for the full license terms.
8
*/
9

    
10
package eu.etaxonomy.cdm.persistence.dao.hibernate.description;
11

    
12
import static org.junit.Assert.assertEquals;
13
import static org.junit.Assert.assertFalse;
14
import static org.junit.Assert.assertNotNull;
15
import static org.junit.Assert.assertTrue;
16

    
17
import java.util.ArrayList;
18
import java.util.Collection;
19
import java.util.HashSet;
20
import java.util.Iterator;
21
import java.util.List;
22
import java.util.Map;
23
import java.util.Set;
24
import java.util.UUID;
25

    
26
import junit.framework.Assert;
27

    
28
import org.hibernate.Hibernate;
29
import org.junit.Before;
30
import org.junit.Test;
31
import org.unitils.dbunit.annotation.DataSet;
32
import org.unitils.spring.annotation.SpringBeanByType;
33

    
34
import eu.etaxonomy.cdm.model.common.DefinedTermBase;
35
import eu.etaxonomy.cdm.model.common.Language;
36
import eu.etaxonomy.cdm.model.common.LanguageString;
37
import eu.etaxonomy.cdm.model.description.AbsenceTerm;
38
import eu.etaxonomy.cdm.model.description.CategoricalData;
39
import eu.etaxonomy.cdm.model.description.DescriptionBase;
40
import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
41
import eu.etaxonomy.cdm.model.description.Distribution;
42
import eu.etaxonomy.cdm.model.description.Feature;
43
import eu.etaxonomy.cdm.model.description.PresenceTerm;
44
import eu.etaxonomy.cdm.model.description.Sex;
45
import eu.etaxonomy.cdm.model.description.State;
46
import eu.etaxonomy.cdm.model.description.StateData;
47
import eu.etaxonomy.cdm.model.description.TaxonDescription;
48
import eu.etaxonomy.cdm.model.description.TextData;
49
import eu.etaxonomy.cdm.model.location.NamedArea;
50
import eu.etaxonomy.cdm.model.taxon.Taxon;
51
import eu.etaxonomy.cdm.persistence.dao.common.IDefinedTermDao;
52
import eu.etaxonomy.cdm.persistence.dao.description.IDescriptionDao;
53
import eu.etaxonomy.cdm.persistence.dao.description.IDescriptionElementDao;
54
import eu.etaxonomy.cdm.persistence.dao.taxon.ITaxonDao;
55
import eu.etaxonomy.cdm.persistence.query.OrderHint;
56
import eu.etaxonomy.cdm.persistence.query.OrderHint.SortOrder;
57
import eu.etaxonomy.cdm.test.integration.CdmIntegrationTest;
58
import eu.etaxonomy.cdm.test.integration.CdmTransactionalIntegrationTest;
59

    
60
@DataSet(value="DescriptionDaoHibernateImplTest.xml")
61
public class DescriptionDaoHibernateImplBenchmark extends CdmTransactionalIntegrationTest {
62

    
63
    @SpringBeanByType
64
    IDescriptionDao descriptionDao;
65

    
66
    @SpringBeanByType
67
    IDescriptionElementDao descriptionElementDao;
68

    
69
    @SpringBeanByType
70
    IDefinedTermDao definedTermDao;
71

    
72
    @SpringBeanByType
73
    ITaxonDao taxonDao;
74

    
75
    private Set<Feature> features;
76

    
77
    private UUID acherontia_lachesis_descriptionUuid;
78

    
79
    private static final int BENCHMARK_ROUNDS = 20;
80

    
81

    
82
    @Before
83
    public void setUp() {
84

    
85
        acherontia_lachesis_descriptionUuid = UUID.fromString("fd6cdb64-142c-4df1-b366-c5e76f08a1fc");
86
        features = new HashSet<Feature>();
87
    }
88

    
89

    
90

    
91

    
92
    @Test
93
    public void addCharacterWithStates() {
94

    
95
        Feature feature = Feature.UNKNOWN();
96

    
97
        logger.warn("feature.id=" + feature.getId());
98

    
99
        int numStatesToAdd = 5;
100

    
101
        TaxonDescription description = (TaxonDescription) descriptionDao.findByUuid(acherontia_lachesis_descriptionUuid);
102
        assertNotNull("searchDescriptionByDistribution must not be null", description);
103

    
104
        long startMillis = System.currentTimeMillis();
105

    
106
        for(int rnd = 0; rnd < BENCHMARK_ROUNDS; rnd++){
107

    
108
            CategoricalData categoricalDataElement = CategoricalData.NewInstance();
109
            categoricalDataElement.setFeature(feature);
110

    
111
            for(int std = 0 ; std < numStatesToAdd; std++){
112
                String stateText = String.valueOf(std);
113
                State state = State.NewInstance(stateText, stateText, stateText);
114
                StateData stateData = StateData.NewInstance();
115
                stateData.setState(state);
116
                categoricalDataElement.addState(stateData);
117
            }
118
            descriptionDao.saveOrUpdate(description);
119
        }
120

    
121
        double duration = ((double)(System.currentTimeMillis() - startMillis) ) / BENCHMARK_ROUNDS ;
122
        logger.info("Benchmark result - [add 1 character with " + numStatesToAdd + " states] : " + duration + "ms (" + BENCHMARK_ROUNDS +" benchmark rounds )");
123

    
124
    }
125

    
126

    
127

    
128
}
(1-1/5)