Package com.complexible.stardog.ext.spring

Source Code of com.complexible.stardog.ext.spring.TestDataSourceFactory

/*
* Copyright (c) the original authors
*
* Licensed 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 com.complexible.stardog.ext.spring;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;

import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.openrdf.model.Statement;
import org.openrdf.model.impl.LiteralImpl;
import org.openrdf.model.impl.StatementImpl;
import org.openrdf.model.impl.URIImpl;
import org.openrdf.query.BindingSet;
import org.openrdf.rio.RDFFormat;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.complexible.common.openrdf.model.Graphs;
import com.complexible.stardog.Contexts;
import com.complexible.stardog.StardogException;
import com.complexible.stardog.api.Adder;
import com.complexible.stardog.api.Connection;
import com.complexible.stardog.api.Remover;
import com.complexible.stardog.reasoning.api.ReasoningType;
import com.complexible.stardog.ext.spring.mapper.SimpleRowMapper;
import com.complexible.stardog.ext.spring.mapper.SingleMapper;


/**
* Test cases for the StardogConnectionFactoryBean
*
* Uses test-applicationContext in src/test/resources
*
* @author Clark and Parsia, LLC
* @author Al Baker
*
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"/test-applicationContext.xml"})
public class TestDataSourceFactory  {

  @Autowired
  DataSource dataSource;
 
  @Autowired
    private ApplicationContext applicationContext;

  @Autowired
  private SnarlTemplate snarlTemplate;
 
  private final ByteArrayOutputStream outContent = new ByteArrayOutputStream();
  private final ByteArrayOutputStream errContent = new ByteArrayOutputStream();



  @After
  public void cleanUpStreams() {
      System.setOut(null);
      System.setErr(null);
  }
 
  /**
   * TODO: perhaps not load 10k triples for each JUnit test
   * @throws java.lang.Exception
   */
  @Before
  public void setUp() throws Exception {
      System.setOut(new PrintStream(outContent));
      System.setErr(new PrintStream(errContent));
    SnarlTemplate tmp = new SnarlTemplate();
    tmp.setDataSource(dataSource);
    DataImporter importer = new DataImporter();
    importer.setSnarlTemplate(tmp);
    importer.inputFile(RDFFormat.N3, applicationContext.getResource("classpath:sp2b_10k.n3"));
   
  }

  /**
   * Test method for {@link com.complexible.stardog.ext.spring.DataSourceFactoryBean#getObject()}.
   *
   * Validate retrieving the application context directly and the injected dataSource test
   * fixture are both equivalent - i.e. singletons
   *
   */
  @Test
  public void testGetObjectSingleton() {
    assertNotNull(dataSource);
    DataSource newSource = (DataSource) applicationContext.getBean("dataSource");
    assertEquals(dataSource, newSource);
  }

  /**
   * Test method for validating connection configured correctly
   */
  @Test
  public void testBasicSnarl() {
    Connection con = dataSource.getConnection();
    assertNotNull(con);
  }
 
  @Test
  public void testSnarlTemplate() {
    SnarlTemplate tmp = new SnarlTemplate();
    tmp.setDataSource(dataSource);
    String sparql = "SELECT ?a ?b WHERE { ?a  <http://purl.org/dc/elements/1.1/title> ?b } LIMIT 5";
   
    List<Map<String,String>> results = tmp.query(sparql, new RowMapper<Map<String,String>>() {

      @Override
      public Map<String,String> mapRow(BindingSet bindingSet) {
        Map<String,String> map = new HashMap<String,String>();
        map.put("a", bindingSet.getValue("a").stringValue());
        map.put("b", bindingSet.getValue("b").stringValue());
        return map;
      }
     
    });
   
    assertNotNull(results);
    assertEquals(results.size(), 5);
  }

  @Test
  public void testSimpleRowMapper() {
    SnarlTemplate tmp = new SnarlTemplate();
    tmp.setDataSource(dataSource);
    String sparql = "SELECT ?a ?b WHERE { ?a  <http://purl.org/dc/elements/1.1/title> ?b } LIMIT 5";
   
    List<Map<String,String>> results = tmp.query(sparql, new SimpleRowMapper());
   
    assertNotNull(results);
    assertEquals(results.size(), 5);
  }
 
   
  @Test
  public void testSingleMapper() {
    SnarlTemplate tmp = new SnarlTemplate();
    tmp.setDataSource(dataSource);
    String sparql = "SELECT ?b WHERE { ?a  <http://purl.org/dc/elements/1.1/title> ?b } LIMIT 1";
   
    String result = tmp.queryForObject(sparql, new SingleMapper("b"));
   
    assertNotNull(result);
  }
 
  @Test
  public void testNullSingleMapper() {
    SnarlTemplate tmp = new SnarlTemplate();
    tmp.setDataSource(dataSource);
    String sparql = "SELECT ?b WHERE { ?a  <http://purl.org/dc/elements/1.1/title> ?b } LIMIT 1";
    // unlike previous test, a is not bound, therefore should find null in Sesame API
    String result = tmp.queryForObject(sparql, new SingleMapper("a"));
   
    assertNull(result);
  }
 
  @Test
  public void testRemoveGraph() {
    SnarlTemplate tmp = new SnarlTemplate();
    tmp.setDataSource(dataSource);
   
    // Test remove of named graph
    tmp.add(Graphs.newGraph(new StatementImpl(
        new URIImpl("urn:test:a"),
        new URIImpl("urn:test:b"),
        new LiteralImpl("hello world"))), "http://example.org/aGraph");
   
    String sparql = "SELECT ?a WHERE { GRAPH <http://example.org/aGraph> { ?a ?b ?c } }";
    List<Map<String,String>> results = tmp.query(sparql, new RowMapper<Map<String,String>>() {

      @Override
      public Map<String,String> mapRow(BindingSet bindingSet) {
        Map<String,String> map = new HashMap<String,String>();
        map.put("a", bindingSet.getValue("a").stringValue());
        return map;
      }
     
    });
    assertEquals(results.size(), 1);

    tmp.remove("http://example.org/aGraph");

    sparql = "SELECT ?a WHERE { GRAPH <http://example.org/aGraph> { ?a ?b ?c } }";
    results = tmp.query(sparql, new RowMapper<Map<String,String>>() {

      @Override
      public Map<String,String> mapRow(BindingSet bindingSet) {
        Map<String,String> map = new HashMap<String,String>();
        map.put("a", bindingSet.getValue("a").stringValue());
        return map;
      }
     
    });
    assertEquals(results.size(), 0);
   
    // Test remove of default graph
    sparql = "SELECT ?a WHERE { ?a ?b ?c } LIMIT 5";
    results = tmp.query(sparql, new RowMapper<Map<String,String>>() {

      @Override
      public Map<String,String> mapRow(BindingSet bindingSet) {
        Map<String,String> map = new HashMap<String,String>();
        map.put("a", bindingSet.getValue("a").stringValue());
        return map;
      }
     
    });
    assertEquals(results.size(), 5);
   
    tmp.remove(Contexts.DEFAULT.toString());
   
    sparql = "SELECT ?a WHERE { ?a ?b ?c } LIMIT 5";
    results = tmp.query(sparql, new RowMapper<Map<String,String>>() {

      @Override
      public Map<String,String> mapRow(BindingSet bindingSet) {
        Map<String,String> map = new HashMap<String,String>();
        map.put("a", bindingSet.getValue("a").stringValue());
        return map;
      }
     
    });
    assertEquals(results.size(), 0);
  }
 
  @Test
  public void testQueryForObject() throws URISyntaxException {
    SnarlTemplate tmp = new SnarlTemplate();
    tmp.setDataSource(dataSource);
   
    String uriA = "urn:test:a";
    String uriB = "urn:test:b";
    String litA = "hello world";

    tmp.add(uriA, uriB, litA);
 
    String sparql = "SELECT ?a ?b WHERE { ?a  <urn:test:b> ?b }";
   
    Map<String, String> result = tmp.queryForObject(sparql, new RowMapper<Map<String, String>>() {

      @Override
      public Map<String, String> mapRow(BindingSet bindingSet) {
        Map<String,String> map = new HashMap<String,String>();
        map.put("a", bindingSet.getValue("a").stringValue());
        map.put("b", bindingSet.getValue("b").stringValue());
        return map;
      }
     
    });
    assertNotNull(result);
    assertEquals(result.size(), 2);
    assertTrue(result.get("a").equals(uriA));
    assertTrue(result.get("b").equals(litA));
    
  }
 
  @Test
  public void testQueryWithParams() throws URISyntaxException {
   
    SnarlTemplate tmp = new SnarlTemplate();
    tmp.setDataSource(dataSource);
    String sparql = "SELECT ?a ?b WHERE { ?a ?c ?b } LIMIT 5";
   
    Map<String, Object> params = new HashMap<String, Object>() {{
      put("c", new URIImpl("http://purl.org/dc/elements/1.1/title"));
    }};
   
    List<Map<String,String>> results = tmp.query(sparql, params, new RowMapper<Map<String,String>>() {

      @Override
      public Map<String,String> mapRow(BindingSet bindingSet) {
        Map<String,String> map = new HashMap<String,String>();
        map.put("a", bindingSet.getValue("a").stringValue());
        map.put("b", bindingSet.getValue("b").stringValue());
        return map;
      }
     
    });
   
    assertNotNull(results);
    assertEquals(results.size(), 5);
  }
 
  @Test
  public void testLegacyQueryWithParams() throws URISyntaxException {
   
    SnarlTemplate tmp = new SnarlTemplate();
    tmp.setDataSource(dataSource);
    String sparql = "SELECT ?a ?b WHERE { ?a ?c ?b } LIMIT 5";
   
    Map<String, Object> params = new HashMap<String, Object>() {{
      put("c", new URIImpl("http://purl.org/dc/elements/1.1/title"));
    }};
   
    List<Map<String,String>> results = tmp.query(sparql, params, new RowMapper<Map<String,String>>() {

      @Override
      public Map<String,String> mapRow(BindingSet bindingSet) {
        Map<String,String> map = new HashMap<String,String>();
        map.put("a", bindingSet.getValue("a").stringValue());
        map.put("b", bindingSet.getValue("b").stringValue());
        return map;
      }
     
    });
   
    assertNotNull(results);
    assertEquals(results.size(), 5);
  }
 
  @Test
  public void testQueryForObjectWithParams() throws URISyntaxException {
    SnarlTemplate tmp = new SnarlTemplate();
    tmp.setDataSource(dataSource);
   
    String uriA = "urn:test:a";
    String uriB = "urn:test:b";
    String litA = "hello world";

    tmp.add(uriA, uriB, litA);
 
    String sparql = "SELECT ?a ?b WHERE { ?a ?c ?b }";
    Map<String, Object> params = new HashMap<String, Object>() {{
      put("c", new URIImpl("urn:test:b"));
    }};
    Map<String, String> result = tmp.queryForObject(sparql, params, new RowMapper<Map<String, String>>() {

      @Override
      public Map<String, String> mapRow(BindingSet bindingSet) {
        Map<String,String> map = new HashMap<String,String>();
        map.put("a", bindingSet.getValue("a").stringValue());
        map.put("b", bindingSet.getValue("b").stringValue());
        return map;
      }
     
    });
    assertNotNull(result);
    assertEquals(result.size(), 2);
    assertTrue(result.get("a").equals(uriA));
    assertTrue(result.get("b").equals(litA));
    
  }
 
 
  @Test
  public void testUpdateWithParams() {
   
    SnarlTemplate tmp = new SnarlTemplate();
    tmp.setDataSource(dataSource);
   
    final String uriA1 = "urn:testUpdate:a1";
    final String uriB = "urn:testUpdate:b";
    final String litC1 = "aloha world";
    tmp.add(uriA1, uriB, litC1);
   
    final String uriA2 = "urn:testUpdate:a2";
    final String litC2 = "aloha world";
    tmp.add(uriA2, uriB, litC2);
   
    String sparql = "DELETE { ?a ?b \"aloha world\" } INSERT { ?a ?b \"shalom world\" } WHERE { ?a ?b \"aloha world\" }";
   
    Map<String, Object> params = new HashMap<String, Object>() {{
      put("b", new URIImpl(uriB));
    }};
   
    tmp.update(sparql, params);
   
    sparql = "SELECT ?a WHERE { ?a ?b \"shalom world\" }";

    List<Map<String, String>> results = tmp.query(sparql, params, new RowMapper<Map<String, String>>() {

      @Override
      public Map<String, String> mapRow(BindingSet bindingSet) {
        Map<String,String> map = new HashMap<String,String>();
        map.put("a", bindingSet.getValue("a").stringValue());
        return map;
      }
    });
   
    assertNotNull(results);
    assertEquals(results.size(), 2);
   
    List<String> resultList = new ArrayList<String>();
    for (Map<String, String> m : results) {
      resultList.add(m.get("a"));
    }
   
    assertTrue(resultList.contains(uriA1));
    assertTrue(resultList.contains(uriA2));
  }
 
  @Test
  public void testAsk() {
   
    SnarlTemplate tmp = new SnarlTemplate();
    tmp.setDataSource(dataSource);
   
    final String uriA1 = "urn:testAsk:a1";
    final String uriB = "urn:testAsk:b";
    final String litC1 = "hello world";
    tmp.add(uriA1, uriB, litC1);
   
    final String uriA2 = "urn:testAsk:a2";
    final String litC2 = "aloha world";
    tmp.add(uriA2, uriB, litC2);
   
    String sparql = "ASK { ?a ?b \"aloha world\" }";
   
    Map<String, Object> params = new HashMap<String, Object>() {{
      put("b", new URIImpl(uriB));
    }};
   
    boolean result = tmp.ask(sparql, params);
   
    assert(result);
   
    sparql = "ASK { ?a <urn:testAsk:b> ?c }";
   
    result = tmp.ask(sparql);

    assert(result);
   
    sparql = "ASK { ?a <urn:testAsk:c> ?c }";
   
    result = tmp.ask(sparql);

    assert(!result);
  }
 
  @Test
  public void testAdd() throws URISyntaxException {
    String uriA = "urn:test:a";
    String uriB = "urn:test:b";
    String uriC = "urn:test:c";
    String litA = "hello world";
   
    URI a = new URI(uriA);
    URI b = new URI(uriB);
    URI c = new URI(uriC);
   
    snarlTemplate.add(uriA, uriB, litA);
    snarlTemplate.add(uriA, uriB, litA);
    snarlTemplate.add(a,b,c);
   
    String sparql = "SELECT ?a ?b WHERE { ?a  <urn:test:b> ?b } LIMIT 5";
   
    List<Map<String,String>> results = snarlTemplate.query(sparql, new RowMapper<Map<String,String>>() {

      @Override
      public Map<String,String> mapRow(BindingSet bindingSet) {
        Map<String,String> map = new HashMap<String,String>();
        map.put("a", bindingSet.getValue("a").stringValue());
        map.put("b", bindingSet.getValue("b").stringValue());
        return map;
      }
     
    });
   
    assertEquals(results.size(), 2);
   
  }
 
  @Test
  public void testDoWithGetter() {
    String uriA = "urn:test:x";
    String uriB = "urn:test:y";
    String uriC = "urn:test:z";
    String litA = "hello world";
   
   
    snarlTemplate.add(uriA, uriB, litA);
    snarlTemplate.add(uriC, uriB, litA);
   
    List<String> results = snarlTemplate.doWithGetter(uriA, null, new GetterCallback<String>() {
      @Override
      public String processStatement(Statement statement) {
        return statement.getObject().stringValue();
      }
    });
   
    assertEquals(results.size(), 1);
   
    List<String> results2 = snarlTemplate.doWithGetter(null, uriB, new GetterCallback<String>() {
      @Override
      public String processStatement(Statement statement) {
        return statement.getObject().stringValue();
      }
    });
   
    assertEquals(results2.size(), 2);   
   
  }

  @Test
  public void testRemoveStatement() {
    String uriA = "urn:test:g";
    String uriB = "urn:test:h";
    String uriC = "urn:test:i";
    String litA = "hello world";
    snarlTemplate.add(uriA, uriB, litA);
    snarlTemplate.add(uriC, uriB, litA);
   
    snarlTemplate.remove(uriA, uriB, litA, null);
   
    List<String> results2 = snarlTemplate.doWithGetter(null, uriB, new GetterCallback<String>() {
      @Override
      public String processStatement(Statement statement) {
        return statement.getObject().stringValue();
      }
    });
   
    assertEquals(results2.size(), 1);   
   
    snarlTemplate.remove(null, uriB, null, null);
   
    List<String> results = snarlTemplate.doWithGetter(null, uriB, new GetterCallback<String>() {
      @Override
      public String processStatement(Statement statement) {
        return statement.getObject().stringValue();
      }
    });
   
    assertEquals(results.size(), 0)
   
  }
 
  @Test
  public void testSingleton() {
    String uriA = "urn:test:j";
    String uriB = "urn:test:k";
    String litA = "hello world";
    String litB = "a singleton";
    snarlTemplate.add(uriA, uriB, litA);
    snarlTemplate.singleton(uriA, uriB, litB, null);
   
    List<String> results = snarlTemplate.doWithGetter(null, uriB, new GetterCallback<String>() {
      @Override
      public String processStatement(Statement statement) {
        return statement.getObject().stringValue();
      }
    });
   
    assertEquals(results.size(), 1)
    assertEquals(results.get(0), "a singleton");
  }
 
  @Test
  public void testDoWithAdder() {
   
    snarlTemplate.doWithAdder(new AdderCallback<Boolean>() {
      @Override
      public Boolean add(Adder adder) throws StardogException {
        String uriA = "urn:test:t";
        String uriB = "urn:test:u";
        String litA = "hello world";
        String litB = "goodbye";
       
        adder.statement(new URIImpl(uriA), new URIImpl(uriB), new LiteralImpl(litA));
        adder.statement(new URIImpl(uriA), new URIImpl(uriB), new LiteralImpl(litB));
        return true;
      }    
    });
   
    List<String> results = snarlTemplate.doWithGetter(null, "urn:test:u", new GetterCallback<String>() {
      @Override
      public String processStatement(Statement statement) {
        return statement.getObject().stringValue();
      }
    });
   
    assertEquals(results.size(), 2)
   
  }
 
  @Test
  public void testDoWithRemover() {
    String uriA = "urn:test:m";
    String uriB = "urn:test:n";
    String litA = "hello world";
    snarlTemplate.add(uriA, uriB, litA);
   
    snarlTemplate.doWithRemover(new RemoverCallback<Boolean>() {
      @Override
      public Boolean remove(Remover remover) throws StardogException {
        remover.statements(new URIImpl("urn:test:m"), new URIImpl("urn:test:n"), null);
        return true;
      }
    });
   
    List<String> results = snarlTemplate.doWithGetter(null, "urn:test:n", new GetterCallback<String>() {
      @Override
      public String processStatement(Statement statement) {
        return statement.getObject().stringValue();
      }
    });
   
    assertEquals(results.size(), 0)
   
  }
 
  @Test
  public void testConstruct() {
    String uriA = "urn:test:o";
    String uriB = "urn:test:p";
    String litA = "hello world";
    snarlTemplate.add(uriA, uriB, litA);
   
    String sparql = "CONSTRUCT { ?a <urn:test:new> ?b } WHERE { ?a <urn:test:p> ?b }";
    List<Map<String,String>>  results = snarlTemplate.construct(sparql, new GraphMapper<Map<String,String>>() {
      @Override
      public Map<String, String> mapRow(Statement next) {
        Map<String,String> map = new HashMap<String,String>()
        map.put(next.getSubject().stringValue(), next.getObject().stringValue());
        return map;
      }
    });
   
    assertEquals(results.size(), 1);
   
  }
 
  @Test
  public void testSnarlGetDataSource() {
    DataSource ds = snarlTemplate.getDataSource();
    assertNotNull(ds);
  }

  @Test
  public void testAddUriUriString() {
    try {
      URI a = new URI("urn:test:s");
      URI b = new URI("urn:test:t");
      String c = "Hello World";
      snarlTemplate.add(a, b, c);
     
      String sparql = "SELECT ?a ?c WHERE { ?a  <urn:test:t> ?b } LIMIT 1";
     
      List<Map<String,String>> results = snarlTemplate.query(sparql, new SimpleRowMapper());
     
      assertNotNull(results);
      assertEquals(results.size(), 1);
     
    } catch (Exception e) {
      fail("Caught exception");
    }
  }
 
  @Test
  public void testLifecycle() {
    // run through the getter/setters
    DataSourceFactoryBean dfb = new DataSourceFactoryBean();
    dfb.setBlockCapacityTime(0L);
    dfb.setExpirationTime(0L);
    dfb.setFailAtCapacity(true);
    dfb.setMaxIdle(100);
    dfb.setGrowAtCapacity(true);
    dfb.setNoExpiration(false);
    dfb.setMaxPool(1);
    dfb.setMinPool(1);
    dfb.setPassword("test");
    dfb.setUsername("test");
    dfb.setUrl("http://test.com");
    dfb.setReasoningType(ReasoningType.NONE);
    dfb.setTo("testdb");
   
    dfb.getUsername();
    dfb.getBlockCapacityTime();
    dfb.getExpirationTime();
    dfb.isFailAtCapacity();
    dfb.getMaxIdle();
    dfb.isGrowAtCapacity();
    dfb.isNoExpiration();
    dfb.getMaxPool();
    dfb.getMinPool();
    dfb.getPassword();
    dfb.getUsername();
    dfb.getUrl();
    assertEquals(dfb.getReasoningType(), ReasoningType.NONE);
    dfb.getTo();
    dfb.getUsername();
   
    DataSource ds = new DataSource();
    dataSource.destroy();
  }
 
}
TOP

Related Classes of com.complexible.stardog.ext.spring.TestDataSourceFactory

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.