Skip to content

Commit

Permalink
Merge pull request #187 from kbss-cvut/add-test-to-Rdf4jDeployModule
Browse files Browse the repository at this point in the history
[Upd] Add new test for Rdf4jDeployModule
  • Loading branch information
blcham authored Aug 16, 2023
2 parents 36ffe69 + 2eba02c commit b18620a
Show file tree
Hide file tree
Showing 2 changed files with 84 additions and 29 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import cz.cvut.spipes.constants.KBSS_MODULE;
import cz.cvut.spipes.engine.ExecutionContext;
import cz.cvut.spipes.engine.ExecutionContextFactory;
import cz.cvut.spipes.exception.ModuleConfigurationInconsistentException;
import cz.cvut.spipes.util.CoreConfigProperies;
import org.apache.jena.rdf.model.Property;
import org.apache.jena.rdf.model.ResourceFactory;
Expand Down Expand Up @@ -65,6 +66,12 @@ private static Property getParameter(final String name) {

static final Property P_RDF4J_REPOSITORY_USERNAME = getParameter("p-rdf4j-secured-username-variable");
private String rdf4jSecuredUsernameVariable;
private RepositoryManager repositoryManager;
private Repository repository;

public void setRepositoryManager(RepositoryManager repositoryManager) {
this.repositoryManager = repositoryManager;
}

static final Property P_RDF4J_REPOSITORY_PASSWORD = getParameter("p-rdf4j-secured-password-variable");
private String rdf4jSecuredPasswordVariable;
Expand Down Expand Up @@ -109,24 +116,13 @@ public void setReplaceContext(boolean replaceContext) {

@Override
ExecutionContext executeSelf() {
RepositoryConnection connection = null;
Repository repository = null;
LOG.debug("Deploying data into {} of rdf4j server repository {}/{}.",
isRdf4jContextIRIDefined() ? "context " + rdf4jContextIRI : "default context",
rdf4jServerURL,
rdf4jRepositoryName);
String username = getConfigurationVariable(rdf4jSecuredUsernameVariable);
String password = getConfigurationVariable(rdf4jSecuredPasswordVariable);

RepositoryConnection connection = null;
try {
RepositoryManager repositoryManager = RepositoryProvider.getRepositoryManager(rdf4jServerURL);

if (username != null && password != null) {
RemoteRepositoryManager remoteRepositoryManager = (RemoteRepositoryManager) repositoryManager;
remoteRepositoryManager.setUsernameAndPassword(username, password);
}

repository = repositoryManager.getRepository(rdf4jRepositoryName);
if (repository == null) {
LOG.info("Creating new repository {} within rdf4j server {} ...",
rdf4jServerURL, rdf4jRepositoryName);
Expand Down Expand Up @@ -194,6 +190,18 @@ public void loadConfiguration() {
rdf4jSecuredPasswordVariable = Optional.ofNullable(
getEffectiveValue(P_RDF4J_REPOSITORY_PASSWORD)).map(n -> n.asLiteral().getString()
).orElse(null);
if (repositoryManager != null && rdf4jServerURL != null) {
throw new ModuleConfigurationInconsistentException(
"Repository manager is already initialized. Trying to override its configuration from RDF.");
}
repositoryManager = RepositoryProvider.getRepositoryManager(rdf4jServerURL);
String username = getConfigurationVariable(rdf4jSecuredUsernameVariable);
String password = getConfigurationVariable(rdf4jSecuredPasswordVariable);
if (username != null && password != null) {
RemoteRepositoryManager remoteRepositoryManager = (RemoteRepositoryManager) repositoryManager;
remoteRepositoryManager.setUsernameAndPassword(username, password);
}
repository = repositoryManager.getRepository(rdf4jRepositoryName);
}
private static @Nullable String getConfigurationVariable(String variableName) {
if (variableName == null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,35 +7,82 @@
import org.apache.jena.rdf.model.Property;
import org.apache.jena.rdf.model.Resource;
import org.apache.jena.rdf.model.ResourceFactory;
import org.eclipse.rdf4j.model.ValueFactory;
import org.eclipse.rdf4j.model.impl.SimpleValueFactory;
import org.eclipse.rdf4j.repository.Repository;
import org.eclipse.rdf4j.repository.RepositoryConnection;
import org.eclipse.rdf4j.repository.manager.RepositoryManager;
import org.eclipse.rdf4j.rio.RDFFormat;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;

//import info.aduna.webapp.util.HttpServerUtil;
import java.io.IOException;
import java.io.StringReader;

import static org.mockito.ArgumentMatchers.*;
import static org.mockito.BDDMockito.given;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;


@ExtendWith(MockitoExtension.class)
public class Rdf4jDeployModuleTest {

@Mock
RepositoryManager repositoryManager;
@Mock
Repository repository;
@Mock
RepositoryConnection connection;

@Test
@Disabled
public void testDeployEmpty() throws Exception {
void executeSelfWithNoRdf4jContextDeploysToDefaultContext() throws IOException {
given(repositoryManager.getRepository(any())).willReturn(repository);
given(repository.getConnection()).willReturn(connection);

final ExecutionContext inputExecutionContext = ExecutionContextFactory.createEmptyContext();
final Rdf4jDeployModule moduleRdf4j = new Rdf4jDeployModule();
moduleRdf4j.setInputContext(inputExecutionContext);
moduleRdf4j.setRepositoryManager(repositoryManager);

final Model deployModel = ModelFactory.createDefaultModel();
final Property resource = ResourceFactory.createProperty("http://a");
deployModel.add(resource, resource, resource);
moduleRdf4j.executeSelf();

final ExecutionContext executionContext = ExecutionContextFactory.createContext(deployModel);
verify(repositoryManager,times(0)).getRepository(anyString());
verify(connection,times(1)).begin();
verify(connection,times(1)).commit();
verify(connection).add(any(StringReader.class),eq(""),eq(RDFFormat.N3),eq(null));
}

final Model model = ModelFactory.createDefaultModel();
final Resource root = model.createResource();
model.add(root, Rdf4jDeployModule.P_IS_REPLACE_CONTEXT_IRI, model.createTypedLiteral(true));
model.add(root, Rdf4jDeployModule.P_RDF4J_SERVER_URL, "http://localhost:18080/rdf4j-server");
model.add(root, Rdf4jDeployModule.P_RDF4J_REPOSITORY_NAME, "test-s-pipes");
model.add(root, Rdf4jDeployModule.P_RDF4J_CONTEXT_IRI, "");
@Mock
ValueFactory valueFactory;

@Test
void executeSelfWithRdf4jContextDeploysToContext() throws IOException {
given(repositoryManager.getRepository(any())).willReturn(repository);
given(repository.getConnection()).willReturn(connection);

final ExecutionContext inputExecutionContext = ExecutionContextFactory.createEmptyContext();
final Rdf4jDeployModule moduleRdf4j = new Rdf4jDeployModule();
moduleRdf4j.setInputContext(inputExecutionContext);
moduleRdf4j.setRepositoryManager(repositoryManager);
String rdf4jContext = "http://example.org";
given(connection.getValueFactory()).willReturn(valueFactory);
given(connection.getValueFactory().createIRI(rdf4jContext)).willReturn(SimpleValueFactory.getInstance().createIRI(rdf4jContext));
moduleRdf4j.setRdf4jContextIRI(rdf4jContext);

moduleRdf4j.setConfigurationResource(root);
moduleRdf4j.executeSelf();

// TODO: currently running server is needed;
moduleRdf4j.setInputContext(executionContext);
moduleRdf4j.execute();
verify(repositoryManager,times(0)).getRepository(anyString());
verify(connection,times(1)).begin();
verify(connection,times(1)).commit();
verify(connection).add(
any(StringReader.class),
eq(""),
eq(RDFFormat.N3),
eq(SimpleValueFactory.getInstance().createIRI(rdf4jContext))
);
}
}

0 comments on commit b18620a

Please sign in to comment.