FedXSPARQL11QueryComplianceTest.java

/*******************************************************************************
 * Copyright (c) 2020 Eclipse RDF4J contributors.
 *
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Distribution License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/org/documents/edl-v10.php.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 *******************************************************************************/
package org.eclipse.rdf4j.sail.federation;

import java.io.File;
import java.io.IOException;

import org.eclipse.rdf4j.federated.FedXFactory;
import org.eclipse.rdf4j.federated.repository.FedXRepository;
import org.eclipse.rdf4j.repository.Repository;
import org.eclipse.rdf4j.repository.RepositoryException;
import org.eclipse.rdf4j.repository.config.RepositoryConfig;
import org.eclipse.rdf4j.repository.config.RepositoryConfigException;
import org.eclipse.rdf4j.repository.config.RepositoryImplConfig;
import org.eclipse.rdf4j.repository.dataset.DatasetRepository;
import org.eclipse.rdf4j.repository.manager.RepositoryManager;
import org.eclipse.rdf4j.repository.manager.RepositoryProvider;
import org.eclipse.rdf4j.repository.sail.config.SailRepositoryConfig;
import org.eclipse.rdf4j.sail.memory.config.MemoryStoreConfig;
import org.eclipse.rdf4j.testsuite.query.parser.sparql.manifest.SPARQL11QueryComplianceTest;
import org.junit.jupiter.api.io.TempDir;

/**
 * @author jeen
 */
public class FedXSPARQL11QueryComplianceTest extends SPARQL11QueryComplianceTest {

	@TempDir
	public File tempFolder;

	private RepositoryManager manager;

	public FedXSPARQL11QueryComplianceTest() {
		super();

		// FIXME see https://github.com/eclipse/rdf4j/issues/2173
		addIgnoredTest("sq04 - Subquery within graph pattern, default graph does not apply");
	}

	private void initManager() {
		if (manager == null) {
			manager = RepositoryProvider.getRepositoryManager(tempFolder);
		}
	}

	@Override
	protected Repository newRepository() {
		initManager();

		addMemoryStore("repo1");
		addMemoryStore("repo2");
		FedXRepository repo = FedXFactory.newFederation()
				.withResolvableEndpoint("repo1", true)
				.withResolvableEndpoint("repo2")
				.withRepositoryResolver(manager)
				.create();

		// Use DatasetRepository to handle on-the-fly loading of local datasets, as specified in the test manifest
		return new DatasetRepository(repo);
	}

	private void addMemoryStore(String repoId) throws RepositoryConfigException, RepositoryException {
		RepositoryImplConfig implConfig = new SailRepositoryConfig(new MemoryStoreConfig());
		RepositoryConfig config = new RepositoryConfig(repoId, implConfig);
		manager.addRepositoryConfig(config);
	}
}