Added Tests for MARMOTTA-236 Project: http://git-wip-us.apache.org/repos/asf/incubator-marmotta/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-marmotta/commit/e532b8aa Tree: http://git-wip-us.apache.org/repos/asf/incubator-marmotta/tree/e532b8aa Diff: http://git-wip-us.apache.org/repos/asf/incubator-marmotta/diff/e532b8aa
Branch: refs/heads/develop Commit: e532b8aa890ef5e19ab2d65272add13723585ea4 Parents: 4f41c8f Author: Jakob Frank <[email protected]> Authored: Tue May 7 10:24:48 2013 +0200 Committer: Jakob Frank <[email protected]> Committed: Tue May 7 10:24:48 2013 +0200 ---------------------------------------------------------------------- .../concurrent/ConcurrentFacadingTest.java | 172 +++++++++++++++ 1 files changed, 172 insertions(+), 0 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-marmotta/blob/e532b8aa/commons/sesame-tools-facading/src/test/java/org/apache/marmotta/commons/sesame/facading/concurrent/ConcurrentFacadingTest.java ---------------------------------------------------------------------- diff --git a/commons/sesame-tools-facading/src/test/java/org/apache/marmotta/commons/sesame/facading/concurrent/ConcurrentFacadingTest.java b/commons/sesame-tools-facading/src/test/java/org/apache/marmotta/commons/sesame/facading/concurrent/ConcurrentFacadingTest.java new file mode 100644 index 0000000..a8cdfcd --- /dev/null +++ b/commons/sesame-tools-facading/src/test/java/org/apache/marmotta/commons/sesame/facading/concurrent/ConcurrentFacadingTest.java @@ -0,0 +1,172 @@ +package org.apache.marmotta.commons.sesame.facading.concurrent; + +import java.util.UUID; + +import org.apache.marmotta.commons.sesame.facading.AbstractFacadingTest; +import org.apache.marmotta.commons.sesame.facading.FacadingFactory; +import org.apache.marmotta.commons.sesame.facading.api.Facading; +import org.apache.marmotta.commons.sesame.facading.concurrent.model.FooFacade; +import org.apache.marmotta.commons.sesame.facading.concurrent.model.TypeFacade; +import org.apache.marmotta.commons.sesame.repository.ResourceUtils; +import org.apache.marmotta.commons.vocabulary.DCTERMS; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.openrdf.model.URI; +import org.openrdf.model.vocabulary.RDF; +import org.openrdf.repository.RepositoryConnection; +import org.openrdf.repository.RepositoryException; + +public class ConcurrentFacadingTest extends AbstractFacadingTest { + + private URI subject; + + @Before + public void init() { + subject = repositoryRDF.getValueFactory().createURI("http://example.com/rdf/" + UUID.randomUUID().toString()); + } + + @Test + public void testParallelConnections() throws RepositoryException { + final URI type = repositoryRDF.getValueFactory().createURI(DCTERMS.Agent.stringValue()+"#", UUID.randomUUID().toString()); + final RepositoryConnection cX = repositoryRDF.getConnection(), + cO = repositoryRDF.getConnection(); + try { + cX.begin(); + cO.begin(); + + cX.add(subject, RDF.TYPE, type); + Assert.assertTrue (cX.hasStatement(subject, RDF.TYPE, type, false)); + Assert.assertFalse(cO.hasStatement(subject, RDF.TYPE, type, false)); + + cX.commit(); + Assert.assertTrue(cO.hasStatement(subject, RDF.TYPE, type, false)); + + cO.commit(); + } finally { + if (cX.isActive()) cX.rollback(); + if (cO.isActive()) cO.rollback(); + cX.close(); + cO.close(); + } + } + + @Test + public void testParallelFacading() throws RepositoryException { + final RepositoryConnection fc = repositoryRDF.getConnection(); + try { + fc.begin(); + final Facading facading = FacadingFactory.createFacading(fc); + + final FooFacade ff = facading.createFacade(subject, FooFacade.class); + + Assert.assertNull(ff.getString()); + final String v = UUID.randomUUID().toString(); + ff.setString(v); + Assert.assertEquals(v, ff.getString()); + + final RepositoryConnection fc2 = repositoryRDF.getConnection(); + try { + fc2.begin(); + + final Facading f2 = FacadingFactory.createFacading(fc2); + Assert.assertNull(f2.createFacade(subject, FooFacade.class).getString()); + + fc2.commit(); + } finally { + if (fc2.isActive()) fc2.rollback(); + fc2.close(); + } + + fc.commit(); + + final RepositoryConnection fc3 = repositoryRDF.getConnection(); + try { + fc3.begin(); + + final Facading f3 = FacadingFactory.createFacading(fc3); + Assert.assertEquals(v, f3.createFacade(subject, FooFacade.class).getString()); + + fc3.commit(); + } finally { + if (fc3.isActive()) fc3.rollback(); + fc3.close(); + } + } finally { + if (fc.isActive()) fc.rollback(); + fc.close(); + } + } + + @Test + public void testParallelFacadingType() throws RepositoryException { + final RepositoryConnection mainCon = repositoryRDF.getConnection(); + try { + mainCon.begin(); + Assert.assertFalse(ResourceUtils.hasType(mainCon, subject, TypeFacade.TYPE)); + + final Facading facading = FacadingFactory.createFacading(mainCon); + Assert.assertFalse(facading.isFacadeable(subject, TypeFacade.class)); + Assert.assertFalse(ResourceUtils.hasType(mainCon, subject, TypeFacade.TYPE)); + + + final TypeFacade ff = facading.createFacade(subject, TypeFacade.class); + Assert.assertTrue(facading.isFacadeable(subject, TypeFacade.class)); + Assert.assertTrue(ResourceUtils.hasType(mainCon, subject, TypeFacade.TYPE)); + + Assert.assertNull(ff.getTitle()); + final String v = UUID.randomUUID().toString(); + ff.setTitle(v); + Assert.assertEquals(v, ff.getTitle()); + Assert.assertTrue(ResourceUtils.hasType(mainCon, subject, TypeFacade.TYPE)); + Assert.assertTrue(facading.isFacadeable(subject, TypeFacade.class)); + + { // before-commit + final RepositoryConnection subCon_1 = repositoryRDF.getConnection(); + try { + subCon_1.begin(); + Assert.assertFalse(ResourceUtils.hasType(subCon_1, subject, TypeFacade.TYPE)); + + final Facading f_1 = FacadingFactory.createFacading(subCon_1); + Assert.assertFalse(f_1.isFacadeable(subject, TypeFacade.class)); + + final TypeFacade tf_1 = f_1.createFacade(subject, TypeFacade.class); + Assert.assertNull(tf_1.getTitle()); + Assert.assertTrue(f_1.isFacadeable(subject, TypeFacade.class)); + Assert.assertTrue(ResourceUtils.hasType(subCon_1, subject, TypeFacade.TYPE)); + + subCon_1.rollback(); + } finally { + if (subCon_1.isActive()) subCon_1.rollback(); + subCon_1.close(); + } + } + + mainCon.commit(); + + { // after-commit + final RepositoryConnection subCon_2 = repositoryRDF.getConnection(); + try { + subCon_2.begin(); + Assert.assertTrue(ResourceUtils.hasType(subCon_2, subject, TypeFacade.TYPE)); + + final Facading f_2 = FacadingFactory.createFacading(subCon_2); + Assert.assertTrue(f_2.isFacadeable(subject, TypeFacade.class)); + + Assert.assertEquals(v, f_2.createFacade(subject, TypeFacade.class).getTitle()); + Assert.assertTrue(ResourceUtils.hasType(subCon_2, subject, TypeFacade.TYPE)); + Assert.assertTrue(f_2.isFacadeable(subject, TypeFacade.class)); + + subCon_2.commit(); + } finally { + if (subCon_2.isActive()) subCon_2.rollback(); + subCon_2.close(); + } + } + } finally { + if (mainCon.isActive()) mainCon.rollback(); + mainCon.close(); + } + } + +}
