blob: 5590183af883ceac4d2204ded62ec83a337d5ad3 [file] [log] [blame]
margaretha92ad2ec2023-05-15 14:10:00 +02001package de.ids_mannheim.korap.web.lite;
margaretha4dee07a2022-05-27 11:45:28 +02002
Marc Kupietzd43a98d2023-09-22 17:11:46 +02003import static org.junit.jupiter.api.Assertions.assertEquals;
margaretha4dee07a2022-05-27 11:45:28 +02004import static org.mockserver.integration.ClientAndServer.startClientAndServer;
5import static org.mockserver.model.HttpRequest.request;
6import static org.mockserver.model.HttpResponse.response;
7
8import java.io.IOException;
9import java.net.URISyntaxException;
10import java.nio.charset.StandardCharsets;
11
12import org.apache.commons.io.IOUtils;
Marc Kupietzd43a98d2023-09-22 17:11:46 +020013import org.junit.jupiter.api.AfterEach;
14import org.junit.jupiter.api.BeforeEach;
15import org.junit.jupiter.api.Test;
margaretha4dee07a2022-05-27 11:45:28 +020016import org.mockserver.client.MockServerClient;
17import org.mockserver.integration.ClientAndServer;
18import org.mockserver.model.Header;
19import org.springframework.beans.factory.annotation.Autowired;
margaretha4dee07a2022-05-27 11:45:28 +020020import com.fasterxml.jackson.databind.JsonNode;
Marc Kupietzd43a98d2023-09-22 17:11:46 +020021
abcpro173fe8f22022-11-08 19:56:52 +000022import javax.ws.rs.core.Response;
23import javax.ws.rs.core.Response.Status;
margaretha4dee07a2022-05-27 11:45:28 +020024
25import de.ids_mannheim.korap.config.KustvaktConfiguration;
26import de.ids_mannheim.korap.config.LiteJerseyTest;
27import de.ids_mannheim.korap.exceptions.KustvaktException;
28import de.ids_mannheim.korap.exceptions.StatusCodes;
29import de.ids_mannheim.korap.utils.JsonUtils;
30
31public class SearchNetworkEndpointTest extends LiteJerseyTest {
32
33 @Autowired
34 private KustvaktConfiguration config;
35
36 private ClientAndServer mockServer;
Marc Kupietzd43a98d2023-09-22 17:11:46 +020037
margaretha4dee07a2022-05-27 11:45:28 +020038 private MockServerClient mockClient;
39
40 private int port = 6080;
margaretha4dee07a2022-05-27 11:45:28 +020041
Marc Kupietzd43a98d2023-09-22 17:11:46 +020042 private String searchResult;
43
44 private String endpointURL = "http://localhost:" + port + "/searchEndpoint";
45
46 public SearchNetworkEndpointTest() throws IOException {
47 searchResult = IOUtils.toString(ClassLoader.getSystemResourceAsStream("network-output/search-result.jsonld"), StandardCharsets.UTF_8);
margaretha4dee07a2022-05-27 11:45:28 +020048 }
49
Marc Kupietzd43a98d2023-09-22 17:11:46 +020050 @BeforeEach
51 public void startMockServer() {
margaretha4dee07a2022-05-27 11:45:28 +020052 mockServer = startClientAndServer(port);
53 mockClient = new MockServerClient("localhost", mockServer.getPort());
54 }
55
Marc Kupietzd43a98d2023-09-22 17:11:46 +020056 @AfterEach
57 public void stopMockServer() {
margaretha4dee07a2022-05-27 11:45:28 +020058 mockServer.stop();
59 }
60
margaretha4dee07a2022-05-27 11:45:28 +020061 @Test
Marc Kupietzd43a98d2023-09-22 17:11:46 +020062 public void testSearchNetwork() throws IOException, KustvaktException, URISyntaxException {
margaretha4dee07a2022-05-27 11:45:28 +020063 config.setNetworkEndpointURL(endpointURL);
Marc Kupietzd43a98d2023-09-22 17:11:46 +020064 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));
65 Response response = target().path(API_VERSION).path("search").queryParam("q", "[orth=der]").queryParam("ql", "poliqarp").queryParam("engine", "network").request().get();
66 assertEquals(Status.OK.getStatusCode(), response.getStatus());
abcpro173fe8f22022-11-08 19:56:52 +000067 String entity = response.readEntity(String.class);
margaretha4dee07a2022-05-27 11:45:28 +020068 JsonNode node = JsonUtils.readTree(entity);
margaretha4dee07a2022-05-27 11:45:28 +020069 assertEquals(2, node.at("/matches").size());
70 }
71
margaretha4dee07a2022-05-27 11:45:28 +020072 @Test
Marc Kupietzd43a98d2023-09-22 17:11:46 +020073 public void testSearchWithUnknownURL() throws IOException, KustvaktException {
margaretha4dee07a2022-05-27 11:45:28 +020074 config.setNetworkEndpointURL("http://localhost:1040/search");
Marc Kupietzd43a98d2023-09-22 17:11:46 +020075 Response response = target().path(API_VERSION).path("search").queryParam("q", "[orth=der]").queryParam("ql", "poliqarp").queryParam("engine", "network").request().get();
abcpro173fe8f22022-11-08 19:56:52 +000076 String entity = response.readEntity(String.class);
margaretha4dee07a2022-05-27 11:45:28 +020077 JsonNode node = JsonUtils.readTree(entity);
Marc Kupietzd43a98d2023-09-22 17:11:46 +020078 assertEquals(StatusCodes.SEARCH_NETWORK_ENDPOINT_FAILED, node.at("/errors/0/0").asInt());
79 assertEquals(Status.BAD_REQUEST.getStatusCode(), response.getStatus());
margaretha4dee07a2022-05-27 11:45:28 +020080 }
margaretha4dee07a2022-05-27 11:45:28 +020081
Marc Kupietzd43a98d2023-09-22 17:11:46 +020082 @Test
83 public void testSearchWithUnknownHost() throws KustvaktException {
84 config.setNetworkEndpointURL("http://search.com");
85 Response response = target().path(API_VERSION).path("search").queryParam("q", "[orth=der]").queryParam("ql", "poliqarp").queryParam("engine", "network").request().get();
abcpro173fe8f22022-11-08 19:56:52 +000086 String entity = response.readEntity(String.class);
margaretha4dee07a2022-05-27 11:45:28 +020087 JsonNode node = JsonUtils.readTree(entity);
Marc Kupietzd43a98d2023-09-22 17:11:46 +020088 assertEquals(StatusCodes.SEARCH_NETWORK_ENDPOINT_FAILED, node.at("/errors/0/0").asInt());
89 assertEquals(Status.BAD_REQUEST.getStatusCode(), response.getStatus());
margaretha4dee07a2022-05-27 11:45:28 +020090 }
91}