blob: 81c2430ad68506622cc2b6251a0c7e7ef8b18b9e [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;
margaretha96c309d2023-08-16 12:24:12 +020021import jakarta.ws.rs.core.Response;
22import jakarta.ws.rs.core.Response.Status;
margaretha4dee07a2022-05-27 11:45:28 +020023
24import de.ids_mannheim.korap.config.KustvaktConfiguration;
25import de.ids_mannheim.korap.config.LiteJerseyTest;
26import de.ids_mannheim.korap.exceptions.KustvaktException;
27import de.ids_mannheim.korap.exceptions.StatusCodes;
28import de.ids_mannheim.korap.utils.JsonUtils;
29
30public class SearchNetworkEndpointTest extends LiteJerseyTest {
31
32 @Autowired
33 private KustvaktConfiguration config;
34
35 private ClientAndServer mockServer;
Marc Kupietzd43a98d2023-09-22 17:11:46 +020036
margaretha4dee07a2022-05-27 11:45:28 +020037 private MockServerClient mockClient;
38
39 private int port = 6080;
margaretha4dee07a2022-05-27 11:45:28 +020040
Marc Kupietzd43a98d2023-09-22 17:11:46 +020041 private String searchResult;
42
43 private String endpointURL = "http://localhost:" + port + "/searchEndpoint";
44
margaretha35e1ca22023-11-16 22:00:01 +010045 public SearchNetworkEndpointTest () throws IOException {
46 searchResult = IOUtils.toString(
47 ClassLoader.getSystemResourceAsStream(
48 "network-output/search-result.jsonld"),
49 StandardCharsets.UTF_8);
margaretha4dee07a2022-05-27 11:45:28 +020050 }
51
Marc Kupietzd43a98d2023-09-22 17:11:46 +020052 @BeforeEach
margaretha35e1ca22023-11-16 22:00:01 +010053 public void startMockServer () {
margaretha4dee07a2022-05-27 11:45:28 +020054 mockServer = startClientAndServer(port);
55 mockClient = new MockServerClient("localhost", mockServer.getPort());
56 }
57
Marc Kupietzd43a98d2023-09-22 17:11:46 +020058 @AfterEach
margaretha35e1ca22023-11-16 22:00:01 +010059 public void stopMockServer () {
margaretha4dee07a2022-05-27 11:45:28 +020060 mockServer.stop();
61 }
62
margaretha4dee07a2022-05-27 11:45:28 +020063 @Test
margaretha35e1ca22023-11-16 22:00:01 +010064 public void testSearchNetwork ()
65 throws IOException, KustvaktException, URISyntaxException {
margaretha4dee07a2022-05-27 11:45:28 +020066 config.setNetworkEndpointURL(endpointURL);
margaretha35e1ca22023-11-16 22:00:01 +010067 mockClient.reset()
68 .when(request().withMethod("POST").withPath("/searchEndpoint")
69 .withHeaders(
70 new Header("Content-Type",
71 "application/json; charset=utf-8"),
72 new Header("Accept", "application/json")))
73 .respond(response()
74 .withHeader(new Header("Content-Type",
75 "application/json; charset=utf-8"))
76 .withBody(searchResult).withStatusCode(200));
77 Response response = target().path(API_VERSION).path("search")
78 .queryParam("q", "[orth=der]").queryParam("ql", "poliqarp")
79 .queryParam("engine", "network").request().get();
Marc Kupietzd43a98d2023-09-22 17:11:46 +020080 assertEquals(Status.OK.getStatusCode(), response.getStatus());
abcpro173fe8f22022-11-08 19:56:52 +000081 String entity = response.readEntity(String.class);
margaretha4dee07a2022-05-27 11:45:28 +020082 JsonNode node = JsonUtils.readTree(entity);
margaretha4dee07a2022-05-27 11:45:28 +020083 assertEquals(2, node.at("/matches").size());
84 }
85
margaretha4dee07a2022-05-27 11:45:28 +020086 @Test
margaretha35e1ca22023-11-16 22:00:01 +010087 public void testSearchWithUnknownURL ()
88 throws IOException, KustvaktException {
margaretha4dee07a2022-05-27 11:45:28 +020089 config.setNetworkEndpointURL("http://localhost:1040/search");
margaretha35e1ca22023-11-16 22:00:01 +010090 Response response = target().path(API_VERSION).path("search")
91 .queryParam("q", "[orth=der]").queryParam("ql", "poliqarp")
92 .queryParam("engine", "network").request().get();
abcpro173fe8f22022-11-08 19:56:52 +000093 String entity = response.readEntity(String.class);
margaretha4dee07a2022-05-27 11:45:28 +020094 JsonNode node = JsonUtils.readTree(entity);
margaretha35e1ca22023-11-16 22:00:01 +010095 assertEquals(StatusCodes.SEARCH_NETWORK_ENDPOINT_FAILED,
96 node.at("/errors/0/0").asInt());
Marc Kupietzd43a98d2023-09-22 17:11:46 +020097 assertEquals(Status.BAD_REQUEST.getStatusCode(), response.getStatus());
margaretha4dee07a2022-05-27 11:45:28 +020098 }
margaretha4dee07a2022-05-27 11:45:28 +020099
Marc Kupietzd43a98d2023-09-22 17:11:46 +0200100 @Test
margaretha35e1ca22023-11-16 22:00:01 +0100101 public void testSearchWithUnknownHost () throws KustvaktException {
Marc Kupietzd43a98d2023-09-22 17:11:46 +0200102 config.setNetworkEndpointURL("http://search.com");
margaretha35e1ca22023-11-16 22:00:01 +0100103 Response response = target().path(API_VERSION).path("search")
104 .queryParam("q", "[orth=der]").queryParam("ql", "poliqarp")
105 .queryParam("engine", "network").request().get();
abcpro173fe8f22022-11-08 19:56:52 +0000106 String entity = response.readEntity(String.class);
margaretha4dee07a2022-05-27 11:45:28 +0200107 JsonNode node = JsonUtils.readTree(entity);
margaretha35e1ca22023-11-16 22:00:01 +0100108 assertEquals(StatusCodes.SEARCH_NETWORK_ENDPOINT_FAILED,
109 node.at("/errors/0/0").asInt());
Marc Kupietzd43a98d2023-09-22 17:11:46 +0200110 assertEquals(Status.BAD_REQUEST.getStatusCode(), response.getStatus());
margaretha4dee07a2022-05-27 11:45:28 +0200111 }
112}