/******************************************************************************* * Copyright (c) 2007 Cambridge Semantics Incorporated. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Cambridge Semantics Incorporated *******************************************************************************/ package org.openanzo.client; import java.util.Collection; import java.util.Iterator; import org.openanzo.glitter.query.PatternSolution; import org.openanzo.glitter.query.QueryResults; import org.openanzo.rdf.IQuadStore; import org.openanzo.rdf.MemQuadStore; import org.openanzo.rdf.Statement; import org.openanzo.rdf.URI; import org.openanzo.rdf.utils.test.TestUtilities.TestData; /** * Unit tests the transaction proxy class. * * @author Joe Betz <jpbetz@cambridgesemantics.com> * */ public class TestTransactionProxy extends TestConfiguration { /** * verifies that the contains methods are correct. */ public void testContains() { TransactionProxy proxy = createProxy(); assertFalse(proxy.contains(TestData.stmt1)); assertFalse(proxy.contains(TestData.subj1, TestData.pred1, TestData.obj1, TestData.graph1)); assertFalse(proxy.contains(TestData.subj1, null, null, (URI[]) null)); assertFalse(proxy.contains(null, TestData.pred1, null, (URI[]) null)); assertFalse(proxy.contains(null, null, TestData.obj1, (URI[]) null)); assertFalse(proxy.contains(null, null, null, TestData.graph1)); proxy.add(TestData.stmt1); assertTrue(proxy.contains(TestData.stmt1)); assertTrue(proxy.contains(TestData.stmt1)); assertTrue(proxy.contains(TestData.subj1, TestData.pred1, TestData.obj1, TestData.graph1)); assertTrue(proxy.contains(TestData.subj1, null, null, (URI[]) null)); assertTrue(proxy.contains(null, TestData.pred1, null, (URI[]) null)); assertTrue(proxy.contains(null, null, TestData.obj1, (URI[]) null)); assertTrue(proxy.contains(null, null, null, TestData.graph1)); proxy.remove(TestData.stmt1); assertFalse(proxy.contains(TestData.subj1, TestData.pred1, TestData.obj1, TestData.graph1)); assertFalse(proxy.contains(TestData.stmt1)); } /** * verifies that the find method finds a statement when it is added and does not find it after it has been removed. */ public void testFind() { TransactionProxy proxy = createProxy(); proxy.add(TestData.stmt1); Iterator<Statement> find = proxy.find(TestData.subj1, TestData.pred1, TestData.obj1, TestData.graph1).iterator(); assertTrue(find.hasNext()); Statement stmt = find.next(); assertEquals(TestData.stmt1, stmt); assertFalse(find.hasNext()); proxy.remove(TestData.stmt1); Iterator<Statement> find2 = proxy.find(TestData.subj1, TestData.pred1, TestData.obj1, TestData.graph1).iterator(); assertFalse(find2.hasNext()); } /** * Verifies that a sparql query find a statement that has been added and does not find it after it is removed. * * @throws Exception */ public void testQuery() throws Exception { TransactionProxy proxy = createProxy(); proxy.add(TestData.stmt1); QueryResults result = proxy.executeQuery(null, null, null, "SELECT ?s ?p ?o WHERE { ?s ?p ?o . }", null); Iterator<PatternSolution> selectResult = result.getSelectResults().iterator(); assertTrue(selectResult.hasNext()); PatternSolution bindingSet = selectResult.next(); assertEquals(TestData.subj1.toString(), bindingSet.getBinding("s").toString()); assertEquals(TestData.pred1.toString(), bindingSet.getBinding("p").toString()); assertEquals(TestData.obj1.toString(), bindingSet.getBinding("o").toString()); assertFalse(selectResult.hasNext()); proxy.remove(TestData.stmt1); QueryResults result2 = proxy.executeQuery(null, null, null, "SELECT ?s ?p ?o WHERE { ?s ?p ?o . }", null); Iterator<PatternSolution> selectResult2 = result2.getSelectResults().iterator(); assertFalse(selectResult2.hasNext()); } /** * verifies that the getStatements method returns all the statements in the proxy. * * @throws Exception */ public void testGetStatements() throws Exception { TransactionProxy proxy = createProxy(); Iterator<Statement> iter = proxy.getStatements().iterator(); assertFalse(iter.hasNext()); proxy.add(TestData.stmt1); iter = proxy.getStatements().iterator(); assertTrue(iter.hasNext()); Statement stmt = iter.next(); assertEquals(TestData.stmt1, stmt); assertFalse(iter.hasNext()); proxy.remove(TestData.stmt1); iter = proxy.getStatements().iterator(); assertFalse(iter.hasNext()); } /** * verifies that the getNamedGraphUris methods returns a graph when it exists and does not after it is removed. * * @throws Exception */ public void testGetNamedGraphUris() throws Exception { TransactionProxy proxy = createProxy(); Collection<URI> namedGraphUris = proxy.getNamedGraphUris(); assertFalse(namedGraphUris.contains(TestData.graph1)); proxy.add(TestData.stmt1); namedGraphUris = proxy.getNamedGraphUris(); assertTrue(namedGraphUris.contains(TestData.graph1)); proxy.remove(TestData.stmt1); namedGraphUris = proxy.getNamedGraphUris(); assertFalse(namedGraphUris.contains(TestData.graph1)); } /** * verifies that the size, clear and isEmpty methods return the correct results. * * @throws Exception */ public void testClearAndSizeAndIsEmpty() throws Exception { TransactionProxy proxy = createProxy(); proxy.add(TestData.stmt1); assertEquals(1, proxy.size()); assertEquals(1, proxy.size(TestData.graph1)); assertEquals(0, proxy.size(TestData.graph2)); assertFalse(proxy.isEmpty()); assertFalse(proxy.isEmpty(TestData.graph1)); assertTrue(proxy.isEmpty(TestData.graph2)); proxy.add(TestData.stmt2); assertEquals(2, proxy.size()); assertEquals(1, proxy.size(TestData.graph1)); assertEquals(1, proxy.size(TestData.graph2)); assertFalse(proxy.isEmpty()); assertFalse(proxy.isEmpty(TestData.graph1)); assertFalse(proxy.isEmpty(TestData.graph2)); proxy.clear(); assertEquals(0, proxy.size()); assertEquals(0, proxy.size(TestData.graph1)); assertEquals(0, proxy.size(TestData.graph2)); assertTrue(proxy.isEmpty()); assertTrue(proxy.isEmpty(TestData.graph1)); assertTrue(proxy.isEmpty(TestData.graph2)); } /** * verifies that add and remove behave correctly when in a transaction. * * @throws Exception */ public void testInTransaction() throws Exception { TransactionProxy proxy = createProxy(); proxy.transactionQueue.begin(); assertFalse(proxy.contains(TestData.stmt1)); proxy.add(TestData.stmt1); assertTrue(proxy.contains(TestData.stmt1)); proxy.remove(TestData.stmt1); assertFalse(proxy.contains(TestData.stmt1)); proxy.transactionQueue.commit(); } private TransactionProxy createProxy() { IQuadStore quadStore = new MemQuadStore(); IQuadStore transactionStore = new MemQuadStore(); TransactionPersistence transactionStorage = new TransactionPersistence(transactionStore); return new TransactionProxy(quadStore, new TransactionQueue(transactionStorage), null); } }