RemoteRepositoryConfigTest.java
/*******************************************************************************
* Copyright (c) 2022 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.spring.repository.remote;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
import static org.mockserver.model.HttpRequest.request;
import static org.mockserver.model.HttpResponse.response;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import org.apache.commons.io.IOUtils;
import org.eclipse.rdf4j.repository.Repository;
import org.eclipse.rdf4j.spring.support.ConfigurationException;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockserver.client.MockServerClient;
import org.mockserver.junit.jupiter.MockServerExtension;
import org.mockserver.matchers.Times;
import org.mockserver.model.MediaType;
import org.mockserver.model.NottableString;
import org.mockserver.verify.VerificationTimes;
@ExtendWith(MockServerExtension.class)
class RemoteRepositoryConfigTest {
private final RemoteRepositoryConfig remoteRepositoryConfig = new RemoteRepositoryConfig();
@BeforeEach
void setUp(MockServerClient client) throws Exception {
client.when(
request()
.withMethod("GET")
.withPath("/repositories"),
Times.once()
)
.respond(
response()
.withContentType(MediaType.parse("application/sparql-results+json;charset=UTF-8"))
.withBody(readFileToString("repositories.srj"))
);
}
@Test
void getRemoteRepository(MockServerClient client) {
// Arrange
RemoteRepositoryProperties properties = new RemoteRepositoryProperties();
properties.setManagerUrl("http://localhost:" + client.getPort());
properties.setName("test-repo");
// Act
Repository repository = remoteRepositoryConfig.getRemoteRepository(properties);
// Assert
assertThat(repository).isNotNull();
client.verify(
request()
.withMethod("GET")
.withPath("/repositories")
.withHeader(NottableString.not("Authorization")),
VerificationTimes.once()
);
}
@Test
void getRemoteRepositoryWithUsernameAndPassword(MockServerClient client) {
// Arrange
RemoteRepositoryProperties properties = new RemoteRepositoryProperties();
properties.setManagerUrl("http://localhost:" + client.getPort());
properties.setName("test-repo");
properties.setUsername("admin");
properties.setPassword("1234");
// Act
Repository repository = remoteRepositoryConfig.getRemoteRepository(properties);
// Assert
assertThat(repository).isNotNull();
client.verify(
request()
.withMethod("GET")
.withPath("/repositories")
.withHeader("Authorization", "Basic YWRtaW46MTIzNA=="),
VerificationTimes.once()
);
}
@Test
void getRemoteRepository_error() {
// Arrange
RemoteRepositoryProperties properties = new RemoteRepositoryProperties();
properties.setManagerUrl("https://unknown-host:8888");
properties.setName("test-repo");
// Act & Assert
assertThatExceptionOfType(ConfigurationException.class)
.isThrownBy(() -> remoteRepositoryConfig.getRemoteRepository(properties));
}
private String readFileToString(String fileName) throws IOException {
return IOUtils.resourceToString("__files/" + fileName, StandardCharsets.UTF_8, getClass().getClassLoader());
}
}