/*******************************************************************************
* 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.jdbc.container;
import java.util.Iterator;
import junit.framework.TestCase;
import org.openanzo.rdf.Constants;
import org.openanzo.rdf.Statement;
import org.openanzo.rdf.URI;
import org.openanzo.rdf.Value;
/**
* Unit tests of the RDBQuadStore class using Apache Derby as the relational database.
*
* @author Joe Betz <jpbetz@cambridgesemantics.com>
*
*/
public class TestRDBQuadStore extends TestCase {
private static final String prefix = "http://test.example.com/test#";
private static final URI subj1 = Constants.valueFactory.createURI(prefix + "s1");
private static final URI pred1 = Constants.valueFactory.createURI(prefix + "p1");
private static final URI graph1 = Constants.valueFactory.createURI(prefix + "namedGraph1");
private static final URI pred2 = Constants.valueFactory.createURI(prefix + "p2");
private static final URI pred3 = Constants.valueFactory.createURI(prefix + "p3");
private static final Value obj1 = Constants.valueFactory.createLiteral("o1");
private static final Value obj2 = Constants.valueFactory.createLiteral("o2");
private static final Value obj7 = Constants.valueFactory.createTypedLiteral(4);
private static final URI graph2 = Constants.valueFactory.createURI(prefix + "namedGraph2");
private static final URI graph3 = Constants.valueFactory.createURI(prefix + "namedGraph3");
private static final Statement stmt7 = Constants.valueFactory.createStatement(subj1, pred3, obj7, graph3);
private static final Statement stmt1 = Constants.valueFactory.createStatement(subj1, pred1, obj1, graph1);
private static final Statement stmt2 = Constants.valueFactory.createStatement(subj1, pred2, obj2, graph2);
/**
* Verify rdf statements can be added and removed from the quad store.
*
* @throws Exception
*/
public void testAddRemove() throws Exception {
CoreDBConfiguration config = RDBTestUtilities.getConfiguration("ANZO_TEST");
RDBQuadStore quadStore = RDBTestUtilities.getRDBQuadStore(config);
quadStore.add(stmt7);
assertTrue(quadStore.contains(stmt7));
quadStore.close();
quadStore = RDBQuadStore.createQuadStore(config, true);
quadStore.connect();
assertTrue(quadStore.contains(stmt7));
quadStore.remove(stmt7);
assertFalse(quadStore.contains(stmt7));
}
/**
* Verify a find with a wild card object returns only the matching statement.
*
* @throws Exception
*/
public void testFind() throws Exception {
RDBQuadStore quadStore = RDBTestUtilities.getRDBQuadStore();
quadStore.add(stmt1);
quadStore.add(stmt2);
Iterator<Statement> find = quadStore.find(stmt1.getSubject(), stmt1.getPredicate(), null, stmt1.getNamedGraphUri()).iterator();
assertTrue(find.hasNext());
assertEquals(stmt1, find.next());
assertFalse(find.hasNext());
}
/**
* Verify a transaction can be aborted properly.
*
* @throws Exception
*/
public void testAbort() throws Exception {
RDBQuadStore quadStore = RDBTestUtilities.getRDBQuadStore();
quadStore.begin();
quadStore.add(stmt1);
quadStore.add(stmt2);
assertTrue(quadStore.contains(stmt1)); // hsql doesn't support read transaction isolation
assertTrue(quadStore.contains(stmt2));
quadStore.abort();
assertFalse(quadStore.contains(stmt1));
assertFalse(quadStore.contains(stmt2));
}
/**
* Verifies two quad stores are properly isolated from each other and may co-exist.
*
* @throws Exception
*/
public void testDualStores() throws Exception {
RDBQuadStore quadStore = RDBTestUtilities.getRDBQuadStore();
RDBQuadStore clientState = RDBTestUtilities.getRDBQuadStore("clientStateWithAFairlyLongName");
quadStore.add(stmt1);
clientState.add(stmt2);
assertTrue(quadStore.contains(stmt1));
assertTrue(clientState.contains(stmt2));
assertFalse(quadStore.contains(stmt2));
assertFalse(clientState.contains(stmt1));
}
}