blob: ef42760d47628cb223ecbede4e247f8167137e7a [file] [log] [blame]
package de.ids_mannheim.korap.web.controller;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockserver.integration.ClientAndServer.startClientAndServer;
import static org.mockserver.model.HttpRequest.request;
import static org.mockserver.model.HttpResponse.response;
import java.io.IOException;
import java.net.URISyntaxException;
import java.nio.charset.StandardCharsets;
import jakarta.ws.rs.core.Response.Status;
import org.apache.commons.io.IOUtils;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockserver.client.MockServerClient;
import org.mockserver.integration.ClientAndServer;
import org.mockserver.model.Header;
import org.springframework.beans.factory.annotation.Autowired;
import com.fasterxml.jackson.databind.JsonNode;
import jakarta.ws.rs.core.Response;
import de.ids_mannheim.korap.config.KustvaktConfiguration;
import de.ids_mannheim.korap.config.SpringJerseyTest;
import de.ids_mannheim.korap.exceptions.KustvaktException;
import de.ids_mannheim.korap.exceptions.StatusCodes;
import de.ids_mannheim.korap.utils.JsonUtils;
public class SearchNetworkEndpointTest extends SpringJerseyTest {
@Autowired
private KustvaktConfiguration config;
private ClientAndServer mockServer;
private MockServerClient mockClient;
private int port = 6081;
private String searchResult;
private String endpointURL = "http://localhost:" + port + "/searchEndpoint";
public SearchNetworkEndpointTest () throws IOException {
searchResult = IOUtils.toString(
ClassLoader.getSystemResourceAsStream(
"network-output/search-result.jsonld"),
StandardCharsets.UTF_8);
}
@BeforeEach
public void startMockServer () {
mockServer = startClientAndServer(port);
mockClient = new MockServerClient("localhost", mockServer.getPort());
}
@AfterEach
public void stopMockServer () {
mockServer.stop();
}
@Test
public void testSearchNetwork ()
throws IOException, KustvaktException, URISyntaxException {
config.setNetworkEndpointURL(endpointURL);
mockClient.reset()
.when(request().withMethod("POST").withPath("/searchEndpoint")
.withHeaders(
new Header("Content-Type",
"application/json; charset=utf-8"),
new Header("Accept", "application/json")))
.respond(response()
.withHeader(new Header("Content-Type",
"application/json; charset=utf-8"))
.withBody(searchResult).withStatusCode(200));
Response response = target().path(API_VERSION).path("search")
.queryParam("q", "[orth=der]").queryParam("ql", "poliqarp")
.queryParam("engine", "network").request().get();
assertEquals(Status.OK.getStatusCode(), response.getStatus());
String entity = response.readEntity(String.class);
JsonNode node = JsonUtils.readTree(entity);
assertEquals(2, node.at("/matches").size());
}
@Test
public void testSearchWithUnknownURL ()
throws IOException, KustvaktException {
config.setNetworkEndpointURL("http://localhost:1040/search");
Response response = target().path(API_VERSION).path("search")
.queryParam("q", "[orth=der]").queryParam("ql", "poliqarp")
.queryParam("engine", "network").request().get();
String entity = response.readEntity(String.class);
JsonNode node = JsonUtils.readTree(entity);
assertEquals(StatusCodes.SEARCH_NETWORK_ENDPOINT_FAILED,
node.at("/errors/0/0").asInt());
assertEquals(Status.BAD_REQUEST.getStatusCode(), response.getStatus());
}
@Test
public void testSearchWithUnknownHost () throws KustvaktException {
config.setNetworkEndpointURL("http://search.com");
Response response = target().path(API_VERSION).path("search")
.queryParam("q", "[orth=der]").queryParam("ql", "poliqarp")
.queryParam("engine", "network").request().get();
String entity = response.readEntity(String.class);
JsonNode node = JsonUtils.readTree(entity);
assertEquals(StatusCodes.SEARCH_NETWORK_ENDPOINT_FAILED,
node.at("/errors/0/0").asInt());
assertEquals(Status.BAD_REQUEST.getStatusCode(), response.getStatus());
}
}