/*
* 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.marmotta.ldcache.services.test;
import org.apache.commons.lang3.StringUtils;
import org.apache.marmotta.kiwi.persistence.KiWiDialect;
import org.apache.marmotta.kiwi.persistence.h2.H2Dialect;
import org.apache.marmotta.kiwi.persistence.mysql.MySQLDialect;
import org.apache.marmotta.kiwi.persistence.pgsql.PostgreSQLDialect;
import org.apache.marmotta.kiwi.sail.KiWiStore;
import org.apache.marmotta.ldcache.api.LDCachingBackend;
import org.apache.marmotta.ldcache.backend.kiwi.LDCachingKiWiBackend;
import org.apache.marmotta.ldcache.services.test.ng.BaseLDCacheTest;
import org.junit.Assume;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.openrdf.repository.Repository;
import org.openrdf.repository.RepositoryException;
import org.openrdf.repository.sail.SailRepository;
import java.util.ArrayList;
import java.util.List;
/**
* This test checks if the ldcache main class works, i.e. the system properly stores cache entries and cached triples.
* It will try running over all available databases. Except for in-memory databases like
* H2 or Derby, database URLs must be passed as system property, or otherwise the test is skipped for this database.
* Available system properties:
* <ul>
* <li>PostgreSQL:
* <ul>
* <li>postgresql.url, e.g. jdbc:postgresql://localhost:5433/kiwitest?prepareThreshold=3</li>
* <li>postgresql.user (default: lmf)</li>
* <li>postgresql.pass (default: lmf)</li>
* </ul>
* </li>
* <li>MySQL:
* <ul>
* <li>mysql.url, e.g. jdbc:mysql://localhost:3306/kiwitest?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull</li>
* <li>mysql.user (default: lmf)</li>
* <li>mysql.pass (default: lmf</li>
* </ul>
* </li>
* <li>H2:
* <ul>
* <li>h2.url, e.g. jdbc:h2:mem;MVCC=true;DB_CLOSE_ON_EXIT=FALSE;DB_CLOSE_DELAY=10</li>
* <li>h2.user (default: lmf)</li>
* <li>h2.pass (default: lmf</li>
* </ul>
* </li>
* </ul>
*
* <p/>
* Author: Sebastian Schaffert
*/
@RunWith(Parameterized.class)
public class LDCacheKiWiTest extends BaseLDCacheTest {
public static final String CACHE_CONTEXT = "http://localhost/context/cache";
/**
* Return database configurations if the appropriate parameters have been set.
*
* @return an array (database name, url, user, password)
*/
@Parameterized.Parameters(name="Database Test {index}: {0} at {1}")
public static Iterable<Object[]> databases() {
String[] databases = {"H2", "PostgreSQL", "MySQL"};
List<Object[]> result = new ArrayList<Object[]>(databases.length);
for(String database : databases) {
if(System.getProperty(database.toLowerCase()+".url") != null) {
result.add(new Object[] {
database,
System.getProperty(database.toLowerCase()+".url"),
System.getProperty(database.toLowerCase()+".user","lmf"),
System.getProperty(database.toLowerCase()+".pass","lmf")
});
}
}
return result;
}
private KiWiDialect dialect;
private String jdbcUrl;
private String jdbcUser;
private String jdbcPass;
public LDCacheKiWiTest(String database, String jdbcUrl, String jdbcUser, String jdbcPass) {
this.jdbcPass = jdbcPass;
this.jdbcUrl = jdbcUrl;
this.jdbcUser = jdbcUser;
if("H2".equals(database)) {
this.dialect = new H2Dialect();
} else if("MySQL".equals(database)) {
this.dialect = new MySQLDialect();
} else if("PostgreSQL".equals(database)) {
this.dialect = new PostgreSQLDialect();
}
}
/**
* Needs to be implemented by tests to provide the correct backend. Backend needs to be properly initialised.
*
* @return
*/
@Override
protected LDCachingBackend createBackend() {
Assume.assumeNotNull(jdbcUrl);
Assume.assumeTrue(!StringUtils.isBlank(jdbcUrl));
try {
KiWiStore store = new KiWiStore("test",jdbcUrl,jdbcUser,jdbcPass,dialect, "http://localhost/context/default", "http://localhost/context/inferred");
final Repository repository = new SailRepository(store);
repository.initialize();
LDCachingKiWiBackend backend = new LDCachingKiWiBackend(repository, CACHE_CONTEXT) {
/**
* Shutdown the backend and free all runtime resources.
*/
@Override
public void shutdown() {
try {
persistence.dropDatabase();
store.getPersistence().dropDatabase();
super.shutdown();
repository.shutDown();
} catch (Exception e) { }
}
};
backend.initialize();
return backend;
} catch (RepositoryException e) {
throw new AssertionError(e);
}
}
@Override
@Test
@Ignore("does not work due to a bug in Sesame (SES-1993)")
public void testGeonames() throws Exception {
}
}