blob: bea479db02c787fa29a59d0996920a08583b704a [file] [log] [blame]
/*
* 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 org.apache.clerezza.rdf.core.test;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import org.junit.Test;
import org.apache.clerezza.commons.rdf.BlankNode;
import org.apache.clerezza.commons.rdf.ImmutableGraph;
import org.apache.clerezza.commons.rdf.Graph;
import org.apache.clerezza.commons.rdf.BlankNodeOrIRI;
import org.apache.clerezza.commons.rdf.Triple;
import org.apache.clerezza.commons.rdf.IRI;
import org.apache.clerezza.rdf.core.access.EntityAlreadyExistsException;
import org.apache.clerezza.rdf.core.access.NoSuchEntityException;
import org.apache.clerezza.rdf.core.access.TcProvider;
import org.apache.clerezza.commons.rdf.impl.utils.simple.SimpleGraph;
import org.apache.clerezza.commons.rdf.impl.utils.TripleImpl;
import static org.junit.Assert.*;
/**
*
* @author mir,rbn
*/
public abstract class TcProviderTest {
protected final IRI uriRefA = generateUri("a");
protected final IRI uriRefA1 = generateUri("a1");
protected final IRI uriRefB = generateUri("b");
protected final IRI uriRefB1 = generateUri("b1");
protected final IRI uriRefC = generateUri("c");
protected final IRI graphIRI = generateUri("myGraph");
protected final IRI otherGraphIRI = new IRI(graphIRI.getUnicodeString());
@Test
public void testCreateImmutableGraph() {
TcProvider simpleTcmProvider = getInstance();
Graph mGraph = new SimpleGraph();
mGraph.add(new TripleImpl(uriRefA, uriRefA, uriRefA));
ImmutableGraph createdGraph = simpleTcmProvider.createImmutableGraph(uriRefA, mGraph);
Iterator<Triple> iteratorInput = mGraph.iterator();
Iterator<Triple> iteratorCreated = createdGraph.iterator();
assertEquals(iteratorInput.next(), iteratorCreated.next());
assertFalse(iteratorCreated.hasNext());
try {
simpleTcmProvider.createImmutableGraph(uriRefA, mGraph);
assertTrue(false);
} catch (EntityAlreadyExistsException e) {
assertTrue(true);
}
simpleTcmProvider.deleteGraph(uriRefA);
}
@Test
public void testCreateGraph() {
TcProvider simpleTcmProvider = getInstance();
Graph mGraph = simpleTcmProvider.createGraph(uriRefA);
assertTrue(mGraph.isEmpty());
try {
simpleTcmProvider.createGraph(uriRefA);
assertTrue(false);
} catch (EntityAlreadyExistsException e) {
assertTrue(true);
}
simpleTcmProvider.deleteGraph(uriRefA);
}
@Test
public void testGetImmutableGraph() {
TcProvider simpleTcmProvider = getInstance();
// add Graphs
Graph mGraph = new SimpleGraph();
mGraph.add(new TripleImpl(uriRefA, uriRefA, uriRefA));
simpleTcmProvider.createImmutableGraph(uriRefA, mGraph);
mGraph = new SimpleGraph();
mGraph.add(new TripleImpl(uriRefA1, uriRefA1, uriRefA1));
simpleTcmProvider.createImmutableGraph(uriRefA1, mGraph);
mGraph = new SimpleGraph();
mGraph.add(new TripleImpl(uriRefB, uriRefB, uriRefB));
simpleTcmProvider.createImmutableGraph(uriRefB, mGraph);
mGraph = new SimpleGraph();
mGraph.add(new TripleImpl(uriRefB1, uriRefB1, uriRefB1));
simpleTcmProvider.createImmutableGraph(uriRefB1, mGraph);
ImmutableGraph bGraph = simpleTcmProvider.getImmutableGraph(uriRefB);
Iterator<Triple> iterator = bGraph.iterator();
assertEquals(new TripleImpl(uriRefB, uriRefB, uriRefB), iterator.next());
assertFalse(iterator.hasNext());
simpleTcmProvider.deleteGraph(uriRefA);
simpleTcmProvider.deleteGraph(uriRefA1);
simpleTcmProvider.deleteGraph(uriRefB);
simpleTcmProvider.deleteGraph(uriRefB1);
}
@Test
public void testGetGraph() {
TcProvider simpleTcmProvider = getInstance();
// add Graphs
Graph mGraph = simpleTcmProvider.createGraph(uriRefA);
mGraph.add(new TripleImpl(uriRefA, uriRefA, uriRefA));
mGraph = simpleTcmProvider.createGraph(uriRefA1);
mGraph.add(new TripleImpl(uriRefA1, uriRefA1, uriRefA1));
mGraph = simpleTcmProvider.createGraph(uriRefB);
mGraph.add(new TripleImpl(uriRefB, uriRefB, uriRefA));
mGraph.add(new TripleImpl(uriRefB, uriRefB, uriRefB));
mGraph.remove(new TripleImpl(uriRefB, uriRefB, uriRefA));
assertEquals(1, mGraph.size());
mGraph = simpleTcmProvider.createGraph(uriRefB1);
mGraph.add(new TripleImpl(uriRefB1, uriRefB1, uriRefB1));
Graph bGraph = simpleTcmProvider.getGraph(uriRefB);
Iterator<Triple> iterator = bGraph.iterator();
assertEquals(new TripleImpl(uriRefB, uriRefB, uriRefB), iterator.next());
assertFalse(iterator.hasNext());
simpleTcmProvider.deleteGraph(uriRefA);
simpleTcmProvider.deleteGraph(uriRefA1);
simpleTcmProvider.deleteGraph(uriRefB);
simpleTcmProvider.deleteGraph(uriRefB1);
}
@Test
public void testGetTriples() {
TcProvider simpleTcmProvider = getInstance();
// add Graphs
Graph mGraph = new SimpleGraph();
mGraph.add(new TripleImpl(uriRefA, uriRefA, uriRefA));
simpleTcmProvider.createImmutableGraph(uriRefA, mGraph);
mGraph = new SimpleGraph();
mGraph.add(new TripleImpl(uriRefB, uriRefB, uriRefB));
simpleTcmProvider.createImmutableGraph(uriRefB, mGraph);
// add Graphs
mGraph = simpleTcmProvider.createGraph(uriRefA1);
mGraph.add(new TripleImpl(uriRefA1, uriRefA1, uriRefA1));
mGraph = simpleTcmProvider.createGraph(uriRefB1);
mGraph.add(new TripleImpl(uriRefB1, uriRefB1, uriRefB1));
// get a ImmutableGraph
Graph tripleCollection = simpleTcmProvider.getGraph(uriRefA);
// get a Graph
Graph tripleCollection2 = simpleTcmProvider.getGraph(uriRefB1);
Iterator<Triple> iterator = tripleCollection.iterator();
assertEquals(new TripleImpl(uriRefA, uriRefA, uriRefA), iterator.next());
assertFalse(iterator.hasNext());
iterator = tripleCollection2.iterator();
assertEquals(new TripleImpl(uriRefB1, uriRefB1, uriRefB1), iterator.next());
assertFalse(iterator.hasNext());
simpleTcmProvider.deleteGraph(uriRefA);
simpleTcmProvider.deleteGraph(uriRefA1);
simpleTcmProvider.deleteGraph(uriRefB);
simpleTcmProvider.deleteGraph(uriRefB1);
}
@Test
public void testDeleteEntity() {
TcProvider simpleTcmProvider = getInstance();
Graph mGraph = new SimpleGraph();
mGraph.add(new TripleImpl(uriRefA, uriRefA, uriRefA));
ImmutableGraph graph = mGraph.getImmutableGraph();
simpleTcmProvider.createImmutableGraph(uriRefA, graph);
simpleTcmProvider.createImmutableGraph(uriRefC, graph);
simpleTcmProvider.deleteGraph(uriRefA);
try {
simpleTcmProvider.getGraph(uriRefA);
assertTrue(false);
} catch (NoSuchEntityException e) {
assertTrue(true);
}
// Check that graph is still available under uriRefC
ImmutableGraph cGraph = simpleTcmProvider.getImmutableGraph(uriRefC);
assertNotNull(cGraph);
simpleTcmProvider.deleteGraph(uriRefC);
}
/**
* Subclasses implement this method to provide implementation instances of
* <code>TcProvider</code>. The first call within a test method has to
* return a empty TcProvider. Subsequent calls within the test method
* should instantiate a new provider, but load the previously added data from
* its "persistent" store.
*
* @return a TcProvider of the implementation to be tested.
*/
protected abstract TcProvider getInstance();
// @Test
// public void testGetNames() {
// Graph mGraph = new SimpleGraph();
// mGraph.add(new TripleImpl(uriRefB, uriRefB, uriRefB));
// simpleTcmProvider.createGraph(uriRefB, mGraph.getGraph());
//
// mGraph = new SimpleGraph();
// mGraph.add(new TripleImpl(uriRefA, uriRefA, uriRefA));
// ImmutableGraph graph = mGraph.getGraph();
// simpleTcmProvider.createGraph(uriRefA, graph);
// simpleTcmProvider.createGraph(uriRefC, graph);
//
// Set<IRI> names = simpleTcmProvider.getNames(graph);
//
// assertTrue(names.contains(uriRefA));
// assertTrue(names.contains(uriRefC));
// assertEquals(2, names.size());
//
// assertFalse(names.contains(uriRefB));
// }
@Test
public void testCreateGraphExtended() throws Exception {
TcProvider provider = getInstance();
Graph graph = provider.createGraph(graphIRI);
assertNotNull(graph);
//get a new provider and check that graph is there
provider = getInstance();
graph = provider.getGraph(graphIRI);
assertNotNull(graph);
//check that there is no such graph, but only the mgraph
boolean expThrown = false;
try {
ImmutableGraph g = provider.getImmutableGraph(graphIRI);
} catch(NoSuchEntityException e) {
expThrown = true;
}
assertTrue(expThrown);
provider.deleteGraph(graphIRI);
}
@Test
public void testCreateImmutableGraphExtended() throws Exception {
TcProvider provider = getInstance();
ImmutableGraph graph = provider.createImmutableGraph(graphIRI, null);
assertNotNull(graph);
//get a new provider and check that graph is there
provider = getInstance();
graph = provider.getImmutableGraph(graphIRI);
assertNotNull(graph);
//check that there is no such mgraph, but only the graph
boolean expThrown = false;
try {
Graph g = provider.getMGraph(graphIRI);
} catch(NoSuchEntityException e) {
expThrown = true;
}
assertTrue(expThrown);
provider.deleteGraph(graphIRI);
}
@Test
public void testCreateGraphNoDuplicateNames() throws Exception {
TcProvider provider = getInstance();
ImmutableGraph graph = provider.createImmutableGraph(graphIRI, null);
assertNotNull(graph);
boolean expThrown = false;
try {
ImmutableGraph other = provider.createImmutableGraph(otherGraphIRI, null);
} catch(EntityAlreadyExistsException eaee) {
expThrown = true;
}
assertTrue(expThrown);
provider.deleteGraph(graphIRI);
}
@Test
public void testCreateGraphNoDuplicateNames2() throws Exception {
TcProvider provider = getInstance();
Graph graph = provider.createGraph(graphIRI);
assertNotNull(graph);
boolean expThrown = false;
try {
Graph other = provider.createGraph(otherGraphIRI);
} catch(EntityAlreadyExistsException eaee) {
expThrown = true;
}
assertTrue(expThrown);
provider.deleteGraph(graphIRI);
}
@Test
public void testCreateGraphWithInitialCollection() throws Exception {
Triple t1 = createTestTriple();
TcProvider provider = getInstance();
ImmutableGraph graph = provider.createImmutableGraph(graphIRI, createTestTripleCollection(t1));
assertEquals(1, graph.size());
assertTrue(graph.contains(t1));
provider.deleteGraph(graphIRI);
}
@Test
public void testGraphIsNotMutable() throws Exception {
Triple t1 = createTestTriple();
Set<Triple> t = new HashSet<Triple>();
t.add(t1);
TcProvider provider = getInstance();
ImmutableGraph graph = provider.createImmutableGraph(graphIRI, createTestTripleCollection(t1));
boolean expThrown = false;
try {
graph.add(t1);
} catch(UnsupportedOperationException uoe) {
expThrown = true;
}
assertTrue(expThrown);
expThrown = false;
try {
graph.remove(t1);
} catch(UnsupportedOperationException uoe) {
expThrown = true;
}
assertTrue(expThrown);
expThrown = false;
try {
graph.addAll(t);
} catch(UnsupportedOperationException uoe) {
expThrown = true;
}
assertTrue(expThrown);
expThrown = false;
try {
graph.clear();
} catch(UnsupportedOperationException uoe) {
expThrown = true;
}
assertTrue(expThrown);
expThrown = false;
try {
graph.removeAll(t);
} catch(UnsupportedOperationException uoe) {
expThrown = true;
}
assertTrue(expThrown);
provider.deleteGraph(graphIRI);
}
// This tests can not pass, because equals in AbstractGraph is not implemented
// yet.
// @Test
// public void testGraphHasName() throws Exception {
//
// TcProvider provider = getInstance();
//
// Graph triples = createTestTripleCollection(createTestTriple());
// ImmutableGraph graph = provider.createGraph(graphIRI, triples);
//
// provider = getInstance();
// Set<IRI> names = provider.getNames(graph);
// assertTrue(names.contains(graphIRI));
// }
//
// @Test
// public void testCreateSameGraphWithDifferentNames() throws Exception {
//
// Graph triples = createTestTripleCollection(createTestTriple());
//
// TcProvider provider = getInstance();
// IRI name1 = new IRI("http://myGraph1");
// ImmutableGraph graph = provider.createGraph(name1, triples);
//
// IRI name2 = new IRI("http://myGraph2");
// ImmutableGraph secondGraph = provider.createGraph(name2, triples);
//
// Set<IRI> names = provider.getNames(graph);
// assertNotNull(names);
// assertEquals(2, names.size());
// }
@Test
public void testGraphDeletion() throws Exception {
Graph triples = createTestTripleCollection(createTestTriple());
TcProvider provider = getInstance();
IRI name1 = new IRI("http://myGraph1");
ImmutableGraph graph = provider.createImmutableGraph(name1, triples);
IRI name2 = new IRI("http://myGraph2");
ImmutableGraph secondGraph = provider.createImmutableGraph(name2, triples);
//if we delete graph with name1, the second graph should still be there
provider.deleteGraph(name1);
provider = getInstance();
ImmutableGraph firstGraph = provider.getImmutableGraph(name2);
assertNotNull(firstGraph);
//check second name is not there
boolean expThrown = false;
try {
ImmutableGraph g = provider.getImmutableGraph(name1);
} catch(NoSuchEntityException nses) {
expThrown = true;
}
assertTrue(expThrown);
provider.deleteGraph(name2);
}
@Test
public void testGetTriplesGraph() throws Exception {
TcProvider provider = getInstance();
Graph graph = provider.createGraph(graphIRI);
Graph tc = provider.getGraph(graphIRI);
assertNotNull(tc);
provider.deleteGraph(graphIRI);
}
private Triple createTestTriple() {
BlankNodeOrIRI subject = new BlankNode() {};
IRI predicate = new IRI("http://test.com/");
BlankNodeOrIRI object = new IRI("http://test.com/myObject");
return new TripleImpl(subject, predicate, object);
}
private Graph createTestTripleCollection(Triple t) {
Set<Triple> ts = new HashSet<Triple>();
ts.add(t);
return new SimpleGraph(ts);
}
protected IRI generateUri(String name) {
return new IRI("http://example.org/" + name);
}
}