/******************************************************************************* * Copyright (c) 2004, 2007 IBM Corporation and 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: * IBM Corporation - initial API and implementation * Cambridge Semantics Incorporated - Fork to Anzo *******************************************************************************/ package org.openanzo.test.client; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import org.openanzo.client.AnzoClient; import org.openanzo.client.ClientGraph; import org.openanzo.rdf.Constants; import org.openanzo.rdf.Statement; import org.openanzo.rdf.URI; import org.openanzo.rdf.vocabulary.RDF; import org.openanzo.test.AbstractTest; /** * Test the server graphs provided by the <code>AnzoClient</code>. * * @author Rouben Meschian (<a href="mailto:rmeschi@us.ibm.com">rmeschi@us.ibm.com</a>) * */ public class TestServerGraphs extends AbstractTest { static final URI GRAPH_URI = Constants.valueFactory.createURI("http://graph1"); /** * Test simple addition/deletion of statements to/from the server graph. * * @throws Exception */ public void testAddRemove() throws Exception { AnzoClient client = new AnzoClient(getDefaultClientConfiguration()); try { client.connect(); client.reset(loadStatements("initialize.trig"), null); ClientGraph graph = client.getServerGraph(GRAPH_URI); URI r = Constants.valueFactory.createURI("urn:test"); graph.add(Constants.valueFactory.createStatement(r, RDF.TYPE, RDF.ALT)); client.updateRepository(); // verify that is there // and in the first server graph assertTrue(graph.contains(r, RDF.TYPE, RDF.ALT)); // try the deleteAll method graph.remove(Constants.valueFactory.createStatement(r, RDF.TYPE, RDF.ALT)); client.updateRepository(); assertFalse(graph.contains(r, RDF.TYPE, RDF.ALT)); } finally { client.close(); } } /** * Test simple addition/deletion of statements to/from the server graph. * * @throws Exception */ public void itestContinuousAdd() throws Exception { AnzoClient client = new AnzoClient(getDefaultClientConfiguration()); client.connect(); try { client.reset(loadStatements("initialize.trig"), null); ClientGraph graph = client.getServerGraph(GRAPH_URI); URI r = Constants.valueFactory.createURI("urn:test"); for (int i = 0; i < 50000; i++) { //System.err.println("Sent:" + i); graph.add(Constants.valueFactory.createStatement(r, RDF.TYPE, Constants.valueFactory.createTypedLiteral(Integer.valueOf(i)))); client.updateRepository(); synchronized (r) { r.wait(2000); } } } finally { client.close(); } } /** * Test transaction begin/commit on ServerGraph * * @throws Exception */ public void testTransaction() throws Exception { AnzoClient client = new AnzoClient(getDefaultClientConfiguration()); client.connect(); try { client.reset(loadStatements("initialize.trig"), null); ClientGraph graph = client.getServerGraph(GRAPH_URI); client.begin(); URI r = Constants.valueFactory.createURI("urn:test"); graph.add(Constants.valueFactory.createStatement(r, RDF.TYPE, RDF.ALT)); client.commit(); client.updateRepository(); assertTrue(graph.size() == 1); assertTrue(graph.contains(r, RDF.TYPE, RDF.ALT)); } finally { client.close(); } } /** * Test adding and replicating to/with two server graphs. * * @throws Exception */ public void testAddingAndReplicatingWithTwoServerGraphs() throws Exception { AnzoClient client = new AnzoClient(getDefaultClientConfiguration()); try { final Statement stmt1 = Constants.valueFactory.createStatement((createTestUri("subject1")), createTestUri("predicate1"), (createTestUri("object1"))); final Statement stmt2 = Constants.valueFactory.createStatement((createTestUri("subject2")), createTestUri("predicate2"), (createTestUri("object2"))); final URI GRAPH_URI1 = Constants.valueFactory.createURI("http://GRAPH_URI1"); final URI GRAPH_URI2 = Constants.valueFactory.createURI("http://GRAPH_URI2"); client.connect(); client.reset(loadStatements("initialize.trig"), null); // ------------------------------------------------------------------ // create a server graph, add a statement and replicate ClientGraph serverGraph1 = client.getServerGraph(GRAPH_URI1); serverGraph1.add(stmt1); client.updateRepository(); // ------------------------------------------------------------------ // create a server graph, add a statement and replicate ClientGraph serverGraph2 = client.getServerGraph(GRAPH_URI2); serverGraph2.add(stmt2); client.updateRepository(); } finally { client.close(); } } /** * Test adding to and replicating with two server graphs located on two different clients * * @throws Exception */ public void testAddingAndReplicatingWithTwoServerGraphsFromDifferentAnzoClients() throws Exception { AnzoClient client1 = null; AnzoClient client2 = null; try { final Statement stmt1 = Constants.valueFactory.createStatement((createTestUri("subject1")), createTestUri("predicate1"), (createTestUri("object1"))); final Statement stmt2 = Constants.valueFactory.createStatement((createTestUri("subject2")), createTestUri("predicate2"), (createTestUri("object2"))); final URI GRAPH_URI1 = Constants.valueFactory.createURI("http://GRAPH_URI1"); final URI GRAPH_URI2 = Constants.valueFactory.createURI("http://GRAPH_URI2"); client1 = new AnzoClient(getDefaultClientConfiguration()); client1.connect(); client1.reset(loadStatements("initialize.trig"), null); client2 = new AnzoClient(getDefaultClientConfiguration()); client2.connect(); // ------------------------------------------------------------------ // create a server graph, add a statement and replicate ClientGraph graph1 = client1.getServerGraph(GRAPH_URI1); graph1.add(stmt1); client1.updateRepository(); // ------------------------------------------------------------------ // create a server graph, add a statement and replicate ClientGraph graph2 = client2.getServerGraph(GRAPH_URI2); graph2.add(stmt2); client2.updateRepository(); // TODO: assert something! } finally { if (client1 != null) { client1.close(); } if (client2 != null) { client2.close(); } } } /** * Test adding to and replicating with multiple server graphs. * * @throws Exception */ public void testAddingAndReplicatingWithManyServerGraphs() throws Exception { AnzoClient client = new AnzoClient(getDefaultClientConfiguration()); try { final int NUM_SERVER_GRAPHS = 20; final int NUM_TRANSACTIONS = 20; final int NUM_ADDS_PER_TRANSACTION = 10; client.connect(); client.reset(loadStatements("initialize.trig"), null); List<ClientGraph> graphs = new LinkedList<ClientGraph>(); for (int i = 0; i < NUM_SERVER_GRAPHS; i++) { graphs.add(client.getServerGraph(Constants.valueFactory.createURI("http://graph" + i))); } client.updateRepository(); for (Iterator<ClientGraph> iter = graphs.iterator(); iter.hasNext();) { ClientGraph graph1 = iter.next(); for (int numTransactions = 0; numTransactions < NUM_TRANSACTIONS; numTransactions++) { client.begin(); for (int i = 0; i < NUM_ADDS_PER_TRANSACTION; i++) { Statement stmt = Constants.valueFactory.createStatement((createTestUri("subject" + i)), createTestUri("predicate" + i), (createTestUri("object" + 1))); graph1.add(stmt); } client.commit(); } } client.updateRepository(); } finally { client.close(); } } /** * Test addition of a statement containing a literal to the server graph. * * @throws Exception */ public void testLiteral() throws Exception { AnzoClient client = new AnzoClient(getDefaultClientConfiguration()); client.connect(); try { client.reset(loadStatements("initialize.trig"), null); ClientGraph graph = client.getServerGraph(GRAPH_URI); Statement stmt = Constants.valueFactory.createStatement((createTestUri("subject1")), createTestUri("predicate1"), Constants.valueFactory.createLiteral("some string")); graph.add(stmt); client.updateRepository(); assertTrue(graph.size() == 1); assertTrue(graph.contains(stmt.getSubject(), stmt.getPredicate(), stmt.getObject())); } finally { client.close(); } } /** * Writes a statement to the server containing an anon node and verifies it can be read back afterward. * * @throws Exception */ public void testAnon() throws Exception { AnzoClient client = new AnzoClient(getDefaultClientConfiguration()); client.connect(); try { client.reset(loadStatements("initialize.trig"), null); ClientGraph serverGraph = client.getServerGraph(GRAPH_URI); Statement stmt1 = Constants.valueFactory.createStatement(createTestUri("subject1"), createTestUri("predicate1"), Constants.valueFactory.createBNode()); serverGraph.add(stmt1); client.updateRepository(); assertTrue(serverGraph.size() == 1); assertTrue(serverGraph.contains(stmt1.getSubject(), stmt1.getPredicate(), stmt1.getObject())); } finally { client.close(); } } /** * Test closing server graph. * * @throws Exception */ public void testClose() throws Exception { AnzoClient client = new AnzoClient(getDefaultClientConfiguration()); client.connect(); try { client.reset(loadStatements("initialize.trig"), null); ClientGraph graph = client.getServerGraph(GRAPH_URI); final Statement stmt1 = Constants.valueFactory.createStatement(createTestUri("subject1"), createTestUri("predicate1"), Constants.valueFactory.createLiteral("some string")); graph.add(stmt1); client.updateRepository(); final Statement stmt2 = Constants.valueFactory.createStatement(createTestUri("subject1"), createTestUri("predicate1"), Constants.valueFactory.createLiteral("some string1")); graph.add(stmt2); client.updateRepository(); final Statement stmt3 = Constants.valueFactory.createStatement(createTestUri("subject1"), createTestUri("predicate1"), Constants.valueFactory.createLiteral("some string2")); graph.add(stmt3); client.updateRepository(); graph.contains(stmt1); graph.contains(stmt2); graph.contains(stmt3); graph.close(); assertTrue(graph.isClosed()); boolean threwException = false; try { graph.remove(stmt1); } catch (Exception e) { threwException = true; } assertTrue(threwException); graph = client.getServerGraph(GRAPH_URI); graph.contains(stmt1); graph.contains(stmt2); graph.contains(stmt3); graph.close(); assertTrue(graph.isClosed()); threwException = false; try { graph.remove(stmt1); } catch (Exception e) { threwException = true; } assertTrue(threwException); } finally { client.close(); } } /** * Test ServerGraph.size() * * @throws Exception */ public void testSize() throws Exception { AnzoClient client = new AnzoClient(getDefaultClientConfiguration()); try { client.connect(); client.reset(loadStatements("initialize.trig"), null); final ClientGraph graph = client.getServerGraph(GRAPH_URI); client.updateRepository(); for (int i = 0; i < 10; i++) { Statement stmt = Constants.valueFactory.createStatement(createTestUri("" + Math.random()), createTestUri("predicate1"), createTestUri("" + Math.random())); graph.add(stmt); } assertEquals(10, graph.size()); client.updateRepository(); assertEquals(10, graph.size()); graph.clear(); assertEquals(0, graph.size()); assertTrue(graph.size() == 0); } finally { client.close(); } } }