Author: claude
Date: Sat Sep 21 20:11:59 2013
New Revision: 1525287
URL: http://svn.apache.org/r1525287
Log:
Incomplete Model tests
Added:
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/AbstractLockContractTests.java
(with props)
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/AbstractModelConContractTests.java
(with props)
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/AbstractModelContractSuite.java
(with props)
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/AbstractModelContractTests.java
- copied, changed from r1523135,
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/AbstractModelTest.java
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/AbstractModelGraphInterfaceContractTests.java
(with props)
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/AbstractRDFListContractTests.java
- copied, changed from r1523135,
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/AbstractRDFListTest.java
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/AbstractRDFReaderFContractTests.java
(with props)
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/AbstractRDFWriterFContractTests.java
(with props)
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/temp/ModelConTest.java
(with props)
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/temp/ModelGraphInterfaceTest.java
(with props)
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/temp/ModelLockTest.java
(with props)
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/temp/ModelSuite.java
(with props)
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/temp/RDFReaderFTest.java
(with props)
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/temp/RDFWriterFTest.java
(with props)
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/testing_framework/TestFileData.java
(with props)
jena/Experimental/new-test/src/test/resources/Copy of TestReaders.rdf
jena/Experimental/new-test/src/test/resources/TestReaders.nt
jena/Experimental/new-test/src/test/resources/TestReaders.rdf
jena/Experimental/new-test/src/test/resources/com/hp/hpl/jena/rdf/
jena/Experimental/new-test/src/test/resources/com/hp/hpl/jena/rdf/model/
jena/Experimental/new-test/src/test/resources/com/hp/hpl/jena/rdf/model/example.rdf
Removed:
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/AbstractModelTest.java
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/AbstractRDFListTest.java
Modified:
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/AbstractConcurrencyTestParallel.java
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/AbstractContainerMethodsTest.java
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/AbstractFindPropertiesTests.java
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/AbstractIteratorTest.java
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/AbstractListObjectsTest.java
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/AbstractListStatementsTest.java
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/AbstractLiteralTest.java
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/AbstractReifiedStatementsTest.java
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/AbstractSeqMethodsTest.java
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/AbstractStatementTest.java
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/DefaultModelTest.java
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/RecordingModelListener.java
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/temp/IteratorTest.java
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/temp/LiteralTest.java
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/temp/ModelListStatementTest.java
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/temp/ModelListSubjectsTest.java
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/temp/ModelPrefixMappingTest.java
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/temp/ModelTest.java
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/temp/RDFListTest.java
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/temp/ReifiedStatementTest.java
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/testing_framework/ModelHelper.java
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/testing_framework/TestUtils.java
Modified:
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/AbstractConcurrencyTestParallel.java
URL:
http://svn.apache.org/viewvc/jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/AbstractConcurrencyTestParallel.java?rev=1525287&r1=1525286&r2=1525287&view=diff
==============================================================================
---
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/AbstractConcurrencyTestParallel.java
(original)
+++
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/AbstractConcurrencyTestParallel.java
Sat Sep 21 20:11:59 2013
@@ -32,12 +32,12 @@ import org.junit.Test;
public abstract class AbstractConcurrencyTestParallel extends
AbstractModelProducerUser
{
- class Operation extends Thread
+ private class Operation extends Thread
{
- Model lockModel;
- boolean readLock;
+ private Model lockModel;
+ private boolean readLock;
- Operation( final Model m, final boolean withReadLock )
+ public Operation( final Model m, final boolean withReadLock )
{
lockModel = m;
readLock = withReadLock;
@@ -65,15 +65,15 @@ public abstract class AbstractConcurren
}
// Operations ----------------------------------------------
- long SLEEP = 100;
- int threadTotal = 10;
+ private long SLEEP = 100;
+ private int threadTotal = 10;
- int threadCount = 0;
+ private int threadCount = 0;
- volatile int writers = 0;
+ private volatile int writers = 0;
// The example model operations
- void doStuff( final String label, final boolean doThrow )
+ private void doStuff( final String label, final boolean doThrow )
{
Thread.currentThread().getName();
// Pause a while to cause other threads to (try to) enter the
region.
@@ -90,7 +90,7 @@ public abstract class AbstractConcurren
}
}
- public void readOperation( final boolean doThrow )
+ private void readOperation( final boolean doThrow )
{
if (writers > 0)
{
@@ -158,7 +158,7 @@ public abstract class AbstractConcurren
Assert.assertTrue("Some thread failed to finish", !problems);
}
- public void writeOperation( final boolean doThrow )
+ private void writeOperation( final boolean doThrow )
{
writers++;
doStuff("write operation", false);
Modified:
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/AbstractContainerMethodsTest.java
URL:
http://svn.apache.org/viewvc/jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/AbstractContainerMethodsTest.java?rev=1525287&r1=1525286&r2=1525287&view=diff
==============================================================================
---
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/AbstractContainerMethodsTest.java
(original)
+++
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/AbstractContainerMethodsTest.java
Sat Sep 21 20:11:59 2013
@@ -63,7 +63,7 @@ public abstract class AbstractContainerM
}
@Before
- public void setUpAbstractContainerMethodsTest() throws Exception {
+ final public void setUpAbstractContainerMethodsTest() throws Exception {
model = getModelProducer().newModel();
resource = model.createResource();
}
Modified:
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/AbstractFindPropertiesTests.java
URL:
http://svn.apache.org/viewvc/jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/AbstractFindPropertiesTests.java?rev=1525287&r1=1525286&r2=1525287&view=diff
==============================================================================
---
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/AbstractFindPropertiesTests.java
(original)
+++
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/AbstractFindPropertiesTests.java
Sat Sep 21 20:11:59 2013
@@ -130,7 +130,7 @@ public abstract class AbstractFindProper
}
@Before
- public void setUpAbstractFindPropertiesTests() throws Exception
+ final public void setUpAbstractFindPropertiesTests() throws Exception
{
// tvLitObj = { model.createTypedLiteral(new LitTestObjF()),
// model.createTypedLiteral(new LitTestObjF()) };
Modified:
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/AbstractIteratorTest.java
URL:
http://svn.apache.org/viewvc/jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/AbstractIteratorTest.java?rev=1525287&r1=1525286&r2=1525287&view=diff
==============================================================================
---
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/AbstractIteratorTest.java
(original)
+++
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/AbstractIteratorTest.java
Sat Sep 21 20:11:59 2013
@@ -52,7 +52,7 @@ public abstract class AbstractIteratorTe
}
@Before
- public void setupTestIterators() throws Exception
+ final public void setupTestIterators() throws Exception
{
model = getModelProducer().newModel();
subject = new Resource[num];
Modified:
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/AbstractListObjectsTest.java
URL:
http://svn.apache.org/viewvc/jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/AbstractListObjectsTest.java?rev=1525287&r1=1525286&r2=1525287&view=diff
==============================================================================
---
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/AbstractListObjectsTest.java
(original)
+++
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/AbstractListObjectsTest.java
Sat Sep 21 20:11:59 2013
@@ -59,7 +59,7 @@ public abstract class AbstractListObject
RDFNode object[] = new RDFNode[numObj];
@Before
- public void setUp() throws Exception
+ final public void setUpAbstractListObjectsTest() throws Exception
{
model = getModelProducer().newModel();
S = model.createResource("http://nowhere.man/subject");
Modified:
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/AbstractListStatementsTest.java
URL:
http://svn.apache.org/viewvc/jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/AbstractListStatementsTest.java?rev=1525287&r1=1525286&r2=1525287&view=diff
==============================================================================
---
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/AbstractListStatementsTest.java
(original)
+++
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/AbstractListStatementsTest.java
Sat Sep 21 20:11:59 2013
@@ -18,8 +18,7 @@
package com.hp.hpl.jena.rdf.model;
-import static com.hp.hpl.jena.testing_framework.ModelHelper.property;
-import static com.hp.hpl.jena.testing_framework.ModelHelper.resource;
+import static com.hp.hpl.jena.testing_framework.ModelHelper.*;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;
@@ -46,14 +45,16 @@ public abstract class AbstractListStatem
private Property p;
@Before
- public void setupAbstractListStatementsTest() throws Exception
+ final public void setupAbstractListStatementsTest() throws Exception
{
model = getModelProducer().newModel();
+
final Resource s = model
.createResource("http://www.a.com/s");
final Property p = model
.createProperty("http://www.a.com/p");
-
+
+ txnBegin( model );
model.add(s, p,
model.createResource("http://www.a.com/o"));
model.add(s, p, "texte", "fr");
@@ -61,6 +62,7 @@ public abstract class AbstractListStatem
model.add(s, p, "text");
model.add(model.createLiteralStatement(s,
p, 1789));
+ txnCommit( model );
}
@Test
@@ -132,8 +134,10 @@ public abstract class AbstractListStatem
protected Set<Statement> fill( final Model model )
{
+ txnBegin( model );
final Set<Statement> statements = new HashSet<Statement>();
- for (int i = 0; i < AbstractListObjectsTest.numberSubjects; i
+= 1)
+ try {
+ for (int i = 0; i <
AbstractListObjectsTest.numberSubjects; i += 1)
{
for (int j = 0; j <
AbstractListObjectsTest.numberPredicates; j += 1)
{
@@ -147,6 +151,10 @@ public abstract class AbstractListStatem
statements.add(s);
}
}
+ }
+ finally {
+ txnCommit( model );
+ }
Assert.assertEquals(AbstractListObjectsTest.numberSubjects
* AbstractListObjectsTest.numberPredicates,
model.size());
return statements;
@@ -156,7 +164,7 @@ public abstract class AbstractListStatem
public void testListStatements()
{
final Set<Statement> statements = fill(model);
- final List<Statement> L = model.listStatements().toList();
+ final Set<Statement> L = model.listStatements().toSet();
Assert.assertEquals(statements.size(), L.size());
Assert.assertEquals(statements, new HashSet<Statement>(L));
}
Modified:
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/AbstractLiteralTest.java
URL:
http://svn.apache.org/viewvc/jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/AbstractLiteralTest.java?rev=1525287&r1=1525286&r2=1525287&view=diff
==============================================================================
---
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/AbstractLiteralTest.java
(original)
+++
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/AbstractLiteralTest.java
Sat Sep 21 20:11:59 2013
@@ -76,7 +76,7 @@ public abstract class AbstractLiteralTes
}
@Before
- public void setupAbstractLiteralTest() {
+ final public void setupAbstractLiteralTest() {
model = getModelProducer().newModel();
X = resource("X");
P = property("P");
Added:
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/AbstractLockContractTests.java
URL:
http://svn.apache.org/viewvc/jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/AbstractLockContractTests.java?rev=1525287&view=auto
==============================================================================
---
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/AbstractLockContractTests.java
(added)
+++
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/AbstractLockContractTests.java
Sat Sep 21 20:11:59 2013
@@ -0,0 +1,230 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.hp.hpl.jena.rdf.model;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import com.hp.hpl.jena.shared.Lock;
+import com.hp.hpl.jena.testing_framework.AbstractModelProducerUser;
+
+/**
+ * An abstract class that tests the implementation of the Model contract.
+ *
+ * NOTE: does not test independent as only derived classes know if they are
+ * independent or not.
+ *
+ */
+public abstract class AbstractLockContractTests extends
AbstractModelProducerUser {
+
+
+ private static Logger log = LoggerFactory
+ .getLogger(AbstractLockContractTests.class);
+
+ /**
+ * Test critical section nesting.
+ * @throws Throwable
+ */
+ @Test
+ public void testCriticalSection_Nesting() {
+ int MODEL1 = 0;
+ int MODEL2 = 1;
+
+ // Note : reuse the model across tests.
+
+ Model[] workingModels = new Model[2];
+
+
+ workingModels[MODEL1] = getModelProducer().newModel();
+ workingModels[MODEL2] = getModelProducer().newModel();
+
+ testNesting(workingModels[MODEL1], workingModels[MODEL1],
Lock.READ, Lock.READ, false);
+ testNesting(workingModels[MODEL1], workingModels[MODEL1],
Lock.WRITE, Lock.WRITE, false);
+ testNesting(workingModels[MODEL1], workingModels[MODEL1],
Lock.READ, Lock.WRITE, true);
+ testNesting(workingModels[MODEL1], workingModels[MODEL1],
Lock.WRITE, Lock.READ, false);
+ testNesting(workingModels[MODEL1], workingModels[MODEL2],
Lock.READ, Lock.READ, false);
+ testNesting(workingModels[MODEL1], workingModels[MODEL2],
Lock.WRITE, Lock.WRITE, false);
+ testNesting(workingModels[MODEL1], workingModels[MODEL2],
Lock.READ, Lock.WRITE, false);
+ testNesting(workingModels[MODEL1], workingModels[MODEL2],
Lock.WRITE, Lock.READ, false);
+ }
+
+
+
+ /**
+ * Test critical section nesting
+ *
+ * @param modelFactory
+ * an instance of the TestingModelFactory
+ * @param model1Idx
+ * which model to use for outer model.
+ * @param model2Idx
+ * which model to use for inner model
+ * @param lock1
+ * lock type for outer model. Lock.READ or Lock.WRITE
+ * @param lock2
+ * lock type for inner model.
+ * @param exExpected
+ * true if an exception is expected.
+ * @param name
+ * The name of the test to run.
+ */
+ private void testNesting(final Model outerModel, final Model innerModel,
+ final Boolean outerLock, final Boolean innerLock,
+ final Boolean exExpected) {
+ String name = String.format("%s outerLock:%s innerLock:%s",
+ innerModel == outerModel ? "same" :
"different", (outerLock),
+ (innerLock));
+ boolean gotException = false;
+ try {
+ outerModel.enterCriticalSection(outerLock);
+
+ try {
+ try {
+ // Should fail if outerLock is READ and
innerLock is WRITE
+ // and its on the same model, inner and
outer.
+
innerModel.enterCriticalSection(innerLock);
+
+ } finally {
+ innerModel.leaveCriticalSection();
+ }
+ } catch (final Exception ex) {
+ gotException = true;
+ }
+
+ } finally {
+ outerModel.leaveCriticalSection();
+ }
+
+ if (exExpected) {
+ Assert.assertTrue(name
+ + " Failed to get expected lock
promotion error",
+ gotException);
+ } else {
+ Assert.assertTrue(name + " Got unexpected lock
promotion error",
+ !gotException);
+ }
+ }
+
+ // counts the number of writers used in criticalsection parallel testing
+ private volatile int writers = 0;
+ /**
+ * Operation thread for multi-threaded test
+ *
+ */
+ private class Operation extends Thread {
+
+ private Model model;
+ private boolean readLock;
+ private long sleep;
+
+ private Operation(final Model model, final boolean readLock,
final long sleep) {
+ this.model = model;
+ this.readLock = readLock;
+ this.sleep = sleep;
+ }
+
+ @Override
+ public void run() {
+ for (int i = 0; i < 2; i++) {
+ try {
+ model.enterCriticalSection(readLock);
+ if (readLock)
+ {
+ if (writers > 0) {
+
Assert.fail("Concurrency error: writers around!");
+ }
+ doStuff("read operation",
false);
+ if (writers > 0) {
+
Assert.fail("Concurrency error: writers around!");
+ }
+ } else {
+ writers++;
+ doStuff("write operation",
false);
+ writers--;
+ }
+ } finally {
+ model.leaveCriticalSection();
+ }
+ }
+ }
+
+ private void doStuff(final String label, final boolean doThrow)
{
+ Thread.currentThread().getName();
+ // Pause a while to cause other threads to (try to)
enter the region.
+ try {
+ Thread.sleep(sleep);
+ } catch (final InterruptedException intEx) {
+ }
+ if (doThrow) {
+ throw new RuntimeException(label);
+ }
+ }
+ }
+
+ /**
+ * Verify that critical seciton works in parallel usage.
+ */
+ @Test
+ public void testCriticalSection_Parallel()
+ {
+ int threadCount = 0; // current number of threads.
+ long sleep = 100; // number of miliseconds to sleep in
processing
+ int threadTotal = 10; // total number of threads to run
+ Model model = getModelProducer().newModel();
+ final Thread threads[] = new Thread[threadTotal];
+
+ boolean getReadLock = Lock.READ;
+ for (int i = 0; i < threadTotal; i++) {
+ final String nextId = "T" +
Integer.toString(++threadCount);
+ threads[i] = new Operation(model, getReadLock, sleep);
+ threads[i].setName(nextId);
+ threads[i].start();
+
+ getReadLock = !getReadLock;
+ }
+
+ boolean problems = false;
+ for (int i = 0; i < threadTotal; i++) {
+ try {
+ threads[i].join(200 * sleep);
+ } catch (final InterruptedException intEx) {
+
+ }
+ }
+
+ // Try again for any we missed.
+ for (int i = 0; i < threadTotal; i++) {
+ if (threads[i].isAlive()) {
+ try {
+ threads[i].join(200 * sleep);
+ } catch (final InterruptedException intEx) {
+ }
+ }
+ if (threads[i].isAlive()) {
+ log.error("Thread " + threads[i].getName()
+ + " failed to finish");
+ problems = true;
+ }
+ }
+
+ Assert.assertTrue("Some thread failed to finish", !problems);
+ }
+
+}
Propchange:
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/rdf/model/AbstractLockContractTests.java
------------------------------------------------------------------------------
svn:mime-type = text/plain