blob: 8837d183d20d44a4d73ab23fc0730011ae9ad9d8 [file] [log] [blame]
package de.ids_mannheim.korap.web.service.full;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import org.eclipse.jetty.http.HttpHeaders;
import org.junit.Test;
import com.fasterxml.jackson.databind.JsonNode;
import com.sun.jersey.api.client.ClientResponse;
import de.ids_mannheim.korap.authentication.BasicHttpAuth;
import de.ids_mannheim.korap.config.Attributes;
import de.ids_mannheim.korap.exceptions.KustvaktException;
import de.ids_mannheim.korap.utils.JsonUtils;
import de.ids_mannheim.korap.web.service.FastJerseyTest;
public class SearchWithAvailabilityTest extends FastJerseyTest {
@Override
public void initMethod () throws KustvaktException {
// helper().runBootInterfaces();
}
private void checkAndFree (String json) throws KustvaktException {
JsonNode node = JsonUtils.readTree(json);
assertEquals("availability",
node.at("/collection/operands/0/key").asText());
assertEquals("CC-BY.*",
node.at("/collection/operands/0/value").asText());
assertEquals("operation:insertion",
node.at("/collection/rewrites/0/operation").asText());
assertEquals("availability(FREE)",
node.at("/collection/rewrites/0/scope").asText());
}
private void checkAndPublic (String json) throws KustvaktException {
JsonNode node = JsonUtils.readTree(json);
assertNotNull(node);
assertEquals("operation:and",
node.at("/collection/operation").asText());
assertEquals("match:eq",
node.at("/collection/operands/0/operands/0/match").asText());
assertEquals("type:regex",
node.at("/collection/operands/0/operands/0/type").asText());
assertEquals("availability",
node.at("/collection/operands/0/operands/0/key").asText());
assertEquals("CC-BY.*",
node.at("/collection/operands/0/operands/0/value").asText());
assertEquals("match:eq",
node.at("/collection/operands/0/operands/1/match").asText());
assertEquals("ACA.*",
node.at("/collection/operands/0/operands/1/value").asText());
assertEquals("operation:insertion",
node.at("/collection/rewrites/0/operation").asText());
assertEquals("availability(PUB)",
node.at("/collection/rewrites/0/scope").asText());
}
private void checkAndPublicWithoutACA (String json)
throws KustvaktException {
JsonNode node = JsonUtils.readTree(json);
assertNotNull(node);
assertEquals("operation:and",
node.at("/collection/operation").asText());
assertEquals("match:eq",
node.at("/collection/operands/0/match").asText());
assertEquals("type:regex",
node.at("/collection/operands/0/type").asText());
assertEquals("availability",
node.at("/collection/operands/0/key").asText());
assertEquals("CC-BY.*",
node.at("/collection/operands/0/value").asText());
assertEquals("match:eq",
node.at("/collection/operands/1/match").asText());
assertEquals("type:regex",
node.at("/collection/operands/1/type").asText());
assertEquals("availability",
node.at("/collection/operands/1/key").asText());
assertEquals("ACA.*", node.at("/collection/operands/1/value").asText());
assertEquals("operation:insertion",
node.at("/collection/rewrites/0/operation").asText());
assertEquals("availability(PUB)",
node.at("/collection/rewrites/0/scope").asText());
}
private void checkAndAll (String json) throws KustvaktException {
JsonNode node = JsonUtils.readTree(json);
assertNotNull(node);
assertEquals("availability(ALL)",
node.at("/collection/rewrites/0/scope").asText());
assertEquals("operation:insertion",
node.at("/collection/rewrites/0/operation").asText());
assertEquals("operation:and",
node.at("/collection/operation").asText());
node = node.at("/collection/operands/0");
assertEquals("operation:or", node.at("/operation").asText());
assertEquals("match:eq", node.at("/operands/0/match").asText());
assertEquals("match:eq", node.at("/operands/0/match").asText());
assertEquals("type:regex", node.at("/operands/0/type").asText());
assertEquals("availability", node.at("/operands/0/key").asText());
assertEquals("CC-BY.*", node.at("/operands/0/value").asText());
node = node.at("/operands/1");
assertEquals("operation:or", node.at("/operation").asText());
assertEquals("match:eq", node.at("/operands/0/match").asText());
assertEquals("ACA.*", node.at("/operands/0/value").asText());
assertEquals("match:eq", node.at("/operands/1/match").asText());
assertEquals("QAO.*", node.at("/operands/1/value").asText());
}
private void checkAndAllWithoutACA (String json) throws KustvaktException {
JsonNode node = JsonUtils.readTree(json);
assertNotNull(node);
assertEquals("operation:and",
node.at("/collection/operation").asText());
assertEquals("match:eq",
node.at("/collection/operands/0/operands/0/match").asText());
assertEquals("type:regex",
node.at("/collection/operands/0/operands/0/type").asText());
assertEquals("availability",
node.at("/collection/operands/0/operands/0/key").asText());
assertEquals("CC-BY.*",
node.at("/collection/operands/0/operands/0/value").asText());
assertEquals("match:eq",
node.at("/collection/operands/0/operands/1/match").asText());
assertEquals("QAO.*",
node.at("/collection/operands/0/operands/1/value").asText());
assertEquals("operation:insertion",
node.at("/collection/rewrites/0/operation").asText());
assertEquals("availability(ALL)",
node.at("/collection/rewrites/0/scope").asText());
}
private ClientResponse builtSimpleClientResponse (String collectionQuery) {
return resource().path("search").queryParam("q", "[orth=das]")
.queryParam("ql", "poliqarp").queryParam("cq", collectionQuery)
.get(ClientResponse.class);
}
private ClientResponse builtClientResponseWithIP (String collectionQuery,
String ip) {
return resource().path("search").queryParam("q", "[orth=das]")
.queryParam("ql", "poliqarp").queryParam("cq", collectionQuery)
.header(Attributes.AUTHORIZATION,
BasicHttpAuth.encode("kustvakt", "kustvakt2015"))
.header(HttpHeaders.X_FORWARDED_FOR, ip)
.get(ClientResponse.class);
}
@Test
public void testAvailabilityFreeAuthorized () throws KustvaktException {
ClientResponse response =
builtSimpleClientResponse("availability = CC-BY-SA");
assertEquals(ClientResponse.Status.OK.getStatusCode(),
response.getStatus());
checkAndFree(response.getEntity(String.class));
}
@Test
public void testAvailabilityRegexFreeAuthorized ()
throws KustvaktException {
ClientResponse response =
builtSimpleClientResponse("availability = /.*BY.*/");
assertEquals(ClientResponse.Status.OK.getStatusCode(),
response.getStatus());
checkAndFree(response.getEntity(String.class));
}
@Test
public void testAvailabilityFreeUnauthorized () throws KustvaktException {
ClientResponse response =
builtSimpleClientResponse("availability = ACA-NC");
assertEquals(ClientResponse.Status.OK.getStatusCode(),
response.getStatus());
checkAndFree(response.getEntity(String.class));
}
@Test
public void testAvailabilityRegexFreeUnauthorized ()
throws KustvaktException {
ClientResponse response =
builtSimpleClientResponse("availability = /ACA.*/");
assertEquals(ClientResponse.Status.OK.getStatusCode(),
response.getStatus());
checkAndFree(response.getEntity(String.class));
}
@Test
public void testAvailabilityRegexNoRewrite () throws KustvaktException {
ClientResponse response = builtSimpleClientResponse(
"availability = /CC-BY.*/ & availability = /ACA.*/");
assertEquals(ClientResponse.Status.OK.getStatusCode(),
response.getStatus());
String json = response.getEntity(String.class);
JsonNode node = JsonUtils.readTree(json);
assertEquals("operation:and",
node.at("/collection/operation").asText());
assertEquals("match:eq",
node.at("/collection/operands/0/match").asText());
assertEquals("type:regex",
node.at("/collection/operands/0/type").asText());
assertEquals("availability",
node.at("/collection/operands/0/key").asText());
assertEquals("CC-BY.*",
node.at("/collection/operands/0/value").asText());
assertEquals("match:eq",
node.at("/collection/operands/1/match").asText());
assertEquals("ACA.*", node.at("/collection/operands/1/value").asText());
}
@Test
public void testAvailabilityRegexFreeUnauthorized3 ()
throws KustvaktException {
ClientResponse response =
builtSimpleClientResponse("availability = /.*NC.*/");
assertEquals(ClientResponse.Status.OK.getStatusCode(),
response.getStatus());
// System.out.println(response.getEntity(String.class));
checkAndFree(response.getEntity(String.class));
}
@Test
public void testNegationAvailabilityFreeUnauthorized ()
throws KustvaktException {
ClientResponse response =
builtSimpleClientResponse("availability != /CC-BY.*/");
assertEquals(ClientResponse.Status.OK.getStatusCode(),
response.getStatus());
checkAndFree(response.getEntity(String.class));
}
@Test
public void testNegationAvailabilityFreeUnauthorized2 ()
throws KustvaktException {
ClientResponse response =
builtSimpleClientResponse("availability != /.*BY.*/");
assertEquals(ClientResponse.Status.OK.getStatusCode(),
response.getStatus());
checkAndFree(response.getEntity(String.class));
}
@Test
public void testNegationAvailabilityWithOperationOrUnauthorized ()
throws KustvaktException {
ClientResponse response = builtSimpleClientResponse(
"availability = /CC-BY.*/ | availability != /CC-BY.*/");
assertEquals(ClientResponse.Status.OK.getStatusCode(),
response.getStatus());
checkAndFree(response.getEntity(String.class));
}
@Test
public void testComplexNegationAvailabilityFreeUnauthorized ()
throws KustvaktException {
ClientResponse response = builtSimpleClientResponse(
"textClass=politik & availability != /CC-BY.*/");
assertEquals(ClientResponse.Status.OK.getStatusCode(),
response.getStatus());
checkAndFree(response.getEntity(String.class));
}
@Test
public void testComplexAvailabilityFreeUnauthorized ()
throws KustvaktException {
ClientResponse response = builtSimpleClientResponse(
"textClass=politik & availability=ACA-NC");
assertEquals(ClientResponse.Status.OK.getStatusCode(),
response.getStatus());
checkAndFree(response.getEntity(String.class));
}
@Test
public void testComplexAvailabilityFreeUnauthorized3 ()
throws KustvaktException {
ClientResponse response = builtSimpleClientResponse(
"textClass=politik & availability=/.*NC.*/");
assertEquals(ClientResponse.Status.OK.getStatusCode(),
response.getStatus());
checkAndFree(response.getEntity(String.class));
}
@Test
public void testAvailabilityPublicAuthorized () throws KustvaktException {
ClientResponse response =
builtClientResponseWithIP("availability=ACA-NC", "149.27.0.32");
assertEquals(ClientResponse.Status.OK.getStatusCode(),
response.getStatus());
checkAndPublic(response.getEntity(String.class));
}
@Test
public void testAvailabilityPublicUnauthorized () throws KustvaktException {
ClientResponse response = builtClientResponseWithIP(
"availability=QAO-NC-LOC:ids", "149.27.0.32");
assertEquals(ClientResponse.Status.OK.getStatusCode(),
response.getStatus());
checkAndPublic(response.getEntity(String.class));
}
@Test
public void testAvailabilityRegexPublicAuthorized ()
throws KustvaktException {
ClientResponse response = builtClientResponseWithIP(
"availability= /ACA.*/", "149.27.0.32");
assertEquals(ClientResponse.Status.OK.getStatusCode(),
response.getStatus());
checkAndPublicWithoutACA(response.getEntity(String.class));
}
@Test
public void testNegationAvailabilityPublicUnauthorized ()
throws KustvaktException {
ClientResponse response = builtClientResponseWithIP(
"availability != ACA-NC", "149.27.0.32");
assertEquals(ClientResponse.Status.OK.getStatusCode(),
response.getStatus());
checkAndPublic(response.getEntity(String.class));
}
@Test
public void testNegationAvailabilityRegexPublicUnauthorized ()
throws KustvaktException {
ClientResponse response = builtClientResponseWithIP(
"availability != /ACA.*/", "149.27.0.32");
assertEquals(ClientResponse.Status.OK.getStatusCode(),
response.getStatus());
checkAndPublic(response.getEntity(String.class));
}
@Test
public void testComplexAvailabilityPublicUnauthorized ()
throws KustvaktException {
ClientResponse response = builtClientResponseWithIP(
"textClass=politik & availability=QAO-NC-LOC:ids",
"149.27.0.32");
assertEquals(ClientResponse.Status.OK.getStatusCode(),
response.getStatus());
checkAndPublic(response.getEntity(String.class));
}
@Test
public void testNegationComplexAvailabilityPublicUnauthorized ()
throws KustvaktException {
ClientResponse response = builtClientResponseWithIP(
"textClass=politik & availability!=QAO-NC-LOC:ids",
"149.27.0.32");
assertEquals(ClientResponse.Status.OK.getStatusCode(),
response.getStatus());
checkAndPublic(response.getEntity(String.class));
}
@Test
public void testAvailabilityRegexAllAuthorized () throws KustvaktException {
ClientResponse response = builtClientResponseWithIP(
"availability= /ACA.*/", "10.27.0.32");
assertEquals(ClientResponse.Status.OK.getStatusCode(),
response.getStatus());
checkAndAllWithoutACA(response.getEntity(String.class));
}
}