|
From: <cw...@us...> - 2006-12-18 02:21:14
|
Revision: 106
http://svn.sourceforge.net/mptstore/?rev=106&view=rev
Author: cwilper
Date: 2006-12-17 18:21:12 -0800 (Sun, 17 Dec 2006)
Log Message:
-----------
started auto performance tests.
Modified Paths:
--------------
trunk/build.properties
trunk/build.xml
trunk/src/test/org/nsdl/mptstore/TestConfig.java
trunk/src/test/test.properties
Added Paths:
-----------
trunk/src/test/org/nsdl/mptstore/perftest/
trunk/src/test/org/nsdl/mptstore/perftest/LoadPerformanceTest.java
trunk/src/test/org/nsdl/mptstore/perftest/TestTripleFactory.java
Modified: trunk/build.properties
===================================================================
--- trunk/build.properties 2006-12-10 17:06:46 UTC (rev 105)
+++ trunk/build.properties 2006-12-18 02:21:12 UTC (rev 106)
@@ -9,6 +9,9 @@
optimize = off
debug = on
+unit.test = org.nsdl.mptstore.AllUnitTests
+integration.test = org.nsdl.mptstore.AllIntegrationTests
+
test.dir = build/test
test.loglevel = INFO
Modified: trunk/build.xml
===================================================================
--- trunk/build.xml 2006-12-10 17:06:46 UTC (rev 105)
+++ trunk/build.xml 2006-12-18 02:21:12 UTC (rev 106)
@@ -235,7 +235,7 @@
<classpath refid="test.classpath"/>
<sysproperty key="test.dir" value="${test.dir}"/>
<sysproperty key="test.loglevel" value="${test.loglevel}"/>
- <test name="org.nsdl.mptstore.AllUnitTests"/>
+ <test name="${unit.test}"/>
</junit>
</target>
@@ -251,7 +251,7 @@
<classpath refid="test.classpath"/>
<sysproperty key="test.dir" value="${test.dir}"/>
<sysproperty key="test.loglevel" value="${test.loglevel}"/>
- <test name="org.nsdl.mptstore.AllIntegrationTests"/>
+ <test name="${integration.test}"/>
</junit>
</target>
Modified: trunk/src/test/org/nsdl/mptstore/TestConfig.java
===================================================================
--- trunk/src/test/org/nsdl/mptstore/TestConfig.java 2006-12-10 17:06:46 UTC (rev 105)
+++ trunk/src/test/org/nsdl/mptstore/TestConfig.java 2006-12-18 02:21:12 UTC (rev 106)
@@ -5,6 +5,8 @@
import java.util.Properties;
+import java.sql.SQLException;
+
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSource;
@@ -12,11 +14,17 @@
import org.apache.log4j.PropertyConfigurator;
+import org.nsdl.mptstore.core.BasicTableManager;
+import org.nsdl.mptstore.core.DatabaseAdaptor;
import org.nsdl.mptstore.core.DDLGenerator;
+import org.nsdl.mptstore.core.GenericDatabaseAdaptor;
+import org.nsdl.mptstore.core.TableManager;
import org.nsdl.mptstore.impl.derby.DerbyDDLGenerator;
import org.nsdl.mptstore.impl.h2.H2DDLGenerator;
import org.nsdl.mptstore.impl.postgres.PostgresDDLGenerator;
+import org.nsdl.mptstore.perftest.TestTripleFactory;
+
/**
* Provides static access to test configuration.
*
@@ -100,6 +108,19 @@
}
/**
+ * Get a required system property as an <code>int</code> value.
+ */
+ private static int getIntProp(String name) {
+ String value = getProp(name, true);
+ try {
+ return Integer.parseInt(value);
+ } catch (NumberFormatException e) {
+ throw new RuntimeException("Property must be an int value: "
+ + name);
+ }
+ }
+
+ /**
* Get the test directory, as defined by the <code>test.dir</code>
* system property.
*/
@@ -215,4 +236,31 @@
}
+ public static int getNumTestSubjects() {
+ init();
+ return getIntProp("test.perf.subjects");
+ }
+
+ public static int getNumTestSubjectsPerTransaction() {
+ init();
+ return getIntProp("test.perf.subjectsPerTransaction");
+ }
+
+ public static TestTripleFactory getTestTripleFactory() {
+ init();
+ return new TestTripleFactory(getIntProp("test.perf.rels"),
+ getIntProp("test.perf.plains"), getIntProp("test.perf.locals"),
+ getIntProp("test.perf.longs"), getIntProp("test.perf.doubles"),
+ getIntProp("test.perf.dateTimes"));
+ }
+
+ public static DatabaseAdaptor getTestDatabaseAdaptor(
+ DataSource dataSource)
+ throws SQLException {
+ init();
+ TableManager mgr = new BasicTableManager(dataSource, getDDLGenerator(),
+ "tMap", "t");
+ return new GenericDatabaseAdaptor(mgr, getBackslashIsEscape());
+ }
+
}
\ No newline at end of file
Added: trunk/src/test/org/nsdl/mptstore/perftest/LoadPerformanceTest.java
===================================================================
--- trunk/src/test/org/nsdl/mptstore/perftest/LoadPerformanceTest.java (rev 0)
+++ trunk/src/test/org/nsdl/mptstore/perftest/LoadPerformanceTest.java 2006-12-18 02:21:12 UTC (rev 106)
@@ -0,0 +1,84 @@
+package org.nsdl.mptstore.perftest;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import java.sql.Connection;
+
+import javax.sql.DataSource;
+
+import org.apache.log4j.Logger;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import org.nsdl.mptstore.rdf.Triple;
+import org.nsdl.mptstore.core.DatabaseAdaptor;
+import org.nsdl.mptstore.TestConfig;
+
+public class LoadPerformanceTest {
+
+ /** Logger for this class. */
+ private static Logger LOG = Logger.getLogger(LoadPerformanceTest.class);
+
+ private DatabaseAdaptor _adaptor;
+ private DataSource _dataSource;
+
+ @BeforeClass
+ public static void setUpClass() {
+ TestConfig.init();
+ }
+
+ @Before
+ public void setUp() throws Exception {
+ _dataSource = TestConfig.getTestDataSource(2);
+ _adaptor = TestConfig.getTestDatabaseAdaptor(_dataSource);
+ }
+
+ @Test
+ public void testLoadPerformance() throws Exception {
+ LOG.info("Starting load test");
+ TestTripleFactory factory = TestConfig.getTestTripleFactory();
+ int numSubjects = TestConfig.getNumTestSubjects();
+ int subjectsPerTransaction = TestConfig.getNumTestSubjectsPerTransaction();
+ Connection conn = _dataSource.getConnection();
+ int subjectsInTransaction = 0;
+ Set<Triple> set = new HashSet<Triple>();
+ try {
+ for (int i = 0; i < numSubjects; i++) {
+ set.addAll(factory.getNextSet());
+ subjectsInTransaction++;
+ if (subjectsInTransaction == subjectsPerTransaction) {
+ add(conn, set);
+ set.clear();
+ subjectsInTransaction = 0;
+ }
+ }
+ if (set.size() > 0) {
+ add(conn, set);
+ }
+ } finally {
+ conn.close();
+ }
+ LOG.info("Finished load test");
+ }
+
+ private void add(Connection conn, Set<Triple> set) throws Exception {
+ conn.setAutoCommit(false);
+ try {
+ LOG.info("Adding " + set.size() + " triples on a transaction");
+ _adaptor.addTriples(conn, set.iterator());
+ conn.commit();
+ } catch (Exception e) {
+ conn.rollback();
+ }
+ }
+
+ @After
+ public void tearDown() {
+ }
+
+}
Added: trunk/src/test/org/nsdl/mptstore/perftest/TestTripleFactory.java
===================================================================
--- trunk/src/test/org/nsdl/mptstore/perftest/TestTripleFactory.java (rev 0)
+++ trunk/src/test/org/nsdl/mptstore/perftest/TestTripleFactory.java 2006-12-18 02:21:12 UTC (rev 106)
@@ -0,0 +1,152 @@
+package org.nsdl.mptstore.perftest;
+
+import java.net.URISyntaxException;
+
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+
+import java.util.Date;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.nsdl.mptstore.rdf.Literal;
+import org.nsdl.mptstore.rdf.SubjectNode;
+import org.nsdl.mptstore.rdf.Triple;
+import org.nsdl.mptstore.rdf.URIReference;
+
+public class TestTripleFactory {
+
+ private final static String XSD_NS= "http://www.w3.org/2001/XMLSchema#";
+
+ private final static URIReference XSD_LONG =
+ getURIReference(XSD_NS+ "long");
+
+ private final static URIReference XSD_DOUBLE =
+ getURIReference(XSD_NS+ "double");
+
+ private final static URIReference XSD_DATETIME =
+ getURIReference(XSD_NS+ "dateTime");
+
+ private final static DateFormat FORMATTER =
+ new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
+
+ private final int _relsPerSubject;
+ private final int _plainsPerSubject;
+ private final int _localsPerSubject;
+ private final int _longsPerSubject;
+ private final int _doublesPerSubject;
+ private final int _dateTimesPerSubject;
+
+ private int _currentResource;
+ private long _currentLong;
+ private double _currentDouble;
+ private long _currentMillis;
+
+ public TestTripleFactory(final int relsPerSubject,
+ final int plainsPerSubject, final int localsPerSubject,
+ final int longsPerSubject, final int doublesPerSubject,
+ final int dateTimesPerSubject) {
+ _relsPerSubject = relsPerSubject;
+ _plainsPerSubject = plainsPerSubject;
+ _localsPerSubject = localsPerSubject;
+ _longsPerSubject = longsPerSubject;
+ _doublesPerSubject = doublesPerSubject;
+ _dateTimesPerSubject = dateTimesPerSubject;
+ }
+
+ public int getRelsPerSubject() { return _relsPerSubject; }
+ public int getPlainsPerSubject() { return _plainsPerSubject; }
+ public int getLocalsPerSubject() { return _localsPerSubject; }
+ public int getLongsPerSubject() { return _longsPerSubject; }
+ public int getDoublesPerSubject() { return _doublesPerSubject; }
+ public int getDateTimesPerSubject() { return _dateTimesPerSubject; }
+
+ public synchronized Set<Triple> getNextSet() {
+ _currentResource++;
+ Set<Triple> set = new HashSet<Triple>();
+ URIReference subject = getResource(_currentResource);
+ addRels(subject, set);
+ addPlains(subject, set);
+ addLocals(subject, set);
+ addLongs(subject, set);
+ addDoubles(subject, set);
+ addDateTimes(subject, set);
+ return set;
+ }
+
+ private void addRels(final SubjectNode subject, final Set<Triple> set) {
+ for (int i = 1; i <= _relsPerSubject; i++) {
+ set.add(new Triple(subject, getURIReference("urn:rel:" + i),
+ getResource(_currentResource + i)));
+ }
+ }
+
+ private void addPlains(final SubjectNode subject, final Set<Triple> set) {
+ for (int i = 1; i <= _plainsPerSubject; i++) {
+ set.add(new Triple(subject, getURIReference("urn:plain:" + i),
+ new Literal("plain " + i + " for resource "
+ + _currentResource)));
+ }
+ }
+
+ private void addLocals(final SubjectNode subject, final Set<Triple> set) {
+ for (int i = 1; i <= _localsPerSubject; i++) {
+ set.add(new Triple(subject, getURIReference("urn:local:" + i),
+ getLocalLiteral("local for resource "
+ + _currentResource, i)));
+ }
+ }
+
+ private void addLongs(final SubjectNode subject, final Set<Triple> set) {
+ for (int i = 1; i <= _longsPerSubject; i++) {
+ _currentLong++;
+ set.add(new Triple(subject, getURIReference("urn:long:" + i),
+ new Literal("" + _currentLong, XSD_LONG)));
+ }
+ }
+
+ private void addDoubles(final SubjectNode subject, final Set<Triple> set) {
+ for (int i = 1; i <= _doublesPerSubject; i++) {
+ _currentDouble += 0.01;
+ set.add(new Triple(subject, getURIReference("urn:double:" + i),
+ new Literal("" + _currentDouble, XSD_DOUBLE)));
+ }
+ }
+
+ private void addDateTimes(final SubjectNode subject,
+ final Set<Triple> set) {
+ for (int i = 1; i <= _dateTimesPerSubject; i++) {
+ _currentMillis++;
+ set.add(new Triple(subject, getURIReference("urn:dateTime:" + i),
+ getDateTimeLiteral(_currentMillis)));
+ }
+ }
+
+ private static final URIReference getResource(final int id) {
+ return getURIReference("urn:resource:" + id);
+ }
+
+ private static final URIReference getURIReference(final String uri) {
+ try {
+ return new URIReference(uri);
+ } catch (URISyntaxException e) {
+ throw new RuntimeException("Error: Bad URI: " + uri);
+ }
+ }
+
+ private static final Literal getLocalLiteral(final String lex,
+ final int langNum) {
+ try {
+ return new Literal(lex, "lang-" + langNum);
+ } catch (ParseException e) {
+ throw new RuntimeException("Error: Bad Lang: " + langNum);
+ }
+ }
+
+ private static final Literal getDateTimeLiteral(final long millis) {
+ String lex = FORMATTER.format(new Date(millis));
+ return new Literal(lex, XSD_DATETIME);
+ }
+
+}
Modified: trunk/src/test/test.properties
===================================================================
--- trunk/src/test/test.properties 2006-12-10 17:06:46 UTC (rev 105)
+++ trunk/src/test/test.properties 2006-12-18 02:21:12 UTC (rev 106)
@@ -23,3 +23,39 @@
test.postgres.username = mptuser
test.postgres.password = mptpass
+#
+# Performance Testing
+#
+# Total triples = subjects * (rels+plains+locals+longs+doubles+dateTimes)
+#
+
+# Number of subjects
+#
+# triplesPerSubject = rels + plains + locals + longs + doubles + dateTimes
+# totalTriples = subjects * triplesPerSubject
+#
+test.perf.subjects = 10000
+
+# Number of uri-to-uri rels for each subject
+test.perf.rels = 5
+
+# Number of plain literal properties for each subject
+test.perf.plains = 2
+
+# Number of localized plain literal properties for each subject
+test.perf.locals = 2
+
+# Number of xsd:long properties for each subject
+test.perf.longs = 2
+
+# Number of xsd:double properties for each subject
+test.perf.doubles = 2
+
+# Number of xsd:dateTime properties for each subject
+test.perf.dateTimes = 2
+
+# Number of subjects per transaction
+#
+# triplesPerTransaction = triplesPerSubject * subjectsPerTransaction
+#
+test.perf.subjectsPerTransaction = 100
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|